Liste circulaire avec tête
Résolu
bornin90s
Messages postés
52
Statut
Membre
-
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
Bonjpour les amis, est ce que vous pouvez m'aidez svp et merci d'avance. Alors je n'avais pas le cours et une amie me l' a donné et il y a un exo avec la solution et où je pense qu'il y a une erreur. Donc j'ai besoin d 'un autre avis . Je vais y mettre une ligne de commentaire.
L'enoncé de l'exercice:
Soit une liste bidirectionnelle de compte, écrire un module qui transfert dans une LCT tous les comptes débiteurs. Un compte est caractérisé par son numéro, son propriétaire, son type, son sens (débiteur ou créditeur) et son solde.
Et la solution :
L'enoncé de l'exercice:
Soit une liste bidirectionnelle de compte, écrire un module qui transfert dans une LCT tous les comptes débiteurs. Un compte est caractérisé par son numéro, son propriétaire, son type, son sens (débiteur ou créditeur) et son solde.
Et la solution :
Type compte = Structure
DEBUT
Num : entier
Prop, type : chaine
Sens : "CR", "DB"
Solde : entier
FIN
Type LBi = ↑structure
DEBUT
Info : compte
Prec, suiv :LBi
FIN
Type LCT = ↑structure
DEBUT
Info : compte
Suiv :LCT
FIN :
Var Teteb, queueb : LBi
Var TeteLct : Lct
Procedure creationLct (Donnee Teteb, queueb : LBi Resultat TeteLct : Lct)
Var p : LBi
Var pp, pc : Lct
DEBUT
TeteLct ← Nil
P← Teteb
Tantque (p !=Nil) Faire
Si (p↑.info.sens = "DB") Faire
Allouer (pc)
Pc↑info←p↑.info
Si (teteLct = Nil) alors
teteLct ←P ' Là je trouve qu elle aurait du mettre teteLct ←Pc Qu'est ce que vous en pensez ?
' et y mettre également pp ←Pc
sinon
pp↑.suiv←pc
FinSi
Pp←pc
Pc↑.suiv←TeteLct
FinSi
P←P↑.suiv
FinTantque
FIN
A voir également:
- Liste circulaire avec tête
- Liste déroulante excel - Guide
- Liste code ascii - Guide
- Liste déroulante en cascade - Guide
- Site dangereux liste - Guide
- Voir liste d'amis facebook - Guide
2 réponses
Bonjour,
Ce code n'est pas clair du tout et le mauvais nommage des variables y est pour beaucoup.
Morceau choisi :
Comment s'y retrouver avec tous ces p, pp, pc... il faut utiliser des noms parlants pour savoir ce que l'on manipule.
Du coup
Remarque : c'est quoi une LCT ?
Parce que quand je vois ce genre
Pourquoi la copie d'une donnée d'une liste bidirectionnelle vers une "LCT" dépendrait de la valeur du compte ?
Améliorations pour le programme : il faut découper davantage le code, ne pas tout faire en une seule procédure et éviter le mélange technique/business. La manipulation de pointeurs devrait être plus atomique.
Exemple : une procédure dédiée à l'ajout d'une donnée dans la liste.
Ce code n'est pas clair du tout et le mauvais nommage des variables y est pour beaucoup.
Morceau choisi :
sinon
pp↑.suiv←pc
FinSi
Pp←pc
Pc↑.suiv←TeteLct
FinSi
P←P↑.suiv
Comment s'y retrouver avec tous ces p, pp, pc... il faut utiliser des noms parlants pour savoir ce que l'on manipule.
Du coup
teteLct ←Pou
teteLct ←Pc... à moins d'aller décortiquer le code ligne par ligne pour savoir qui fait quoi, ça va être très compliqué de trancher.
Remarque : c'est quoi une LCT ?
Parce que quand je vois ce genre
Si (p↑.info.sens = "DB") Faireje me demande ce que ça vient faire là.
Pourquoi la copie d'une donnée d'une liste bidirectionnelle vers une "LCT" dépendrait de la valeur du compte ?
Améliorations pour le programme : il faut découper davantage le code, ne pas tout faire en une seule procédure et éviter le mélange technique/business. La manipulation de pointeurs devrait être plus atomique.
Exemple : une procédure dédiée à l'ajout d'une donnée dans la liste.
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour, si on ne tient pas compte de la casse dans les noms de variables (Pc est identique à pc), je suis d'accord avec la première partie de ton commentaire.
Je ne suis pas d'accord avec la deuxième partie: cela doit être fait, et c'est fait juste après FINSI.
Je ne suis pas d'accord avec la deuxième partie: cela doit être fait, et c'est fait juste après FINSI.
pp joue le role de marquage et de chainage. pc permet d'ajouter un element dans la liste . et p est un pointeur de la Lbi ( liste bidirectionnelle)