C, PHP, VB, .NET

Дневникът на Филип Петров


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

 



Добави коментар

Адресът на електронната поща няма да се публикува


*