Encore une dernière question pour la route.
Est- il possible de faire une procedure qui accepte un nombre variable d'arguments (disons de 2 arguments minimum à 6 maximum pour prendre un exemple) ?
Si oui comment fait on ?
Merci !
Procedure
-
- Messages : 121
- Inscription : mer. 21/janv./2004 22:18
Procedure
10 CLS
20 PRINT "Vive PureBasic"
30 GOTO 20
20 PRINT "Vive PureBasic"
30 GOTO 20
Non. C'est prévu pour une prochaine version de PB, mais pour l'instant non.
Par contre, tu peux toujours ruser, par ex en donnant à ta proc le pointeur vers le 1er élément d'un tableau et le nombre d'éléments à traiter.
Par contre, tu peux toujours ruser, par ex en donnant à ta proc le pointeur vers le 1er élément d'un tableau et le nombre d'éléments à traiter.
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Il y a une solution, tu peux appeler ta procédure avec les 6 paramètres et tu mets une valeur nulle aux paramètres que tu n'as pas besoin. Ça t'oblige à faire des tests et ça ralenti le programme mais tu peux sûrement te dépanner avec cette technique. À toi de l'adapter pour tes besoins.
Regarde l'exemple suivant :
Si le paramètre Rayon.f est égal à 0 on fait quelque chose.
Si le parametre Volume.f est égal à 0 on fait autre chose.
Tu peux pousser la technique plus loin en faisant une combinaision de paramètres. Dans ce cas, tu dois placer le test le plus long en premier, genre :
A+
Guimauve
Regarde l'exemple suivant :
Si le paramètre Rayon.f est égal à 0 on fait quelque chose.
Si le parametre Volume.f est égal à 0 on fait autre chose.
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Volume d'une Sphère
; Lors de l'appel de la procédure, la valeur (.f) recherché doit être égale à 0
Procedure.f VolumeSphere(rayon.f,volume.f)
pi.f = 3.141593
If volume = 0
ProcedureReturn ((4 / 3) * pi * Pow(rayon, 3))
EndIf
If rayon = 0
ProcedureReturn Pow(volume / ((4 / 3) * pi),(1/3))
EndIf
EndProcedure
Code : Tout sélectionner
If param01 > 0 And param02 > 0 And param03 > 0
Commande à faire ...
Elseif param04 > 0 And param05 > 0
Commande à faire ...
Elseif param06 > 0
Commande à faire ...
endif
Guimauve
OK, un petit exemple:
Voilà, j'ai la flemme de commenter le code, mais demandez si ça vous semble pas clair...
Code : Tout sélectionner
Structure point3D
x.f
y.f
z.f
EndStructure
Procedure.l leplusproche(*ref.point3D,*tests.point3D,nbtests.l)
numproch=0
distproch.f=Sqr(Pow(*tests\x-*ref\x,2)+Pow(*tests\y-*ref\y,2)+Pow(*tests\z-*ref\z,2))
nbtests-1
For t=1 To nbtests-1
*tests+SizeOf(point3D)
disttest.f=Sqr(Pow(*tests\x-*ref\x,2)+Pow(*tests\y-*ref\y,2)+Pow(*tests\z-*ref\z,2))
If disttest<distproch
distproch=disttest
numproch=t
EndIf
Next
ProcedureReturn numproch
EndProcedure
Dim despoints.point3D(9)
For t=0 To 9
RandomSeed(t*t+Date())
despoints(t)\x=Random(99000)*0.001
despoints(t)\y=Random(99000)*0.001
despoints(t)\z=Random(99000)*0.001
Next
DefType.point3D mamaison
mamaison\x=0.01
mamaison\y=17
mamaison\z=100.15
monvoisin=leplusproche(@mamaison,@despoints(0),10)
For t=0 To 9
Debug "n°"+Str(t)
Debug despoints(t)\x
Debug despoints(t)\y
Debug despoints(t)\z
Next
Debug "chez moi"
Debug mamaison\x
Debug mamaison\y
Debug mamaison\z
Debug "Le plus proche de chez moi est le n°"+Str(monvoisin)
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
parcequ'il est mieux organisé.
(Ly Tin Wheedle)