Correction du TD n°13 et du TD n°14

Exercice 1 

Modélisation

Compteur

  • valeur : entier
  • valeur() : entier
  • incrementer()
  • decrementer()

Une classe implantant un compteur.

/* Auteur: Nicolas JANEY          */
/* nicolas.janey@univ-fcomte.fr   */
/* Avril 2005                     */

public class Compteur {
  public int valeur;

  /* Deux constructeurs                                   */
  /* - sans parametre -> compteur initialise a 0          */
  /* - avec un parametre entier ->                        */
  /*      compteur initialise a cette valeur              */

  public Compteur() {
    valeur = 0;
  }

  public Compteur(int v) {
    valeur = v;
  }
  
  /* Methode de lecture de la valeur du compteur          */
  
  public int valeur() {
    return(valeur);
  }
  
  /* Methode d'incrementation de 1 du compteur            */
  
  public void incrementer() {
    valeur++;
  }
  
  /* Methode de decrementation de 1 du compteur           */
  
  public void decrementer() {
    valeur--;
  }
  
  /* Surcharge de la methode toString                     */

  public String toString() {
    return(""+valeur);
  }
}

Compteur.java

Exercice 2 

Modélisation

Personne

  • nom : chaine de caractères
  • prénom : chaine de caractères
  • situationFamiliale : entier
  • id : entier long
  • sexe() : booléen
  • plusAgeQue(p : Personne) : booléen
  • classeAvant(p : Personne) : booléen
  • dateNaissance() : entier

Une classe implantant une personne.

/* Auteur: Nicolas JANEY          */
/* nicolas.janey@univ-fcomte.fr   */
/* Avril 2005                     */

public class Personne {
  String nom;
  String prenom;
  int situationFamiliale;
  long id;
  
  /* Trois constructeurs                                  */
  /* - sans parametre -> nom vide, prenom vide            */
  /*      situation familiale au code -1,                 */
  /*      numero de securite sociale a -1                 */
  /* - avec quatres parametres String, String, entier     */
  /*   et entier long ->                                  */
  /*      nom, prenom, code situation et numero de secu   */
  /* - avec un parametre de classe Personne ->            */
  /*      initialisation par copie de cette personne      */

  public Personne() {
    nom = new String();
    prenom = new String();
    situationFamiliale = -1;
    id = -1;
  }
  
  public Personne(String n,String p,int s,long i) {
    nom = new String(n);
    prenom = new String(p);
    situationFamiliale = s;
    id = i;
  }
  
  public Personne(Personne p) {
    nom = new String(p.nom);
    prenom = new String(p.prenom);
    situationFamiliale = p.situationFamiliale;
    id = p.id;
  }
  
  /* Methode de test du sexe                              */
  
  public boolean sexe() {
    return((id/100000000000000L) == 1);
  }
  
  /* Methode de calcul de la date de naissance            */
  /* (annee*100+mois) par extraction                      */
  /* depuis le numero de secu                             */
  
  public int dateNaissance() {
    return((int) ((id/10000000000L)%10000));
  }
  
  /* Methode de comparaison avec l'age                    */
  /* d'une autre personne                                 */
  
  public boolean plusAgeQue(Personne p) {
    return(dateNaissance() < p.dateNaissance());
  }
  
  /* Methode de comparaison selon le classement           */
  /* nom, prenom, date de naissance                       */
  
  public boolean classeAvant(Personne p) {
    if ( nom.compareTo(p.nom) < 0 )
      return(true);
    if ( nom.compareTo(p.nom) > 0 )
      return(false);
    if ( prenom.compareTo(p.prenom) < 0 )
      return(true);
    if ( prenom.compareTo(p.prenom) > 0 )
      return(false);
    return(dateNaissance() > p.dateNaissance());
  }
  
  /* Surcharge de la methode toString                     */

  public String toString() {
    return(nom+" "+prenom+" "+situationFamiliale+" "+id);
  }
}

Personne.java

Exercice 3 

Modélisation

Position

  • x : réel
  • y : réel
  • distance(Position p) : réel

Une classe implantant une position.

/* Auteur: Nicolas JANEY          */
/* nicolas.janey@univ-fcomte.fr   */
/* Avril 2005                     */

public class Position {
  public float x;
  public float y;

  /* Trois constructeurs                                  */
  /* - sans parametre -> position a l'origine             */
  /* - avec deux parametres reels -> x et y               */
  /* - avec un parametre de classe Position -> position   */

  public Position() {
    x = 0.0F;
    y = 0.0F;
  }

  public Position(float xi,float yi) {
    x = xi;
    y = yi;
  }

  public Position(Position p) {
    x = p.x;
    y = p.y;
  }
  
  /* Methode de calcul de la distance                     */
  /* a une autre position                                 */
  
  public float distance(Position p) {
    double dx = x - p.x;
    double dy = y - p.y;
    return((float) Math.sqrt(dx*dx+dy*dy));
  }
  
  /* Methode de test de l'inclusion dans un cercle        */
  
  public boolean dansCercle(Cercle c) {
    return(distance(c.c) <= c.r);
  }
  
  /* Surcharge de la methode toString                     */

  public String toString() {
    return(x+" "+y);
  }
}

Position.java

Modélisation

Cercle

  • r : réel
  • c : Position
  • surfaceCercle() : réel
  • dansCercle(Position p) : booléen

