Deuxième semaine

Exercice 1
Comment représenter des complexes Complexe
TestComplexe
Exercice 2
Comment représenter des rationnels
Rationnel
TestRationnel
Exercice 3
Retour sur les tableaux avec la classe Chaine
Chaine
TestChaine

Exercice 1 :
On désire représenter les nombres complexes sous la forme a+ib. On voudra pouvoir tester l'égalité de deux complexes, récupérer la partie réelle ou imaginaire, d'additionner, de multiplier, de diviser des complexes, le calculer le conjugué ou le module ....
 
C:\Java\Algo> java TestComplexe
1.0 + 3.0 i et 2.0 + 3.0 i
1.0 + 3.0 i + 2.0 + 3.0 i = 3.0 + 6.0 i
1.0 + 3.0 i * 2.0 + 3.0 i = -7.0 + 9.0 i
1.0 + 3.0 i / 2.0 + 3.0 i = 0.8461538461538461 + 0.23076923076923078 i
1.0 + 3.0 i == 2.0 + 3.0 i ? false
1.0 + 3.0 i partie reelle = 1.0
1.0 + 3.0 i partie imaginaire = 3.0
1.0 + 3.0 i | = 3.1622776601683795

C:\Java\Algo>

Voici le code de la classe TestCarte, à vous de faire celui de la classe Carte :

class TestComplexe
{
    public static void main(String[] args)
    {
       
Complexe c1 = new Complexe(1, 3);
        Complexe c2 = new Complexe(2, 3);

        System.out.println(c1+" et "+c2);
        System.out.println(c1+" + "+c2+" = "+c1.addition(c2));
        System.out.println(c1+" * "+c2+" = "+c1.multiplication(c2));
        System.out.println(c1+" / "+c2+" = "+c1.division(c2));
        System.out.println(c1+" == "+c2+" ? "+c1.equals(c2));
        System.out.println(c1+" partie reelle = "+c1.partieReelle());
        System.out.println(c1+" partie imaginaire = "+c1.partieImaginaire());
        System.out.println("| "+c1+" | = "+c1.module());
    }

}



Exercice 2 :
On désire représenter les nombres rationnels sous la forme canonique. On voudra pouvoir tester l'égalité de deux rationels, récupérer le numérateur ou le dénominateur, d'additionner, de multiplier, de diviser des rationnels, de calculer l'inverse ....

 
C:\Java\Algo> java TestRationnel
PGCD de 6 et 2 = 2
On travaille avec -1/3 et 3/11
-1/3 + 3/11 = -2/33
-1/3 * 3/11 = -1/11
Inverse de -1/3 = -3/1
Inverse de 3/11 = 11/3

C:\Java\Algo>

Voici le code de la classe TestRationnel, à vous de faire celui de la classe Rationnel :

class TestRationnel
{
    public static void main(String[] args)
    {
        Rationnel r1 = new Rationnel(2,-6);
        Rationnel r2 = new Rationnel(6,22);
        System.out.println("PGCD de 6 et 2 = "+r1.pgcd(6,2));
        System.out.println("On travaille avec "+r1+" et "+r2);
        System.out.println(r1+" + "+r2+" = "+r1.addition(r2));
        System.out.println(r1+" * "+r2+" = "+r1.multiplication(r2));
        System.out.println("Inverse de "+r1+" = "+r1.inverse());
        System.out.println("Inverse de "+r2+" = "+r2.inverse());

    }

}

Voici la méthode permettant de calculer le PGCD de deux nombres :

/** Retourne le plus grand diviseur de deux nombres.    
  * Dans l'ensemble des diviseurs communs a deux nombres entiers, il y en a     
  * un qui est le plus grand. Il est appele Plus Grand Commun Diviseur des     
  * deux nombres, ce qu'on note en abrege : PGCD.     
  * On note PGCD (a ; b) le plus grand commun diviseur de a et b.    
  * Exemple : Dans la liste des diviseurs communs de 60 et 72 : (1 ; 2 ; 3 ;     
  * 4 ; 6 ; 12), le plus grand est 12, on ecrit :    
  * PGCD (72 ; 60) = 12.    
  *     
  * @param a un entier    
  * @param b un entier    
  * @return le plus grand diviseur commun de a et b   
  */
  public int pgcd(int a, int b)
  {
      if ((a < 0) || (b < 0)) {
          return -1;
      }
      int r = 0;
      while (b != 0) {
          r = a % b;
          a = b;
          b = r;
      }
      return a;
  }



Exercice 3 :
On désire représenter réécrire la classe String ... (interdit d'utiliser la classe String comme attribut !)
 
C:\Java\Algo> java TestChaine
La chaine  est radar
Sa longueur est de 5
Est-ce un palyndrome ? true
radar == rideau ? false
Inverse de radar = radar
Inverse de rideau = rideau

C:\Java\Algo>

Voici le code de la classe TestChaine, à vous de faire celui de la classe Chaine :

class TestChaine
{
    public static void main(String[] args)
    {
        Chaine c = new Chaine(new char[]{'r','a','d','a','r'});
       
Chaine d = new Chaine(new char[]{'r','i','d','e','a','u'});
        System.out.println("La chaine est "+c);
        System.out.println("Sa longueur est de "+c.length());
        System.out.println("Est-ce un palyndrome ? "+c.palyndrome());
        System.out.println(c+" == "+d+" ? "+c.equals(d));
        System.out.println("Inverse de "+c+" = "+c.reverse());
        System.out.println("Inverse de "+d+" = "+d.reverse());

    }

}