[Non Résolu] Création d'une variable par des arguments

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

[Non Résolu] Création d'une variable par des arguments

Message par Robrock55 »

Bonjour, ou bonsoir ou bon appétit.

Le titre est peut-être pas très explicite. J'explique mon problème :
Je veux faire une procédure qui créé une variable selon un argument de cette procédure.

Avec procedure(nombre) par exemple, comment faire pour que je puisse avoir variable qui s'appelle si le nombre est 3, variable3 ?

J'espère avoir été compris.

Cordialement,

Robrock55
Dernière modification par Robrock55 le sam. 18/févr./2012 21:46, modifié 2 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Création d'une variable par des arguments

Message par Ar-S »

ça ?

Code : Tout sélectionner

Procedure.s SetNumVariable(NumVariable.i)
  ProcedureReturn "variable"+Str(NumVariable)
EndProcedure

Debug SetNumVariable(58) 
~~~~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
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: Création d'une variable par des arguments

Message par Robrock55 »

Et pour intéragir avec cette variable ?
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Création d'une variable par des arguments

Message par Ar-S »

Robrock55 a écrit :Et pour intéragir avec cette variable ?
Je ne comprends pas ce que tu veux dire ?

ça ?

Code : Tout sélectionner

Procedure.s SetNumVariable(NumVariable.i)
  Shared MaVariable.s
  MaVariable = "variable"+Str(NumVariable)
	ProcedureReturn MaVariable
EndProcedure


M.s = SetNumVariable(58)
Debug M 
 
Explique ce que tu veux que ton code fasse si c'est pas ça.
~~~~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
Demivec
Messages : 91
Inscription : sam. 18/sept./2010 18:13

Re: Création d'une variable par des arguments

Message par Demivec »

Code : Tout sélectionner

NewMap monVars()
Procedure.s CreateNumVariable(NumVariable.i)
  Shared monVars()
  If Not FindMapElement(monVars(), "variable" + Str(NumVariable))
    AddMapElement(monVars(), "variable" + Str(NumVariable))
  EndIf 

  ProcedureReturn MapKey(monVars())
EndProcedure

Define.s a, b, c

a = CreateNumVariable(58)
b = CreateNumVariable(23)
Debug a ;variable58
Debug b ;variable23

monVars(a) = 3
monVars(b) = 12

Debug a + " = " + Str(monVars(a)) ;3
monVars(a) + 5
Debug a + " = " + Str(monVars(a)) ;8
monVars(a) = monVars(a) + monVars(b)

Debug a + " = " + Str(monVars(a)) ;20
Debug b + " = " + Str(monVars(b)) ;12

c = b
Debug c ;variable23
Debug c + " = " + Str(monVars(c)) ;12
Ce probablement n'est pas pour Débutants. :)


Vous pouvez également utiliser un tableau:

Code : Tout sélectionner

Dim monVars(100)

Define.i a, b, c ;indice

a = 58 
b = 23 
Debug a ;58 ;indice
Debug b ;23 ;indice

monVars(a) = 3
monVars(b) = 12

Debug "var" + Str(a) + " = " + Str(monVars(a)) ;3
monVars(a) + 5
Debug "var" + Str(a) + " = " + Str(monVars(a)) ;8
monVars(a) = monVars(a) + monVars(b)

Debug "var" + Str(a) + " = " + Str(monVars(a)) ;20
Debug "var" + Str(b) + " = " + Str(monVars(b)) ;12

c = b
Debug c ;23 ;indice
Debug "var" + Str(c) + " = " + Str(monVars(c)) ;12
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Création d'une variable par des arguments

Message par dayvid »

Je dois avouer que cette question est très intéressante :P

Moi je serais passer par un fichier texte ! :idea:

Mais ceci est très utile pour crée sa propre variable (Nom + Valeur)

Ce sujet est a développer car très intéressant :wink:
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Création d'une variable par des arguments

Message par G-Rom »

J'espère avoir été compris.
Oui, les variables n'existe plus une fois le programme compilé , tu peut néanmoins passer par les macros :

Code : Tout sélectionner

Macro set(num)
Variable#num.i  
EndMacro

set(3) = 255
Debug Variable3
Variable3 = 55
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Création d'une variable par des arguments

Message par dayvid »

Pas mal G-Rom :)

Comment tu fait pour faire la même chose mais pour crée une variable texte ?
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Création d'une variable par des arguments

Message par nico »

au lieu de .i tu met .s :lol:
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Re: Création d'une variable par des arguments

Message par dayvid »

Ah oui !!!

Pourtant j'ai essayer des truc comme ça et j'y suis pas arriver :lol:
mais tu as raison, et ça marche, merci :)

Comment quoi j'ai du me compliquer la vie :lol:

Code : Tout sélectionner

Macro set(num)
Variable#num.s
EndMacro

set(e) = "255"
Debug Variablee
Variablee = "55"
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: Création d'une variable par des arguments

Message par Robrock55 »

G-Rom, c'est exactement ce que je cherchais. Merci beaucoup, ca fait 2 fois que tu m'apportes une grande aide, vraiment, merci beaucoup ;)
Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: [Non Résolu] Création d'une variable par des arguments

Message par Robrock55 »

Euh en fait ca ne marche pas réellement comme je le souhaite.
La macro marche nickelle, mais en fait quand je l'utilise je connais pas la valeur de num.

Code : Tout sélectionner

Macro set(num)
  variable#num
EndMacro

i = 1

set(i) = 3
;Donneras variablei = 3 et non variable1 = 3 comme je le voudrais.
Si vous pouviez me donner la technique si elle existe, je vous en serez reconnaissant.
J'avais essayer de passer par le retour d'une procédure de cette manière :

Code : Tout sélectionner

Macro set(num)
  variable#num
EndMacro

Procedure value(num)  
  ProcedureReturn num
EndProcedure

i=1

set(value(i)) = 3
Et là PAF la mega erreur
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [Non Résolu] Création d'une variable par des arguments

Message par Backup »

en fait je lis ce que tu ecris depuis le début , et je pense que tu fait fausse route quelque part

comme souvent,pour les problèmes qui semblent insoluble,
le vrais soucis viens de la façon de poser le probleme !

en clair l'énoncé est déja le probleme !

alors , pourquoi veut tu des variables differente ?
en basic une variable qui porte le meme nom mais qui a une case mémoire differente
s'appelle une variable indicé (un tableau)

exemple :

Code : Tout sélectionner

dim toto(10)

toto(1)=56

toto(3)= 89

toto( 8 ) = 456

debug toto(1)
debug toto(3)
debug toto(8)

comme tu peux le voir la variable toto(1) est différente de toto(3)

dans le meme genre tu as aussi l'emploi des structures ..

Code : Tout sélectionner

structure toto
	a.l
	b.l
	c.l
chaine.s
endstructure

toto.toto

toto\a=15
toto\b=5
toto\c=456
toto\chaine.s=" coucou "


debug toto\a
debug toto\b
debug toto\c
debug toto\chaine
l'avantage tu peux mélanger les genres ( chaine et numérique )

bref tu peux t'en sortir , avec pleins de solution que d'employer des bidouilles innommable :)


autre exemple avec un tableau :

Code : Tout sélectionner

global dim roro(100)

procedure titi (argument , valeur)
roro(argument)=valeur
endprocedure

titi (20,150 ) ; on attribut la valeur 150 a la variable roro(20)  " roro20 "

debug roro(20)


; mais on aurai pu faire directement sans passer par une procedure
roro(20)=190 ; c'est comme si j'avais ecris roro20=190

debug roro(20)

Robrock55
Messages : 65
Inscription : lun. 01/févr./2010 17:04
Localisation : Meuse
Contact :

Re: [Non Résolu] Création d'une variable par des arguments

Message par Robrock55 »

Bon je repose mon problème autrement. Je suis toujours dans la progra de mon jeu en "fausse POO Purebasic" (pendez le !)
Et donc là j'en suis à la sauvegarde d'un niveau.
J'ai choisis de l'enregistrer dans un fichier tel que :
  • Un byte indiquant le nombre de planètes
  • La position X de la 1ere planète
  • La position Y de la 1ere planète
  • Les unités de la 1ere planète
  • ... (les autres attributs de cette planète)
  • La position X de la 2eme planète
  • La position Y de la 2eme planète
  • ...
Donc j'ai fait une fonction read_level() et je dois créer mon objet après la lecture des attributs de la planète.

Mon code actuel :

Code : Tout sélectionner

;=======================
;=== Bubble Army PC ====
;=== Robrock55 =========
;=== read_level().pb ===
;=======================

Procedure read_level(level.s,*faction1,*faction2,*faction3,*faction4)
  
  i = 1 ;variable pour le for/To
  ;variables de sotckages provisoires
  posX.l = 0
  posY.l = 0
  size.b = 0
  units.w = 0
  faction.b = 0
  *faction.Class_Faction = 0
  planetsNumber.b = 0
  #FILE_ID = 0
  
  ReadFile(#FILE_ID,level)
  planetsNumber = ReadByte(#FILE_ID)
  For i = 1 To planetsNumber
    posX = ReadLong(#FILE_ID)
    posY = ReadLong(#FILE_ID)
    size = ReadByte(#FILE_ID)
    units = ReadWord(#FILE_ID)
    faction = ReadByte(#FILE_ID)
    
    Select faction
      Case 1
        *faction = *faction1
      Case 2
        *faction = *faction2
      Case 3
        *faction = *faction3
      Case 4
        *faction = *faction4
    EndSelect
    
    ;-CONSTRUCTEUR QUI NE FONCTIONNE PAS, LE PROBLEME SE SITUE ICI
    Global set_pointer_planet(i).Class_Planet = New_Class_Planet(units,posX,posY,size,*faction)
    
  Next

  ProcedureReturn 1
EndProcedure   
  
Et donc je souhaite créer une planète tel que *planet1 puis *planet2 etc...
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Non Résolu] Création d'une variable par des arguments

Message par G-Rom »

Une simple liste chainee fait l'affaire ;)
Répondre