Page 2 sur 3
Re: AddElementTableau()
Publié : ven. 17/mars/2017 6:47
par Micoute
Oui, mais dans ce cas on pourrait remplacer Macro par Procedure, je veux parler des macros ou on utilise le signe # pour concaténer, c'est ce principe que je ne comprend pas.
Re: AddElementTableau()
Publié : ven. 17/mars/2017 11:03
par Ar-S
Le dièse sert de joker.
L'exemple en ligne est parlant :
https://www.purebasic.com/french/docume ... acros.html
Je le reprends en remplaçant Type par JOKER
Ici on voit JOKER, Texte
On laisse le choix à l'utilisateur de remplacer JOKER par ce qu'on veut. Donc c'est comme si on écrivait JOKER
Case
macro Xcase (JOKER, texte)
JOKER#CASE peut donc être remplacer par xxxxCASE en l’occurrence dans l'exemple U et L permettent donc d’écrire
Ucase ou
Lcase histoire de choisir maj et min.
Code : Tout sélectionner
Macro XCase(JOKER, Texte) ; renvoie le texte dans la casse du type spécifié
JOKER#Case(Texte) ; Type U => MAJUSCULES
EndMacro ; Type L => minuscules
Debug XCase(U, "Salut") ; macro remplacée par UCase("Salut")
Debug XCase(L, "Salut") ; macro remplacée par LCase("Salut")
Re: AddElementTableau()
Publié : ven. 17/mars/2017 14:45
par Shadow
Merci pour cette explication Ar'S, ça devrais être mis dans l'aide car
maintenant j'ai compris comment ça fonctionne grâce a toi

Re: AddElementTableau()
Publié : ven. 17/mars/2017 15:21
par Ar-S
Je suis d'accord, une aide un peu plus précise sur la concaténation serait la bienvenue dans la doc.
Re: AddElementTableau()
Publié : ven. 17/mars/2017 15:26
par Micoute
Mais bon sang, mais c'est bien sûr, vu comme ça, ça change tout.
Re: AddElementTableau()
Publié : ven. 17/mars/2017 16:18
par Kwai chang caine
C'est vraiment un truc de dingue ces MACROS
Je sais pas si ça existe dans les autres langages, mais je pense qu'on a surement du mal à mesurer la puissance de ce truc

Re: AddElementTableau()
Publié : ven. 17/mars/2017 16:21
par Zorro
Pourtant ça fait un bail qu'on utilise ça dans les punchs

Re: AddElementTableau()
Publié : sam. 18/mars/2017 20:17
par Shadow
Pour moi la meilleurs façon est celle-ci car elle ne duplique pas du code
et que on peut mettre tous se qu'on veux dans les paramètre
du moment qu’on respecte le type en entrée:
J'ai tenté de mettre le code sur le forum mais il étais long et à été supprimer par Falsam sans raison:
https://www.dropbox.com/s/mi2u8tgzpkqxp ... te.pb?dl=0
Re: AddElementTableau()
Publié : sam. 18/mars/2017 22:30
par falsam
Les utilisateurs jugeront à la fois tes propos et l'hérésie intellectuelle et déontologique de ton code.
Re: AddElementTableau()
Publié : dim. 19/mars/2017 11:48
par djes
Même si poster un code est apprécié, il faut quand même que celui-ci reste dans une limite de taille raisonnable. Ton code était énorme, et le principe est facile à comprendre en quelques lignes. Dans ce cas, il vaut mieux le poster sur un espace personnel et partager le lien. Attention à dropbox, car le fichier finira par être effacé, et le lien qui restera sur le forum sera mort.
Re: AddElementTableau()
Publié : dim. 19/mars/2017 14:31
par Micoute
Ok, c'est noté
Re: AddElementTableau()
Publié : dim. 19/mars/2017 18:53
par Kwai chang caine
falsam a écrit :Les utilisateurs jugeront à la fois tes propos et l'hérésie intellectuelle et déontologique de ton code.
Bon....j'aurais été MODO, je l'aurais, je pense pas, supprimé....
Mais j'ai regardé ton code SHADOW..... il m'a fait du bien....
Je comprend quand même un peu, ce qu'à voulu dire FALSAM

, sincèrement des fois "on s'demande" ????

Ton code.... c'est pire qu'un plat mexicain pour le processeur non ???

Re: AddElementTableau()
Publié : dim. 19/mars/2017 20:15
par Shadow
Bha j'ai chercher comment faire autrement mais j'y parviens pas

Re: AddElementTableau()
Publié : dim. 19/mars/2017 23:00
par Fig
Il est utile d'utiliser un tableau en l'agrandissant à la place d'un liste dans deux cas:
1/ Dans le cas où la quantité de mémoire est critique (un tableau prend moins de mémoire qu'une liste qui stock 2 pointeurs en plus des données)
2/ Dans le cas où la vitesse du traitement de cette succession de données est critique (la mémoire cache apprécie grandement que les données soient sériels tandis que dans une liste doublement chaînée les éléments sont potentiellement éloignées les uns des autres.)
Concernant le point 1, c'est quand même asse rare, avec les grosses quantités de mémoire qu'on a de nos jours, qu'on soit à 2 dwords ou 2 Qwords prêt par donnée stockée. Mais bon.
Concernant l'allocation mémoire, il semblerait que le système alloue directement 2^16 (65536) octets par défaut dont 65024 utilisables.
Donc tant que ton tableau ne dépasse pas 65024 octets de long, il peut être étendu sans ralentissement notable. Au dela, une plage deux fois plus longue sera allouée et les éléments existants seront copiés dans cette nouvelle zone entraînant forcément un petit laps de temps supplémentaire.
On notera aussi qu'utiliser un tableau avec les fonctions d'une liste pose certains problèmes
-Les insertions/suppressions, hormis à la fin, seront extrêmement lentes, à cause de l'obligation de décaler les valeurs du tableau pour faire une place ou la supprimer.
Re: AddElementTableau()
Publié : lun. 20/mars/2017 8:18
par Micoute
Depuis, j'ai trouvé d'autres solutions pour remplir un tableau sans se soucier de sa dimension, parce que ça ne marche qu'avec une seule, mais on pourrait le faire avec plusieurs.
Code : Tout sélectionner
Procedure iAjElemTab(Array idTableau(1),var.s)
For i=1 To CountString(var.s,",") + 1
ReDim MonTableau(i)
MonTableau(i) = Val(StringField(var.s,i,","))
Next i
EndProcedure
Procedure sAjElemTab(Array idTableau.s(1),var.s)
For i=1 To CountString(var.s,",") + 1
ReDim idTableau(i)
idTableau(i) = StringField(var.s,i,",")
Next i
EndProcedure
Global Dim MonTableau(0), Dim MonTableau2.s(0)
MonTableau(0) = 10
MonTableau2.s(0) = "10"
iAjElemTab(MonTableau(),"1,2,42,13,21,420,24,3,1")
sAjElemTab(MonTableau2(),"1,2,42,13,21,420,24,3,1")
; vérification MonTableau()
For i = 0 To ArraySize(MonTableau())
Debug MonTableau(i)
Next
Debug ""
; vérification Montableau2()
For i = 0 To ArraySize(MonTableau2())
Debug MonTableau2(i)
Next
Debug ""