Turbo !

par Turbo Pascale

program GestionDePile;

( 1. Définition des types )
type
TPileElement = Record
Valeur : Integer;
Suivant : ^TPileElement; ( Pointeur vers l'élément suivant dans la pile )
end;

TPilePointeur = ^TPileElement; ( Pointeur vers le sommet (TOP) de la pile )

( 2. Variable pour suivre le sommet de la pile )
var
Sommet : TPilePointeur;
ResultatPop : Integer;

( ----------------------------------- )
( Procédure : Ajouter un élément (PUSH) )
( ----------------------------------- )
procedure Push(ValeurAAjouter: Integer);
var
NouveauElement: TPilePointeur;
begin
( Allouer de la mémoire pour le nouvel élément )
New(NouveauElement);

( Remplir les champs du nouvel élément )
NouveauElement^.Valeur := ValeurAAjouter;
NouveauElement^.Suivant := Sommet; ( Le nouvel élément pointe vers l'ancien sommet )

( Mettre à jour le sommet de la pile )
Sommet := NouveauElement;
writeln('PUSH: Ajout de ', ValeurAAjouter);
end;

( ----------------------------------- )
( Fonction : Retirer un élément (POP) )
( ----------------------------------- )
function Pop: Integer;
var
ElementARetirer: TPilePointeur;
begin
if Sommet = nil then
begin
writeln('Erreur: La pile est vide.');
Pop := -1; ( Valeur d'erreur conventionnelle )
end
else
begin
ElementARetirer := Sommet; ( Sauvegarder l'élément à retirer )
Sommet := Sommet^.Suivant; ( Le sommet devient l'élément suivant )

Pop := ElementARetirer^.Valeur; (* Récupérer la valeur à retourner *)
Dispose(ElementARetirer); (* Libérer la mémoire de l'ancien sommet *)

end;
end;

( ----------------------------------- )
( Programme principal )
( ----------------------------------- )
begin
Sommet := nil; ( Initialiser la pile comme vide )

writeln('--- Démarrage de la gestion de la Pile ---');

( Opérations PUSH )
Push(10);
Push(20);
Push(30);

writeln;

( Opérations POP (LIFO - Last-In, First-Out) )
ResultatPop := Pop;
writeln('POP: Retiré = ', ResultatPop); ( Doit être 30 )

ResultatPop := Pop;
writeln('POP: Retiré = ', ResultatPop); ( Doit être 20 )

Push(5); ( Ajout d'un nouvel élément )

writeln;

ResultatPop := Pop;
writeln('POP: Retiré = ', ResultatPop); ( Doit être 5 )

ResultatPop := Pop;
writeln('POP: Retiré = ', ResultatPop); ( Doit être 10 )

writeln;

( Tentative de POP sur une pile vide )
Pop;

readln;
end.