Poster un nouveau sujet Poster une réponse
Algorithme Pile ou face
Auteur Message
Fuzion



Autorisation : Membre
Nb de messages : 4
Inscrit le : Lun 27 Jan 2014, 19:00
Posté le : Mar 18 Mar 2014, 16:39   Citer 

Bonjour bigmouth.gif

En fait, j'ai un petit problème angry.gif
En maths, on commence la programmation sur calculatrice, la TI 82 Stats(.fr) et pour ça on a un exercice à faire
Un algorithme avec pile ou face:

Le programme génère Pile ou face
Si PILE : Rejouer 1 fois
Si FACE : Rejouer 2 fois
Noter les résultats

Pour l'instant, j'ai le début


Code
EntAléat(1,2)->Z
If Z=1
Disp "PILE"
If Z=2
Disp "FACE"



Mais pour la suite, les "rejouer 1 ou 2 fois", c'est là que j'ai besoin d'aide
J'ai essayé de créer un second programme, faisant appel à celui là pour les relances, mais il relance à l'infinie (même si j'aimerais l'avoir en 1 programme)

Du coup, je fais appel à qui saura m'aider..
Merci bigmouth.gif

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 18 Mar 2014, 19:11   Citer 

Montres ce que tu as tenté avec le programme principal. Je ne sais pas ce que tu as fait correctement ou pas.

