program tableaux;

{ Definition du nombre de cases de nos tableaux }

const nombre_cases = 10;


{ Definition du type tableau }

type tableau = array[1..nombre_cases] of integer;


{ Procedure d'affichage d'un tableau }

procedure AfficheTableau (t : tableau);

var i : integer;

begin

  writeln;
  writeln('  *************  Resultats  *************');
  writeln;
  writeln;

  for i:=1 to nombre_cases do begin

     write('  Etudiant numero ',i:2);
     write('       ');
     writeln(t[i]:2);

  end;

  writeln;

end;




{ Calcul et affichage de la moyenne des valeurs d'un tableau }

procedure AfficheMoyenne (t : tableau);
var i : integer;
    somme : integer;
begin

  somme := 0;

  for i:=1 to nombre_cases do begin
     somme := somme + t[i];
  end;

  writeln;
  writeln('  Moyenne        : ',somme/nombre_cases:5:2);

end;



{ Recherche et affichage de la valeur minimale d'un tableau }

procedure AfficheMinimum (t : tableau);

var i       : integer;
    minimum : integer;
    dernier : integer;

begin

  minimum := t[1];
  dernier := 1;

  for i:=1 to nombre_cases do begin
    if (t[i] < minimum) then begin
      minimum := t[i];
      dernier := i;
    end;
  end;

  writeln;
  write('  Note minimale  : ',minimum:2);
  writeln(' (etudiant ',dernier,')');

end;


{ Recherche et affichage de la valeur maximale d'un tableau }

procedure AfficheMaximum (t : tableau);

var i       : integer;
    maximum : integer;
    champion : integer;

begin

  maximum := t[1];
  champion := 1;

  for i:=1 to nombre_cases do begin
    if (t[i] > maximum) then begin
      maximum := t[i];
      champion := i;
    end;
  end;

  writeln;
  write('  Note maximale  : ',maximum:2);
  writeln(' (etudiant ',champion,')');

end;


{ Calcul et affichage du nombre de valeurs superieures ou egale a 10 }

procedure AfficheNbAvecMoyenne (t : tableau);

var i   : integer;
    cpt : integer;

begin

  cpt := 0;

  for i:=1 to nombre_cases do begin
    if (t[i] >=10) then begin
      cpt := cpt+1;
    end;
  end;

  writeln;
  write('  Ont la moyenne : ',cpt:2);
  writeln(' etudiants');

end;



{ Teste si une valeur existe dans un tableau }

procedure TestExistence (t : tableau ; cible : integer);

var i   : integer;

begin

  i := 1;

  while (i <= nombre_cases) and (t[i]<>cible) do begin
    i := i+1;
  end;

  writeln;
  write('  Note ',cible:2,' donnee : ');
  if (i>nombre_cases) then writeln('non')
  else writeln('oui (etudiant ',i,')');

end;


{ Declaration d'une variable de type tableau }

var i : integer;
    notes_2003 : tableau;

{ Programme principal }

begin

  { Definition des notes (aleatoirement) }

  randomize;

  for i:=1 to nombre_cases do
    notes_2003[i]  := random(21);


  { Utilisation des procedures }

  AfficheTableau(notes_2003);
  AfficheMoyenne(notes_2003);
  AfficheMinimum(notes_2003);
  AfficheMaximum(notes_2003);
  AfficheNbAvecMoyenne(notes_2003);
  TestExistence (notes_2003,0);
  TestExistence (notes_2003,20);

  { Fin du programme }

  writeln;
  writeln;
  writeln;

end.




