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.