-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathComplexNumber.java
More file actions
195 lines (174 loc) · 10.1 KB
/
Copy pathComplexNumber.java
File metadata and controls
195 lines (174 loc) · 10.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
import java.util.Scanner;
import java.util.InputMismatchException;
/**
* @author Петров Дмитрий
* Класс, содержащий набор методов для работы с комплексными числами.
*/
public class ComplexNumber{
/**
* Метод, получающий действительную часть комплексного числа.
* @return Возвращает комплексную часть комплексного числа.
*/
public double getReal_part() {
return real_part;
}
/**
* Метод, задающий действительную часть комплексного числа, передающуюся в качестве параметра.
* @param real_part Действительная часть комплексного числа.
*/
public void setReal_part(double real_part) {
this.real_part = real_part;
}
private double real_part; // действительная часть комплексного числа
/**
* Метод, получающий мнимую часть комплексного числа.
* @return Возвращает мнимую часть комплексного числа.
*/
public double getImaginary_part() {
return imaginary_part;
}
/**
* Метод, задающий мнимую часть комплексного числа, передающуюся в качестве параметра.
* @param imaginary_part Мнимая часть комплексного числа.
*/
public void setImaginary_part(double imaginary_part) {
this.imaginary_part = imaginary_part;
}
private double imaginary_part; // мнимая часть комплексного числа
/**
* Конструктор, создающий комплексное число по передаваемым параметрам.
* @param real_part Действительная часть комплексного числа.
* @param imaginary_part Мнимая часть комплексного числа.
*/
public ComplexNumber(double real_part, double imaginary_part){ // конструктор для комплексных чисел
this.setImaginary_part(imaginary_part);
this.setReal_part(real_part);
}
/**
* Конструктор, создающий ссылочную переменную, указывающую на пустой объект класса ComplexNumber.
*/
public ComplexNumber(){}
/**
* Метод, выводящий число в алгебраической форме.
*/
void printNumberInAlgForm(){
if( this.getReal_part() != 0 && this.getImaginary_part() != 0)
System.out.println(this.getReal_part() + " + " + this.getImaginary_part() + " * i");
else if(this.getReal_part() == 0 && this.getImaginary_part() != 0)
System.out.println(this.getImaginary_part() + " * i");
else if(this.getImaginary_part() == 0 && this.getReal_part() != 0)
System.out.println(this.getReal_part());
else if(this.getReal_part() == 0 && this.getImaginary_part() == 0)
System.out.println("0");
}
/**
* Метод, возвращающий комплексное число в алгебраической форме. Необходим для работы с матрицами.
* @return Возвращает строку - комплексное число в алгебраической форме.
*/
public String returnNumberInAlgForm(){
if( this.getReal_part() != 0 && this.getImaginary_part() != 0)
return (Double.toString(this.getReal_part()) + " + " + Double.toString(this.getImaginary_part()) + " * i");
else if(this.getReal_part() == 0 && this.getImaginary_part() != 0)
return (Double.toString(this.getImaginary_part()) + " * i");
else if(this.getImaginary_part() == 0 && this.getReal_part() != 0)
return(Double.toString(this.getReal_part()));
else if(this.getReal_part() == 0 && this.getImaginary_part() == 0)
return("0");
return "0";
}
/**
* Метод, выводящий комплексное число в тригонометрической форме.
*/
void printNumberInTrigForm(){
double module = Math.sqrt(Math.pow(this.getReal_part(), 2) + Math.pow(this.getImaginary_part(), 2));
double arg;
if(this.getReal_part() > 0)
arg = Math.atan(this.getImaginary_part()/this.getReal_part());
else if(this.getImaginary_part() > 0)
arg = Math.PI + Math.atan(this.getImaginary_part()/this.getReal_part());
else
arg = -Math.PI + Math.atan(this.getImaginary_part()/this.getReal_part());
if(module == 0)
System.out.println("0");
else
System.out.println(module + " * (cos(" + arg + ") + i * sin(" + arg + "))");
}
/**
* Метод, складывающий два комплексных числа, создающий новое комплексное число, являющееся результатом сложения.
* @param h1 Комплексное число, прибавляемое к числу, к которому применяется метод.
* @return Возвращает новое комплексное число, являющееся результатом сложения двух чисел.
*/
ComplexNumber sumOfNumbers(ComplexNumber h1){
return new ComplexNumber(this.getReal_part()+h1.getReal_part(), this.getImaginary_part() + h1.getImaginary_part());
}
/**
* Метод, умножающий два комплексных числа, создающий новое комплексное число, являющееся результатом умножения.
* @param h1 Комплексное число, умножаемое на число, к которому применяется метод.
* @return Возвращает новое комплексное число, являющееся результатом умножения двух чисел.
*/
ComplexNumber productOfNumbers(ComplexNumber h1){ // метод для произведения двух комплексных чисел
return new ComplexNumber(this.getReal_part()*h1.getReal_part() - this.getImaginary_part()*h1.getImaginary_part(), (this.getReal_part()* h1.getImaginary_part()) + (this.getImaginary_part()*h1.getReal_part()));
}
/**
* Метод, делящий одно число на другое, создающий новое комплексное число, являющееся результатом деления.
* @param h1 Комплексное число, делитель того числа, к которому применяется данный метод.
* @return Возвращает новое комплексное число, являющееся результатом деления двух чисел.
*/
ComplexNumber divisionOfNumber(ComplexNumber h1){
return new ComplexNumber((this.getReal_part()*h1.getReal_part() + this.getImaginary_part()*h1.getImaginary_part())/(Math.pow(h1.getReal_part(), 2) + Math.pow(h1.getImaginary_part(), 2)), (h1.getReal_part()*this.getImaginary_part() - h1.getImaginary_part()*this.getReal_part())/(Math.pow(h1.getReal_part(), 2) + Math.pow(h1.getImaginary_part(), 2)));
}
ComplexNumber subtractionOfNumbers(ComplexNumber h1){
return new ComplexNumber(this.getReal_part() - h1.getReal_part(), this.getImaginary_part()-h1.getImaginary_part());
}
/**
* Метод, позволяющий выполнять арифметические операции как с действительными, так и с комплексными числами.
* @param first_num Первое число как объект класса ComplexNumber.
* @param second_num Второе число как объект класса ComplexNumber.
* @param what_operation Строка, говорящая, какой тип операции над числами должен выполниться.
* @return Возвращает число в виде строки - результат арифметической операции над числами.
*/
public String funcForOperations(String first_num, String second_num, String what_operation) {
ComplexNumber h1 = new ComplexNumber();
ComplexNumber h2 = new ComplexNumber();
String[] arr1 = first_num.split("\\+|\\*");
String[] arr2 = second_num.split("\\+|\\*");
if (arr1.length == 1) {
h1.setReal_part(Double.parseDouble(arr1[0]));
h1.setImaginary_part(0);
}
if (arr2.length == 1) {
h2.setReal_part(Double.parseDouble(arr2[0]));
h2.setImaginary_part(0);
}
if (arr1.length == 2) {
h1.setReal_part(0);
h1.setImaginary_part(Double.parseDouble(arr1[0]));
}
if (arr2.length == 2) {
h2.setReal_part(0);
h2.setImaginary_part(Double.parseDouble(arr2[0]));
}
if (arr1.length == 3) {
h1.setReal_part(Double.parseDouble(arr1[0]));
h1.setImaginary_part(Double.parseDouble(arr1[1]));
}
if (arr2.length == 3) {
h2.setReal_part(Double.parseDouble(arr2[0]));
h2.setImaginary_part(Double.parseDouble(arr2[1]));
}
if (what_operation.equals("prod")) {
return h1.productOfNumbers(h2).returnNumberInAlgForm();
}else if (what_operation.equals("sum")) {
return h1.sumOfNumbers(h2).returnNumberInAlgForm();
}
else if(what_operation.equals("div")){
return h1.divisionOfNumber(h2).returnNumberInAlgForm();
}
else if(what_operation.equals("sub")){
return h1.subtractionOfNumbers(h2).returnNumberInAlgForm();
}
else{
return "0";
}
}
}