Pile: exo realisation de la primitive Empiler
Résolu
Bonjour je suis en train de relire mon cours mais je me demande si je n'ai pas mal écrit la solution de l'exo d'application .
Voici l'énoncé et la solution et en commentaire ce que je crois avoir oulié de noter. Qu'en pensez-vous? Merci pour votre aide
Enoncé:
1/ Soit une pile d’entier réaliser avec les entiers. Ecrire un module qui réalise la primitive Empiler()
2/ Soit une pile d’entier réaliser avec les entiers. Ecrire un module qui réalise la primitive Pilepleine()
Correction
Correction Exo 2
Voici l'énoncé et la solution et en commentaire ce que je crois avoir oulié de noter. Qu'en pensez-vous? Merci pour votre aide
Enoncé:
1/ Soit une pile d’entier réaliser avec les entiers. Ecrire un module qui réalise la primitive Empiler()
2/ Soit une pile d’entier réaliser avec les entiers. Ecrire un module qui réalise la primitive Pilepleine()
Correction
Type pile = ↑structure DEBUT Info :entier Suiv :pile FIN Var sommet :pile Procedure Empiler(Donne val :entier D/R sommet :pile) /** * Ici devait-on pas déclarer p comme suit *var p = pile *? */ DEBUT Si (pilePleine(sommet)=vrai) alors Ecrire « Impossible d’ajouter » Sinon Allouer(p) P↑.info←val P↑.suiv ←NIL Si(pileVide(sommet)=vrai)alors Sommet ←p Sinon P.↑suiv ← sommet Sommet ← p FINSI FINSI FIN
Correction Exo 2
Type pile = ↑structure DEBUT Info :entier Suiv :pile FIN Var sommet :pile Procedure pilePleine(Donne sommet :pile) :booleen /** * Ici devait-on pas déclarer p comme suit *var p = pile *? */ DEBUT Allouer(p) SI(p=NIL) alors Retourner(vrai) Sinon Liberer(p)/*Pourquoi doit-on liberer p? */ Retourner(faux) FINSI FIN
1 réponse
-
ModérateurBonjour,
"Ici devait-on pas déclarer p comme suit var p = pile "
Je pense que si, pour les deux cas.
"Pourquoi doit-on liberer p?"
Le principe de pilePleine est d'essayer d'allouer une nouvelle donnée (pour montrer que c'est possible) mais s'il a réussi il faut ensuite la libérer pour ne pas prendre inutilement la place et avoir à la fin de la procédure la même pile qu'au début.