Page 1 of 1

Exercice de dm

Unread postPosted: 09 Jan 2016, 19:06
by Kadjil
Bonjour
Mon prof de math ma donner un exercice de dm sur un programme qui est plutôt costaud (avec le modeste niveau que j'ai en programmation) et que je n'ai pas l'habitude de voir en cours.

Voici l'énoncé :

Préambule - Dans et exercice, on ne demande aucun calcul effectif. Il s'agit seulement d'une occasion, donnée par une situation fort discutable, d'écrire un petit algorithme.
Pour le réveillon de la Saint Sylvestre, Barnabé souhaite distraire l'assemblée pléthorique qu'il a conviée. Aussi a-t-il
conçu un jeu de hasard des plus alléchants.
Le joueur est positionné sur un petit siège éjectable qui
coulisse le long d'un rail.
À l'une des extrémités du rail (en position 2), se trouve une piscine remplie de Champagne.
À l'autre extrémité (en position -3), se trouve une piscine de stockage des eaux usées.
Ce siège avance d'un mètre avec une probabilité égale à 1/3 , sinon, il recule d'un mètre.
Chaque déplacement est indépendant du précédent.
Le jeu s'arrête si le siège se retrouve en position 2 ou en -3 et le joueur est alors éjecté
dans la piscine attenante.
Écrire un programme simulant ce jeu, qui aaffichera "CHAMPAGNE" ou "EAUX
USÉES" en sortie.
Ce programme fournit-il a priori toujours un résultat ?


Pour résumé le siège avance de 1 (avec une proba de 1/3) et recule de 1 (avec une proba de 2/3). Le jeu (si on peut appeler sa un jeu ^^) s'arrête à -3 ou 2.
J'avais pensé à une boucle tant que A est plus grand que -3 et plus petit que 2, mais j'arrive pas à faire des proba sur la calculatrice.
Pouvez vous m'aider ?

Re: Exercice de dm

Unread postPosted: 09 Jan 2016, 21:38
by critor
Dès qu'il y a répétition oui, c'est une boucle. :)

Utilise la commande NbrAléat que tu trouves dans :f41: :f24:.

Elle te tire un nombre au hasard selon une loi uniforme sur [0;1].
Il te suffit donc de tester si NbrAléat<1/3. :)

Re: Exercice de dm

Unread postPosted: 10 Jan 2016, 09:45
by Kadjil
Donc voilà mon programme qui ne marche pas --"

Code: Select all
0->A
0->B
While -3<B<2
(NbrAléat<1/3)->A
If A=0
Then
-1->A
If A=1
Else
1->A
End
A+B->B
End
If B=-3
Then
Disp "eaux ussée"
If B=2
Else
Disp "Champagne"
End

La calculatrice tourne en boucle sans afficher de résultats.

Re: Exercice de dm

Unread postPosted: 10 Jan 2016, 10:35
by Hamza.S
pourquoi ces lignes se suivent?
Code: Select all
If A=1
Else


Code: Select all
If B=2
Else

Re: Exercice de dm

Unread postPosted: 10 Jan 2016, 11:52
by Kadjil
Bah j'avais mis un end à la fin de la première série de if, donc je pensai que c'était bon.

Re: Exercice de dm

Unread postPosted: 10 Jan 2016, 16:04
by noelnadal
J'ai modifié deux choses :

1) La condition pour le while n'était pas bonne. Il faut séparer les deux inégalités, sinon l'interpréteur comprend autre chose : si B = 4 par exemple, alors "-3<B" renvoie 1, et donc "-3<B<2" devient "1<2" ce qui est vrai, alors que ça devrait renvoyer faux.

2) La syntaxe pour le If est : If ... Then ... Else ... End. Pas besoin de rajouter un "If A=1" avant le Else.

Code: Select all
0->A
0->B
While -3<B and B<2
(NbrAléat<1/3)->A
If A=0
Then
-1->A
Else
1->A
End
A+B->B
End
If B=-3
Then
Disp "eaux usées"
Else
Disp "Champagne"
End


C'est optimisable dans le sens où ça pourrait tenir en moins de lignes, mais normalement ce programme fonctionne.

Re: Exercice de dm

Unread postPosted: 10 Jan 2016, 16:12
by Hamza.S
Code: Select all
(NbrAléat<1/3)->A

cette ligne renvoie 0 ou 1
donc j'ai fait ça
Code: Select all
0->A
0->B
While -3<B and B<2
(NbrAléat<1/3)->A
If A=0
-1->A
A+B->B
If B=-3
Disp "eaux usées
If B=2
Disp "Champagne
End

(merci noelnadal pour la correction du While)

Re: Exercice de dm

Unread postPosted: 10 Jan 2016, 16:18
by Kadjil
Merci à vous 2, le programme marche à présent.
Par contre le programme de noelnadal marquer eaux usées et champagne dans le cas où il tombait dans l'eau usées.
Mais ton programme fonctionne Hamza.S merci :)

Re: Exercice de dm

Unread postPosted: 10 Jan 2016, 16:31
by noelnadal
Oui, c'était le même problème avec le Else et le If, je ne l'avais pas remarqué.