{*************************************************************

               Le CyberZo‹de Qui Fr‚tille

  http://www.multimania.com/cyberzoide/info/turbo/turbo.htm
               cyberzoide@multimania.com

***************************************************************}


program tp2;

uses crt;

type tableau=array[1..1000] of integer;

procedure abandon(var reponse:char);
begin
clrscr;
writeln('[A] - Abandon');
write('Voulez-vous vraiment quitter ce programme [O/N] ? ');
readln(reponse);
if upcase(reponse)='O' then
begin
writeln('Programme termin‚.');
writeln;
writeln('CopyRights Hugo ETIEVANT.');
writeln('E-mail: cyberzoide@multimania.com');
writeln('URL: http://www.multimania.com/cyberzoide/');
reponse:='A';
end;
end;

procedure menu(var reponse_a:char);
begin
repeat
clrscr;
writeln('[A] - Abandon');
writeln('[B] - Cr‚ation du tableau');
writeln('[C] - Affichage du tableau');
writeln('[D] - Modification d''un ‚l‚ment du tableau');
writeln('[E] - Ajout d''un ‚l‚ment … la fin du tableau');
writeln('[F] - Suppression d''un ‚l‚ment du tableau');
writeln('[G] - Insertion d''un ‚l‚ment dans le tableau');
writeln('[H] - Recherche du plus petit ‚l‚ment dans le tableau');
writeln('[I] - Recherche du plus grand ‚l‚ment dans le tableau');
writeln;
write('Entrez votre choix au clavier : ');
readln(reponse_a);
reponse_a:=upcase(reponse_a);
until (reponse_a>='A') and (reponse_a<='I'); {ou: "until reponse IN ['A'..'I'];"}
end;

procedure creer(var tab_b:tableau; var n_b:integer);
var i,x:integer;
begin
clrscr;
writeln('[B] - CREATION DU TABLEAU');
      repeat
      write('Entrez le nombre N [1,1000] d''entiers … stocker : ');
      readln(n_b);
      until (n_b>0) and (n_b<=1000);
for i:=1 to n_b do
    begin
         repeat
         x:=random(1000);
         until x>=100;
    tab_b[i]:=x;
    end;
writeln('Cr‚ation termin‚e, tapez sur ENTREE pour retourner au menu.');
readln;
end;

procedure afficher(tab_c:tableau; n_c:integer);
var i:integer;
begin
clrscr;
writeln('[C] - AFFICHAGE DU TABLEAU');
if n_c>=1 then
begin
for i:=1 to n_c do
    begin
    writeln('Case nø',i,' = ',tab_c[i]);
    if (i mod 20)=0 then
       begin
       writeln('Appuyez sur une touche pour continuer...');
       readln;
       clrscr;
       end;
    end;
writeln('Affichage termin‚, tapez sur ENTREE pour retourner au menu.');
end
else writeln('Aucun ‚l‚ment dans le tableau.');
readln;
end;

procedure modifier(var tab_d:tableau; n_d:integer);
var rang_d,valeur_d:integer;
begin
clrscr;
writeln('[D] - MODIFICATION D''UN ELEMENT DU TABLEAU');
if n_d>=1 then
begin
      repeat
      write('Entrez le rang [1,',n_d,'] de l''‚l‚ment … modifier : ');
      readln(rang_d);
      until (rang_d>0) and (rang_d<=n_d);
write('Entrez la nouvelle valeur de l''‚l‚ment : ');
readln(valeur_d);
tab_d[rang_d]:=valeur_d;
writeln('Modification termin‚e, tapez sur ENTREE pour retourner au menu.');
end
else writeln('Aucun ‚l‚ment dans le tableau.');
readln;
end;

procedure ajouter(var tab_e:tableau; var n_e:integer);
var valeur_e:integer;
begin
clrscr;
writeln('[E] - AJOUT D''UN ELEMENT A LA FIN DU TABLEAU');
if n_e<1000 then
begin
write('Entrez la valeur de l''‚l‚ment … ajouter : ');
readln(valeur_e);
n_e:=n_e+1;
tab_e[n_e]:=valeur_e;
writeln('Ajout termin‚, tapez sur ENTREE pour retourner au menu.');
end
else writeln('Tableau rempli … raz bord ! Rajout impossible.');
readln;
end;

procedure supprimer(var tab_f:tableau; var n_f:integer);
var i,rang_f:integer;
begin
clrscr;
writeln('[F] - SUPPRESSION D''UN ELEMENT DU TABLEAU');
if n_f>=1 then
begin
      repeat
      write('Entrez le rang [1,',n_f,'] de l''‚l‚ment … supprimer : ');
      readln(rang_f);
      until (rang_f>0) and (rang_f<=n_f);
for i:=rang_f to n_f do tab_f[i]:=tab_f[i+1];
n_f:=n_f-1; {ou encore Dec(n_f);}
writeln('Suppression termin‚e, tapez sur ENTREE pour retourner au menu.');
end
else
writeln('Aucun ‚l‚ment dans le tableau.');
readln;
end;

procedure inserer(var tab_g:tableau; var n_g:integer);
var i,rang_g,valeur_g:integer;
begin
clrscr;
writeln('[G] - INSERTION D''UN ELEMENT DANS LE TABLEAU');
if n_g<1000 then
begin
if n_g>=1 then
begin
      repeat
      write('Entrez le rang [1,',n_g,'] de l''‚l‚ment … ins‚rer : ');
      readln(rang_g);
      until (rang_g>0) and (rang_g<=n_g);
write('Entrez la valeur de cet ‚l‚ment : ');
readln(valeur_g);
for i:=(n_g+1) downto (rang_g+1) do tab_g[i]:=tab_g[i-1];
tab_g[rang_g]:=valeur_g;
n_g:=n_g+1;
writeln('Insertion termin‚e, tapez sur ENTREE pour retourner au menu.');
end
else writeln('Aucun ‚l‚ment dans le tableau.');
end
else writeln('Tableau rempli … raz bord ! Insertion impossible.');
readln;
end;

procedure mini(tab_h:tableau; n_h:integer);
var i,rang_h,valeur_h:integer;
begin
clrscr;
writeln('[H] - RECHERCHE DU PLUS PETIT ELEMENT DU TABLEAU');
if n_h>=1 then
begin
valeur_h:=tab_h[1];
for i:=1 to n_h do
    begin
    if tab_h[i]<=valeur_h then
       begin
       valeur_h:=tab_h[i];
       rang_h:=i;
       end;
    end;
writeln('R‚sultat de la recherche :');
writeln('                -   rang : ',rang_h);
writeln('                - valeur : ',valeur_h);
writeln('Recherche termin‚e, tapez sur ENTREE pour retourner au menu.');
end
else writeln('Aucun ‚l‚ment dans le tableau.');
readln;
end;

procedure maxi(tab_i:tableau; n_i:integer);
var i,rang_i,valeur_i:integer;
begin
clrscr;
writeln('[I] - RECHERCHE DU PLUS GRAND ELEMENT DU TABLEAU');
if n_i>=1 then
begin
valeur_i:=tab_i[1];
for i:=1 to n_i do
    begin
    if tab_i[i]>=valeur_i then
       begin
       valeur_i:=tab_i[i];
       rang_i:=i;
       end;
    end;
writeln('R‚sultat de la recherche :');
writeln('                -   rang : ',rang_i);
writeln('                - valeur : ',valeur_i);
writeln('Recherche termin‚e, tapez sur ENTREE pour retourner au menu.');
end
else writeln('Aucun ‚l‚ment dans le tableau.');
readln;
end;


var tab:tableau;
    i,n:integer;
    reponse:char;

BEGIN
for i:=1 to 1000 do tab[i]:=0;
randomize;
repeat
menu(reponse);
case reponse of
'A':abandon(reponse);
'B':creer(tab,n);
'C':afficher(tab,n);
'D':modifier(tab,n);
'E':ajouter(tab,n);
'F':supprimer(tab,n);
'G':inserer(tab,n);
'H':mini(tab,n);
'I':maxi(tab,n);
end;
until reponse='A';
END.