Page 1 sur 1

Procedure à paramètres optionnels.

Publié : mer. 14/nov./2007 14:19
par Myshl
Bonjour.

Je souhaite écrire une procédure à 2 paramètres obligés plus 2 paramètres optionnels : Procedure(a,b [,c,d]).

Je sais bien utiliser une telle procédure prédéfinie, mais je ne sais pas en écrire une qui traite donc a et b et s'ils existent c et d.

Je veux écrire une procédure qui réduise un quotient d'entiers (2 paramètres) et si besoin un produit de quotients d'entiers.

Si l'un(e) d'entre vous peut et veut bien me dire comment écrire une procédure à paramètres optionnels, je l'en remercie.

Myshl

Publié : mer. 14/nov./2007 14:39
par lionel_om

Code : Tout sélectionner

Procedure Test(a.l, b.l, c.l = 1, d.l = 5)
; ...
EndProcedure
C'est ça que tu cherches ?

Lio :wink:

Publié : mer. 14/nov./2007 14:41
par brossden
Pour les paramètres optionnels il te suffit de leur mettre une valeur par defaut dans la syntaxe Procedure MaProc(a,b,c=Valeur1,D=Valeur2)

Exemple :

Code : Tout sélectionner

Procedure test(a,b,c=0,d=0)
  Debug a+b+c+d
EndProcedure

test(10,20)
test(10,20,30)
test(10,20,30,40)

Publié : mer. 14/nov./2007 14:41
par brossden
Lio tu as été plus rapide que moi sur ce coup !
:lol:

Publié : mer. 14/nov./2007 14:43
par lionel_om
Grillé ! :D

par contre le seul problème par rapport à ce que tu veux faire c'est que tu peux passer que 3 arguments : le 3ème n'implique pas de passer un 4ème.

Mais tout dépend si tu as voulu dire

Code : Tout sélectionner

(a.l, b.l, [c.l, d.l])
ou

Code : Tout sélectionner

(a.l, b.l, [c.l, [d.l]])
Lio

Publié : mer. 14/nov./2007 14:43
par lionel_om
Merde tu m'a grillé sur le grillage! :D 8)

Publié : mer. 14/nov./2007 15:16
par brossden
Lionel_om

Sauf erreur de comprenette de ma part, les croches dans la liste des paramètres ça bug !

Publié : mer. 14/nov./2007 16:58
par lionel_om
brossden a écrit :Lionel_om

Sauf erreur de comprenette de ma part, les croches dans la liste des paramètres ça bug !
Je ne comprend pas trop :? !
Je voulais dire que si Myshl ne veut pas être pas que l'on puisse utiliser sa fonction avec uniquement 3 arguments, mais seulement 2 ou 4...

Lio

Eureka

Publié : mer. 14/nov./2007 18:53
par Myshl
J'suis con, Brossden m'a ouvert les yeux.

Si je veux réduire un seul quotient d'entiers a/b avec une procédure prévue pour réduire un produit de quotients a/b*c/d, je n'ai qu'à appeler la procédure avec a/b*1/1.

C'est extensible à n produits de quotients !

Merci Brossden, et merci à tous.

Bon je vais quand même chercher plus propre, éviter d'appeler avec 1/1.

Publié : jeu. 15/nov./2007 15:53
par Guimauve
Une solution possible:

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Procédure avec paramètre optionnel
; Fichier : Source principal
; Version : 1.0.0
; Programmation : OK
; Programmé par : Guimauve
; Date : 15-11-2007
; Mise à jour : 15-11-2007
; Codé avec PureBasic V4.10
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Procedure MaProcedure(a.l, b.l, c.l = 0, d.l = 0)
  
  If c = 0 And d = 0 And b <> 0
    Resultat.l = a/b
  Else
    Resultat = a/b * c/d
  EndIf

  ProcedureReturn Resultat
  
EndProcedure

Debug MaProcedure(25,5)

Debug MaProcedure(25,5, 30, 5)

; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
A+
Guimauve