Liste comme argument d'une procedure

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Liste comme argument d'une procedure

Message par hackotedelaplaque »

Bonjour,

Après un break, mon projet de la rubrique jeu est bientôt fini et l'IA est bien au rendez vous.

Une petite question cependant qui pourrait me faire optimiser mon code.

Peux-ton manipuler une liste au sein d'une procédure prenant une liste comme argument ?

Ex : procedure ma_fonction(*maliste.liste)
for each *maliste
...
next

selectelement(*maliste,5)
...
endprocedure

J'imagine que ça n'est pas possible ? L'argument étant l'élément courant de la liste et non la liste elle-même...

Mais dans le doute je vous pose la question.

Merci.
Dernière modification par hackotedelaplaque le mer. 23/mai/2007 21:22, modifié 2 fois.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Depuis la V4, c'est possible :

Code : Tout sélectionner

; Listes chaînées et tableaux en paramètres  
  ;
  ; Liste chaînée 
  ;
  ;

  NewList Test.Point()

  AddElement(Test())
  Test()\x = 1
  AddElement(Test())
  Test()\x = 2

  Procedure DebugList(c.l, ParametreListe.Point())

    AddElement(ParametreListe())
    ParametreListe()\x = 3

    ForEach ParametreListe()
      MessageRequester("Liste", Str(ParametreListe()\x))
    Next
 
  EndProcedure

  DebugList(10, Test())
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message par hackotedelaplaque »

Super merci !

Le problème venait de la structure maison de ma liste qui n'était pas spécifié.
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message par hackotedelaplaque »

J'ai marqué le topic en résolu un peu trop rapidement.

En effet on peut passer depuis la v4 une liste en argument.
Mais il y a une grande différence qui dans mon cas pose problème.

Avant la v4 j'utilisais la technique des pointeurs pour passer ma liste.
La différence ?
Si dans ma procédure j'ai la commande deleteelement(ma_liste()), l'élément courant de la liste devient automatiquement l'élément suivant !
Ce qui n'est pas le cas en passant un pointeur en argument.
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Il te suffit d'ajouter NextElement !!

Code : Tout sélectionner


NewList Test.POINT()
AddElement(Test())
Test()\x = 10
AddElement(Test())
Test()\x = 20

Procedure DebugList(c.l, ParametreListe.POINT())
  AddElement(ParametreListe())
  ParametreListe()\x = 35
  ForEach ParametreListe()
    MessageRequester("Liste", Str(ParametreListe()\x))
  Next
EndProcedure

Procedure DelElList(ParametreListe.POINT())
  FirstElement(ParametreListe())
  MessageRequester("Liste", Str(ParametreListe()\x))
  DeleteElement(ParametreListe())
  NextElement(ParametreListe())
  MessageRequester("Liste", Str(ParametreListe()\x))
EndProcedure

DebugList(10, Test())
DelElList(Test())
Denis

Bonne Jounée à tous
hackotedelaplaque
Messages : 121
Inscription : mer. 21/janv./2004 22:18

Message par hackotedelaplaque »

Nextelement non car je n'ai plus à travailler sur la liste après mon deleteelement().
Je dois juste sortir purement et simplement de la fonction. Ce n'est pas un gros travail.

Juste une dernière question sur le sujet : y'a t il des inconvénients à passer un pointeur en argument plutot que la liste en termes de performance ?
Répondre