* Задача от упражнение 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("Не може да делите на нула!"); } } } }
Добави коментар