Auteur : Mohamed Messabihi
Matière : Programmation et structures de données
Date 17 mars 2014 Durée 1h30
Université Abou Bakr Belkaïd - Tlemcen Faculté des Sciences 1èreAnnée MI Semestre 2
Correction du contrôle Continu
Aucun document n'est autorisé.
Les solutions sous forme de programme Pascal sont aussi acceptées.
Tout appareil électronique doit être éteint (Téléphone, Ordinateur, Tablette, etc.).
1 Occurrences d'un mot dans une phrase (8 pts, 40 min)
Écrire un programme permettant de lire une phrase composée de lettres minuscules ou majuscules et d'espaces, puis de déterminer et d'acher le nombre d'occurrences d'un mot donné (par l'utilisateur), dans cette phrase.
NB : on suppose que les mots sont séparés par des espaces (un mot ne peut donc contenir aucun espace)
Solution
1 Program Occurrence_mot ;
2 uses wincrt ;
3 var ch , mot : s t r i n g ;
4 nb , i , k : integer ;
5 Begin
6 writeln ( ' s a i s i r une phrase ' ) ;
7 readln ( ch ) ;
8 writeln ( ' s a i s i r un mot ' ) ;
9 readln (mot ) ;
10 k:= length (mot ) ;
11 nb :=0;
12 i :=1;
13 repeat
14 i f ( ch [ i ] = mot [ 1 ] ) and (mot = copy ( ch , i , k ) ) then
15 begin
16 nb := nb+1;
17 i := i+k ;
18 end
19 else
20 i := i +1;
21 until i>length ( ch ) ;
22 writeln ( ' l e mot ' ' ' , mot , ' ' ' f i g u r e ' ,nb , ' f o i s dans l a phrase : ' , ch ) ;
23 readln ;
24 End.
2 Préparation de l'équipe nationale (12 pts, 50 min)
Le sélectionneur de l'équipe nationale souhaite faire des statistiques sur les matchs de la 1
èredivision.
Il vous demande de lui faire un programme an de lui faciliter la tâche.
Vous disposez des types suivants pour stocker les noms des équipes :
B
[email protected]
Page 1
1CONST MaxEquipe = 1 6 ;
2 TYPE nom_t = s t r i n g [ 5 0 ] ;
3 TabNom_t = array [ 1 . . MaxEquipe ] of nom_t ;
1. Écrire la procédure SaisieNoms (var tab_noms : TabNom_t ; var nbr_equipe : Inte- ger) ; qui lit au clavier une suite de noms (un par ligne) terminée par une ligne vide, mémorise ces noms dans tab_noms et le nombre résultant dans nbr_equipe.
Solution
1 Procedure SaisieNoms ( var tab_noms : TabNom_t ; var nbr_equipe : integer ) ;
2 Var s : nom_t ;
3 Begin
4 nbr_equipe := 0 ;
5 readln ( s ) ;
6 while s <> ' ' do { ou l e n g t h ( s ) > 0 }
7 begin
8 nbr_equipe := nbr_equipe +1;
9 tab_noms [ nbr_equipe ] := s ;
10 readln ( s ) ;
11 end ;
12 End;
2. Les équipes sont désormais numérotées dans leur ordre de saisie. On introduit maintenant des types pour mémoriser les scores des matchs, qui ont lieu chaque fois entre une équipe locale et une équipe extérieure :
1CONST MaxMatch = 1000;
2 TYPE Match_t = record
3 n_loc , n_ext , { numéro équipe l o c a l e , e x t é r i e u r e }
4 s_loc , s_ext : integer ; { score équipe l o c a l e , e x t é r i e u r e }
5 end ;
6 TabMatch_t = array [ 1 . . MaxMatch ] of Match_t ;
Écrire la fonction Gagnant(m : match_t) : Integer ; qui pour un match m donné, renvoie 1, -1 ou 0 selon que la gagnante est l'équipe locale, extérieure ou que le match est nul.
Solution
1 Function Gagnant (m : Match_t ) : integer ;
2 Begin
3 i f m. s_loc > m. s_ext then Gagnant := 1
4 else i f m. s_loc < m. s_ext then
5 Gagnant := −1
6 else Gagnant := 0 ;
7 End;
3. Écrire la procédure AcherGagnants (tab_M : TabMatch_t ; nbr_M : Integer ; tab_noms : TabNom_t ; nbr_equipe : Integer) ; qui ache pour chacun des nbr_M matchs le nom de l'équipe gagnante, en appelant éventuellement la fonction Gagnant.
Solution
B
[email protected]
Page 2
1 Procedure AfficherGagnants (tab_M : TabMatch_t ; nbr_M: integer ; tab_noms : TabNom_t ) ;
2 Var i , g : integer ;
3 Begin
4 for i := 1 to nbr_M do
5 begin
6 g := Gagnant (tab_M [ i ] ) ;
7 i f g > 0 then
8 writeln ( tab_noms [ tab_M [ i ] . n_loc ] )
9 else i f g < 0 then writeln ( tab_noms [ tab_M [ i ] . n_ext ] ) ;
10 end ;
11 End;
4. Écrire la fonction DiérenceLocalExtérieure (tab_M : TabMatch_t ; nbr_M : Inte- ger) : Integer ; qui renvoie pour l'ensemble des nbr_M matchs, la diérences entre le nombre de matches gagnés par les équipes locales et le nombre de matchs gagnés par les équipes exté- rieures, en appelant éventuellement la fonction Gagnant.
Solution
1 Function D i f f e r e n c e L o c a l E x t e r i e u r e (tab_M : TabMatch_t ; nbr_M : integer ) : integer ;
2 Var i , g : integer ;
3 Begin
4 g := 0 ;
5 for i := 1 to nbr_M do
6 g := g + Gagnant (tab_M [ i ] ) ;
7 D i f f e r e n c e L o c a l E x t e r i e u r e := g ;
8 End;
Bon courage !
B