Corrigé C6. Enoncé
Exercice 1 : Moyenne
Algorithme :
ALGORITHME Moyenne
VAR Quantité, Moy : REEL
I, Nbre, N
: ENTIER
Mesure
: TABLEAU(1..N) DE REEL
DEBUT
LIRE(Mesure) { Lecture globale du tableau }
LIRE(Quantité, N)
Moy := 0
POUR I=1, N :
Moy := Moy + Mesure(I)
FINPOUR
Moy := Moy / N
Nbre := 0
POUR I=1, N :
SI Absolu( Moy -
Mesure(I) ) > Quantité
Nbre := Nbre + 1
FSI
FINPOUR
ECRIRE(Moy, Nbre)
FIN
Programme Pascal correspondant :
PROGRAM Moyenne ;
VAR Quantité, Moy : REAL;
I, Nbre, N
: INTEGER;
Mesure
: ARRAY[1..N] OF REAL ;
BEGIN
READ(Quantité, N);
{Lecture du tableau des mesures }
FOR I :=1 TO N DO READ( Mesure[I] ) ;
Moy := 0;
FOR I:=1 TO N DO Moy := Moy + Mesure[I] ;
Moy := Moy / N ;
Nbre := 0;
FOR I:= 1 TO N DO
IF ABS( Moy - Mesure[I]
) > Quantité
THEN
Nbre := Nbre + 1 ;
WRITE(Moy, Nbre)
END.
Exercice 2 : Reconnaissance de données arithmétiques
Dans l'algorithme qui suit, Mot désigne une variable chaîne de caractères, W et D des
variables entières. W désigne le nombre total de caractères de la constante et D le
nombre de chiffres après le point décimal.
On utilise le module Chiffre défini comme suit :
Chiffre (C) = vrai si C est un chiffre, faux
sinon
ALGORITHME Constante_PL1
TYPE T = STRUCTURE
Mot : CAR
W, D : ENTIER
FIN
VAR C, Mot : CAR
I, K, N, W, D : ENTIER
Tab : TABLEAU(1..N) DE T
DEBUT
LIRE(N)
LIRE(C)
I := 0
TANTQUE C <> '# '
Mot := '' ; W := 0; D
:= 0
{Parcours des blancs}
TANTQUE C= ' ' OU C=','
: LIRE(C) FINTANQUE
{Reconnaissance de la
partie entière}
TANTQUE Chiffre(C)
W := W + 1; Mot := Mot + C ; LIRE(C)
FINTANTQUE
{Partie décimale si
elle existe}
SI C = '.' :
W := W + 1 ; Mot := Mot + C ; LIRE(C)
TANTQUE Chiffre(C) :
W := W + 1 ; D := D + 1;
Mot := Mot + C; LIRE(C)
FINTANTQUE
FSI
{En cas d'erreur }
SI C # ' ' ET C # ','
ET C # '# ' :
ECRIRE( ' Constante erronée ')
TANTQUE C # ' ' ET C # ',' ET C # '# ' :
Mot := Mot + C ; LIRE(C)
FINTANQUE
SINON
SI W <> 0
I := I + 1
Tab(I).Mot := Mot
Tab(I).W := W
Tab(I).D := D
FSI
FINTANTQUE
ECRIRE(Tab)
FIN
Exercice 3 : Tri par interclassement
ALGORITHME Tri
VAR
Taille, Bi1, Bi2, Bs1, Bs2, N , K : ENTIER
V, V1 : TABLEAU[1..N] DE ENTIER
Aig : BOOLEEN
DEBUT
Taille := 1
Aig := Vrai
TANTQUE Taille < N :
Bi1:=1{borne
inférieure premier sous-vecteur}
TANTQUE Bi1 + Taille
<= N :
{ Indices restants}
Bi2 := Bi1 + Taille
Bs1 := Bi2 - 1
SI Bi2 + Taille - 1 > N :
Bs2 := N
SINON
Bs2 := Bi2 + Taille - 1
FSI
SI Aig :
Interclasser(V, Bi1,Bs1,Bi2,Bs2, V1)
SINON
Interclasser(V1, Bi1,Bs1,Bi2,Bs2, V)
FSI
Bi1 := Bs2 + 1
FINTANTQUE
I := Bi1
TANTQUE K < N :
SI Aig :
V(K) := V1(K)
SINON
V(K) := V1(K)
FSI
K := K + 1
FINTANTQUE
Aig := NON Aig
Taille := Taille * 2
FINTANTQUE
SI Aig :
ECRIRE( V)
SINON
ECRIRE( V1)
FSI
FIN
Les paramètres du module interclasser (V, Bi1, bs1, Bi2, Bs2, V1) sont définis comme
suit :
V : le vecteur en entrée
Bi1 : borne inférieure du premier sous vecteur
Bs1 : borne supérieure du premier sous vecteur
Bi2 : borne inférieure du deuxième sous vecteur
Bs2 : borne supérieure du deuxième sous vecteur
V1 : le vecteur en sortie