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