Série 1 : Sous-Programmes

Exercice 1

Soit l'algorithme suivant qui saisi les moyennes des élèves d'une classe, détermine et affiche la moyenne minimale, la moyenne maximale, la moyenne de la classe et le nombre d'élèves qui ont eu au dessus de la moyenne.

0. Début Exercice
1.  Répéter
        Ecrire("Donner le nombre d'élèves : ")
        Lire(n)
    Jusqu'à n dans [3..20]
2.  Pour i de 1 à n Faire
        Répéter
            Ecrire("Donner la note du ", i, "ème élève : ")
            Lire(t[i])
        Jusqu'à (t[i] ≥ 0) et (t[i] ≤ 20)
    Fin Pour
3.  m ⟵ CalcMoy(t, n)
4.  min ⟵ t[1]
    pour i de 2 à n Faire
        Si t[i] < min alors
            min ⟵ t[i]
        fin si
    fin pour
5.  max ⟵ CalcMax(t, n)
6.  nbe ⟵ 0
    Pour ide 1 à n Faire
        si t[i] ≥ m alors
            nbe ⟵ nbe + 1
        fin si
    fin pour
7.  Ecrire("La moyenne minimale est : ", min)
    Ecrire("La moyenne maximale est : ", max)
    Ecrire("La moyenne de la classe est : ", m)
    Ecrire("Le nombre d'élèves qui ont au dessus de la moyenne est : ", nbe)
8. Fin Exercice

Travail demandé

  1. Transformer l'étape (1) en une procédure Saisir.
  2. Transformer l'étape (2) en une procédure Remplir.
  3. Développer la fonction CalcMoy qui calcule la moyenne arithmétique des éléments du tableau.
  4. Transformer l'étape (4) en une fonction CalcMin.
  5. Développer la fonction CalcMax qui calcule la valeur maximale dans un tableau.
  6. Transformer l'étape (6) en une fonction NbreEleves qui calcule le nombre d'élèves qui ont obtenu une moyenne au dessus d'une valeur quelconque notée m.
  7. Réécrire le programme en utilisant les modules développés précédemment.

Exercice 2

Corriger les sous-programmes suivants :

{ N° 1 }
procedure permuter(a, b : integer);
begin
    aux := a; a := b; b := aux;
end;
{ N° 2 }
function PlusPetit(a, b : entier);
begin
    if a > b then PlusPetit := b;
             else PlusPetit := a;
end;
{ N° 3 }
procedure PlusGrand(a, b):integer;
begin
    sup := (a + b + abs(a - b)) div 2;
end;
{ N° 4 }
procedure RemplirParImpair(t, tp, ti : tab ; n, np, ni : entier);
begin
    np := 0; ni := 0;
    for i:=1 to n do
        if t[i] mod 2 = 0 then 
            np := np + 1;
            tp[np] := t[i];
        else
            ni := ni + 1;
            ti[ni] := t[i];
end;