■ Solutions des Devoirs – Langage Algorithmique
Formalisme conforme au cours (mots-clés FR, flèche d’affectation, fins de blocs).
DEVOIR 1 – Programmes
Exercice 1 – Minimum de trois valeurs (sans variable intermédiaire)
PROGRAMME Min3 ;
VARIABLE A, B, C : REEL ;
DEBUT
ECRIRE('Entrez A, B, C :') ;
LIRE(A) ; LIRE(B) ; LIRE(C) ;
SI (A ≤ B) ET (A ≤ C) ALORS
ECRIRE('Minimum = ', A)
SINON SI (B ≤ A) ET (B ≤ C) ALORS
ECRIRE('Minimum = ', B)
SINON
ECRIRE('Minimum = ', C) ;
FIN SI ;
FIN.
Exercice 2 – Maximum de trois valeurs (avec MAX)
PROGRAMME Max3 ;
VARIABLE A, B, C, MAX : REEL ;
DEBUT
ECRIRE('Entrez A, B, C :') ;
LIRE(A) ; LIRE(B) ; LIRE(C) ;
MAX ← A ;
SI (B > MAX) ALORS MAX ← B ; FIN SI ;
SI (C > MAX) ALORS MAX ← C ; FIN SI ;
ECRIRE('Maximum = ', MAX) ;
FIN.
Exercice 3 – Menu d’opérations avec contrôles (sélection multiple)
PROGRAMME OperationsAB ;
VARIABLE A, B : REEL ;
CHOIX : ENTIER ;
DEBUT
ECRIRE('Entrez A puis B (A > B, A>0, B>0) :') ;
LIRE(A) ; LIRE(B) ;
SI (A ≤ 0) OU (B ≤ 0) OU (A ≤ B) ALORS
ECRIRE('Erreur : conditions non respectées (A>0, B>0, A>B).') ;
SINON
ECRIRE('Choisissez :') ;
ECRIRE('1 Addition (A + B)') ;
ECRIRE('2 Soustraction (A - B)') ;
ECRIRE('3 Multiplication (A * B)') ;
LIRE(CHOIX) ;
SELON QUE CHOIX VAUT
1 : ECRIRE('Résultat = ', A + B) ;
2 : ECRIRE('Résultat = ', A - B) ;
3 : ECRIRE('Résultat = ', A * B) ;
SINON ECRIRE('Erreur : choix invalide.') ;
FIN SELON ;
FIN SI ;
FIN.
Exercice 4 – Somme des N premiers entiers (3 variantes)
PROGRAMME Somme_POUR ;
VARIABLE N, I, SOMME : ENTIER ;
DEBUT
ECRIRE('Entrez N ≥ 0 :') ; LIRE(N) ;
SI (N < 0) ALORS ECRIRE('Erreur : N négatif.') ;
SINON
SOMME ← 0 ;
POUR I VARIANT DE 1 A N FAIRE
SOMME ← SOMME + I ;
FAIT ;
ECRIRE('Somme = ', SOMME) ;
FIN SI ;
FIN.
PROGRAMME Somme_TANT_QUE ;
VARIABLE N, I, SOMME : ENTIER ;
DEBUT
ECRIRE('Entrez N ≥ 0 :') ; LIRE(N) ;
SI (N < 0) ALORS ECRIRE('Erreur : N négatif.') ;
SINON
SOMME ← 0 ; I ← 1 ;
TANT QUE (I ≤ N) FAIRE
SOMME ← SOMME + I ;
I ← I + 1 ;
FAIT ;
ECRIRE('Somme = ', SOMME) ;
FIN SI ;
FIN.
PROGRAMME Somme_REPETER ;
VARIABLE N, I, SOMME : ENTIER ;
DEBUT
ECRIRE('Entrez N ≥ 0 :') ; LIRE(N) ;
SI (N < 0) ALORS ECRIRE('Erreur : N négatif.') ;
SINON
SOMME ← 0 ; I ← 1 ;
REPETER
SOMME ← SOMME + I ;
I ← I + 1 ;
JUSQU’A (I > N) ;
ECRIRE('Somme = ', SOMME) ;
FIN SI ;
FIN.
Exercice 5 – Factorielle N (3 variantes)
PROGRAMME Facto_POUR ;
VARIABLE N, I : ENTIER ;
FACT : ENTIER ;
DEBUT
ECRIRE('Entrez N ≥ 0 :') ; LIRE(N) ;
SI (N < 0) ALORS ECRIRE('Erreur : N négatif.') ;
SINON
FACT ← 1 ;
POUR I VARIANT DE 2 A N FAIRE
FACT ← FACT * I ;
FAIT ;
ECRIRE('N! = ', FACT) ;
FIN SI ;
FIN.
PROGRAMME Facto_TANT_QUE ;
VARIABLE N, I : ENTIER ;
FACT : ENTIER ;
DEBUT
ECRIRE('Entrez N ≥ 0 :') ; LIRE(N) ;
SI (N < 0) ALORS ECRIRE('Erreur : N négatif.') ;
SINON
FACT ← 1 ; I ← 2 ;
TANT QUE (I ≤ N) FAIRE
FACT ← FACT * I ;
I ← I + 1 ;
FAIT ;
ECRIRE('N! = ', FACT) ;
FIN SI ;
FIN.
PROGRAMME Facto_REPETER ;
VARIABLE N, I : ENTIER ;
FACT : ENTIER ;
DEBUT
ECRIRE('Entrez N ≥ 0 :') ; LIRE(N) ;
SI (N < 0) ALORS ECRIRE('Erreur : N négatif.') ;
SINON
FACT ← 1 ; I ← 2 ;
REPETER
FACT ← FACT * I ;
I ← I + 1 ;
JUSQU’A (I > N) ;
ECRIRE('N! = ', FACT) ;
FIN SI ;
FIN.
DEVOIR 2 – Procédures sur tableaux de caractères
CONSTANTE NBMAX = 100 ;
TYPE TYPTAB = TABLEAU[1 .. NBMAX] DE CARACTERE ;
Question 1 – Procédure Remplissage
PROCEDURE Remplissage(VARIABLE DIM : ENTIER ; VARIABLE TAB : TYPTAB) ;
VARIABLE I : ENTIER ;
DEBUT {Remplissage}
REPETER
ECRIRE('Donnez DIM (1..', NBMAX, ') : ') ;
LIRE(DIM) ;
JUSQU’A ( (DIM ≥ 1) ET (DIM ≤ NBMAX) ) ;
POUR I VARIANT DE 1 A NBMAX FAIRE
TAB[I] ← ' ' ;
FAIT ;
ECRIRE('Saisir ', DIM, ' caractères (espaces autorisés) :') ;
POUR I VARIANT DE 1 A DIM FAIRE
LIRE(TAB[I]) ;
FAIT ;
FIN ; {Remplissage}
Question 2 – Procédure Affichage
PROCEDURE Affichage(TAB : TYPTAB ; DIM : ENTIER) ;
VARIABLE I : ENTIER ;
DEBUT {Affichage}
POUR I VARIANT DE 1 A DIM FAIRE
ECRIRE(TAB[I]) ;
FAIT ;
ECRIRE() ; {retour à la ligne}
FIN ; {Affichage}
Question 3 – Procédure Palindrome (sans espaces)
PROCEDURE Palindrome(TAB : TYPTAB ; DIM : ENTIER) ;
TYPE TYPTAB2 = TABLEAU[1 .. NBMAX] DE CARACTERE ;
VARIABLE BIS : TYPTAB2 ;
I, J, K : ENTIER ;
PAL : BOOLEEN ;
DEBUT {Palindrome}
{Copier sans espaces -> BIS[1..K]}
K ← 0 ;
POUR I VARIANT DE 1 A DIM FAIRE
SI (TAB[I] ≠ ' ') ALORS
K ← K + 1 ;
BIS[K] ← TAB[I] ;
FIN SI ;
FAIT ;
{Test miroir}
PAL ← VRAI ;
I ← 1 ; J ← K ;
TANT QUE (I < J) ET (PAL) FAIRE
SI (BIS[I] ≠ BIS[J]) ALORS
PAL ← FAUX
SINON
I ← I + 1 ;
J ← J - 1 ;
FIN SI ;
FAIT ;
SI (PAL) ALORS
ECRIRE('La phrase est un palindrome.')
SINON
ECRIRE('La phrase n''est pas un palindrome.') ;
FIN SI ;
FIN ; {Palindrome}
Question 4 – Procédure Inversion (in-place)
PROCEDURE Inversion(VARIABLE TAB : TYPTAB ; DIM : ENTIER) ;
VARIABLE I : ENTIER ;
TEMP : CARACTERE ;
DEBUT {Inversion}
POUR I VARIANT DE 1 A (DIM DIV 2) FAIRE
TEMP ← TAB[I] ;
TAB[I] ← TAB[DIM - I + 1] ;
TAB[DIM - I + 1] ← TEMP ;
FAIT ;
FIN ; {Inversion}
Question 5 – Procédure Comptage (nombre de mots)
PROCEDURE Comptage(TAB : TYPTAB ; DIM : ENTIER ; VARIABLE NBMOTS : ENTIER) ;
VARIABLE I : ENTIER ;
DEBUT {Comptage}
NBMOTS ← 0 ;
POUR I VARIANT DE 1 A DIM FAIRE
SI (TAB[I] ≠ ' ') ET ( (I = 1) OU (TAB[I-1] = ' ') ) ALORS
NBMOTS ← NBMOTS + 1 ;
FIN SI ;
FAIT ;
FIN ; {Comptage}
Question 6 – Procédure Recherche (pointeur sur le N-ième mot)
PROCEDURE Recherche(TAB : TYPTAB ; DIM : ENTIER ; N : ENTIER ; VARIABLE POINTEUR : ENTIER) ;
VARIABLE I, COMPTE : ENTIER ;
DEBUT {Recherche}
POINTEUR ← 0 ;
COMPTE ← 0 ;
I ← 1 ;
TANT QUE (I ≤ DIM) FAIRE
{Sauter les espaces}
TANT QUE (I ≤ DIM) ET (TAB[I] = ' ') FAIRE
I ← I + 1 ;
FAIT ;
SI (I ≤ DIM) ET (TAB[I] ≠ ' ') ALORS
COMPTE ← COMPTE + 1 ;
SI (COMPTE = N) ALORS
POINTEUR ← I ;
I ← DIM + 1 ; {pour sortir}
SINON
{Avancer jusqu'à la fin du mot}
TANT QUE (I ≤ DIM) ET (TAB[I] ≠ ' ') FAIRE
I ← I + 1 ;
FAIT ;
FIN SI ;
FIN SI ;
FAIT ;
FIN ; {Recherche}