Corrigé feuille 12

Transcription

Corrigé feuille 12
Corrigés des exercices du chapitre 10
Exercice 10.1 : structures de données complexes
Question 1
Voici un programme avec une structure de données complexe.
c l a s s D ate {
int jour ;
i n t mois ;
i n t annee ;
}
c l a s s Employe {
S t r i n g nom ;
i n t numero ;
D ate dateE m bauche ;
}
class Service {
S t r i n g nom ;
Employe c h e f ;
Employe [ ] e m p l o y e s ;
}
1. en utilisant cette structure, définissez une variable appelée exp, représentant un service expedition
dirigé par Jean, ayant Pierre, Paul et Jean comme enployés.
Employe j e a n , p i e r r e , p a u l ;
D ate d a t e 1 , d a t e 2 , d a t e 3 ;
S e r v i c e exp = new S e r v i c e ( ) ;
d a t e 1 = new D ate ( ) ;
date1 . jour = 1;
d a t e 1 . mois = 1 ;
d a t e 1 . annee = 1997;
d a t e 2 = new D ate ( ) ;
date2 . jour = 1;
d a t e 2 . mois = 1 0 ;
d a t e 2 . annee = 1999;
d a t e 3 = new D ate ( ) ;
date3 . jour = 1;
1
d a t e 3 . mois = 3 ;
d a t e 3 . annee = 2003;
j e a n = new Employe ( ) ;
j e a n . nom = ” J e a n ” ;
j e a n . numero = 4 5 ;
j e a n . dateE m bauche = d a t e 1 ;
p i e r r e = new Employe ( ) ;
p i e r r e . nom = ” P i e r r e ” ;
p i e r r e . numero = 7 5 ;
p i e r r e . dateE m bauche = d a t e 2 ;
p a u l = new Employe ( ) ;
p a u l . nom = ” P a u l ” ;
p a u l . numero = 6 7 ;
p a u l . dateE m bauche = d a t e 3 ;
exp . nom = ” E x p e d i t i o n ” ;
exp . c h e f = j e a n ;
exp . e m p l o y e s = new Employe [ 3 ] ;
exp . e m p l o y e s [ 0 ] = p i e r r e ;
exp . e m p l o y e s [ 1 ] = p a u l ;
exp . e m p l o y e s [ 2 ] = j e a n ;
2. dessinez le contenu de la variable exp.

nom :
















chef :









































employes :



























”Expedition”

nom :




 numero :





”Jean”
45

1
 jour :
dateEmbauche :
mois : 1

annee : 1997

nom :




 numero :
”Pierre”
75

0
 jour :


dateEmbauche :
mois :




annee :

nom :
”Paul”




67
 numero :

1
 jour :



 dateEmbauche :  mois :

annee :

nom :
”Jean”




45
 numero :

2
 jour :


dateEmbauche :
mois :




