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

Re: AddElementTableau()

Message 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.
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
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: AddElementTableau()

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

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")
      

~~~~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
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: AddElementTableau()

Message 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 :)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Ar-S
Messages : 9478
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: AddElementTableau()

Message par Ar-S »

Je suis d'accord, une aide un peu plus précise sur la concaténation serait la bienvenue dans la doc.
~~~~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 »

Mais bon sang, mais c'est bien sûr, vu comme ça, ça change tout.
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 »

C'est vraiment un truc de dingue ces MACROS 8O
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 :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 »

Pourtant ça fait un bail qu'on utilise ça dans les punchs :lol:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: AddElementTableau()

Message 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
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: AddElementTableau()

Message par falsam »

Les utilisateurs jugeront à la fois tes propos et l'hérésie intellectuelle et déontologique de ton code.
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
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: AddElementTableau()

Message 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.
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 »

Ok, c'est noté
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 »

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.... 8O
Je comprend quand même un peu, ce qu'à voulu dire FALSAM :mrgreen: , sincèrement des fois "on s'demande" ???? :lol: :lol:
Ton code.... c'est pire qu'un plat mexicain pour le processeur non ??? :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: AddElementTableau()

Message par Shadow »

Bha j'ai chercher comment faire autrement mais j'y parviens pas :(
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: AddElementTableau()

Message 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.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
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 »

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 ""
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 !
Répondre