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