TP 1 de Programmation 2e Année Informatique 2006-2007 : java

Utilisez eclipse.

Exercice 1

On rappelle la fonction pgcd en C :

int pgcd(int a, int b)

  if (b == 0)
      return a;
  else
    return pgcd(b, a % b); // "%" est l'opérateur "modulo".

En vous inspirant des bibliothèques mathématiques de Java, On veut créer une classe qui contiendra une méthode permettant de calculer le pgcd de deux entiers. Une telle classe est dite utilitaire.

Question 1

Quelle sera la signature complète de la méthode en question ?

Question 2

Écrire la classe Pgcd.

Exercice 2

On veut créer une classe représentant des nombres rationnels. On décide qu'un rationnel sera représenté sous forme d'un couple d'entiers p/q. Pour faciliter la comparaison des rationnels, on décide de plus que p et q seront premiers entre eux, et que le signe éventuel sera porté par p.

Rappel : si on divise deux nombres par leur pgcd, les résultats sont premiers entre eux :-)

Question 1

Sachant que la somme de p1/q1 et p2/q2 est (p1*q2+p2*q1)/(q1*q2), que se passerait-il si on ne conservait pas les nombres sous forme réduite ? Imaginez par exemple ce qui se passerait avec la somme 1/2 + 1/2 + 1/2....

Question 2

L'invariant "p et q sont premiers entre eux et le signe doit être porté par p" doit être vérifié par tout objet de la classe après sa création et après tout appel de méthode publique par le programmeur.

Proposez un mécanisme pour garantir que c'est le cas.

Téléchargez la classe Rationnel.

Question 3

Lire la classe.

Question 4

Répondre à la question concernant la visibilité de la méthode simplifier. Vous pouvez vous poser la question suivante : un programmeur aura-t-il besoin d'appeler explicitement cette méthode.

Question 4

Complétez la classe. Toutes les méthodes publiques doivent faire en sorte que l'invariant de classe soit vérifié quand elles se terminent.

Question 3

soit le code suivant :
    Rationnel r1= new Rationnel(3,2);
    Rationnel r2= new Rationnel();
    r2.p= 6; r2.q= 4;
    System.out.println(""+ r1 + " et " + r2);
    if (r1.estEgalA(r2))
      System.out.println(" sont égaux");
    else
      System.out.println(" sont différents");
  
Que se passe-t-il si on l'exécute ? pourquoi ? corrigez la classe Rationnel pour éviter ce genre d'incidents.

Exercice 3

Une bibliothèque prête des livres, des CD audio, et des logiciels.

Tous peuvent être emprunté par un emprunteur (au maximum), qui a un nom.

Une bibliothèque sera considérée comme la liste des articles de prêt qu'elle contient, un article étant désigné par un numéro entier (son numéro d'inventaire).

On implémentera toutes les classes nécessaires, en dotant la classe Bibliotheque des methodes :

void emprunter (int numInv, String emprunteur)
marque l'article de numéro d'inventaire numInv comme emprunté par emprunteur.
boolean estEmprunte (int numInv)
renvoie vrai si numInv est emprunté, faux sinon.
String getEmprunteur (int numInv)
récupère l'emprunteur de numInv.
String getEmpruntsAsString ()
renvoie la liste des articles empruntés sous forme de chaîne.

Question 3.1

Téléchargez et lisez les classes proposées ici .

Faire le schéma sur papier des classes à utiliser. Rester simple.

Question 3.2

Implémentez votre solution.

On ne fera pas d'interface utilisateur, en se contentant de tester les classes dans un main() adéquat. On pourra doter les classes d'une méthode toString() qui permettra de renvoyer une représentation lisible de leurs objets sous forme de chaîne de caractères.


Serge ROSMORDUC