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