CORRECTION DE L'EVALUATION EN ALGORITHMIQUE TEST 08/ XX
CORRIGÉ
Exercice 01 : Question de Cours (5pts)
-
Différences entre les 3 boucles : POUR / TANTQUE / REPETER
| Pour |
TantQue |
Répéter ... Jusqu'à |
- Utilisée quand le nombre d’itérations est connu (ou calculable).
- Le compteur varie automatiquement (ex : i de 1 à n).
- Le test est fait avant chaque tour.
- Si la borne est déjà impossible, la boucle peut ne jamais s’exécuter.
|
- Utilisée quand le nombre d’itérations n’est pas connu à l’avance.
- Le test est fait avant d’entrer dans le corps de la boucle.
- Si la condition est fausse au début, elle ne s’exécute jamais.
- Attention : si on n’évolue pas la condition, on crée une boucle infinie.
|
- La boucle s’exécute au moins une fois.
- Le test est fait à la fin (après l’exécution du corps).
- Elle s’arrête quand la condition de fin devient vraie.
- Pratique pour la saisie contrôlée.
|
-
Syntaxe de déclaration d’un tableau à 2 dimensions
Forme générale :
TypeNom = tableau[borne1..borne2, borne3..borne4] de TypeElement ;
Exemples :
T : tableau[1..6, 1..3] de reel ;
A : tableau[0..9, 0..9] de entier ;
-
Explication : t[i,j] ← 'A' et A[i] ← 9
- t[i,j] ← 'A' :
On place le caractère 'A' dans la case située à la ligne i et la colonne j du tableau à 2 dimensions t.
- A[i] ← 9 :
On place la valeur entière 9 dans la case d’indice i du tableau à 1 dimension A.
Remarque : les indices doivent être dans les bornes du tableau, sinon c’est une erreur (dépassement de tableau).
Exercice 02 : Exécution Manuelle (3pts)
ALGORITHME 01 : GeniusTest5
a) Dénichez les potentielles erreurs
b) Pour n = 9 et n = -3 : sortie écran + tableau de trace
Idée de l’algorithme : il lit n. Si n > 0 alors il calcule fou = n*n donne le carrée de n, sinon il affiche fou=0, puis affiche GROUPE GENIUS.
1) Cas n = 9
| Étape |
n |
fou |
Affichage |
| Lecture |
9 |
non défini |
Donner un entier positif: |
| Test (n > 0) |
9 |
non défini |
Vrai |
| Calcul |
9 |
81 |
fou=81 |
| Fin |
9 |
81 |
GROUPE GENIUS |
Sortie écran (n=9) :
Donner un entier positif:
fou=81
GROUPE GENIUS
2) Cas n = -3
| Étape |
n |
fou |
Affichage |
| Lecture |
-3 |
non défini |
Donner un entier positif: |
| Test (n > 0) |
-3 |
non défini |
Faux |
| Sinon |
-3 |
non changé |
fou=0 |
| Fin |
-3 |
non changé |
GROUPE GENIUS |
Sortie écran (n=-3) :
Donner un entier positif:
fou=0
GROUPE GENIUS
ALGORITHME 02 : GeniusTest6
a) Dénichez les potentielles erreurs
b) Pour Robin = 4 : tableau de trace et sortie écran
Interprétation attendue : le programme calcule le factoriel de Robin dans la variable DesBois (au départ DesBois = 1, puis multiplication de 1 à Robin).
Pour Robin = 4 :
DesBois commence à 1, puis : 1) DesBois = 1 * 1 = 1
2) DesBois = 1 * 2 = 2
3) DesBois = 2 * 3 = 6
4) DesBois = 6 * 4 = 24
| i |
Robin |
DesBois (avant) |
DesBois (après) |
| Initialisation |
4 |
-- |
1 |
| 1 |
4 |
1 |
1 |
| 2 |
4 |
1 |
2 |
| 3 |
4 |
2 |
6 |
| 4 |
4 |
6 |
24 |
Sortie écran (Robin = 4) :
Entrez un nombre:
Félicitation le: 4 entrer vaut 24 Et correspond au ? d’un nombre
Exercice 03 : Structure Conditionnelle (3pts)
Énoncé : demander un numéro de mois (1..12) et afficher le nombre de jours (sans années bissextiles).
Algorithme Jours_Mois ;
Var
m : entier ;
Debut
Ecrire('Donner un numero de mois (1..12) : ') ;
Repeter
Lire(m) ;
Jusqu'a (m >= 1 ET m <= 12) ;
Si (m = 1 OU m = 3 OU m = 5 OU m = 7 OU m = 8 OU m = 10 OU m = 12) alors
Ecrire('Ce mois contient 31 jours') ;
SinonSi (m = 4 OU m = 6 OU m = 9 OU m = 11) alors
Ecrire('Ce mois contient 30 jours') ;
Sinon
Ecrire('Ce mois contient 28 jours') ; // fevrier sans bissextile
FinSi
Fin.
Exercice 04 : Suite arithmétique (4pts)
Suite : U0 = 1 et Un+1 = Un + 2.
Demande : afficher les n premiers termes (n demandé à l’utilisateur).
Algorithme Suite_Arithmetique ;
Var
n, i : entier ;
U : entier ;
Debut
Ecrire('Donner n (nombre de termes a afficher) : ') ;
Repeter
Lire(n) ;
Jusqu'a (n >= 1) ;
U <- 1 ; // U0
Pour i de 0 a n-1 faire
Ecrire('U', i, ' = ', U) ;
U <- U + 2 ;
FinPour
Fin.
Problème : Le Lièvre et la Tortue (5pts)
Données : M parties avec M = 5. Chaque partie a au plus p tours. A chaque tour, l’utilisateur saisit une valeur de dé (<= 6). Si 6 sort : lièvre gagne (partie perdue pour la tortue). Sinon : tortue avance d’une case. La tortue gagne si elle avance p fois (donc si aucun 6 ne sort pendant les p tours).
But : compter t = nombre de parties gagnées par la tortue, puis afficher la fréquence t/M.
Algorithme Lievre_Tortue ;
Const M = 5 ;
Var
p, partie, tour, de : entier ;
t : entier ;
avance : entier ;
freq : reel ;
gagneTortue : booleen ;
Debut
Ecrire('Donner p (nombre de cases / tours max) : ') ;
Repeter
Lire(p) ;
Jusqu'a (p > 0) ;
t <- 0 ;
Pour partie de 1 a M faire
avance <- 0 ;
gagneTortue <- VRAI ;
Pour tour de 1 a p faire
Ecrire('Partie ', partie, ' - Tour ', tour, ' : valeur du de (0..6) = ') ;
Repeter
Lire(de) ;
Jusqu'a (de >= 0 ET de <= 6) ;
Si (de = 6) alors
gagneTortue <- FAUX ;
// le lievre gagne, on arrete cette partie
tour <- p ; // sortie forcee de la boucle Pour (version pseudo)
Sinon
avance <- avance + 1 ;
FinSi
FinPour
Si (gagneTortue ET avance = p) alors
t <- t + 1 ;
FinSi
FinPour
freq <- t / M ;
Ecrire('Nombre de parties gagnees par la tortue t = ', t) ;
Ecrire('Frequence t/M = ', freq) ;
Fin.
Par Joel_Yk | Contact :+237652027193