AddElementTableau()

Programmation d'applications complexes
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

AddElementTableau()

Message 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
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: AddElementTableau()

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: AddElementTableau()

Message par Zorro »

Clair !
vouloir réinventer la roue peut etre ? :)

modéré par ar-s
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: AddElementTableau()

Message par falsam »

Je rejoins les propos précédents. Autant travailler dans des listes.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: AddElementTableau()

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: AddElementTableau()

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: AddElementTableau()

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: AddElementTableau()

Message 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)
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: AddElementTableau()

Message 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. 
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

Re: AddElementTableau()

Message 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é :)
Dernière modification par Marc56 le jeu. 16/mars/2017 14:16, modifié 1 fois.
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: AddElementTableau()

Message 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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: AddElementTableau()

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: AddElementTableau()

Message 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:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: AddElementTableau()

Message par Micoute »

Merci beaucoup pour ce partage, j'adore les macros, mais je n'ai pas bien saisi leur syntaxe.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: AddElementTableau()

Message 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é


Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre