Qu'en pensez vous??

baradiop Messages postés 5 Statut Membre -  
mamiemando Messages postés 34245 Date d'inscription   Statut Modérateur Dernière intervention   -
EXERCICE I interclassement de Piles

Soient deux piles P1 et P2 réalisées sous la forme de tableaux et contenant des entiers. Les piles P1 et P2 sont quelconques donc non triées.
Ecrire un sous programme qui effectue l’interclassement des piles P1 et P2 dans une pile P3, c'est-à-dire que la pile P3 doit contenir une valeur de P1 suivie d’une valeur de P2

bon voici ce que j'ai fait qu'en pensez vous?

Type Pile1 = tableau [1..N1] : entier
Pile2 = tableau [1..N2] : entier
Pile3 = tableau [1..N3] : entier

Procédure interclassement (données P1 : pile1, P2 : pile2, N1, N2 : entier. Résultats : P3 : Pile3, N3 : entier)

Var: arret : booléen
Val : entier

DEBUT
Arrêt = faux
N3= N1+N2
Tantque (arret = faux) faire

(1)Si Pilevide (P1) = faux
Alors
Dépiler (P1, val)
Empiler (P3, val)
(1)Fin si

(2)Si Pilevide (P2)= faux
Alors
Dépiler (P2, val)
Empiler (P3, val)
(2)Fin si

(3)Si (Pilevide (P1) = vrai) et (Pilevide (P2) = vrai)
Alors
ARRET = vrai
(3)Fin si
Fin TANTQUE
Fin

5 réponses

mamiemando Messages postés 34245 Date d'inscription   Statut Modérateur Dernière intervention   7 899
 
J'en pense que ton programme boucle à l'infini si les deux piles sont de tailles différentes. C'est normal que la pile p3 ne soit pas triée à la fin ? Le reste est ok.

Bonne chance
0
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

bon, vu que ce sont des tableaux ce n'est pas evident vu qu'on peux acceder par indice.
pourquoi pas ne pas boucler de l'IndiceMax vers 0 pour chaque tableau
et on auras 3 cas

NbrElementsPile1 = NbrElementsPile2
NbrElementsPile1 < NbrElementsPile2
NbrElementsPile1 > NbrElementsPile2

Si le nombre d'éléments est égal alors tant mieux.
0
mamiemando Messages postés 34245 Date d'inscription   Statut Modérateur Dernière intervention   7 899
 
Il est précisé dans le tableau que ce sont des piles, il n'a donc pas le droit d'utiliser les indices du tableau sous-jacent. Il peut utiliser des tableaux pour implémenter sa pile mais en au aucun cas utiliser les indices du tableau.

A priori une pile à juste les opérateurs size(), push(), et pop(). Il faut voir les piles comme une pile d'assiette, on ne peut prendre que celle du dessus et compter le nombre d'assiette dans la pile. Dans son implémentation, il prend simplement alternativement l'assiette du dessus tantôt dans la pile P1, tantôt dans la pile P2 pour construire une nouvelle pile P3.

Si les deux piles sont de tailles différents il suffit de dépiler le surplus dans la pile P3 à la fin de la boucle while. Il faut juste qu'il interrompe sa boucle dès que l'une des piles est vide, et à l'issue de cette boucle, qu'il tranfère les assiette qui n'ont pas encore été transférées dans P3.
0
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut Miss,

il n'a donc pas le droit d'utiliser les indices du tableau sous-jacent. Il peut utiliser des tableaux pour implémenter sa pile mais en au aucun cas utiliser les indices du tableau.

Je l'ai très bien compris :-) Tu as raison.
Et en ce qui concerne les opérations sur LIFO et FIFO, pas de problèmes pour moi.
J'aurais plutôt choisi d'utiliser des listes pour mieux exploiter les piles, vu que le tableau mets déjà à la disposition les indices, mais bon chacun sa sauce :-))

Toutefois il doit prendre en compte la taille des piles.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 34245 Date d'inscription   Statut Modérateur Dernière intervention   7 899
 
Yep mais liste ou tableau c'est juste de l'implem, en soit on s'en fout. L'avantage des listes c'est qu'on évite les stacks overflow si N1+N2>N3.
0