Bonjour,
Voici un exercice que je ne parviens pas à résoudre:
On propose l'algorithme ci-contre écrit en langage AlgoBox:
Que fait cet algorithme?
Pourriez vous m'aider SVP ?
MERCI D'AVANCE
Il y a encore une petite faute.
Enfaite vers la fin de l'algorithme L[j] PREND_LA_VALEUR x et FIN_POUR sont normalement inversés.
Salut,
Je ne connais pas du tout algobox, mais de ce que j'ai compris:
on créer un vecteur L de taille N, dont les entrées sont -1 ou +1, et cela dépend de la valeur de a.
Je ne sais pas ce qu'est exactement floor(2*random()), en algobox mais je suppose que floor(x) = partie entière de x, et random() génère simplement aléatoirement un nombre (ce serait d'autant plus joli si ce nombre était compris entre 0 et 1, c'est peut être le cas, surement... je sais pas).
Donc que fais ton algorithme:
il génère N nombres aléatoires , dont il prends le double (i.e.
) et inscris dans le vecteur L si le double a une partie entière nulle (auquel le coeff sera -1) ou pas (auquel cas le coeff sera 1).
Par exemple si N=5,
alors on prends 5 nombres au bol
On prends le double
On regarde la partie entière
On met -1 dans le vecteur L lorsque la partie entière est 0 et 1 sinon, et donc ton algorithme affiche:
Si les nombres générés sont effectivement entre 0 et 1, tu devrais voir (si la fonction random() sur algobox est bien faite) qu'il y a à peu près le même nombre de 1 que de -1 dans ton vecteur L particulièrement si N est grand (ça s'appelle le théorème central limite).
ah oui juste je me suis planté dans la boucle, alors J affiche l'état de x à chaque nouvelle génération d'un nombre aléatoire sur lequel on fais +1 si la partie entière est non nulle est -1 si elle est nulle.
Donc dans le cas de l'exemple que je t'ai donné on a
et pour N grand tu devrais observer que la dernière composante devrait pas être trop loin de 0.
réfléchi....
j'ai déjà quasiment tout fait....
(de plus la réponse se trouve implicitement dans ce que j'ai écris précédemment)
non, ca c'est la fonction random() qui le fait....
mais tu es sur la bonne voie. Essaie de comprendre pourquoi j'ai dis:
quoi? quelle robot? quelle abscisse? Tu n'as pas écris ça dans la donnée.....
on va prendre un truc plus simple alors:
Imagine qu'on ait une pièce et qu'on joue a pile ou face et on note le résultat comme suit:
on commence à zéro et chaque fois que la pièce tombe sur pile on fait +1 chaque fois qu'elle tombe sur face on fait -1.
Donc je commence l'expérience:
1er lancé: pile
le compteur est a 1
2e lancé: pile
le compteur est a 2
3e lancé: pile (on se pose presque la question si la pièce est truquée...)
le compteur est a 3
4e lancé: face
le compteur est a 2
5e lancé: pile
le compteur est a 3
etc....
après le 1000000000000000000000000000000000000000000000000000000e lancé le compteur il devrait être à combien si la pièce n'est pas truquée?
oui effectivement mais normalement quand on joue a pile ou face il y a autant de chance qu'il y ait pile ou face. Et donc sur un très grand nombre de lancers, ça te paraitrait normal qu'il y ait 99% de pile et 1% de face?
on est d'accord donc quelle devrait être la proportion de pile et de face?
et donc à combien devrait être le compteur?
0 même puisqu'il y a autant de pile que de face on fais autant de fois +1 que -1 et donc au final ils s'annulent.... c'est clair pour toi jusqu'ici?
parfait, maintenant on va faire le lien avec ton algorithme:
on fais le même jeu mais cette fois au lieu de tirer un pièce on prend un nombre au hasard entre 0 et 1, et on fais +1 au compteur quand le nombre est plus petit que 0.5 et -1 au compteur quand le nombre est plus grand que 0.5
A combien devrait être le compteur quand on fais l'expérience beaucoup beaucoup de fois?
PS:c'est pas très important mais on suppose que le nombre au hasard ne peut pas être 0.5, ça simplifie les chose.
génial ,
donc maintenant je prends un nombre entre 0 et 1, je fais le double de ce nombre, qu'est-ce qui va faire que le double est plus petit ou plus grand que 1?
Je ne sais pas.. c peut etre le nombre choisi qui va faire que le double est plus petit ou plus grand que 1
tout a fait, mais tu peux poser une condition.... du genre:
si le nombre tiré au hasard est [à compléter] alors le double est [à compléter]
c'est quoi alors la condition?
et maintenant que tu as quasiment toutes les clés, à quoi il sert ton algorithme?
(je te rappelle que les "experiences" qu'on vient de faire étaient dans un cadre parfait, alors que ton ordi il est dans la réalité)
non... c'est quoi la condition sur le nombre tiré au hasard pour que le double soit plus grand que 1?
ok, on résume:
le compteur est à 0 (x dans ton algo)
1) ton ordi prends un nombre au hasard (a dans ton algo) entre 0 et 1 grâce à la fonction random() il fais le double de ce nombre et prends la partie entière qui est soit 1 si le nombre de base est plus grand que 0.5 soit 0
2) si la partie entière est 1 il fais +1 au compteur si elle vaut 0 il fait -1 au compteur
3) il enregistre l'état du compteur à ce stade dans un vecteur (L dans ton algo)
4) il recommence au point 1)
il fais ça plein de fois, dans un cas idéal ton compteur il est à combien à la fin?
Je te rappelle que dans mon dernier poste, j'ai fais l'hypothèse qu'on est dans un monde parfait, et donc tu peux pas répondre en essayant sur ton ordi.... t'es obligé(e) de réfléchir...
(d'ailleurs ne fais pas la même erreur que moi, l'ordi ne réinitialise pas le compteur à chaque fois qu'il recommence au point 1) )
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :