next up previous
Next: Les pointeurs et les Up: Quelques applications Previous: Conversion décimale-binaire

Une structure de données : la pile

  Le but est d'écrire un programme pascal qui effectue le traitement suivant : l'utilisateur entre une succession de nombres entiers positifs et rentre le nombre 0 pour arrêter la saisie. Le programme affiche alors tous les nombres pairs qui ont été rentrés puis tous les nombres impairs qui ont été rentrés par l'utilisateur.

Par exemple si l'utilisateur entre la succession de nombres suivante :
2, 7, 11, 4 , 6, 0,
alors le programme affichera à l'écran :
6 4 2
11 7 (l'ordre d'entrée n'est pas important).

Dans ce but nous allons définir un type pile au moyen de tableaux.

const nmax=10;
type 
     base = integer;
     pile = record espace : array[0..nmax] of base;
                   index : integer;
     end;

var pairs, impairs : pile;
    x : integer;

procedure viderpile(var p:pile);
   begin
        p.index:=0;
   end;

function pilevide(p:pile):boolean;
   begin
        pilevide:=(p.index = 0);
end;


procedure empiler(var p: pile; e : base);
   begin
     if (p.index<nmax) then
        begin
             p.index:=p.index+1;
             p.espace[p.index]:=e;
        end
     else 
         writeln('pile pleine');
   end;

procedure depiler (var p: pile; var e :base);
   begin
      if not(pilevide(p)) then
        begin
             e:=p.espace[p.index];
             p.index:=p.index-1;
        end
      else writeln('pile vide');
   end;

begin
    viderpile(pairs);
    viderpile(impairs);
    writeln('Entrez des nombres entiers, pour arreter entrez 0');
    readln(x);
    while (x<>0) do
      begin
          if (x mod 2 = 0) then empiler(pairs,x)
                           else empiler(impairs,x);
          readln(x);
      end;

    writeln('Les nombres pairs que vous avez entres sont ');
    while not(pilevide(pairs)) do
          begin
                depiler(pairs, x);
                writeln(x);
          end;

    writeln('Les nombres impairs que vous avez entres sont ');
    while not(pilevide(impairs)) do
          begin
                depiler(impairs, x);
                writeln(x);
          end;
          
end.


Frederic Mesnard
mardi, 15 décembre 1998, 16:13:24 GMT+4