Fonctions

benj78

XLDnaute Nouveau
Bonsoir,

Je commence à peine les fonctions et je dois dire que j'ai un peu de mal , je n'ai pas encore le "truc".

On a la fonction:

Function Pileface() As Integer
Dim x as double
x=Rnd()
If x<1/2 Then
Pileface=0
Else
Pileface=1
End If
End Function

On veut simuler un lancer de pièce avec les fonctions de tirage aléatoire. Pour cela, on utilise
la fonction aléatoire Rnd() qui renvoie un nombre aléatoire entre 0 et 1. Si le tirage est
inférieur à 1/2 alors le tirage est assimilé à pile, sinon à face.

On me demande d'écrire une macro qui utilise cette fonction, en effectuant un tirage puis affiche, selon le cas,un message indiquant pile ou face

j'ai fais :

Sub pile()
Dim x As Double
x = Rnd * 1
Msgbox("le tirage est" &pileface)
End Sub

Est ce correct ?
 

TooFatBoy

XLDnaute Barbatruc
Re : Fonctions

Bon, tu tombes mal car je n'ai jamais utilisé de Msgbox ni de fonction, mais vue l'heure assez tardive, il ne doit pas y avoir grand monde allors je vais tenter une réponse à base de... suppositions. :(

Tu sembles avoir très bien compris le fonctionnement et l'utilisation de la fonction Rnd().
Je pense que, l'utilisation de la fonction Pileface() que tu as créée doit s'utiliser de la même façon.
De même que la fonction Rnd() te renvoie un chiffre entre 0 et 1, ta fonction Pileface() te renvoie 0 ou 1 (suivant le pseudo tirage effectué dans cette fonction).

Dans ta macro tu dois donc, je suppose, utiliser ta fonction Pileface() et un IF pour afficher "Pile" ou "Face" suivant ce que te renvoit ta fonction Pileface().

Ce qui donnerait un truc du genre (que je te laisse traduire en VBA ;)) :
SI Pileface()=0 ALORS
AFFICHER "Pile"
SINON
AFFICHER "Face"
FIN DE SI
 

benj78

XLDnaute Nouveau
Re : Fonctions

Bon, tu tombes mal car je n'ai jamais utilisé de Msgbox ni de fonction, mais vue l'heure assez tardive, il ne doit pas y avoir grand monde allors je vais tenter une réponse à base de... suppositions. :(

Tu sembles avoir très bien compris le fonctionnement et l'utilisation de la fonction Rnd().
Je pense que, l'utilisation de la fonction Pileface() que tu as créée doit s'utiliser de la même façon.
De même que la fonction Rnd() te renvoie un chiffre entre 0 et 1, ta fonction Pileface() te renvoie 0 ou 1 (suivant le pseudo tirage effectué dans cette fonction).

Dans ta macro tu dois donc, je suppose, utiliser ta fonction Pileface() et un IF pour afficher "Pile" ou "Face" suivant ce que te renvoit ta fonction Pileface().

Ce qui donnerait un truc du genre (que je te laisse traduire en VBA ;)) :
SI Pileface()=0 ALORS
AFFICHER "Pile"
SINON
AFFICHER "Face"
FIN DE SI


Bonjour :)

Oui ça me semble être ça j'ai trouvé une correction qui est la même à savoir:

Sub tirage
If pileface()=1 then
Msgbox("face")
Else
Msgbox("pile")
End if
End sub

Par contre il y a une petite chose que je ne comprends pas :

c'est si x<1/2 que c'est pile, or la on semble dire que c'est juste quand =0 ?


Si j'ai bien compris (ce qui n'est pas sûr) une fonction sert à donner les intructions et la macro applique juste ces instructions ?
 

TooFatBoy

XLDnaute Barbatruc
Re : Fonctions

Par contre il y a une petite chose que je ne comprends pas :

c'est si x<1/2 que c'est pile, or la on semble dire que c'est juste quand =0 ?
C'est marrant, mais il y avait une chance sur deux pour que tu fasses cette remarque, car c'est une erreur qu'il est très facile de commettre.

Il y a en fait deux choses bien distinctes qu'il ne faut pas confondre.
Il y a d'un côté le travail effectué à l'intérieur de la fonction. Et une fois qu'elle fonctionne corectement cette fonction, le travail effectué à l'intérieur devient "transparent" pour la personne qui utilise la fonction.
Il y a d'un autre côté le résultat renvoyé par la fonction. Et lorsqu'on utilise une fonction, seule cette valeur nous intéresse.


A l'intérieur de ta fonction Pileface() tu prends un nombre aléatoire, qui n'est autre que le résultat de la fonction Rnd() (tu vois bien ici qu'on ne sait pas ce qui se passe à l'intérieur de cette fonction Rnd() et que ça n'a aucune importance) et si ce nombre est inférieur à 0,5 on défini que la fonction doit renvoyer la valeur 0 (zéro), sinon elle doit renvoyer la valeur 1.

Dans ta macro tu ne vois que la valeur renvoyée par ta fonction Pileface(), c'est à dire soit 0 (zéro) soit 1, zéro représentant "pile" et 1 représentant "face".
Tu vois donc que tu n'as pas, dans ta macro, de valeur inférieure à 0,5 ou supérieure à 0,5 tu as simplement la valeur 0 ou la valeur 1.

Est-ce un peu plus clair ?
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
251
Réponses
3
Affichages
326

Statistiques des forums

Discussions
312 888
Messages
2 093 336
Membres
105 695
dernier inscrit
Cramos