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
| /**
* complex Classe de base pour définir le type "Nb_Complexe" en représentation cartésienne
* @author BAX Olivier et FERE Sébastien (G24 2001-2002)
* @version 1.2 17.08.2006 11h45 / HNP cf. Java 5
* @since 1.0 cf. TPP18 2001-2002 (cf. Java 2)
*/
//*************************************************************************************
//
// BIBLIOTHEQUE - NOMBRES COMPLEXES
//
//*************************************************************************************
//
// Auteurs : BAX Olivier et FERE Sébastien (G24 2001-2002) - MAJ / HNP pour TPP...
// But : Pouvoir utiliser de manière simple les complexes comme en C++
//
//*************************************************************************************
import static java.lang.System.*; // pour utiliser 'out' et 'err' (cf. Java 5)
import static java.lang.Math.*; // pour taper les fonctions sans "Math."
public class complex {
// Couple de variables (attributs privés)
private double re; // Partie réelle
private double im; // Partie imaginaire
// Constructeur
complex() {re = 0; im = 0;} // constructeur vide
complex(double x, double y) {re = x; im = y;} // constructeur avec paramètres
// Redéfintion des opérateurs
//*************************************************************
//* FCT. d'ACCES des Partie réelle et Partie imaginaire *
//*************************************************************
public double getRe() {return re;} // partie réelle
public double getIm() {return im;} // partie imaginaire
//************************************************
//* Module et Argument *
//************************************************
// public double mod() {return Math.sqrt(re*re + im*im);} // cf. Java 2
public double mod() {return hypot(re, im);} // cf. Java 5
// public double arg() {return Math.atan2(re, im);} // cf. Java 2
public double arg() {return atan2(re, im);} // cf. Java 5
//atan2 : fonction arctan pour un complexe -> couple (double re, double im)
//************************************************
//* Addition *
//************************************************
public complex addComplex(complex z)
{return new complex(re + z.re, im + z.im);}
//************************************************
//* Soustraction *
//************************************************
public complex subComplex(complex z)
{return new complex(re - z.re, im - z.im);}
//************************************************
//* Multiplication *
//************************************************
public complex multComplex(complex z)
{return new complex(re*z.re - im*z.im, re*z.im + im*z.re);}
//************************************************
//* Division *
//************************************************
public complex divComplex(complex z) {
// A NE PAS OUBLIER LE TRAITEMENT DE LA DIV. / 0 CI-DESSOUS !
double m = z.mod();
if (m != 0)
return new complex( (re*z.re + im*z.im)/(m*m), (im*z.re - re*z.im)/(m*m) );
else {
err.println("Pas de division possible car |z| = 0; ");
err.println("==> "+ Double.MAX_VALUE + " + i*("+ Double.MAX_VALUE + ") est retourn\u00e9 !");
return new complex(Double.MAX_VALUE , Double.MAX_VALUE );
}
}
//************************************************
//* " - " unaire *
//************************************************
public complex moinsUnaireComplex()
{return new complex( -re, -im);}
// Fonctions d'E/S
//************************************************
//* Lecture d'un complexe au clavier *
//************************************************
public static complex readComplex( char c[]) { //attention avant il n'y avait pas char c[]!!! mais il me le faut pour le operC() de Chiffre!
out.print("\t\tPartie reelle : "); // Partie réelle...
// instruction d'avant : double re = keyboard.readDouble();
double re = Double.parseDouble(es.LireCh());
out.print("\t\tPartie imaginaire : "); // puis partie imaginaire
// instruction d'avant : double im = keyboard.readDouble();
double im = Double.parseDouble(es.LireCh());
return new complex(re, im);
}
//************************************************
//* Affichages d'un nombre complexe *
//************************************************
public String affComplex() {
if( im == 0) // reel pur
return " " + re;
else if( re == 0) // imaginaire pur
return "i*(" + im + ")";
else { // complexe quelconque
if( re > 0 ) // pour l'alignement du texte à l'écran
return " " + re + " + i*(" + im + ")";
else
return re + " + i*(" + im + ")"; // Rappel: i*i=-1
}
}
//************************************************
//* AUTRES METHODES - MAJ: 17.08.2006 *
//************************************************
public String toString() { // Autre méthode d'affichage
// en (re-)définissant la méthode 'toString' de la classe 'Object' de Java
if( im == 0) // reel pur
return " " + re;
else if( re == 0) // imaginaire pur
return "j*(" + im + ")";
else { // complexe quelconque
if( re > 0 ) // pour l'alignement du texte à l'écran
return " " + re + " + j*(" + im + ") ";
else
return re + " + j*(" + im + ") "; // Rappel: j*j=-1
}
}
public boolean equals(complex obj) { // pour tester l'égalité
// en (re-)définissant la méthode 'equals' de la classe 'Object' de Java
return ( re == obj.re && im == obj.im );
}
protected complex clone() throws CloneNotSupportedException { // copie totale
// en (re-)définissant la méthode 'clone' de la classe 'Object' de Java
return new complex(re, im);
}
protected short compareTo (complex objet) {
// pour (re-)définir la méthode 'compareTo'
double diff = mod() - objet.mod();
if (diff < 0) return -1;
else if (diff > 0)
return +1;
else
return 0;
}
public complex conjComplex() {
// pour retourner le conjugué de l'instance courante
return new complex(re, -im);
}
protected void finalize() throws Throwable { // destruction par le ramasse-miette 'gc'
// en (re-)définissant la méthode 'finalize' de la classe 'Object' de Java
err.println("Destruction de l'objet : "+ this);
}
} |
Partager