Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 2575
Réponses : 27
Type : discussion
Etat : réponses autorisées

Hasard

Wolfed le 24/10/2009 à 23:20
Bonjour à tous !
Je viens de découvrir ce super site très complet sur la TI82 (même si je possède une 83, ça m'aide beaucoup...)
J'ai décidé l'autre jour de créer un petit programme simple, sachant que je n'ai jamais appris la programmation sur calculatrice (je me suis simplement aidé de programmes déjà faits et j'ai regardé quelles commandes faisaient quoi).
Et finalement je trouve ça plus facile que ça n'en a l'air !
je vous expose donc mon 1er programme et j'espère que vous pourrez m'aider.
Il s'agit tout simplement du célèbre jeu du juste prix (eh oui, encore un !), un chiffre au hasard et il s'agit de le retrouver grâce aux plus ou aux moins. J'ai trouvé ça sympa pour commencer.
Voici le programme :

Code

:Lbl AA
:randInt(1,10000)->N
:Lbl BB
:ClrHome
:Input "TROUVE LE NOMBRE",X
:If X<N
:Then
:Disp " "  (pour sauter un ligne)
:Disp "TROP PETIT"
:Disp " "
:Disp "°*PRESS ENTER*°"
:Pause
:ClrHome
:GotoBB
:End
:If X>N
::Then
:Disp " "
:Disp "TROP GRAND"
:Disp " "
:Disp "°*PRESS ENTER*°"
:Pause
:ClrHome
:GotoBB
:End
:If X=N
:Then
:Disp " "
:Disp "°*YOU WIN*°"
:Disp " "
:Disp "°*APPROVED*°"
:Disp " "°*BY (votre nom)*°"  (juste pour le fun :D)
:Pause
:ClrHome
:Goto X
:End
:Lbl X
:Menu("RECOMMENCE ?","OUI",AA,"NON",CC)
:Lbl CC
:Stop
:Output(1,1"
:End


Bon voilà, j'ai aussi pensé à rajouter dans le menu "Niveau suivant" avec un programme similaire qui dit "Plus grand" et "Plus petit" uniquement dans un encadrement de la solution, pour des valeurs trop éloignées, le programme indiquerait "Trop loin" sans que le joueur sache si il est trop haut ou trop bas.

Enfin bref, tout ça pour demander si il y a du superflu dans mon programme (pour l'alléger) et si il est possible d'ajouter facilement (sans trop changer quoi que ce soit) un compteur pour savoir en combien de coups on a trouvé le bon numéro.

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

Ah, et une autre question qui n'a rien a voir, j'ai commencé un autre programme qui traduit l'alphabet en morse. Il est sous la forme :

Code

:ClrHome
:Menu("-ALPHABET-","MORSE",MO)
:Lbl MO
:Input "LETTRE : ",X
:If X=A
:Then
:Disp " "    (toujours la ligne sautée :D)
:Disp " .-"
:Pause
:ClrHome
:Goto MO
:End

:If X=B
:Then
:Disp " "
:Disp " -..."
:[...]


Bon, je sais qu'il existe probablement un moyen plus rapide de faire ça, mais là n'est pas la question : en continuant ainsi jusqu'à Z, le programme marche parfaitement SAUF pour la lettre C et la lettre E. J'ai bien regardé, il n'y a aucune faute, mais le programme s'obstine à me répondre " .-" (le morse de la lettre A) pour les lettres C et E, et aucune autre. J'ai essayé de changer le " .-" en "*(" par exemple, le problème persiste.
D'ou vient-t-il ?

De plus, il y aurait-il un moyen efficace de faire la conversion inverse (de morse en lettres) et l'ajouter au menu sans refaire tout un programme ?

Merci d'avance pour toutes vos réponses (si vous avez le courage de m'aider et de me lire crazy.gif )
Sangohan38 le 24/10/2009 à 23:28
Ton problème est simple: en testant si X=A où B ... il regarde la valeur affecter aux variables A,B ... .
Il te suffit donc de donner une valeur à tes variables pour résoudre ton problème.

Et le X n'existe pas dans l'alphabet morse car tu fait varier la variable X.
Dans ce cas, utilise Theta dans ton input plutôt que X.

Enfin pour ton problème du morse à la lettre ça peut être faisable en utilisant soit le graphe soit des menus et cela risque d'être long et compliqué mais je vais essayer de m'atteler à la tache.

Sangohan38

PS: On peut raccourcir ton programme du juste prix: fait une recherche sur le forum avec plus où moins, trouver un nombre ...
Wolfed le 24/10/2009 à 23:39
Erf, effectivement je n'avais pas prévu ça...
Je viens de le corriger, ça marche impeccable, merci happy.gif
Faut être vachement attentif pour écrire un programme qui fonctionne quand même moodforlove.gif
S.k-bo le 25/10/2009 à 01:53
Pour ton jeu du juste prix qui marche super bien pouvons nous metre une palette de nombre plus grande car là c'est compris entre 0 et 1 et même je crois que ca n bouge pas de 6 exemple un X = de 0 à 100 non ??
S.k-bo le 25/10/2009 à 01:55
Je reconfirme il s'agit seulement du nombre 6 à trouver donc ne m'y connaissant pas en programtion, je ne peut pas élargir le nombre à trouver
sypotu le 25/10/2009 à 06:11
non il est compris entre 1 et 10 000 happy.gif
tu as du faire une erreur
Wolfed le 25/10/2009 à 09:51
En effet, mais l'erreur provient peut-être du 'randInt' qui peut être facilement confondu avec le 'rand' pour les possesseurs de calculatrices françaises qui ont 'entAléat' ou 'NbrAléat'
S.k-bo le 25/10/2009 à 11:20
Le problème c'est qu'en mettant entaléat, il y a une parenthèse à la fin et que quand je lance le jeu ca me met erreur syntaxe sur cette ligne
Donc que faut-il ajouter après entaléat( ???
Merci de vos réponses
Rézus le 25/10/2009 à 11:33
tu dois rajouter 1,10000->N après la parenthèse.
S.k-bo le 25/10/2009 à 11:57
Merci merci beaucoup ca marche niquel =')
Wolfed le 25/10/2009 à 12:13
Bon, je me suis risqué à ajouté un compteur de coups, et évidemment, il me fait n'importe quoi XD

Code
Lbl AA
:randInt(1,10000)->N
:S=0  <--- (pour faire commencer le score à 0)
:Lbl BB
:ClrHome
:Input "TROUVE LE NOMBRE",X
:If X<N
:Then
:Disp " " 
:Disp "TROP PETIT"
:Disp " "
:Disp "°*PRESS ENTER*°"
:S+1=S   <--------
:Pause
:ClrHome
:GotoBB
:End
:If X>N
::Then
:Disp " "
:Disp "TROP GRAND"
:Disp " "
:Disp "°*PRESS ENTER*°"
:S+1=S   <--------
:ClrHome
:GotoBB
:End
:If X=N
:Then
:Disp " "
:Disp "°*YOU WIN*°"
:Disp " "
:Disp "°*APPROVED*°"
:Disp " "°*BY (votre nom)*°" 
:Pause
:ClrHome
:Output(3,7,S   <---------
:Output(4,6,"COUPS") <----
:Pause
:Goto X
:End
:Lbl X
:Menu("RECOMMENCE ?","OUI",AA,"NON",CC)
:Lbl CC
:Stop
:Output(1,1"
:End


Et si je le fais en 20 coups, il me dit 132 crazy.gif
Qu'est ce qui ne va plus ?
PS : J'ai changé la valeur X du chiffre choisi en valeur thêta au cas où glasses.gif
Rézus le 25/10/2009 à 12:39
Il faut marquer S+1->S et non S+1=S.
Wirekey le 25/10/2009 à 12:56
Wolfed a écrit :
Bon, je me suis risqué à ajouté un compteur de coups, et évidemment, il me fait n'importe quoi XD


Et si je le fais en 20 coups, il me dit 132 crazy.gif
Qu'est ce qui ne va plus ?
PS : J'ai changé la valeur X du chiffre choisi en valeur thêta au cas où glasses.gif


Code
Lbl AA
0ü ( ) S
randInt(1,10)ü ( ) N
Lbl BB
ClrHome
Repeat X=N
Input "TROUVE LE NOMBRE",X
S+1ü ( ) S
If X<N
Then
Disp " ","TROP PETIT"," ","?*PRESS ENTER*?"
Pause
ClrHome
End
If X>N
Then
Disp " ","TROP GRAND"," ","?*PRESS ENTER*?"
Pause
ClrHome
End
End
Disp "GAGNER EN :
Output(3,7,S
Output(4,6,"COUPS"
Pause
ClrHome
Menu("RECOMMENCE ?","OUI",AA,"NON",CC)
Lbl CC
Output(1,1,"


Voila j'lai modifié rapidement
Il marche Mais tu peux grandement l'améliorer
pitilolo le 25/10/2009 à 12:59
bah oui S+1=S c'est pour tester dans un if si S+1 et S ont la meme valeur.
Rézus le 25/10/2009 à 13:10
Ce qui est tout à fait impossible (en tout cas avec les lois de mathématiques utilisées et définies par je ne sais plus qui)
Wolfed le 25/10/2009 à 13:15
En effet, c'est beacoup mieux comme ça ^^
Merci pour vos corrections !
Je pense que je vais faire pluieurs niveaux de difficulté, comme prévu plus haut.
pitilolo le 25/10/2009 à 13:30
pour le choix du niveau tu peut faire:


Code

output(2,1,"choix du niveau
input Z
randInt(1,Z)ü ( ) N



le niveau sera compri entre 1 et la variable Z
Sangohan38 le 25/10/2009 à 13:44
Ou bien tu met un seul Input:

Code
Input "CHOIX DU NIVEAU:",Z
Int randZ+1->N


Sangohan38
Wirekey le 25/10/2009 à 13:55
Ou sinn avec un log décimal :

log 1 ( Premier niveau ) = 10
log 2 = 100
log 3 = 1 000
log 4 = 10 000
...
pitilolo le 25/10/2009 à 13:57
mais tu peut pas choisir la position de ton texte
c pour ca que je trouve que c mieux d'utiliser output
Sangohan38 le 25/10/2009 à 14:02
Si dans ton cas on peut choisir la ligne où le texte sera afficher en ajoutant des Disp "" avant l'input.

Sangohan38
Wirekey le 25/10/2009 à 14:12
Hum escusé moi ^^ Jme suis totalement planté pour les logarithme ^^

Code
Lbl AA
Input "CHOIX DU LEVEL",N
ý^ ( ) (N)ü ( ) N
0ü ( ) S
randInt(1,N)ü ( ) N
Lbl BB
ClrHome
Repeat X=N
Input "TROUVE LE NOMBRE",X
S+1ü ( ) S
If X<N
Then
Disp " ","TROP PETIT"," ","?*PRESS ENTER*?"
Pause
ClrHome
End
If X>N
Then
Disp " ","TROP GRAND"," ","?*PRESS ENTER*?"
Pause
ClrHome
End
End
ClrHome
Disp "GAGNER EN :
Output(3,7,S
Output(4,6,"COUPS"
Pause
ClrHome
Menu("RECOMMENCE ?","OUI",AA,"NON",CC)
Lbl CC
Output(1,1,"


Voila le programme avec choix du niveau
Wolfed le 25/10/2009 à 14:31
Ou bien encore un menu, mais c'est un peu plus long.

Code

:Menu("DIFFIULTE","FACILE",F,"MOYEN",M,"DIFFICILE",D)
:Lbl F
:randInt(1,1000)->N
:Goto BB
:Lbl M
:randInt(1,10000)->N
:Goto BB
:Lbl D
:randInt(1,100000)->N
:Goto BB
pitilolo le 25/10/2009 à 14:34
en plus avec un menu tu n'a qu'un choix minimun defini par la personne a l'origine du programme
Wirekey le 25/10/2009 à 14:42
Après c'est toi qui vois winkle.gif

Mais bon les possibilité sont "infini" sans menu ...
Wolfed le 25/10/2009 à 14:46
En effet, mais bon, on est déjà très loin du programme original !
(Quand je l'ai commencé, je ne connaissais pas encore la touche NbrAlét et du coup, je mettais moi-même un nombre au hasard et je ne pouvais pas jouer, a moins de tomber amnésique bigmouth.gif )
Wirekey le 25/10/2009 à 14:48
Mdr ^^

Ca donner un mode deux joueurs que tu peut devellopé :

Tu donne un nombre dans un intervalle joueur 2 le devine

Joueur 2 donne un nombre dans le même intervalle. tu le devine

Celui qui fait le plus petit score a gg ...
pitilolo le 25/10/2009 à 16:09
ouai et au debut tu peut mettre un menu pour choisir entre 1 ou 2 joueur