annee :
2
1
10
1999
1
3
2003
1
1
1997
3. comment afficher le nom du service ? (réponse en une ligne de code)
Terminal.ecrireStringln(exp.nom);
4. comment afficher le nom du chef de service ?
Terminal.ecrireStringln(exp.chef.nom);
5. comment afficher l’année d’embauche du chef de service ?
Terminal.ecrireIntln(exp.chef.dateEmbauche.annee);
6. comment afficher le nombre d’employés du service ?
Terminal.ecrireIntln(exp.employes.length);
7. comment afficher le nom du plus ancien employé du service ? On suppose qu’il existe une méthode
estAvant(Date d1, Date d2) qui renvoie true si d1 est avant d2 et false sinon. (réponse
en plusieurs lignes de code : il faut rechercher le plus ancien employé, puis l’afficher)
int indice = 0;
for (int i = 1; i<3; i++){
if (estAvant(exp.employes[i].dateEmbauche,
exp.employes[indice].dateEmbauche)){
indice = i;
}
}
Terminal.ecrireStringln(exp.employes[indice].nom);
Vous pouvez vérifier le bon fonctionnement des réponses au moyen du programme suivant :
p u b lic c l a s s Exo10 1 1 {
s t a t i c b o o l e a n e s t A v a n t ( D ate d1 , D ate d2 ) {
i f ( d1 . a n n e e < d2 . a n n e e ) {
return true ;
} e l s e i f ( ( d1 . a n n e e == d2 . a n n e e ) && ( d1 . mois < d2 . mois ) ) {
return true ;
} e l s e i f ( ( d1 . a n n e e == d2 . a n n e e ) && ( d1 . mois == d2 . mois ) &&
( d1 . j o u r < d2 . j o u r ) ) {
return true ;
}
return f a l s e ;
}
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g u m e n t s ) {
Employe j e a n , p i e r r e , p a u l ;
D ate d a t e 1 , d a t e 2 , d a t e 3 ;
S e r v i c e exp = new S e r v i c e ( ) ;
int indice ;
d a t e 1 = new D ate ( ) ;
date1 . jour = 1;
d a t e 1 . mois = 1 ;
d a t e 1 . annee = 1997;
3
d a t e 2 = new D ate ( ) ;
date2 . jour = 1;
d a t e 2 . mois = 1 0 ;
d a t e 2 . annee = 1999;
d a t e 3 = new D ate ( ) ;
date3 . jour = 1;
d a t e 3 . mois = 3 ;
d a t e 3 . annee = 2003;
j e a n = new Employe ( ) ;
j e a n . nom = ” J e a n ” ;
j e a n . numero = 4 5 ;
j e a n . dateE m bauche = d a t e 1 ;
p i e r r e = new Employe ( ) ;
p i e r r e . nom = ” P i e r r e ” ;
p i e r r e . numero = 7 5 ;
p i e r r e . dateE m bauche = d a t e 2 ;
p a u l = new Employe ( ) ;
p a u l . nom = ” P a u l ” ;
p a u l . numero = 6 7 ;
p a u l . dateE m bauche = d a t e 3 ;
exp . nom = ” E x p e d i t i o n ” ;
exp . c h e f = j e a n ;
exp . e m p l o y e s = new Employe [ 3 ] ;
exp . e m p l o y e s [ 0 ] = p i e r r e ;
exp . e m p l o y e s [ 1 ] = p a u l ;
exp . e m p l o y e s [ 2 ] = j e a n ;
T e r m i n a l . e c r i r e S t r i n g l n ( exp . nom ) ;
T e r m i n a l . e c r i r e S t r i n g l n ( exp . c h e f . nom ) ;
T e r m i n a l . e c r i r e I n t l n ( exp . c h e f . dateE m bauche . a n n e e ) ;
T e r m i n a l . e c r i r e I n t l n ( exp . e m p l o y e s . l e n g t h ) ;
indice = 0;
f o r ( i n t i = 1 ; i <3; i ++){
i f ( e s t A v a n t ( exp . e m p l o y e s [ i ] . dateE m bauche ,
exp . e m p l o y e s [ i n d i c e ] . dateE m bauche ) ) {
indice = i ;
}
}
T e r m i n a l . e c r i r e S t r i n g l n ( exp . e m p l o y e s [ i n d i c e ] . nom ) ;
}
}
Question 2
Soit la structure de donnée définie par les classes suivantes.
class Produit {
4
S t r i n g nom ;
int ref , prix ;
boolean d i s p o n i b l e ;
}
c l a s s LigneCommande{
P r o d u i t prod ;
int quantite ;
}
c l a s s Commande{
String client ;
LigneCommande [ ] tabLigCom ;
}
On suppose que la variable uneCommande est du type Commande et correctement initialisée.
1. donnez le type de chaque expression.
– exp 1 : uneCommande.client type String
– exp 2 : uneCommande.tabLigCom[1].quantite type int
– exp 3 : uneCommande.tabLigCom[1].prod.disponible type boolean
– exp 4 : uneCommande.tabLigCom[1].prod.prix type int
– exp 5 : uneCommande.tabLigCom[1].prod.nom type String
2. pour chacune des expressions suivantes, dı̂tes lesquelles des expressions exp 1 à exp 5 peut remplacer
les points de suspension. Attention, il peut y avoir plusieurs remplacement possibles à chaque fois.
– Terminal.ecrireString(...); réponse : exp 1 et exp 5
– 12+... réponse : exp 2 et exp 4
– Terminal.ecrireInt(...) réponse : exp 2 et exp 4
– if(...){ Terminal.ecrireString("Oui"); } réponse : exp 3
– if(...==50){ Terminal.ecrireString("Oui"); } réponse : exp 2 et exp 4
– Terminal.ecrireString("La valeur: " + ...); réponse : toutes les expressions
Exercice 10.2 : personnes
Dans cet exercice, on reprend les classes Date et Personne du cours (chapitre 9).
Ecrire un programme qui comprend les sous-programmes suivants :
1. une méthode permettant de saisir au clavier la valeur d’un enregistrement de type Personne. Il faut
saisir successivement les valeurs des différents champs.
2. une fonction qui détermine si deux personnes ont le même nom. Il faudra pour cela utiliser la méthode
equals des chaı̂nes de caractères.
3. une fonction appelée plusJeune qui dit si une personne est plus jeune qu’une autre. Vous commencerez par déterminer le type de la fonction, c’est à dire le type des paramètres et le type du résultat
calculé, puis vous en écrirez le code.
c l a s s Exo10 2 {
s t a t i c D ate l i r e D a t e ( ) {
D ate r e s = new D ate ( ) ;
Terminal . e c r i r e S t r i n g ( ” Entrez l e j our : ” ) ;
5
r es . j our = Terminal . l i r e I n t ( ) ;
T e r m i n a l . e c r i r e S t r i n g ( ” E n t r e z l e mois : ” ) ;
r e s . mois = T e r m i n a l . l i r e I n t ( ) ;
Terminal . e c r i r e S t r i n g ( ” E n t r e z l ’ annee : ” ) ;
r e s . annee = Terminal . l i r e I n t ( ) ;
return res ;
}
s t a t i c Personne l i r e P e r s o n n e ( ) {
P e r s o n n e r e s = new P e r s o n n e ( ) ;
T e r m i n a l . e c r i r e S t r i n g ( ” E n t r e z l e nom de l a p e r s o n n e : ” ) ;
r e s . nom = T e r m i n a l . l i r e S t r i n g ( ) ;
T e r m i n a l . e c r i r e S t r i n g ( ” E n t r e z l a d a t e de n a i s s a n c e . ” ) ;
res . naissance = lireDate ( ) ;
return res ;
}
s t a t i c b o o l e a n memeNom ( P e r s o n n e p1 , P e r s o n n e p2 ) {
r e t u r n p1 . nom . e q u a l s ( p2 . nom ) ;
}
s t a t i c b o o l e a n e s t A v a n t ( D ate d1 , D ate d2 ) {
i f ( d1 . a n n e e < d2 . a n n e e ) {
return true ;
} e l s e i f ( ( d1 . a n n e e == d2 . a n n e e ) && ( d1 . mois < d2 . mois ) ) {
return true ;
} e l s e i f ( ( d1 . a n n e e == d2 . a n n e e ) && ( d1 . mois == d2 . mois ) &&
( d1 . j o u r < d2 . j o u r ) ) {
return true ;
}
return f a l s e ;
}
s t a t i c b o o l e a n p l u s J e u n e ( P e r s o n n e p1 , P e r s o n n e p2 ) {
r e t u r n e s t A v a n t ( p1 . n a i s s a n c e , p2 . n a i s s a n c e ) ;
}
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g u m e n t s ) {
D ate d a t e 1 ;
Personne jean , p i e r r e ;
d a t e 1 = new D ate ( ) ;
date1 . jour = 1;
d a t e 1 . mois = 1 ;
d a t e 1 . annee = 1947;
j e a n = new P e r s o n n e ( ) ;
j e a n . nom = ” J e a n ” ;
jean . naissance = date1 ;
pierre = lirePersonne ( ) ;
i f ( memeNom ( j e a n , p i e r r e ) ) {
T e r m i n a l . e c r i r e S t r i n g l n ( ” I l s o n t l e meme nom . ” ) ;
6
}
i f ( plusJeune ( jean , p i e r r e )){
T e r m i n a l . e c r i r e S t r i n g l n ( j e a n . nom + ” e s t l e p l u s j e u n e ” ) ;
} else {
T e r m i n a l . e c r i r e S t r i n g l n ( p i e r r e . nom + ” e s t l e p l u s j e u n e ” ) ;
}
}
}
Exercice 10.3 : basse-cour
Le but de notre programme est de représenter une basse-cour.
Un volatile sera caractérisé par son nom, sa race, son sexe, son âge en mois.Une basse-cour sera un
enregistrement contenant un tableau de volatiles.
On se limitera à un tableau de 3 volatiles. Ecrivez les classes et un programme permettant de saisir au
clavier le contenu du tableau, puis affichant le contenu du tableau.
c l a s s BasseCour {
V o l a t i l e [ ] t a b = new V o l a t i l e [ 3 ] ;
}
class Volatile {
S t r i n g nom , r a c e ;
b o o l e a n male ;
i n t age ;
}
c l a s s Exo10 3 {
static Volatile l i r e V o la t i l e (){
V o l a t i l e r e s = new V o l a t i l e ( ) ;
T e r m i n a l . e c r i r e S t r i n g ( ” E n t r e z l e nom : ” ) ;
r e s . nom = T e r m i n a l . l i r e S t r i n g ( ) ;
Terminal . e c r i r e S t r i n g ( ” Entrez l a race : ” ) ;
r es . race = Terminal . l i r e S t r i n g ( ) ;
T e r m i n a l . e c r i r e S t r i n g ( ” E st −ce un male ? ” ) ;
r e s . male = T e r m i n a l . l i r e C h a r ( ) == ’ o ’ ;
T e r m i n a l . e c r i r e S t r i n g ( ” E n t r e z l ’ age en mois : ” ) ;
r e s . age = T e r m i n a l . l i r e I n t ( ) ;
return res ;
}
s t a t i c BasseCour l i r e B a s s e C o u r ( ) {
B a s s e C o u r r e s = new B a s s e C o u r ( ) ;
f o r ( i n t i = 0 ; i <3; i ++){
res . tab [ i ] = l i r e V o l a t i l e ( ) ;
}
return res ;
}
7
s t a t i c void e c r i r e V o l a t i l e ( V o l a t i l e v ){
T e r m i n a l . e c r i r e S t r i n g l n ( ”nom : ” + v . nom ) ;
Terminal . e c r i r e S t r i n g l n ( ” race : ” + v . race ) ;
i f ( v . male ) {
T e r m i n a l . e c r i r e S t r i n g l n ( ” male ” ) ;
} else {
Terminal . e c r i r e S t r i n g l n ( ” f em el l e ” ) ;
}
T e r m i n a l . e c r i r e S t r i n g l n ( ” age en mois : ” + v . age ) ;
}
s t a t i c v o i d e c r i r e B a s s e C o u r ( B a s s e C o u r bc ) {
f o r ( i n t i = 0 ; i <3; i ++){
T e r m i n a l . e c r i r e S t r i n g l n ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” ) ;
e c r i r e V o l a t i l e ( bc . t a b [ i ] ) ;
}
}
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g u m e n t s ) {
B a s s e C o u r bc ;
bc = l i r e B a s s e C o u r ( ) ;
e c r i r e B a s s e C o u r ( bc ) ;
}
}
Exercice 10.4 : bibliothèque
Cet exercice reprend et poursuit l’énoncé de l’exercice 9.1. Reprendre le type des livres de cet exercice.
Ecrire un programme permettant de manipuler plusieurs livres. Il faudra utiliser un tableau de livre. Ce
programme fera la saisie des informations de tous ces livres. Vous vous inspirerez de l’exercice 9.3 pour
gérer un tableau avec des cases libres, permettant de faire varier le nombre de livres dans la bibliothèque.
Le programme comportera notamment les opérations de saisie d’un livre, d’ajout d’un livre dans le
tableau.
class Livre {
String t i t r e , auteur , e d ite u r ;
i n t annee , n b P a g e s ;
}
class Bibliotheque {
L i v r e [ ] t a b L i v = new L i v r e [ 2 5 ] ;
int nbLivre = 0;
}
c l a s s Exo10 4 {
s t a t i c void e c r i r e B i b l i o t h e q u e ( B i b l i o t h e q u e bib ){
f o r ( i n t i = 0 ; i <b i b . n b L i v r e ; i ++){
T e r m i n a l . e c r i r e S t r i n g l n ( ” ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ” ) ;
e c r i r e L i v r e ( bib . tabLiv [ i ] ) ;
8
}
}
s t a t i c void e c r i r e L i v r e ( L i v r e l i v ){
Terminal . e c r i r e S t r i n g l n ( ” T i t r e : ” + l i v . t i t r e ) ;
Terminal . e c r i r e S t r i n g l n ( ” Auteur : ” + l i v . aut eur ) ;
Terminal . e c r i r e S t r i n g l n ( ” E di t eur : ” + l i v . e d i t e u r ) ;
T e r m i n a l . e c r i r e S t r i n g l n ( ” Annee : ” + l i v . a n n e e ) ;
T e r m i n a l . e c r i r e S t r i n g l n ( ” Nombre de p a g e s : ” + l i v . n b P a g e s ) ;
}
s t a t i c Livre l i r e L i v r e (){
L i v r e r e s = new L i v r e ( ) ;
T e r m i n a l . e c r i r e S t r i n g ( ” E n t r e z l e nom de l ’ a u t e u r : ” ) ;
r es . aut eur = Terminal . l i r e S t r i n g ( ) ;
Terminal . e c r i r e S t r i n g ( ” Entrez l e t i t r e : ” ) ;
r es . t i t r e = Terminal . l i r e S t r i n g ( ) ;
Terminal . e c r i r e S t r i n g ( ” Entrez l ’ e d i t e u r : ” ) ;
r es . e d i t e u r = Terminal . l i r e S t r i n g ( ) ;
T e r m i n a l . e c r i r e S t r i n g ( ” E n t r e z l e nombre de page : ” ) ;
r e s . nbPages = Terminal . l i r e I n t ( ) ;
T e r m i n a l . e c r i r e S t r i n g ( ” E n t r e z l ’ a n n e e de p u b l i c a t i o n : ” ) ;
r e s . annee = Terminal . l i r e I n t ( ) ;
return res ;
}
s t a t i c void a j o u t e r ( L i v r e l i v , B i b l i o t h e q u e bib ){
bib . tabLiv [ bib . nbLivre ] = l i v ;
b i b . n b L i v r e ++;
}
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {
B i b l i o t h e q u e l a B i b = new B i b l i o t h e q u e ( ) ;
L i v r e c h a r t r e u s e = new L i v r e ( ) ;
c h a r t r e u s e . t i t r e = ” La c h a r t r e u s e de Parme ” ;
chartreuse . auteur = ” Stendhal ” ;
c h a r t r e u s e . e d i t e u r = ” Gallimard ” ;
c h a r t r e u s e . annee = 1987;
c h a r t r e u s e . nbPages = 683;
aj ou te r ( chartreuse , laBib ) ;
aj ou te r ( l i r e L i v r e () , laBib ) ;
e cr ire Bi bl iot he qu e ( laBib ) ;
}
}
9

Documents pareils