Rangement d'une liste - Ada - Programmation
Marsh Posté le 11-06-2009 à 12:49:07
Pourquoi ne pas utiliser les conteneurs standard de Ada.Containers comme par exemple Ada.Containers.Ordered_Sets qui est triéée?
Bah je me doute que c'est dans un but pédagogique, alors ok.
Marsh Posté le 11-06-2009 à 13:51:07
Ton erreur viens du fait que ta procédure Ranger_Dans_Liste, ne parcours pas ta liste en profondeur, elle se limite à visiter le 1er ou le 2ème élement de ta liste. Il faut utiliser une boucle ou faire de ta procédure une procédure récursive.
A part cela, ta procédure Ranger_Dans_Liste fais trop usine-à-gaz, il y a plus simple. Tu as aussi la version procédure récursive, que je n'indique pas ici tellement elle est simple (c'est un cas d'école), je pense que tu pourras la faire facilement une fois que tu auras compris le principe de ma version ci-dessous.
Petite remarque: Comment aie-je pu écrire mon exemple ci-dessous? Simple l'idée est la même que la procédure Afficher_Liste.
Code :
|
Ce qui est beau ce que le nombre de comparaison est limité à la liste, nul besoin de tester la valeur de l'argument Ma_Valeur passé à la procédure Ranger_Dans_Liste. Mais j'avoue l'utilisation d'un type accès d'un accès (type Adr_Liste) est un peu limite, et propose donc une solution qui peut être pris pour de l'Ada bon marché et peut mal passer pour des puristes de l'Ada, car cette solution est plus inspirée du langage C ou du C++.
La meilleure solution est d'utiliser des objets et de convertir le type Liste en tagged record. La manipulation de la liste chainée gagnerai en simplicité du code et permettrait au code d'etre plus dans la philosophie Ada en évitant ce type Adr_Liste.
sinon une autre version tout aussi simple serait:
Code :
|
ou
Code :
|
Marsh Posté le 02-06-2009 à 19:47:43
Bonsoir,
C'est encore moi, avec une nouvelle fois un problème sur les listes. J'explique mon sujet. Je cherche à écrire un programme qui range des valeurs saisies par un utilisateur au fur et à mesure dans une liste chaînée. Les valeurs négatives sont rangées en début de liste, et les valeurs positives sont rangées en fin de liste; la valeur 0 n'est pas rangée dans la liste, la saisie se termine quand l'utilisateur rentre 0.
Par exemple:
Si l'utilisateur fournit successivement les valeurs 4, -5, 8, 2, -3, -9, 1, 0, on cherche à obtenir l'affichage suivant:
"La liste contient les valeurs suivantes: -9 -3 -5 4 8 2 1."
Pour l'instant, voici ce que j'ai fait (je n'ai pas encore fait la procédure de saisie, il faut d'abord que le reste fonctionne, c'est plus important à mon avis):
Pour une liste vide, pas de problèmes, ça fonctionne!
Dans le cas contraire, ça ne va plus du tout par contre: j'ai par exemple essayé de ranger une valeur négative (-2), dans une liste donnée: -3 -1 4, en vain. Voyez-vous où sont les problèmes? J'ai essayé de m'illustrer le problème, mais je ne parviens pas à voir ce qui ne va pas. Si vous avez des questions relatives à mon code, n'hésitez surtout pas! En espérant que vous pourrez me guider, merci d'avance!