
je pense qu'il faut passer par une une structure mais j'arrive pas à retomber sur mes pattes...
PS: Ne me donne pas la soluce mais plutot un indice... histoire que j'y passe encore 2 heures

Code : Tout sélectionner
Ma_variable=123
*pointeur1:*pointeur2:*pointeur3
*pointeur1=@*pointeur2
*pointeur2=@*pointeur3
*pointeur3=@Ma_variable
Structure test
Valeur.l
EndStructure
*pointeur.test=*pointeur1
Debug *pointeur\Valeur
*npointeur.test=*pointeur\Valeur
Debug *npointeur\Valeur
*pointeur.test=*npointeur\Valeur
Debug *pointeur.test\Valeur
Code : Tout sélectionner
Ma_variable=123
*pointeur1:*pointeur2:*pointeur3
*pointeur1=@*pointeur2
*pointeur2=@*pointeur3
*pointeur3=@Ma_variable
Structure test
valeur.l
EndStructure
; Un pointeur fait référence à une variable (ou autre)
; il se sert de l'adresse de cette variable pour
; créer cette référence.
; Un pointeur ne contient pas de données
; mais pointe vers la variable (via l'adresse qu'il contient)
; dont il peut manipuler la ou les données.
; je crée un nouveau pointeur de type long *Pointeur.test
; ou *Pointeur.LONG qui est déjà déclaré
*Pointeur.test=*pointeur1 ; ici le Pointeur pointe vers la même référence que *pointeur1
; donc *Pointeur et *pointeur1 font référence à la même adresse qui est celle de pointeur2
; car un pointeur ne peut et ne doit contenir qu'une adresse qui sert de référence
; ici *Pointeur\valeur permet de lire(ou d'écrire) le contenu de la variable pointée
Debug *Pointeur\valeur
; et comme le contenu de *pointeur2 est une adresse, je lis une adresse
; cette adresse correpond bien entendu à l'emplacement mémoire du pointeur3
; je me sert du pointeur créé pour pointer cette fois-ci vers le pointeur2
*Pointeur.test=*Pointeur\valeur ;contient le contenu de pointeur2 qui est l'adresse du pointeur3
; donc *pointeur=adresse pointeur3
; Maintenant la valeur pointée par le pointeur contient l'adresse de la variable recherchée
*Pointeur.test=*Pointeur\valeur ;contient le contenu de pointeur3 qui est l'adresse de la variable
Debug *Pointeur.test\valeur ; lecture de la valeur pointée par le pointeur
; et comme ici le pointeur contient l'adresse de la variable, je peux en lire le contenu.
Code : Tout sélectionner
Structure LinkedString
*Next.LinkedString
*Previous.LinkedString
value.s
EndStructure
NewList Hello1.LinkedString()
NewList Hello2.LinkedString()
*ptr.LinkedString
Procedure PrintListContents(*ptr.LinkedString)
Repeat
If *ptr
Debug *ptr\value
EndIf
*ptr=*ptr\Next
Until *ptr=0
EndProcedure
Procedure ajout(*ptr.LinkedString)
*ptr\value = "Nouvel Element"
EndProcedure
*ptr=AddElement(Hello1())
*ptr\value = "GoodDay1"
*ptr=AddElement(Hello2())
*ptr\value = "Bonjour2"
*ptr=AddElement(Hello1())
ajout(*ptr)
*ptr=AddElement(Hello2())
ajout(*ptr)
PrintListContents(FirstElement(Hello1()))
PrintListContents(FirstElement(Hello2()))
ForEach Hello1()
Debug Hello1()\value
Next
Code : Tout sélectionner
Structure LinkedString
*Next.LinkedString
*Previous.LinkedString
value.s
EndStructure
NewList Hello1.LinkedString()
NewList Hello2.LinkedString()
*ptr.LinkedString
*ptr=AddElement(Hello1())
*ptr\value = "GoodDay1"
; ce qui donne en réalité
;*ptr\value = Hello1\Next
Debug PeekS(Hello1()\Next); affiche "GoodDay1"
Debug "----------------"
Debug Hello1()\value ;n'affiche rien
Code : Tout sélectionner
Structure LinkedString2
value.s
EndStructure
Structure LinkedString
*Next.LinkedString
*Previous.LinkedString
value.s
EndStructure
NewList Hello1.LinkedString2()
NewList Hello2.LinkedString2()
*ptr.LinkedString
Procedure PrintListContents(*ptr.LinkedString)
Repeat
If *ptr
Debug *ptr\value
EndIf
*ptr=*ptr\Next
Until *ptr=0
EndProcedure
Procedure ajout(*ptr.LinkedString)
*ptr\value = "Nouvel Element"
EndProcedure
*ptr=AddElement(Hello1())
*ptr\value = "GoodDay1"
*ptr=AddElement(Hello2())
*ptr\value = "Bonjour2"
*ptr=AddElement(Hello1())
ajout(*ptr)
*ptr=AddElement(Hello2())
ajout(*ptr)
PrintListContents(FirstElement(Hello1()))
PrintListContents(FirstElement(Hello2()))
Debug "-----------------"
ForEach Hello1()
Debug Hello1()\value
Next
Code : Tout sélectionner
; simple exercice avec les chaines
chaine.s="Pure Casic is the Cest"
; Changer la lettre C par un B
; en utilisant aucune fonction STRING
Structure Liste
Valeur.b
EndStructure
*pointeur.Liste=@chaine
*pointeur+5 ;position du "C" de Casis à partir du début de la chaine
*pointeur\Valeur=66 ;valeur Ascii du B
*pointeur+13 ;position du C de "Cest" à partir de la position précédente
*pointeur\Valeur=66 ;valeur Ascii du B
Debug chaine
Code : Tout sélectionner
*Pointeur.BYTE=@chaine
For a=1 To Len(chaine)
If *Pointeur\b=$43
*Pointeur\b=$42
EndIf
*Pointeur=*Pointeur+1
Next a
Debug chaine
Code : Tout sélectionner
; Second exercice avec les chaines
chaine.s="Pure Basic is the Best"
chaine1.s=Space(Len(chaine))
; Il faut que: chaine1 = "tseB eht si cisaB eruP"
; soit la chaine inversée de la première chaine
; traité le problème d'une façon générale
; aucune fonction STRING ne devra être utilisée
; à part la fonction len()
Code : Tout sélectionner
; Second exercice avec les chaines
chaine.s="Pure Basic is the Best"
chaine1.s=Space(Len(chaine))
; Il faut que: chaine1 = "tseB eht si cisaB eruP"
; soit la chaine inversée de la première chaine
; traité le problème d'une façon générale
; aucune fonction STRING ne devra être utilisée
; à part la fonction len()
Structure Liste
Valeur.b
EndStructure
*pointeur1.Liste=@chaine
*pointeur2.Liste=@chaine1
*pointeur1+Len(chaine)-1
For i=1 To Len(chaine)
*pointeur2\Valeur=*pointeur1\Valeur
*pointeur2+1
*pointeur1-1
Next
Debug chaine1