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.