Page 1 sur 3

AddElementTableau()

Publié : jeu. 16/mars/2017 10:45
par Micoute
Bonjour à tous, j'ai fait ce programme pour utiliser les tableaux à la manière des listes chainées, c'est à dire sans savoir à l'avance le nombre de dimensions désirées au final.

Il y a t'il une façon de l'optimiser ?

Je vous remercie de l'aide que vous allez m'apporter.

Code : Tout sélectionner

Global _Dim_ = 0

Procedure AddElementTableau(Array Tableau.s(1))
  _Dim_ = ArraySize(Tableau()) + 1
  ReDim Tableau(_Dim_)
EndProcedure

Global Dim MonTableau.s(0)
MonTableau(0) = "Micoute "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "aime "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "tous "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "les "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "forumeurs "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "des "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "forums "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "de "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "Fred "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "et "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "ils "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "lui "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "rendent "
AddElementTableau(MonTableau())
MonTableau(_Dim_) = "bien."

For i = 0 To ArraySize(MonTableau())
  Texte.s +  MonTableau(i)
Next i

Debug Texte

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 11:59
par Kwai chang caine
Je comprend l'interet de vouloir faire faire à une MAP le boulot d'une LIST, c'est à dire la classer par exemple :wink:
Mais là, si tu peux m'éclairer, je vois pas vraiment l'interet de vouloir faire d'un tableau une liste.
Surtout que ton tableau ne gerera toujours pas les insert et remove centraux ...
J'ai du louper quelque chose :oops:

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 12:05
par Zorro
Clair !
vouloir réinventer la roue peut etre ? :)

modéré par ar-s

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 12:13
par falsam
Je rejoins les propos précédents. Autant travailler dans des listes.

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 12:31
par Micoute
Je suis d'accord qu'il vaut mieux travailler avec les listes, mais j'aurais aimé travailler avec des tableaux parce ce qu'on peut adresser n'importe quelle donnée de ce même tableau

modéré par ar-s

Tant pis, c'était un beau rêve.

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 12:34
par falsam
on peut adresser n'importe quelle donnée de ce même tableau
Avec les listes aussi :wink:

J'aimerais bien voir un exemple pour illustrer ce que tu viens de dire.

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 13:32
par Ar-S
Une façon de simplifier ton code (tu divises les commandes par 2 tout de même)

Code : Tout sélectionner


Macro AddElemTab(T,madonnee)
; Ar-S
  Nbr = ArraySize(T()) +1
  ReDim T(Nbr)
  T(Nbr) = madonnee
EndMacro


Global Dim MonTableau.s(0)
MonTableau(0) = "Micoute "
AddElemTab(MonTableau, "aime ")
AddElemTab(MonTableau, "tous " )
AddElemTab(MonTableau, "les " )
AddElemTab(MonTableau, "forumeurs " )
; etc..

For i = 0 To ArraySize(MonTableau())
  Texte.s +  MonTableau(i)
Next i

Debug Texte

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 13:53
par Micoute
Voilà exactement ce que je voulais faire, mais je n'avais pas la bonne méthode et j'avais toujours une erreur de syntaxe que je ne comprenais pas.

@ falsam, je veux dire que je peux écrire Debug MonTableau(4) et je ne crois pas qu'on puisse mettre Debug MaListe(28)

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 14:06
par Kwai chang caine
Et bah si justement, c'est pourquoi je ne comprenais pas :wink:

Code : Tout sélectionner

Resultat = SelectElement(Liste(), Position)
Description :
Change l'élément courant par celui trouvé à la position spécifiée. 

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 14:08
par Marc56
Micoute a écrit :je ne crois pas qu'on puisse mettre Debug MaListe(28)
D'une certaine manière, si, avec SelectElement

Code : Tout sélectionner

NewList Elements.s()

; --- Remplissage
For i = 1 To 10
     AddElement(Elements())
     Elements() = "Hello " + Str(i)
Next

; --- Vérification
ForEach Elements()
     Debug Elements()
Next

; --- Appel élément 5 (le premier est 0 donc appel du #4)
SelectElement(Elements(), 4)
Debug #CRLF$ + "Élément 5: " + Elements()
La principale différence entre liste et tableau est que pour la liste on peut ajouter/supprimer des éléments n'importe où ce qui fait que le numéro change et qu'on ne peut donc pas s'en servir comme index fixe.

KCC m'a doublé :)

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 14:15
par Micoute
Je crois bien que ma mémoire est très sélective, parce que ça je l'ai fait des milliers de fois, mais comme il y a un certain temps que je ne l'ai pas fait, je l'ai oublié, quand je serait grand, je veux être jeune tout le temps.

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 17:30
par Kwai chang caine
KCC m'a doublé
:lol:
Parce que cette fois...j'me suis cassé la gueule en sautant sur la doc...et MMA.....pas de blabla...
"J'm'est dit" put..pour une fois que tu connais une réponse...on va pas me la piquer celle là :? :D

@Micoute
Aaaaah !!! la mémoire....des fois,.... j'me rappelle même plus que j'en ai une :mrgreen:

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 17:56
par Ar-S
Avec Debug MaListe(28) etc..
Tu te fais aussi une petite macro qui rendra ta syntaxe (casi) identique.

Code : Tout sélectionner

Global NewList mot.s()

; Ar-S Style
Macro Debuug(liste,num)
  SelectElement(liste(),num)
  Debug liste()
EndMacro

Macro Add2List(liste,mot)
  AddElement (liste())
  liste() = mot
EndMacro
; /^^ 


Add2List(mot,"Micoute ")
Add2List(mot, "perd ")
Add2List(mot, "la mémoire ;)")


Debuug (mot,0)
Debuug (mot,1)
Debuug (mot,2)
Bref, les macros c'est rigolo et tu peux vraiment te resyntaxer le langage. Le but est tout de même que ça te simplifie la vie, pas de recréer tout ce qui existe. :wink:

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 18:15
par Micoute
Merci beaucoup pour ce partage, j'adore les macros, mais je n'ai pas bien saisi leur syntaxe.

Re: AddElementTableau()

Publié : jeu. 16/mars/2017 22:00
par Zorro
ben lorsque tu creer une macro comme

Code : Tout sélectionner

Macro Debuug(liste,num)
  SelectElement(liste(),num)
  Debug liste()
EndMacro
lorsqu'ensuite tu utilises "Debuug(liste,num)"
au moment de la compilation cette ligne est remplacée par tout se qui se trouve entre Macro et EndMacro
donc : la ligne "Debuug(liste,num)"

sera remplacé par :

SelectElement(liste(),num)
Debug liste()


partout dans le code au moment de la compilation

sur ce principe tu peux faire un language completement en français

exemple :

Code : Tout sélectionner



Macro BoiteDeMessageEnMajuscule(Titre, Corps)
    MessageRequester(Titre, UCase(Corps), 0)
  EndMacro


  BoiteDeMessageEnMajuscule("Salut","les gens")  ; fonction françisé