Le sujet est trop flou.
Les lancers supplémentaires peuvent-ils causer d'autres lancers supplémentaires ? Si c'était le cas, on ne cesserait jamais de rejouer puisqu'on doit toujours rejouer, peu importe le nombre de parties supposé à atteindre.
S'il n'y avait pas ce problème de sujet, je t'aurais conseillé d'utiliser des variables mémoire comme des compteurs pour contrôler le nombre de parties.
Voici un code brut, sans optimisation, supposé respecter ma compréhension du sujet.
Code
0->A // numéro de partie
1->B // total parties
While A<B
A+1->A
randInt(1,2->Z
If Z=1
B+1->B
If Z=2
B+2->B
Pause Z
End



Si seul le premier lancer donne lieu à de nouvelles tentatives, alors envisager d'utiliser des boucles est pénible et sans boucle on a quand même besoin de variables intermédiaires.

Il y a peu de code pour générer chaque aléatoire donc je me permet d'écrire ce code plusieurs fois à l'intérieur des alternatives. Par ailleurs l'essentiel me semble être d'afficher donc je ne m'ennuie pas à tout stocker.
Code
randInt(1,2->Z
Pause Z
If Z=1
Then
Pause randInt(1,2
Else
Pause randInt(1,2
Pause randInt(1,2
End

Puis je simplifie.
Code
randInt(1,2->Z
Pause Z
Pause randInt(1,2
If Z=2
Pause randInt(1,2->Z


Pour écrire l'aléatoire une seule fois, je le met dans une boucle.
Code
0->A // numéro de partie
1->B // total parties
While A<B
A+1->A
randInt(1,2->Z
Pause Z
If A=1
Then
If Z=1
B+1->B
If Z=2
B+2->B
End
End

Cela peut bien sûr s'optimiser avec d'autres valeurs.
Code
0->A // numéro de partie
3->B // total parties
While A<B
A+1->A
randInt(1,2->Z
Pause Z
If A=1 and Z=1
B-1->B
End


On peut aussi optimiser en changeant l'ordre des actions et avec la variable Ans/Rép.

Code
0->A // numéro de partie
3->B // total parties
While A<B
A+1->A
Pause randInt(1,2
If A=1 and Ans=1
B-1->B
End



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Fuzion



Autorisation : Membre
Nb de messages : 4
Inscrit le : Lun 27 Jan 2014, 19:00
Posté le : Mer 19 Mar 2014, 0:01   Citer 

Salut

En fait, ce que j'ai fait, c'est dans le post principal, le tout, car ce que j'ai tenté marchait pas, du coup, j'ai que la base, le premier lancer
Et c'est à partir de ce seul lancer, que le pgrm rejouera ou bien 1 fois, ou bien 2 fois

En gros, en français :


Code
Générer soit pile, soit face
SI PILE : Rejouer 1 fois, finir et afficher les résultats
SI FACE : Rejouer 2 fois, finir et afficher les résultats


Les deux lancers secondaires ne relanceront pas, seul le premier décide de rejouer

Ensuite, merci beaucoup pour l'aide, hélas, comme je débute depuis peu dans l'univers vaste de la TI, je saurais pas trop quoi faire de tes morceaux (?) de programme ahh.gif

Donc si ce serait possible d'avoir le programme entier ?

Je répète ;


Code
Aléatoire 1 ou 2 (=PREMIER LANCER)
Si 1 (du premier lancer)
Aléatoire 1 ou 2

Si 2 ( le 2 dans le premier lancer)
Aléatoire 1 ou 2
Aléatoire 1 ou 2 (donc 2x)

1 = Pile
2 = Face



J'aurais pensé à :
D’abord faire es jeux, les générations aléatoires
PUIS alors afficher les résultats
Mais je sais pas trop comment rédiger ça

J'avais fait un essai moi même

Code
Lbl 1
BinAléat (1,2)->Z
Si Z=1
Disp PILE
Goto Lbl 8
Si Z=2
Disp FACE
Goto Lbl 9
Lbl 9
BinAléat (1,2)->X
If X=1
Disp PILE
If X=2
Disp FACE
Lbl 8
BinAléat (1,2)->S
If S=1
Disp PILE
If S=2
Disp FACE
Pause


Seulement, soit le jeu jouait à l'infinie, sinon, il me relancait 2x avec pile au premier lancer (qui doit jouer 1x )


Par ailleurs, je connait pas (pas encore) les commandes "While A<B" Et "A+1->1" (et avec autres valeurs), elle font quoi? moodforlove.gif

Je sais pas trop comment expliquer autrement, mais merci de votre aide minied.gif

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mer 19 Mar 2014, 0:28   Citer 

Consulte le tutoriel de ma signature et un manuel. Le tutoriel de Mdr1 est disponible aussi.

Chacune de mes balises contient un programme différent pour réaliser ce que tu veux.

Mon objectif est de montrer plusieurs solutions et des étapes de développement de l'optimisation.

Ton deuxième code de ton deuxième message se traduit purement en mon deuxième code de mon premier message.

"->" représente la touche "sto->" au dessus de ON. C'est l'affectation d'une valeur.
Quand j'écris A+1->A cela incrémente.

While = Tant Que
se trouve dans le menu prgm
C'est un mot-clé commençant une boucle. Elle se termine au End.
La boucle est exécutée tant que la condition est vraie. Le test est aussi effectué avant de rentrer.

Le symbole "<" est avec "=" dans 2nde+math(test)

La fonction BinAléat/randBin(a,p,n) sert à réaliser n expériences de a lancers de pièce à probabilité p. Cela donne un nombre pour une expérience ou une liste de nombres pour plusieurs expériences.

La fonction entAléat/randInt(a,b) permet de générer un entier aléatoire équiprobable entre a et b inclus.

Pause permet d'attendre, d'afficher un calcul ou une variable, de parcourir l'affichage s'il dépasse de l'écran et stocke le résultat dans Rép/Ans.
Ans=answer=Rép= dernière réponse

Les tests se font ainsi.
Code
If condition
une_seule_action


Code
If condition
Then // alors
une_ou_plusieurs_actions
Else  // sinon // facultatif
une_ou_plusieurs actions
End // fin



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Fuzion



Autorisation : Membre
Nb de messages : 4
Inscrit le : Lun 27 Jan 2014, 19:00
Posté le : Mer 19 Mar 2014, 22:59   Citer 

Pour l'instant, je suis le tutoriel TI Basic sur openclassrooms, j'irai voir le tiens par la suite clown.gif

Ok, je comprends, merci pour les explications !


Code
randInt(1,2->Z
Pause Z
If Z=1
Then
Pause randInt(1,2
Else
Pause randInt(1,2
Pause randInt(1,2
End



Donc j'arrive à générer des 1,1 sinon 2,1,1 etc..
Mais où placer les commandes qui annonceront Pile/Face à la place des 1/2 ?

En tout cas, merci beaucoup pour l'aide ! bigmouth.gif

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 20 Mar 2014, 0:27   Citer 

Mon tutoriel aide à passer de l'algorithmie à la calculatrice. Mdr1 enseigne toute la calculatrice.

Remplaces les affichages Disp ou Pause par des alternatives qui affichent les messages.

Comme je veux alléger le code, je montrerai un appel de programme.

Nomme ce programme PILEFACE pour que ce soit cohérent avec mon code d'appel.

Code
 // programme PILEFACE
entAléat(1,2->Z
If Z=1
Disp "PILE"
If Z=2
Disp "FACE"

Ceci appelle le programme PILEFACE.
La comande "prgm" est dans le menu prgm et la liste des programmes déjà existants pour saisir rapidement est dans prgm\exec de l'éditeur.

Code
prgmPILEFACE
If Z=1
Then
prgmPILEFACE
Else
prgmPILEFACE
prgmPILEFACE
End



----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Fuzion



Autorisation : Membre
Nb de messages : 4
Inscrit le : Lun 27 Jan 2014, 19:00
Posté le : Jeu 03 Avr 2014, 22:24   Citer 

Salut

Certes avec du retard, mais merci beaucoup moodforlove.gif

 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink