Poster un nouveau sujet Poster une réponse
Programme aléatoire
Auteur Message
lovespain
Invité
Posté le : Jeu 08 Déc 2011, 20:15   Citer 

Bonsoir tout le monde !
Alors voilà je dois faire un programme avec l'énoncé suivant:
La calculatrice choisit un nombre entier aléatoire X compris en 1 et 10 inclus
Le joueur fait 3 propositions pour X
Le programme affiche "Perdu" si le joueur n'a pas trouvé X et "GAGNE" s'il a trouvé X

Moi j'ai fait ceci:

:entAléat(1,10)->X
:Input X
:If X=NbrAléat
:Then
:Disp "GAGNE"
:Else
:Disp "PERDU AUTRE CHANCE"
:End
:Input X
:If X=NbrAléat
:Then
:Disp "GAGNE"
:Else
:Disp "PERDU AUTRE CHANCE"
:End
:Input X
:If X=NbrAléat
:Then
:Disp "GAGNE"
:Else
:Disp "Perdu"
:End

Mais le problème c'est qu'il me met toujours Perdu

  Haut de page Bas de page 
 
tilo1996



Autorisation : Membre
Nb de messages : 122
Inscrit le : Sam 23 Avr 2011, 10:47
Posté le : Jeu 08 Déc 2011, 20:31   Citer 

C'est normal happy.gif Deja, la fonction nbraleat n'est pas la bonne, il faut utiliser entaleat(1,10) Et ensuite, il faut stocker ce resultat dans une variable, parce que la technique que tu utilise fait recalculer un nombre aleatoire a la calculatrice a chaque fois. Je te propose ce code


Code
Entaleat(1,10)->X
Prompt A    // Est l'equivalent d'input
If A=X: Then
Disp"Gagné
Stop    // Le stop est important
End
Disp"Essaie encore
Prompt A
If A=X: Then
Disp"Gagné
Stop
End
Disp"Essaie encore
Prompt A
If A=X:Then
Disp"Gagné
Stop
End
Disp"perdu



 Adresse email Haut de page Bas de page 
 
tapenad



Autorisation : Membre
Nb de messages : 197
Inscrit le : Jeu 17 Nov 2011, 13:20
Posté le : Jeu 08 Déc 2011, 20:32   Citer 

essaie ca:

Code

:0->E
:entAléat(1,10)->X
:while1
:Input"NBR",A
:If X=A
:Then
:Disp "GAGNE"
:Stop
:End
:If X[differend de]A
:Then
:Disp"UNE AUTRE CHANCE
E+1->E
:end
:If E=3
:Stop
:end




voila glasses.gif (je ne suis pas sur qu'il marche)
pour changer le nbr de coup change le E=3

----------------------
L’erreur est humaine, mais pour provoquer une vraie catastrophe, il faut un ordinateur.

je suis premier!!!

je m'aime.
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 08 Déc 2011, 20:43   Citer 

Il y a plusieurs dizaines de programmes sur ce thème dans le forum.

Le premier problème dans ton prog est qu'un code faux dans le premier test arrête le programme alors qu'on veut que le programme poursuive encore 2 fois.
Le second problème est que NbrAléat n'est pas un entier mais un aléatoire entre 0 et 1
Le troisième problème est que tu utilises une seule variable pour ta saisie et l'aléatoire.

Il faut imbriquer les tests et utiliser deux variables.

Voici le code le plus proche de l'objectif en structure.
Code
:entAléat(1,10)->Y
:Prompt X
:If X=Y    // premier test
:Then
:Disp "GAGNE
:Else      // premier "sinon" qui introduit la suite
:Disp "PERDU AUTRE CHANCE
:Prompt X
: If X=Y   // second test
: Then
: Disp "GAGNE
: Else     // second "sinon" qui introduit la suite
: Disp "PERDU AUTRE CHANCE
: Prompt X
:  If X=Y  // troisième test
:  Then
:  Disp "GAGNE
:  Else    // ultime "sinon" qui sert à dire qu'on perd
:  Disp "PERDU
:  End     // fin de la dernière instruction
: End      // fin de la seconde instruction
:End       // fin de la première instruction

Ceci est condensé mais s'éloigne de la structure d'origine.
(Le code de tilo représente un bon comprommis)
Code
entAléat(1,10)->Y
EffVar A
Repeat X=Y   // autorise à lire la fin du programme si X=Y
A+1->A       // sert à compter le nombre d'essais
If A=4       // vaut 4 si on a échoué la troisième fois
Then
Disp "PERDU
Stop
End
Prompt X
End      // fin du repeat , ce qui se trouve en dessous n'est pas lu si X=/=Y
"GAGNE   // pas besoin de Disp car c'est à la 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 
 
tilo1996



Autorisation : Membre
Nb de messages : 122
Inscrit le : Sam 23 Avr 2011, 10:47
Posté le : Jeu 08 Déc 2011, 20:58   Citer 

Euh Linkakro es tu sur que mon prog s'arrete apres un echec??? Je le revois et je ne vois pas ce qui pourrait poser un probleme....

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 08 Déc 2011, 21:14   Citer 

J'ai lu trop vite. minied.gif
D'ailleurs ton code présente l'avantage d'être correctement réduit sans trop s'éloigner de la structure de base. Les miens sont soit trop condensés soit pas du tout optimisés.
J'édite mon message.

----------------------
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 
 
Polymorph



Autorisation : Membre
Nb de messages : 118
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Jeu 08 Déc 2011, 23:12   Citer 

Personnellement, le plus condensé et clair que je vois pour moi serait ça :


Code
entAléat(1,10)->Y
EffVar A
Repeat X=Y or A=3  // double condition permettant d'économiser une ou deux ligne de code
A+1->A            // sert à compter le nombre d'essais
Prompt X
End               // fin du repeat
Output(6,5,"GAGNE
If A=3
Output(6,5,"PERDU //Le "Perdu" écrase le Gagné si l'on perd



----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
 Adresse email Haut de page Bas de page 
 
sandro



Autorisation : Membre
Nb de messages : 1366
Inscrit le : Ven 25 Mar 2011, 22:58
Posté le : Ven 09 Déc 2011, 21:38   Citer 

je crois que tu as oublié un End à la fin, et c'est encore optimisable.
ça donnerait donc ça:

Code
entAléat(1,10->Y
EffVar ARepeat X=Y or A=3  // double condition permettant d'économiser une ou deux ligne de code
A+1->A            // sert à compter le nombre d'essais
Prompt X
End               // fin du repeat
Output(6,5,"GAGNE
If A=3
Output(6,5,"PERDU //Le "Perdu" écrase le Gagné si l'on perd
End



----------------------
mort à l'inutile, place à la mémoire libre et aux programmes
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 118
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Ven 09 Déc 2011, 22:47   Citer 

Ma foi, non, je n'avais pas oublié de End oô. J'ai toujours du mal avec le Effvar collé perso crazy.gif

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Sam 10 Déc 2011, 20:02   Citer 

Tu n'as en effet pas oublié de end ... tu as juste mis ton "If A=3 Output(6,5 etc " au mauvais endroit winkle.gif

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL

Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 118
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Sam 10 Déc 2011, 22:06   Citer 

Mais non! Ce n'est pas au mauvais endroit bordel! xD Mais essayez le code quoi!

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
 Adresse email Haut de page Bas de page 
 
The K



Autorisation : Membre
Nb de messages : 850
Inscrit le : Sam 15 Oct 2011, 11:07
Posté le : Dim 11 Déc 2011, 11:04   Citer 

Ah oui non excuse moi je n'avais pas vu le Or après le repeat ahem minied.gif

----------------------
La la la ...

Avez-vous pensé à regarder le manuel avant de demander conseil ? Un manuel est fait avant tout pour être consulté : MANUEL

Vous avez un problème avec l'ordinateur avec votre calculatrice ? SOLUTION EN VIDEO

Mes programmes sur le site : Produit scalaire KMorpion Puissance 4 Mastermind

Mes nouveaux programmes de calcul formel : FCarré FPrime

Projet base de données : ici mais abandonné. Trop de travail ...
 Adresse email Haut de page Bas de page 
 
Polymorph



Autorisation : Membre
Nb de messages : 118
Inscrit le : Dim 13 Nov 2011, 14:26
Posté le : Dim 11 Déc 2011, 18:58   Citer 

Merci! cupsmiley.gif

----------------------

Citer
Le temps est une variable dans une boucle infinie, qu'on ne cesse d'incrémenter.


Polymorph, 23/11/2011
 Adresse email Haut de page Bas de page 
 
lovespain



Autorisation : Membre
Nb de messages : 7
Inscrit le : Jeu 08 Déc 2011, 20:05
Posté le : Mar 27 Déc 2011, 17:34   Citer 

Merci pour tous ces programmes, finalement le prof voulait un programme en while donc du coup j'ai ecrit

Code

entAleat(1,10)->X
Disp "entre un nombre entre 1 et 10"
While A {different de } X
Disp "Essai"
Input A
If A=X
Then
Disp "Gagné"
Else
Disp "Perdu"
End
End
Disp " L'inconnu est", X



voilà, je voulais améliorer mon programme en mettant le nombre de coup utilisé avant que le joueur ait trouvé le bon nombre ainsi que d'aider le joueur en ajoutant + ou -, mais je n'arrive pas avec la boucle While quelqu'un peu m'aider?

 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Jeu 29 Déc 2011, 23:20   Citer 


Code
entAleat(1,10->X
Disp "SAISIS UN NOMBRE ENTRE 1 et 10  // je préfère respecter les majuscules
EffVar E  // pas obligé de sauter une ligne ici
While A-X et E<3 // je teste aussi le nombre d'essais // A-X = A=/=X
E+1->E
EffEcr
Disp "ESSAI
Output(1,7,E  // histoire de faire joli en combinaison avec EffEcr
Prompt A
If A=X
Then
Disp "GAGNE   // pas besoin de guillemets à la fin des disp, output, text...
Stop
Else
Disp "RATE
End
End
Disp "PERDU","L'INCONNUE EST", X



----------------------
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 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes