Page 1 sur 3

Les procedures, un casse tête

Publié : lun. 16/mai/2011 13:04
par dayvid
Salut a tous !

Voilà un momment que je me pose des questions sur les procedures:

Code 1:

Code : Tout sélectionner

Global Parametre1$
Global Pamarametre2
Global Parametre3$
Global Pamarametre4
Global Parametre5$
Global Pamarametre6

Procedure MaProcedure(Parametre1$, Pamarametre2, Parametre3$, Pamarametre4, Parametre5$, Pamarametre6)
  
  Parametre1$ = "def"
  Pamarametre2 = 24
  
  Parametre3$ = "cvb"
  Pamarametre4 = 45
  
  Parametre5$ = "qsd"
  Pamarametre6 = 68
  
EndProcedure

MaProcedure("abc", 10, "ghk", 52, "tyu", 85)

Debug Parametre1$
Debug Pamarametre2
Debug Parametre3$
Debug Pamarametre4
Debug Parametre5$
Debug Pamarametre6
code 2:

Code : Tout sélectionner

Parametre1$ = "a"
Pamarametre2 = 5
Parametre3$ = "e"
Pamarametre4 = 8
Parametre5$ = "d"
Pamarametre6 = 4

Procedure MaProcedure(Parametre1$, Pamarametre2, Parametre3$, Pamarametre4, Parametre5$, Pamarametre6)
  
  Parametre1$ = "def"
  Pamarametre2 = 24
  
  Parametre3$ = "cvb"
  Pamarametre4 = 45
  
  Parametre5$ = "qsd"
  Pamarametre6 = 68
  
EndProcedure

MaProcedure("abc", 10, "ghk", 52, "tyu", 85)

Debug Parametre1$
Debug Pamarametre2
Debug Parametre3$
Debug Pamarametre4
Debug Parametre5$
Debug Pamarametre6
Code 3:

Code : Tout sélectionner

Parametre1$ = "a"
Pamarametre2 = 5
Parametre3$ = "e"
Pamarametre4 = 8
Parametre5$ = "d"
Pamarametre6 = 4

Procedure MaProcedure(Parametre1$, Pamarametre2, Parametre3$, Pamarametre4, Parametre5$, Pamarametre6)
  
Shared Parametre1$
Shared Pamarametre2
Shared Parametre3$
Shared Pamarametre4
Shared Parametre5$
Shared Pamarametre6


  Parametre1$ = "def"
  Pamarametre2 = 24
  
  Parametre3$ = "cvb"
  Pamarametre4 = 45
  
  Parametre5$ = "qsd"
  Pamarametre6 = 68
  
EndProcedure

MaProcedure("abc", 10, "ghk", 52, "tyu", 85)

Debug Parametre1$
Debug Pamarametre2
Debug Parametre3$
Debug Pamarametre4
Debug Parametre5$
Debug Pamarametre6
Code 4:

Code : Tout sélectionner

Parametre1$ = "a"
Pamarametre2 = 5
Parametre3$ = "e"
Pamarametre4 = 8
Parametre5$ = "d"
Pamarametre6 = 4

Procedure MaProcedure(Parametre1a$, Pamarametre2a, Parametre3a$, Pamarametrea4, Parametre5a$, Pamarametre6a)
  
  Parametre1$ = Parametre1a$
  Pamarametre2 = Pamarametre2a
  
  Parametre3$ = Parametre3a$
  Pamarametre4 = Pamarametrea4
  
  Parametre5$ = Parametre5a$
  Pamarametre6 = Pamarametre6a
  
EndProcedure

MaProcedure("abc", 10, "ghk", 52, "tyu", 85)

Debug Parametre1$
Debug Pamarametre2
Debug Parametre3$
Debug Pamarametre4
Debug Parametre5$
Debug Pamarametre6
Vous comprendrez certainement ce que j'essaie de faire ! :P

J'envoie des paramètres a la procédure
mais je veut aussi qu'ils soit pris en compte !
et que les variables en conséquence garde leurs valeurs :)

Mais je n’y arrive pas :(

et du coup je bloque carrément :|

Re: Les procedures, un casse tête

Publié : lun. 16/mai/2011 13:29
par jbernard13
il me semble qui manque un ProcedureReturn ....

Re: Les procedures, un casse tête

Publié : lun. 16/mai/2011 13:35
par falsam
Déclare tes variables en Global par exemple.

Code : Tout sélectionner

Global Parametre1$ = "a"
Global Pamarametre2 = 5
Global Parametre3$ = "e"
Global Pamarametre4 = 8
Global Parametre5$ = "d"
Global Pamarametre6 = 4

Procedure MaProcedure(Parametre1a$, Pamarametre2a, Parametre3a$, Pamarametrea4, Parametre5a$, Pamarametre6a)
  
  Parametre1$ = Parametre1a$
  Pamarametre2 = Pamarametre2a
  
  Parametre3$ = Parametre3a$
  Pamarametre4 = Pamarametrea4
  
  Parametre5$ = Parametre5a$
  Pamarametre6 = Pamarametre6a
  
EndProcedure

MaProcedure("abc", 10, "ghk", 52, "tyu", 85)

Debug Parametre1$
Debug Pamarametre2
Debug Parametre3$
Debug Pamarametre4
Debug Parametre5$
Debug Pamarametre6

Re: Les procedures, un casse tête

Publié : lun. 16/mai/2011 13:42
par dayvid
Oui merci Falsam :)

effectivement je connais cette façon de faire mais ce n'est pas vraiment superbe ce truc la quand même :?

Ya pas plus simple comme chose car sa oblige a déclarer plein de variable
imagine si j'ai par exemple 50 procédures 8O

Je comprends pas ce truc là moi :|

Re: Les procedures, un casse tête

Publié : lun. 16/mai/2011 13:54
par falsam
Procedure
Aide Pure Basic a écrit :Une procédure est une partie du code indépendante du programme principal qui peut avoir des paramètres et ses propres variables. En PureBasic, les procédures sont récursives et peuvent donc s'appeler elles-mêmes. Lors de chaque appel à la procédure, les variables locales sont automatiquement initialisées avec la valeur 0. Pour accéder aux variables du programme principal, ils faut les partager en utilisant les mots clefs Shared ou Global (voir aussi: Protected et Static).
ProcedureReturn
Aide Pure Basic a écrit :Une procédure peut avoir une valeur de retour si nécessaire. Il faut en définir le type après Procedure et utiliser le mot clef ProcedureReturn à tout moment opportun dans la procédure.
Exemple de procédure

Code : Tout sélectionner

Procedure.l Maximum(nb1.l, nb2.l)
    If nb1>nb2
      Resultat.l = nb1
    Else
      Resultat = nb2
    EndIf
  
    ProcedureReturn Resultat
  EndProcedure 
  
  Resultat.l = Maximum(15,30)
  Debug Resultat
  End 
qui renvoie une valeur.

Re: Les procedures, un casse tête

Publié : lun. 16/mai/2011 13:59
par dayvid
Merci mais comment je fait pour renvoyer plusieur résulta car c'est pas passible il parais :)

Re: Les procedures, un casse tête

Publié : lun. 16/mai/2011 14:15
par falsam
Travaille un peu les structure :)

Code : Tout sélectionner

;Definition d'un modele de rectangle 
Structure ModeleDeRectangle
  Longueur.i
  Largeur.i
  Surface.i
  Perimetre.i
EndStructure

;On  desire calculer la surface et le perimetre d'un jardin 
;on se sert pour cela de notre modele de rectangle
Global Jardin.ModeleDeRectangle

;Une procedure sans aucun passage de parametre 
;De cette maniére tu n'as pas déclaré les variable une seconde fois
Procedure Calcul()
  Jardin\Perimetre=(Jardin\Longueur+Jardin\largeur)*2
  Jardin\Surface=(jardin\Longueur * Jardin\largeur)
EndProcedure

Jardin\Longueur=3
Jardin\largeur=2
Calcul()

Debug Jardin\Perimetre
Debug Jardin\Surface


Re: Les procedures, un casse tête

Publié : lun. 16/mai/2011 16:12
par Chris
Pour renvoyer plusieurs résultats, soit tu passes par une structure si les types sont différents, soit tu passes par un tableau si les résultats sont du même type.

Si tes résultats sont tous des chaines, tu peux aussi renvoyer une seule chaine composée de toutes les autre, chaque résultat étant séparé par un caractère (; par ex.) et extraire les différents résultats de la chaine avec StringField().

Par ex.
Valeur1$ = "Toto"
Valeur2$ = "Titi"
Valeur3$ = "Tata"

Chaine retournée par la procédure
Chaine$ = "Toto;Titi;Tata"

Re: Les procedures, un casse tête

Publié : mar. 17/mai/2011 15:45
par Warkering

Code : Tout sélectionner

;Personne avec le nom complet et l'âge
Structure Personne
  Nom.s
  Prenom.s 
  Age.w
EndStructure

;Modifie le nom complet de la structure reçu en paramètre par adresse
Procedure ModifierNom(*Personne.Personne, Prenom$, Nom$)
  *Personne\Nom = Nom$
  *Personne\Prenom = Prenom$
EndProcedure

;On créé une personne de test, ici le laitier
Laitier.Personne
Laitier\Prenom = "Roger"
Laitier\Nom = "Dupuis"
Laitier\Age = 17

;On affiche ses informations avant de les modifier
Debug Laitier\Prenom
Debug Laitier\Nom
Debug Laitier\Age

;On modifie le nom en appelant notre procédure
ModifierNom(@Test, "Bob", "LeLaitier")

;On affiche ses informations après les avoir modifié
Debug Laitier\Prenom
Debug Laitier\Nom
Debug Laitier\Age

;On rend un certain Dayvid heureux dans son petit coeur! :)

Re: Les procedures, un casse tête

Publié : mar. 17/mai/2011 19:39
par anissa
Dayvid ! Je t'en prie !

Re: Les procedures, un casse tête

Publié : mer. 18/mai/2011 0:34
par Warkering
Je t'en prie quoi?

Re: Les procedures, un casse tête

Publié : mer. 18/mai/2011 12:04
par pat
Dayvid,

Une autre possibilité pour retourner des valeurs d'une procédure c'est tout simplement de déclarer les variables globales que prendront les valeurs de retour de ta procédure, c'est ce qu'il y a de plus simple.

Exemple :

Global valeurretour.a

Procedure Test
valeurretour=5
Endprocedure

Test()
Debug valeurretour ; donnera bien 5.

Re: Les procedures, un casse tête

Publié : mer. 18/mai/2011 13:53
par dayvid
Merci a vous tous pour vos réponce

En effet j'avais penser a sa aussi mais ce n’est pas franchement bien pratique
moi ce qui me chiffonne beaucoup la dedans est que dans cette exemple-ci
la procédure ne garde pas du tous ce que je leur attribut, exemple:

Code : Tout sélectionner

Global valeurretour.a

valeurretour = 10

Procedure Test(valeurretour)
valeurretour=50
EndProcedure

Test(10)

Debug valeurretour ; donnera bien 5.

Bien voilà, le résulta est 10 alors que j'ai bien mis dans la procédure 50
je sais que ont peut renvoyer sa avec un procedurereturn mais
la c'est pas ce que je veut car moi ya plein de paramètres a renvoyer d'un coup

Pourquoi sa marche pas ce truc la, pourquoi quand j'envoie un paramètre a la procédure
qui en plus ce paramètre est pareil par la suite, pourquoi il n'en prend pas compte

Me comprenez-vous ?

Re: Les procedures, un casse tête

Publié : mer. 18/mai/2011 14:09
par Mindphazer
dayvid a écrit :Me comprenez-vous ?
Non.

A quoi ça te sert de passer en paramètre valeurretour, vu que c'est une variable globale ???????

Re: Les procedures, un casse tête

Publié : mer. 18/mai/2011 14:16
par dayvid
Bin voilà, donc j'ai du raté quelque chose :?

Code : Tout sélectionner

Global valeurretour.a

valeurretour2 = 10

Procedure Test(valeurretour1)
  
  valeurretour2=50
  
EndProcedure

Test(10)

Debug valeurretour2

marche pas :cry:

Bref en faite une procedure, c'est une boîte
et aucune variable peut en sortir sauf avec le procedurrerturn

J'ai toujours eu du mal avec ce concept la moi :(