Esercizio 6
Scrivi una classe che dati due numeri complessi in ingresso, sia in grado di stampare in output la loro somma, la loro differenza, il loro prodotto e il loro rapporto.
public static void main (String[] args) {
C a = new C(2,2);
C b = new C(1,1);
System.out.print("a+b=");a.sum(b);
System.out.print("a-b=");a.dif(b);
System.out.print("a*b=");a.mul(b);
System.out.print("a/b=");a.div(b); }
}//fine classe provaComplessi
class C {
private int Re,Im;
private double Modulo,Fase;
public C() { this(0,0); }
public C(int r, int i) {Re=r;Im=i;toPolar();}//fine costruttore
public void sum(C n){print(Re+n.getRe(),Im+n.getIm());}
public void dif(C n){print(Re-n.getRe(),Im-n.getIm());}
public void mul(C n){
double M,F;
M=Modulo*n.getModulo();
F=Fase+n.getFase();
print(M*Math.cos(F),M*Math.sin(F));
}
public void div(C n){
double M,F;
M=Modulo/n.getModulo();
F=Fase-n.getFase();
print(M*Math.cos(F),M*Math.sin(F));
}
public int getRe(){return Re;}
public int getIm(){return Im;}
public double getModulo(){return Modulo;}
public double getFase(){return Fase;}
public void print(double pr,double pi){
String s;
if(pi>=0)s="+j";
else s="-j";//arrotondamento al millesimo
if(Math.abs(pr-Math.rint(pr))<0.001)pr=Math.rint(pr);
if(Math.abs(pi-Math.rint(pi))<0.001)pi=Math.rint(pi);
System.out.println(pr+s+Math.abs(pi));
}
private void toPolar(){
Modulo=Math.sqrt(Math.pow(Re,2)+Math.pow(Im,2));
Fase=Math.atan(Im/Re);
}//fine toPolar
}//fine classe D
Esistono due costruttori; il primo C() , è privo di parametri e lancia il secondo costruttore C(int r, int i) tramite la chiamata this(0,0). In pratica, non viene invocato il costruttore della superclasse (anche perché non ce ne sono) ma il secondo costruttore della classe C inviandogli un numero complesso con parte immaginaria e parte reale 0. Il metodo toPolar() viene coinvolto solo nelle operazioni di moltiplicazione e divisione di due numeri, dato che la forma polare è molto comoda da usare, in questi casi .