Qu'en pensez vous??
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
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
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
Bonne chance
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.
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.
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.
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.
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question