Correction du TP n°12

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

Une classe application utilisant des compteurs.

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

public class ApplicationCompteurs {

  public static void main(String [] args) {
    /* Instanciation de deux Compteur                     */
    /* le premier a la valeur pas defaut (0)              */
    /* le second a la valeur 100                          */
    Compteur c1 = new Compteur();
    Compteur c2 = new Compteur(100);
    /* Affichage des compteurs                            */
    System.out.println("Valeurs des compteurs");
    System.out.println(c1.valeur());
    System.out.println(c2.valeur());
    /* 10 incrementations de 1 du compteur c1             */
    for ( int i = 0 ; i < 10 ; i++ )
      c1.incrementer();
    /* 30 decrementations de 1 du compteur c2             */
    for ( int i = 0 ; i < 30 ; i++ )
      c2.decrementer();
    /* Nouvel affichage des valeurs des compteurs         */
    System.out.println("Nouvelles valeurs des compteurs");
    System.out.println(c1.valeur());
    System.out.println(c2.valeur());
  }
}

ApplicationCompteurs.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

Une classe application utilisant des personnes.

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

public class ApplicationPersonnes {

  public static void main(String [] args) {
    /* Instanciation de deux Personne                     */
    Personne p1 = new Personne("Dupond","Armand",0,154119030048812L);
    Personne p2 = new Personne("Dumas","Emilie",1,262037820018798L);
    /* Affichage de ces deux personnes                    */
    System.out.println("Personnes testees");
    System.out.println(p1);
    System.out.println(p2);
    /* Affichage de leurs sexes                           */
    System.out.println("Sexes");
    System.out.println(p1.sexe());
    System.out.println(p2.sexe());
    /* Affichage de leurs dates de naissance              */
    System.out.println("Dates de naissance");
    System.out.println(p1.dateNaissance());
    System.out.println(p2.dateNaissance());
    /* Comparaison de leurs ages                          */
    System.out.println("Comparaisons des ages");
    System.out.println(p1.plusAgeQue(p2));
    System.out.println(p2.plusAgeQue(p1));
    /* Tests de classement                                */
    System.out.println("Classements");
    System.out.println(p1.classeAvant(p2));
    System.out.println(p2.classeAvant(p1));
  }
}

ApplicationPersonnes.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

Une classe application utilisant des cercles.

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

public class ApplicationCercles {

  public static void main(String [] args) {
    /* Instanciation de deux Cercle                       */
    Cercle c1 = new Cercle(2.5F,1.0F,2.0F);
    Cercle c2 = new Cercle(3.5F,3.0F,-2.0F);
    /* Affichage de ces deux cercles                      */
    System.out.println("Cercles testes");
    System.out.println(c1);
    System.out.println(c2);
    /* Affichage de leurs surfaces                        */
    System.out.println(c1.surfaceCercle());
    System.out.println(c2.surfaceCercle());
    /* Instanciation et affichage d'une Position          */
    Position p = new Position(0.2F,0.5F);
    System.out.println(p);
    /* Affichage des resultats des tests d'inclusion      */
    /* de la position dans les cercles                    */
    /* par les methodes idoines des classes               */
    /* Cercle et Position                                 */
    System.out.println(c1.dansCercle(p));
    System.out.println(p.dansCercle(c1));
    System.out.println(c2.dansCercle(p));
    System.out.println(p.dansCercle(c2));
  }
}

ApplicationCercles.java

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