* Задача от упражнение 3, 2011г.
Публикувано на 08 ноември 2011 в раздел ПИК3 Java.
Задача 1: Съставете клас за работа с комплексни числа. Да се съставят методи реализиращи операциите сбор, разлика, умножение и деление на комплексни числа. Реализирайте методи за отпечатване на комплексното число и за връщане на комплесно спрегнатото число.
Примерно решение:
package complexnum;
import java.lang.ArithmeticException;
public class ComplexNumber{
private double re;
private double im;
public ComplexNumber(){
this.setRe(0);
this.setIm(0);
}
public ComplexNumber(ComplexNumber input) {
this.setRe(input.getRe());
this.setIm(input.getIm());
}
public ComplexNumber(double re, double im){
this.setRe(re);
this.setIm(im);
}
public double getRe(){
return this.re;
}
public double getIm(){
return this.im;
}
public void setRe(double re){
this.re = re;
}
public void setIm(double im){
this.im = im;
}
public String toString(){
StringBuffer result=new StringBuffer();
if (this.im==0){
result.append(Double.toString(this.re));
}
else if (this.re==0){
result.append(Double.toString(this.im)+"i");
}
else if (this.im>0){
result.append(Double.toString(this.re)+"+"+Double.toString(this.im)+"i");
}
else if (this.im<0){
result.append(Double.toString(this.re)+Double.toString(this.im)+"i");
}
return result.toString();
}
public void print(){
System.out.println(this.toString());
}
public ComplexNumber getConjugate() {
return new ComplexNumber(this.re, this.im * (-1));
}
public ComplexNumber add(ComplexNumber op) {
ComplexNumber result = new ComplexNumber();
result.setRe(this.re + op.getRe());
result.setIm(this.im + op.getIm());
return result;
}
public ComplexNumber substract(ComplexNumber op) {
ComplexNumber result = new ComplexNumber();
result.setRe(this.re - op.getRe());
result.setIm(this.im - op.getIm());
return result;
}
public ComplexNumber multiply(ComplexNumber op) {
ComplexNumber result = new ComplexNumber();
result.setRe(this.re * op.getRe() - this.im * op.getIm());
result.setIm(this.re * op.getIm() + this.im * op.getRe());
return result;
}
public ComplexNumber divide(ComplexNumber op) throws ArithmeticException {
if(op.getRe()==0 && op.getIm()==0){
throw new ArithmeticException("Division by zero");
}
ComplexNumber result = new ComplexNumber(this);
result = result.multiply(op.getConjugate());
double opNormSq = op.getRe()*op.getRe()+op.getIm()*op.getIm();
result.setRe(result.getRe() / opNormSq);
result.setIm(result.getIm() / opNormSq);
return result;
}
}
Задача 2. Напишете клас с main метод, в който прочитате израз от вида (a+bi)OP(c+di), където OP={*,/,+,-}, а {a,b,c,d} са цели числа. Като изход изведете резултата от извършената операция между две комплексни числа.
Примерен вход: (1-2i)-(-2+3i)
Очакван изход: 3.0-5.0i
Примерно решение:
package complexnum;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Scanner;
public class program{
public static void main(String[] args){
Scanner keyboardIn = new Scanner(System.in);
System.out.print("Въведете израз: ");
String expression = keyboardIn.nextLine();
Pattern p = Pattern.compile("^\\(([+-]?[0-9]+)?([+-]?[0-9]+i)?\\)([*/+-])\\(([+-]?[0-9]+)?([+-]?[0-9]+i)?\\)$");
Matcher m = p.matcher(expression);
if (m.find()){
try{
double a=0, b=0, c=0, d=0;
if (m.group(1)!=null) a = Double.parseDouble(m.group(1));
if (m.group(2)!=null) b = Double.parseDouble(m.group(2).substring(0,m.group(2).length()-1));
if (m.group(4)!=null) c = Double.parseDouble(m.group(4));
if (m.group(5)!=null) d = Double.parseDouble(m.group(5).substring(0,m.group(5).length()-1));
ComplexNumber c1 = new ComplexNumber(a, b);
ComplexNumber c2 = new ComplexNumber(c, d);
switch(m.group(3)){
case "*":
(c1.multiply(c2)).print();
break;
case "/":
(c1.divide(c2)).print();
break;
case "+":
(c1.add(c2)).print();
break;
case "-":
(c1.substract(c2)).print();
break;
}
}
catch(java.util.InputMismatchException e){
e.printStackTrace();
}
catch(ArithmeticException e){
System.out.println("Не може да делите на нула!");
}
}
}
}
Добави коментар