[TUTO] Les Structures
Publié : dim. 06/juin/2004 10:30
				
				ceci est un recapitulatif d'une discution qui a eu lieu sur les structures
un tuto !! je remerci les auteurs respectif au nom de toute l'humanité
pour nous avoir fait partagé leur immense savoir
voici:
Une structure, c'est ni plus, ni moins qu'une liste de variables qui peuvent être de différents types.
Code:
Info.RESULTAT : retourne l'adresse de la structure RESULTAT dans Info
Info\Octet = 2 : Tu donnes la valeur de 2 a la variable octet,
en appelant la structure grace à son adresse contenue dans Info
Nombre = Info\Octet : Tu récupères la valeur contenue dans la variable
Octet, en appelant la structure grace à son adresse contenue dans Info
C'est comme si tu appelais des variables.
Par contre, tu peux avoir une variable qui est liée à une autre structure.
Code:
a.l ; variable de type entier long
b.f ; variable de type flotant (nombre à virgule)
a.struct1
b.struct2
Ensuite, tu utilise a et b comme tu veux.
En fait, tu vois, tu avais tout compris. Le seul point dont tu ne parles pas, c'est comment utiliser ensuite ces variables. Petit exemple ?
Code:
Les structures sont particulièrement pratique quand tu dois créer un tableau de données. Le cas typique, c'est un tableau de points 
Code:
Par contre, une procedure peut prendre en paramètre un pointeur vers une structure à remplir:
Code:[/quote]
*****************************************************************************************
Structure Union
voici ce qu'est une StructureUnion
c'est le regroupement L'UNION de plusieurs Champs a la meme adresse memoire :
les champs
Long.l ; Float.f ; String.s sont considérés comme un seul Champ !!! d'un point de vue Emplacement Memoire
			un tuto !! je remerci les auteurs respectif au nom de toute l'humanité
pour nous avoir fait partagé leur immense savoir
voici:
Une structure, c'est ni plus, ni moins qu'une liste de variables qui peuvent être de différents types.
Code:
Code : Tout sélectionner
Structure RESULTAT
  octet.b
  Mot.w
  Mot_Long.l
  Chaine.s
EndStructure
Info.RESULTAT
Info\Octet = 2 : Tu donnes la valeur de 2 a la variable octet,
en appelant la structure grace à son adresse contenue dans Info
Nombre = Info\Octet : Tu récupères la valeur contenue dans la variable
Octet, en appelant la structure grace à son adresse contenue dans Info
C'est comme si tu appelais des variables.
Par contre, tu peux avoir une variable qui est liée à une autre structure.
Code:
Code : Tout sélectionner
Structure RESULTAT
  octet.b
  Mot.w
  Mot_Long.l
  Chaine.s
  Valeur.AUTRESTRUCTURE <-- Variable liée à une autre structure
EndStructure
Info.RESULTAT
Tout juste ! Info, c'est le nom de la variable. Tu peux créer autant de variables que tu veux en les déclarant du type "Resultat". C'est exactement comme quand tu fais :et le "info" c'est arbitraire n'est-ce pas ?
t'aurai pu lui donner n'importe quel nom ?
a.l ; variable de type entier long
b.f ; variable de type flotant (nombre à virgule)
Oui, sauf que dans ce cas, on utilise pas le terme "affectation" mais "typage". L'affectation, c'est quand tu affecte (donne) une valeur à une variable (a=1). Le typage c'est quand tu décide de quelle sorte de variable il s'agit. (cela dit, on dit parfois "affectation de type" plutôt que "typage").est-ce le point entre les deux qui sert d'affectation ?
Oui, comme dit plus haut, une structure est une liste de variables. Chacune de ces variables peut avoir un type différent, y compris un type structure.et les structures peuvent t'elle renfermer des listes ou d'autre structures ??
C'est ça ! Comme on peut avoir besoin de créer différentes sortes de structures, il faut bien pouvoir leur donner un nom pour pouvoir les utiliser à tour de rôle :en fait si j'ai compris le terme "resultat"dans ton exemple n'est employé que pour la creation de la structure !
on l'affecte a une variable dans ce cas "info" et dorenavant on utilise que "info" on oublie "Resultat" ok ??
a.struct1
b.struct2
Ensuite, tu utilise a et b comme tu veux.
En fait, tu vois, tu avais tout compris. Le seul point dont tu ne parles pas, c'est comment utiliser ensuite ces variables. Petit exemple ?
Code:
Code : Tout sélectionner
;Création d'une structure : 
Structure Struct1 
  e1.l 
  e2.l 
EndStructure 
; 
; Typage d'une variable et affectation (les deux en même temps) 
var.Struct1\e1 = 1 ; on aurait pu faire "var.Struct1" et à la ligne var\e1 = 1 
; on complète l'affectation 
var\e2 = 2 ; pas la peine de refaire var.Struct1\e2 = 2, le type de var 
                ; a déjà été déclaré, maintenant, PurePasic sait que var est de type Struct1 
debug var\e1 ; ça va afficher "1" 
debug var\e2 ; ça va afficher "2" 
Code:
Code : Tout sélectionner
Dim pt.point(100) 
;Pas besoin de créer la structure "point", elle existe déjà (PureBasic ;pré-déclare tout un paquet de structures que tu peux voir avec "Structure Viewer"). 
;Dans cet exemple, pt est un tableau à deux dimensions de 100 points qui ;s'utilise comme suit : 
pt(1)\x = 10 
pt(1)\y = 25 
pt(2)\x = 7 
pt(2)\y = 8 
ou, pour créer une courbe : 
For ct = 1 to 100 
pt(ct)\x = ct 
pt(ct)\y = ct*ct 
Next
Par contre, une procedure peut prendre en paramètre un pointeur vers une structure à remplir:
Code:
Code : Tout sélectionner
Structure RESULTAT 
  octet.b 
  Mot.w 
  motlong.l 
  Chaine.s 
EndStructure 
Procedure MaProcedure(*result.resultat) 
  
  *Result\octet   = #True 
  *Result\Mot     = 1234 
  *Result\motlong = 12345678 
  *Result\Chaine  = "Hello World !" 
  ;ProcedureReturn @Result  : du coup, plus besoin de retourner de valeur 
EndProcedure 
Procedure metlesouk() 
  a=7 
  b=9 
  c.f=0.1 
  d$="coucou" 
EndProcedure 
MaProcedure(@Valeur.RESULTAT) 
metlesouk() 
Debug Valeur\octet 
Debug Valeur\Mot 
Debug Valeur\motlong 
Debug Valeur\Chaine 
Voilà
*****************************************************************************************
Structure Union
voici ce qu'est une StructureUnion
c'est le regroupement L'UNION de plusieurs Champs a la meme adresse memoire :
Code : Tout sélectionner
Structure Type
    Name$
    StructureUnion
    Long.l      ; Chaque champ (Long, Float et String) est placé à la
    Float.f     ; meme adresse mémoire.
    String.s    ;  UN SEUL ESPACE MEMOIRE POUR CES 3 CHAMPs
    EndStructureUnion   
EndStructure
; ce qui fait que
type.Type\Long.l  =1
type.Type\Float.f  =1 ; la on viens d'écraser ce qu'on avait attribué a \Long.l
; la preuve
Debug type.Type\Float.f ; c'est bon puisque c'est la dernière valeur entrée
Debug type.Type\Long.l ; ça affiche n'importe quoi parceque la valeur n'existe plus !! :)Long.l ; Float.f ; String.s sont considérés comme un seul Champ !!! d'un point de vue Emplacement Memoire