Une classe implantant un cercle.

/* Auteur: Nicolas JANEY          */
/* nicolas.janey@univ-fcomte.fr   */
/* Avril 2005                     */

public class Cercle {
  public float r;
  public Position c;

  /* Trois constructeurs                                  */
  /* - sans parametre -> cerce de rayon 1 centre sur O    */
  /* - avec trois parametres reels ->                     */
  /*      rayon, x du centre, y du centre                 */
  /* - avec un parametre reel et une Position ->          */
  /*      rayon, position du centre                       */

  public Cercle() {
    r = 1.0F;
    c = new Position();
  }
  
  public Cercle(float ri,float xi,float yi) {
    r = ri;
    c = new Position(xi,yi);
  }
  
  public Cercle(float ri,Position pi) {
    r = ri;
    c = new Position(pi);
  }
  
  /* Methode de calcul de la surface d'un cercle          */

  public float surfaceCercle() {
    return((float) (Math.PI*r*r));
  }
  
  /* Methode de test de l'inclusion d'une Position        */
  /* dans un cercle                                       */

  public boolean dansCercle(Position p) {
    return(p.distance(c) <= r);
  }
  
  /* Surcharge de la methode toString                     */

  public String toString() {
    return(r+" "+c);
  }
}

Cercle.java

Exercice 4 

Modélisation

Compteur

  • t : tableau d'Object
  • tmax : entier
  • sp : entier
  •  

Une classe implantant une pile d'Object.

/* Auteur: Nicolas JANEY          */
/* nicolas.janey@univ-fcomte.fr   */
/* Avril 2005                     */

public class Pile {
  /* Tableau de stockage des objets empiles               */
  public Object [] t;
  /* Nombre maximum d'objets empilables (taille de t)     */
  int tmax;
  /* Nombre d'objets empiles dans la pile                 */
  int sp;
  
  /* Deux constructeurs                                   */
  /* - sans parametre -> reservation d'un tableau         */
  /*      de stockage pour 10 objets                      */
  /* - avec un parametre entier -> reservation            */
  /*      d'un tableau de cette taille pour le stockage   */
  /*      des objets empiles                              */

  public Pile() {
    t = new Object[10];
    tmax = 10;
    sp = 0;
  }
  
  public Pile(int taille) {
    t = new Object[taille];
    tmax = taille;
    sp = 0;
  }
  
  /* Methode d'empilage d'un objet                        */
  /* faux retourne s'il n'y a plus de place, vrai sinon   */

  public boolean empiler(Object o) {
    if ( sp < tmax ) {
      t[sp] = o;
      sp++;
      return(true); }
      else
      return(false);
  }
  
  /* Methode de depilage d'un objet                       */
  /* null retourne s'il n'y a pas d'objet dans la pile    */

  public Object depiler() {
    if ( sp > 0 ) {
      sp--;
      return(t[sp]); }
      else
      return(null);
  }
  
  /* Test si la pile est vide                             */
  
  public boolean pileVide() {
    return(sp == 0);
  }
  
  /* Surcharge de la methode toString                     */

  public String toString() {
    String s = new String();
    if ( sp > 0 ) {
      s += t[0];
      for ( int i = 1 ; i < sp ; i++ )
        s += (","+t[i]); }
    return("["+s+"] "+sp+" "+tmax);
  }
}

Pile.java

Une classe application implantant des piles d'Object.

/* Auteur: Nicolas JANEY          */
/* nicolas.janey@univ-fcomte.fr   */
/* Avril 2005                     */

public class ApplicationPiles {

  public static void main(String [] args) {
    /* Instanciation de deux Pile                         */
    Pile p1 = new Pile();
    Pile p2 = new Pile(50);
    /* Affichage des deux piles                           */
    System.out.println("Piles testees");
    System.out.println(p1);
    System.out.println(p2);
    /* Empilement de deux Integer dans p1                 */
    p1.empiler(new Integer(100));
    p1.empiler(new Integer(-100));
    /* Affichage de p1                                    */
    System.out.println(p1);
    /* Depilement et affichage d'un Object de p1 et       */
    /* affichage du resultat du test pile vide            */
    /* sur la pile resultante                             */
    Object o = p1.depiler();
    System.out.println(o);
    System.out.println(p1.pileVide());
    /* Depilement et affichage d'un autre Object de p1    */
    /* affichage du resultat du test pile vide            */
    /* sur la pile resultante                             */
    System.out.println(p1.depiler());
    System.out.println(p1.pileVide());
    /* Depilement et affichage d'un nouvel Object de p1   */
    /* -> cela ne marche pas et conduit au resultat null  */
    System.out.println(p1.depiler());
    /* Empilement de trois objets de classes differentes  */
    /* dans p2 et affichage de la pile resultante         */
    p2.empiler(new Personne("Dupond","Armand",0,154119030048812L));
    p2.empiler(new Cercle(2.3F,3.1F,2.6F));
    p2.empiler(new Personne("Dumas","Emilie",1,262037820018798L));
    System.out.println(p2);
  }
}

ApplicationPiles.java

Auteur: Nicolas JANEY
UFR Sciences et Techniques
Université de Besançon
16 Route de Gray, 25030 Besançon
nicolas.janey@univ-fcomte.fr