Auteur : Mohamed Messabihi
Matière : Programmation et structures de données Date 19 Juin 2014
Durée 1h30
Université Abou Bakr Belkaïd - Tlemcen Faculté des Sciences 1èreAnnée MI Semestre 2
Examen de rattrapage
Aucun document n'est autorisé.
L'utilisation des portables est strictement interdite.
Coupe du monde 2014
Pour répondre à une question, vous avez le droit de vous servir des réponses des questions précédentes, même si vous ne les avez pas traitées. Il est fortement conseillé de lire le sujet en entier avant de commencer.
1 Type Match (3 pts)
Un Match est caractérisé par une date, le nom de la première équipe, son score et le nom de la seconde équipe ainsi que son score. Créer un type de donnée permettant de déclarer des variables de type match.
L'exemple ci-contre montre la représentation du match de l'Algérie contre la Corée du sud du 22/06/2014.
Solution
1PROGRAM CoupeDuMonde ;
2TYPE
3 Jour_t = 1 . . 3 1 ;
4 Mois_t = 1 . . 1 2 ;
5 Annee_t = 1 9 3 0 . . 2 9 9 9 ;
6 Date_t = Record
7 j : Jour_t ;
8 m : Mois_t ;
9 a : Annee_t ;
10 End;
11
12 Nom_Equipe = S t r i n g [ 5 0 ] ;
13 Score = 0 . . 1 0 ;
14 Match_t = Record
15 date : Date_t ;
16 equipe1 : Nom_Equipe ;
17 score_equipe1 : Score ;
18 equipe2 : Nom_Equipe ;
19 score_equipe2 : Score ;
20 End;
2 Saisie et achage d'un match (3 pts)
1. Écrire une procédure permettant de lire une variable de type match.
Solution
BMohamed.Messabihi@gmail.com Page 1/1
1 Procedure Lire_Date ( var d : Date_t ) ;
2 Begin
3 write ( ' j o u r : ' ) ; readln ( d . j ) ;
4 write ( ' mois : ' ) ; readln ( d .m) ;
5 write ( ' annee : ' ) ; readln ( d . a ) ;
6 End;
7
8 Procedure Lire_Match ( var m : Match_t ) ;
9 Begin
10 writeln ( ' Donner l a date du match : ' ) ;
11 Lire_Date (m. date ) ;
12 write ( ' Donner l e nom de l a premiere equipe : ' ) ;
13 readln (m. equipe1 ) ;
14 write ( ' Donner l e nom de l a seconde equipe : ' ) ;
15 readln (m. equipe2 ) ;
16 write ( ' Donner l e s c o r e de l a premiere equipe : ' ) ;
17 readln (m. score_equipe1 ) ;
18 write ( ' Donner l e s c o r e de l a seconde equipe : ' ) ;
19 readln (m. score_equipe2 ) ;
20 End;
2. Écrire une procédure qui ache une variable de type match passée en paramètre
Solution
1 Procedure Afficher_Match ( m : Match_t ) ;
2 Begin
3 writeln ( '−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−' ) ;
4 writeln (m. date . j , ' / ' , m. date .m , ' / ' , m. date . a ) ;
5 writeln (m. equipe1 , ' : ' , m. score_equipe1 , '−' , m. score_equipe2 , ' : ' , m. equipe2 ) ;
6 End;
3 Gestion de plusieurs matchs (3 pts)
On souhaite enregistrer l'ensemble des matchs du premier tour de la coupe du monde 2014. On rappelle qu'il y a 32 équipes, et que chaque équipe doit confronter les trois autres équipes de son groupe (c-à-d 48 matchs).
1. Proposer un type de donnée pour stocker l'ensemble des matchs.
Solution
1 Tableau_Matchs = array [ 1 . . 4 8 ] of Match_t ;
2. Écrire une procédure qui stocke l'ensemble des matchs dans la structure de données que vous avez proposé.
Solution
1 Procedure Lire_Tableau_Matchs ( var t_matchs : Tableau_Matchs ) ;
2 var i : Integer ;
3 Begin
4 for i :=1 to 48 do
5 Lire_Match ( t_matchs [ i ] ) ;
6 End;
3. Écrire une procédure qui permet d'acher l'ensemble des matchs stockés dans cette structure de données.
Solution
1 Procedure Afficher_Tableau_Matchs ( t_matchs : Tableau_Matchs ) ;
2 var i : Integer ;
3 Begin
4 for i :=1 to 48 do
5 Afficher_Match ( t_matchs [ i ] ) ;
6 End;
BMohamed.Messabihi@gmail.com Page 2/1
4 Stockage des matchs dans un chiers et leur chargement (3 pts)
An d'éviter, à chaque fois, de saisir tous les matchs du premier tour, on souhaite les sauvegarder dans un chier. Ainsi, par la suite, il sut juste de les charger pour pouvoir les manipuler.
1. Écrire une procédure permettant de stocker l'ensemble des matchs du premier tour dans un chier
Solution
1 Procedure Stocker_Tableau_Matchs ( nom_fich : S t r i n g ; t_matchs : Tableau_Matchs ) ;
2 var i : Integer ;
3 Begin
4 Assign ( Coupe_du_monde , nom_fich ) ;
5 Rewrite (Coupe_du_Monde ) ;
6 for i :=1 to 48 do
7 Write(Coupe_du_Monde , t_matchs [ i ] ) ;
8 Close (Coupe_du_Monde ) ;
9 End;
2. Écrire une procédure qui permet de charger l'ensemble des matchs stockés dans un chier dans la structure de données que vous avez proposée dans la question 3.
Solution
1 Procedure Charger_Tableau_Matchs ( nom_fich : S t r i n g ; var t_matchs : Tableau_Matchs ) ;
2 var i : Integer ;
3 Begin
4 i :=1;
5 Assign ( Coupe_du_monde , nom_fich ) ;
6 Reset (Coupe_du_Monde ) ;
7 While not e o f (Coupe_du_Monde) do
8 Begin
9 read (Coupe_du_Monde , t_matchs [ i ] ) ;
10 i := i +1;
11 End;
12 Close (Coupe_du_Monde ) ;
13 End;
5 Qualication (3 pts)
La qualication au huitième de nale se fait par calcul de points cumulés par chaque équipe. Pour chaque match, l'équipe reçoit trois points pour une victoire, un point pour un match nul et zéro point sinon. Écrire une fonction qui renvoie le nombre points gagnés par une équipe (le nom de l'équipe est passé comme paramètre).
Solution
BMohamed.Messabihi@gmail.com Page 3/1
1 Function Nbr_Points ( nom_equip : Nom_Equipe ; t_matchs : Tableau_Matchs ) : Integer ;
2 var i , p o i n t s : integer ;
3 Begin
4 p o i n t s := 0 ;
5 for i :=1 to 48 do
6 Begin
7 i f ( t_matchs [ i ] . equipe1 = nom_equip ) then
8 Begin
9 i f ( t_matchs [ i ] . score_equipe1 > t_matchs [ i ] . score_equipe2 ) then
10 p o i n t s := p o i n t s+3
11 else i f ( t_matchs [ i ] . score_equipe1 = t_matchs [ i ] . score_equipe2 ) then
12 p o i n t s := p o i n t s+1
13 End
14 else i f ( t_matchs [ i ] . equipe2 = nom_equip ) then
15 Begin
16 i f ( t_matchs [ i ] . score_equipe2 > t_matchs [ i ] . score_equipe1 ) then
17 p o i n t s := p o i n t s+3
18 else i f ( t_matchs [ i ] . score_equipe2 = t_matchs [ i ] . score_equipe1 ) then
19 p o i n t s := p o i n t s+1
20 End
21 End;
22 Nbr_Points := p o i n t s ;
23 End;
6 Programme principal (3 pts)
Écrire un programme principal qui demande à l'utilisateur d'introduire les données concernant tous les matchs du premier tour, puis les stocker dans un chier, ensuite les charger une nouvelle fois, puis demande à l'utilisateur un nom d'une équipe pour enn renvoyer le nombre total des points gagnés par cette dernière.
Solution
1 BEGIN
2 Lire_Tableau_Matchs ( tab_matchs ) ;
3 Writeln ( ' Donner un nom de f i c h i e r ' ) ;
4 readln ( nom_fichier ) ;
5 Stocker_Tableau_Matchs ( nom_fichier , tab_matchs ) ;
6 Charger_Tableau_Matchs ( nom_fichier , tab1_matchs ) ;
7 Afficher_Tableau_Matchs ( tab1_matchs ) ;
8 Write ( ' Donner l e nom de l ' ' equipe : ' ) ;
9 Readln(nom_eq ) ;
10 writeln ( 'L ' ' equipe ' , nom_eq , ' a gagne : ' , Nbr_Points (nom_eq , tab1_matchs ) , ' p o i n t s . ' ) ;
11END.
One two three, viva l'algérie... !
BMohamed.Messabihi@gmail.com Page 4/1