Forum

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

Calcul mental (TI 82 stats et 83)

mystery_enigma le 14/04/2012 à 20:16
Petit jeu de calcul mental conçu en basic sur une TI 82 stats(fr) (marche bien sûr pour TI 82 et 83 regular) avec 30 niveaux de difficulté croissante, 3 vitesses d'exécutions différentes selon le niveau atteint et un système de sauvegarde du nom des vainqueurs.
Voici l'adresse de téléchargement : http://www.ti-bank.fr/index.ph[...]amp;id=10000256
Et voici le code :
Code
:If Θmin≠int(Θmin
:Then
:   0→Θmin
:   "→Str0
:End
:ClrHome
:Lbl Z
:Menu("  CALCUL MENTAL ","    JOUER",A,"  VAINQUEURS",B,"   QUITTER",C
:Lbl A
:1→H
:DelVar Q0→L
:DelVar Z0→N
:ClrHome
:Output(1,1,"TON PSEUDO STPL =)
:Disp "","
:Input Str1
:ClrHome
:Output(3,1,"OK "+Str1
:Output(4,1,"C'EST QUAND TU  VEUX !
:Pause
:Repeat N=30
:   DelVar Q0→H
:   ClrHome
:   (N>9)randInt(11,19→J
:   (N>19)randInt(11,20→M
:   (N<10)randInt(2,9&#8594;B
:   (N<20)randInt(2,9&#8594;C
:   (B+J)*(C+M&#8594;D
:   100int(D/100&#8594;L
:   10int(D/10&#8594;F
:   If F>99:F-L&#8594;F
:   D-10int(D/10&#8594;G
:   74((L=900)+(F=90)+(G=9))+73((L=800)+(F=80)+(G=8))+72((L=700)+(F=70)+(G=7))+84((L=600)+(F=60)+(G=6))+83((L=500)+(F=50)+(G=5))+82((L=400)+(F=40)+(G=4))+94((L=300)+(F=30)+(G=3))+93((L=200)+(F=20)+(G=2))+92((L=100)+(F=10)+(G=1))+102((G=0)+((L>F)(F=0&#8594;H
:   Output(1,1,"LEVEL
:   Output(1,8,N+1
:   Output(7,1,"IL TE RESTE  s
:   If B+J>9
:      Output(4,1,B+J
:   If B+J<10
:      Output(4,2,B
:   Output(4,3,"*
:   Output(4,4,C+M
:   Output(4,6,"=
:   For(I,1,4
:      Disp "
:   End
:   For(I,200-50(N>4)-30(N>14),1,&#8254;1
:      Output(7,13,int(I/40
:      getKey&#8594;K
:      K+Q&#8594;Q
:   End
:   ClrHome
:   If Q=H
:   Then
:      1+N&#8594;N
:      For(I,1,80
:         Output(4,4,"LEVEL UP !
:      End
:      ClrHome
:      If N=5
:      Then
:         Output(4,3,"PLUS VITE !
:         For(I,1,300
:         End
:      End
:      If N=10
:      Then
:         Disp "BIEN, ON VA","POUVOIR PASSER","AUX CHOSES ","SERIEUSES =}
:         For(I,1,500
:         End
:      End
:      If N=15
:      Then
:         Output(1,1,"AUGMENTER
:         Output(2,1,"VITESSE ?
:         For(I,1,800)
:         End
:         ClrHome
:         Output(3,1,"TU PENSAIS
:         Output(4,1,"VRAIMENT AVOIR"
:         Output(5,1,"LE CHOIX  x1
:         Output(5,12,"D
:         For(I,1,500
:         End
:      End
:      If N=20
:      Then
:         Disp "IMPRESSIONANT !","MAIS SERAS TU","CAPABLE D'ALLER","JUSQU'AU BOUT ?
:         For(I,1,500
:         End
:      End
:      ClrHome
:   Else
:      Goto &#920;
:   End
:End
:Lbl &#920;
:Output(3,1,Str1
:If N=30
:Then
:   Output(2,1,"FELICITATION
:   Output(4,1,"TU AS GAGNE !
:   Output(5,1,"TON NOM ENTRERA
:   Output(6,1,"DANS LA LEGENDE!
:   Pause :ClrHome
:   Output(2,1,"ENFIN DANS LA
:   Output(3,1,"RUBRIQUE DEDIEE
:   Output(4,1,"AU VAINQUEURS
:   Output(5,1,"POUR L'INSTANT..
:   "("+Str1+")"+Str0&#8594;Str0
:   1+&#920;min&#8594;&#920;min
:Else
:   Output(2,1,"DESOLE
:   Output(4,1,"TU  AS PERDU...
:   Output(5,1,"TON SCORE EST DE
:   Output(6,8,N
:End
:Pause
:ClrHome
:Goto Z
:Lbl B
:If &#920;min>0
:Then
:   length(Str0&#8594;L
:   &#920;min&#8594;I
:   For(I,1,&#920;min
:      inString(Str0,"("&#8594;N
:      inString(Str0,")"&#8594;M
:      sub(Str0,N+1,M-1-N&#8594;Str8
:      Disp Str8
:      If I/7=int(I/7:Pause
:      sub(Str0,M+1,L-M)+"("+Str8+")&#8594;Str0
:   End
:Else
:   Output(4,7,"VIDE
:End
:Pause
:ClrHome
:Goto Z
:Lbl C
:ClrHome
:Disp "BY MOMOTHEFIRST","       &#8804;)


Bien évidemment, vos remarques seront les bienvenues happy.gif

Désolé pour l'apparence de mon code sur le topic; le plus simple serait de télécharger le fichier au format .83 et de l'ouvrir avec TI-editor (ou autre éditeur de programme TI 83) car j'ai l'impression que les subtilités de mon code n'ont pas été appréciées lorsque je l'ai posté ...https://tout82.pages-perso.free.fr/forum/images/smileys/goutte.gif
sandro le 14/04/2012 à 20:49
désolé, je n'arrive pas à ouvrir ton lien (mon navigateur depuis quelques mois ne m'ouvre plus les pages de TI-Bank). Donc si tu veut que je puisse t'aider (et faire proffiter de ton programme au plus grand monde), ce serait bien que tu remplace les carractères spéciaux qui ne passent pas.

Sandro
The K le 14/04/2012 à 21:24
Y aurait-il moyen d'avoir une traduction en français en plus de la suppression des caractères spéciaux ? Merci winkle.gif

(moi ça me gène pas ... mais ça pourrait en embêter d'autres !)
Persalteas le 14/04/2012 à 21:33
C'est le problème des programmes recopiés avec TI Editor.

Je te conseille de le recopier à la main si tu veux que les gens du forum le recopient et le commentent. (et en français si possible)


Merci d'avance, et désolé pour le forum qui n'accepte pas les caractères spéciaux...
tapenad le 15/04/2012 à 00:25
mais si la question est par exemple 2342,232+6754,356 ( de tête environ 9096,588) il suffit de taper (aïe) le même calcul non?
linkakro le 15/04/2012 à 00:58
Voir ce sujet : https://tout82.pages-perso.fre[...].php?sujet=1947
J'y ai écrit un test de détection de calcul.
mystery_enigma le 15/04/2012 à 10:59
Code
:If ([thêta)min](différent de)ent([(thêta)min]
:Then
:   0->[(thêta)min]
:   "->chaîne0
:End
:EffEcr
:Lbl Z
:Menu("  CALCUL MENTAL ","    JOUER",A,"  VAINQUEURS",B,"   QUITTER",C
:Lbl A
:1->H
:EffVar Q0->L
:EffVar Z0->N
:EffEcr
:Output(1,1,"TON PSEUDO STPL =)
:Disp "","
:Input chaîne1
:EffEcr
:Output(3,1,"OK "+chaîne1
:Output(4,1,"C'EST QUAND TU  VEUX !
:Pause
:Repeat N=30
:   Effvar Q0->H
:   EffEcr
:   (N>9)entAléat(11,19->J
:   (N>19)entAléat(11,20->M
:   (N<10)entAléat(2,9->B
:   (N<20)entAléat(2,9->C
:   (B+J)*(C+M->D
:   100ent(D/100->L
:   10ent(D/10->F
:   If F>99:F-L->F
:   D-10ent(D/10->G
:   74((L=900)+(F=90)+(G=9))+73((L=800)+(F=80)+(G = 8))+72((L=700)+(F=70)+(G=7))+84((L=600)+(F=60)+(G=6))+83((L=500)+(F=50)+(G=5))+82((L=400)+(F=40)+(G=4))+94((L=300)+(F=30)+(G=3))+93((L=200)+(F=20)+(G=2))+92((L=100)+(F=10)+(G=1))+102((G=0)+((L>F)(F=0->H
:   Output(1,1,"LEVEL
:   Output(1,8,N+1
:   Output(7,1,"IL TE RESTE  s
:   If B+J>9
:      Output(4,1,B+J
:   If B+J<10
:      Output(4,2,B
:   Output(4,3,"*
:   Output(4,4,C+M
:   Output(4,6,"=
:   For(I,1,4
:      Disp "
:   End
:   For(I,200-50(N>4)-30(N>14),1,-1
:      Output(7,13,ent(I/40
:      codeTouche->K
:      K+Q->Q
:   End
:   EffEcr
:   If Q=H
:   Then
:      1+N->N
:      For(I,1,80
:         Output(4,4,"LEVEL UP !
:      End
:      EffEcr
:      If N=5
:      Then
:         Output(4,3,"PLUS VITE !
:         For(I,1,300
:         End
:      End
:      If N=10
:      Then
:         Disp "BIEN, ON VA","POUVOIR PASSER","AUX CHOSES ","SERIEUSES =}
:         For(I,1,500
:         End
:      End
:      If N=15
:      Then
:         Output(1,1,"AUGMENTER
:         Output(2,1,"VITESSE ?
:         For(I,1,800)
:         End
:         EffEcr
:         Output(3,1,"TU PENSAIS
:         Output(4,1,"VRAIMENT AVOIR"
:         Output(5,1,"LE CHOIX  x1
:         Output(5,12,"D
:         For(I,1,500
:         End
:      End
:      If N=20
:      Then
:         Disp "IMPRESSIONANT !","MAIS SERAS TU","CAPABLE D'ALLER","JUSQU'AU BOUT ?
:         For(I,1,500
:         End
:      End
:      EffEcr
:   Else
:      Goto (thêta)
:   End
:End
:Lbl (thêta)
:Output(3,1,chaîne1
:If N=30
:Then
:   Output(2,1,"FELICITATION
:   Output(4,1,"TU AS GAGNE !
:   Output(5,1,"TON NOM ENTRERA
:   Output(6,1,"DANS LA LEGENDE!
:   Pause :EffEcr
:   Output(2,1,"ENFIN DANS LA
:   Output(3,1,"RUBRIQUE DEDIEE
:   Output(4,1,"AU VAINQUEURS
:   Output(5,1,"POUR L'INSTANT..
:   "("+chaîne1+")"+chaîne0->chaîne0
:   1+[(thêta)min]->[(thêta)min]
:Else
:   Output(2,1,"DESOLE
:   Output(4,1,"TU  AS PERDU...
:   Output(5,1,"TON SCORE EST DE
:   Output(6,8,N
:End
:Pause
:EffEcr
:Goto Z
:Lbl B
:If [(thêta)min]>0
:Then
:   longueur(chaîne0->L
:   [(thêta)min]->I
:   For(I,1,(thêta)min
:      carChaîne(chaîne0,"("->N
:      carChaîne(chaîne0,")"->M
:      sous-Chaîne(chaîne0,N+1,M-1-N->chaîne8
:      Disp chaîne8
:      If I/7=ent(I/7:Pause
:      sous-Chaîne(chaîne0,M+1,L-M)+"("+chaîne8+")->chaîne0
:   End
:Else
:   Output(4,7,"VIDE
:End
:Pause
:EffEcr
:Goto Z
:Lbl C
:EffEcr
:Disp "BY MOMOTHEFIRST","       =)

Je crois qu'avec ça j'ai à la fois arranger (comme je le pouvais) les caractères spéciaux et fait le bonheur des puristes francophones laugh.gif
mystery_enigma le 15/04/2012 à 17:08
tapenad a écrit :
mais si la question est par exemple 2342,232+6754,356 ( de tête environ 9096,588) il suffit de taper (aïe) le même calcul non?

Eh bien justement ce jeu a été conçu de façon à ce que le résultat soit écrit en toute lettre (ou chiffre dans ce cas minied.gif ), à la touche près.
Cependant, il possède un défaut et pas des moindres... il ne prend pas en compte l'ordre des touches pressées. Ainsi 81 sera égal à 18, de même pour 36 et 63, etc...
De plus, mon jeu n'affiche pas le nombre qu'entre l'utilisateur pour des soucis de rapidité d’exécution. En effet, si vous prêtez attention à la boucle principale du code qui permet de récupérer la valeur des touches pressées par l'utilisateur(celle où il y a le "codeTouche"), vous remarquerez qu'elle est très brève car elle a pour but de limiter à mon souhait le temps dont dispose l'utilisateur pour répondre (je sais, je suis un peu sadique godgrace.gif ) et ajouter trop d'instructions à cette boucle pourrait compromettre cette aspect, du moins avec l’algorithme que j'ai mis en place. Mais bien sûr, si vous avez des propositions à me faire pour l'améliorer sur ces derniers points ou d'autres que je n'aurais pas pris en compte n'hésitez pas, j'ai posté mon code pour ça.
Persalteas le 15/04/2012 à 21:33
C'est plutôt une bonne idée. Moi je trouve ça sympa, et on ne peut pas tricher:

pour écrire 36 il faut déjà avoir trouvé la réponse 63.

Et merci pour la traduction ! glasses.gif
mystery_enigma le 16/04/2012 à 12:17
persalteas a écrit :

pour écrire 36 il faut déjà avoir trouvé la réponse 63.

C'est vrai; et de toute façon la probabilité que le joueur trouve le résultat avec les chiffres inversés sans avoir calculé mentalement (en gros au pif) est vraiment très faible.

persalteas a écrit :
Et merci pour la traduction ! glasses.gif

De rien glasses.gif, mais je viens de me rendre compte que la traduction des fonctions Anglaises/Françaises est imposée par le forum, donc je tiens à présenter mes excuses auprès des modérateurs pour cette erreur.

persalteas a écrit :
C'est plutôt une bonne idée. Moi je trouve ça sympa, et on ne peut pas tricher

Tu l'as essayé ? Si c'est le cas pourrais tu me donner ton meilleur score, histoire que je sache si il est possible de gagner car je n'ai pas pu faire mieux que 21 goutte.gif
Sangohan38 le 16/04/2012 à 12:59
La traduction n'est pas du tout imposée, faut pas abuser. Et sinon ça voudrait dire que je vais devoir réfléchir en français.. brrr l'horreur.

Bon sinon, on peut p'têtre simplifier tout sa:

Code
100ent(D/100->L
:   10ent(D/10->F


Devient:

Code
100ent(.01D->L
10ent(.1D->F


On a aussi:

Code
74((L=900)+(F=90)+(G=9))+73((L=800)+(F=80)+(G = 8))+72((L=700)+(F=70)+(G=7))+84((L=600)+(F=60)+(G=6))+83((L=500)+(F=50)+(G=5))+82((L=400)+(F=40)+(G=4))+94((L=300)+(F=30)+(G=3))+93((L=200)+(F=20)+(G=2))+92((L=100)+(F=10)+(G=1))+102((G=0)+((L>F)(F=0->H


Qui peut devenir:

Code
300-10partent(L/300)+(partdec(L/300)[différent de]0)+1+3partdec((L+100)/300)-10partent(.3F)+(partdec(F/30)[différent de]0)+1+3partdec((F+10)/30)-10partent(G/3)+(partdec(G/3)[différent de]0)+1+3partdec((G+1)/3)+(G=0)+((L>F)(F=0->H


J'espère ne pas avoir fait de coquille sur ce dernier mais normalement ça fonctionne.

Sangohan38
mystery_enigma le 16/04/2012 à 16:42
Merci Sangohan38 pour ce petit ajustement qui m'a échappé :
Sangohan38 a écrit :
Code
:100ent(D/100->L
:   10ent(D/10->F




Devient:


Code
100ent(.01D->L
10ent(.1D->F


Par contre, j'aimerais bien que tu détailles la seconde optimisation que tu as apporté à mon code car j'ai l'impression que tu as dû faire une "coquille" comme tu dis. Je ne te dis pas la surprise quand j'ai testé mon code avec ce changement et que je me suis rendu compte qu'il me serait impossible de dépasser le niveau 1...

Sangohan38 a écrit :
La traduction n'est pas du tout imposée, faut pas abuser.

C'est vrai, c'est juste qu'il y a un sujet "Traduction des fonctions Anglaises/Françaises" et du coup j'ai généralisé ça à tout le site laugh.gif

Sangohan38 a écrit :
Et sinon sa voudrait dire que je vais devoir réfléchir en français.. brrr l'horreur.

Bah...vu la qualité de ton français, c'est vrai que c'est une chance pour toi!
D'ailleurs je trouve ça un peu étonnant pour un modérateur...
Sangohan38 le 16/04/2012 à 20:10
On prend vraiment n'importe qui comme modérateur tu sait. D'ailleurs je ne vois qu'une seule faute dans la phrase citée précédemment.

Mon code utilise les parties entières et décimales pour obtenir les facteurs de tes conditions (74, 73 etc) mais il buggait car j'avais oublié de préciser que L,G et G pouvais être nul.

Du coup j'obtient l'expression suivante:
Code
92-10iPart((L-100)/300)+3fPart((L-100)/300))(L[différent de]0)+(F[différent de]0)(92-10iPart((F-10)/30)+3fPart((F-10)/30))+(G[différent de]0(92-10iPart((G-1))/3)+3fPart((G-1)/3))+102(G=0)+((F<L)not(F


Sangohan38
mystery_enigma le 17/04/2012 à 18:25
Je suis vraiment désolé Sangohan mais ton code ne marche toujours pas (même après de petites rectifications au niveau des parenthèses):
Citation
92-10iPart((L-100)/300)+3fPart((L-100)/300) (L[différent de]0)+(F[différent de]0)(92-10iPart((F-10)/30)+3fPart((F-10)/30))+(G[différent de]0 ) (92-10iPart((G-1))/3)+3fPart((G-1)/3))+102(G=0)+((F<L)not(F

(J'ai préféré cité pour pouvoir souligner les modifications que j'aie apportés au code)

Es-tu sûr qu'il est possible de retrouver absolument tous les facteurs de conditions du code précédent avec ta méthode ? L'as tu testée ? Je tiens quand même à te remercier pour l’intérêt que tu as montré jusqu'à lors pour mon modeste programme.

Sangohan38 a écrit :
On prend vraiment n'importe qui comme modérateur tu sait. D'ailleurs je ne vois qu'une seule faute dans la phrase citée précédemment.

Oui et je vois que tu l'as corrigé. Tu es allé jusqu'à corrigé la faute identique à la fin de ton poste mais quel dommage que tu aies oublié celle-ci :
Sangohan38 a écrit :
Bon sinon, on peut p'têtre simplifier tout sa:

Sans compter les fautes de conjugaison qui se sont glissées dans ton dernier poste...
Sangohan38 le 17/04/2012 à 21:36
Oui, j'ai remarqué ça après ta remarque. Pour le dernier post, je n'en vois pas.

Et j'ai testé sur ma calculatrice et cela fonctionnait sans problèmes.
Sur mon code, j'ai fait des erreurs sur les parenthèses alors je recommence encore et cette fois j'espère ne pas me tromper:

Code
(L[différent de 0)(92-10iPart((L-100)/300)+3fPart((L-100)/300))+(F[différent de]0)(92-10iPart((F-10)/30)+3fPart((F-10)/30))+(G[différent de]0)(92-10iPart((G-1)/3)+3fPart((G-1)/3))+102(G=0)+((F<L)not(F


Sangohan38

PS: Et être modérateur, comme le titre l'indique c'est surtout tenir le forum propre des floods et du langage vraiment illisible.
mystery_enigma le 17/04/2012 à 23:51
Alors là oui, on peut dire que ton optimisation (113 octets de moins quand même !) est parfaite.
J'y ai ajouté la possibilité d'annuler le nombre saisi avec un petit K(différent de)45 (c'est d'ailleurs un peu idiot de ma part d'avoir oublié ce détail minied.gif )
Je vais remettre le code en entier histoire de voir ce que ça donne :
Code
If ([thêta)min](différent de)ent([(thêta)min]
:Then
:   0->[(thêta)min]
:   "->chaîne0
:End
:EffEcr
:Lbl Z
:Menu("  CALCUL MENTAL ","    JOUER",A,"  VAINQUEURS",B,"   QUITTER",C
:Lbl A
:1->H
:EffVar Q0->L
:EffVar Z0->N
:EffEcr
:Output(1,1,"TON PSEUDO STPL =)
:Disp "","
:Input chaîne1
:EffEcr
:Output(3,1,"OK "+chaîne1
:Output(4,1,"C'EST QUAND TU  VEUX !
:Pause
:Repeat N=30
:   Effvar Q0->H
:   EffEcr
:   (N>9)entAléat(11,19->J
:   (N>19)entAléat(11,20->M
:   (N<10)entAléat(2,9->B
:   (N<20)entAléat(2,9->C
:   (B+J)*(C+M->D
:   100ent(0.01D->L
:   10ent(0.1D->F
:   If F>99:F-L->F
:   D-10ent(0.1D->G
:   (L[différent de 0)(92-10ent((L-100)/300)+3partDéc((L-100)/300))+(F[différent de]0)(92-10ent((F-10)/30)+3partDéc((F-10)/30))+(G[différent de]0)(92-10ent((G-1)/3)+3partDéc((G-1)/3))+102(G=0)+((F<L)not(F
:   Output(1,1,"LEVEL
:   Output(1,8,N+1
:   Output(7,1,"IL TE RESTE  s
:   If B+J>9
:      Output(4,1,J
:   If B+J<10
:      Output(4,2,B
:   Output(4,3,"*
:   Output(4,4,C+M
:   Output(4,6,"=
:   For(I,1,4
:      Disp "
:   End
:   For(I,200-50(N>4)-30(N>14),1,-1
:      Output(7,13,ent(I/40
:      codeTouche->K
:      (K+Q)(K(différent de)45->Q      \\
:   End
:   EffEcr
:   If Q=H
:   Then
:      1+N->N
:      For(I,1,80
:         Output(4,4,"LEVEL UP !
:      End
:      EffEcr
:      If N=5
:      Then
:         Output(4,3,"PLUS VITE !
:         For(I,1,300
:         End
:      End
:      If N=10
:      Then
:         Disp "BIEN, ON VA","POUVOIR PASSER","AUX CHOSES ","SERIEUSES =}
:         For(I,1,500
:         End
:      End
:      If N=15
:      Then
:         Output(1,1,"AUGMENTER
:         Output(2,1,"VITESSE ?
:         For(I,1,800)
:         End
:         EffEcr
:         Output(3,1,"TU PENSAIS
:         Output(4,1,"VRAIMENT AVOIR"
:         Output(5,1,"LE CHOIX  x1
:         Output(5,12,"D
:         For(I,1,500
:         End
:      End
:      If N=20
:      Then
:         Disp "IMPRESSIONANT !","MAIS SERAS TU","CAPABLE D'ALLER","JUSQU'AU BOUT ?
:         For(I,1,500
:         End
:      End
:      EffEcr
:   Else
:      Goto (thêta)
:   End
:End
:Lbl (thêta)
:Output(3,1,chaîne1
:If N=30
:Then
:   Output(2,1,"FELICITATION
:   Output(4,1,"TU AS GAGNE !
:   Output(5,1,"TON NOM ENTRERA
:   Output(6,1,"DANS LA LEGENDE!
:   Pause :EffEcr
:   Output(2,1,"ENFIN DANS LA
:   Output(3,1,"RUBRIQUE DEDIEE
:   Output(4,1,"AU VAINQUEURS
:   Output(5,1,"POUR L'INSTANT..
:   "("+chaîne1+")"+chaîne0->chaîne0
:   1+[(thêta)min]->[(thêta)min]
:Else
:   Output(2,1,"DESOLE
:   Output(4,1,"TU  AS PERDU...
:   Output(5,1,"TON SCORE EST DE
:   Output(6,8,N
:End
:Pause
:EffEcr
:Goto Z
:Lbl B
:If [(thêta)min]>0
:Then
:   longueur(chaîne0->L
:   [(thêta)min]->I
:   For(I,1,[(thêta)min]
:      carChaîne(chaîne0,"("->N
:      carChaîne(chaîne0,")"->M
:      sous-Chaîne(chaîne0,N+1,M-1-N->chaîne8
:      Disp chaîne8
:      If I/7=ent(I/7:Pause
:      sous-Chaîne(chaîne0,M+1,L-M)+"("+chaîne8+")->chaîne0
:   End
:Else
:   Output(4,7,"VIDE
:End
:Pause
:EffEcr
:Goto Z
:Lbl C
:EffEcr
:Disp "BY MOMOTHEFIRST","       =)

Je rappelle quand même les principaux défauts de ce code:
- Ne gère pas l'ordre des touches pressées
- N'affiche pas les nombres lorsqu'ils sont saisis

Sangohan38 a écrit :
Pour le dernier post, je n'en vois pas.
[...]
PS: Et être modérateur, comme le titre l'indique c'est surtout tenir le forum propre des floods et du langage vraiment illisible.Texte cité

Tu as tout à fait raison mais je pense tout de même que ce n'est pas une raison pour égratigner de la sorte la belle langue de Molière : (extraits de ton antépénultième post)
Citation
On prend vraiment n'importe qui comme modérateur tu sait \\ Aïe !
[...]
L,G et G pouvais être nul. // cry.gif
[...]
j'obtient l'expression suivante: // le coup de grâce... frozen.gif


PS : J’espère quand même que tu auras compris que je te taquine un peu. Mais bon essaie quand même de faire des efforts histoire que l'on puisse dire que ta maîtrise du français est aussi excellente que ton niveau en programmation happy.gif ( en plus, d'après ce que j'ai vu de ton dernier post tu es sur la bonne voie)!
Sangohan38 le 18/04/2012 à 01:02
A la vue de ce nouveau code, je vois d'autres optimisations possibles permettant notamment de virer des Then/Else/End qui ralentissent le programme.

Code
If ([thêta)min](différent de)ent([(thêta)min]
:Then
:   0->[(thêta)min]
:   "->chaîne0
:End
:EffEcr
:Lbl Z
:Menu("  CALCUL MENTAL ","    JOUER",A,"  VAINQUEURS",B,"   QUITTER",C
:Lbl A
:1->H
:EffVar Q Effvar L Effvar N EffVar Z
:Input "TON PSEUDO STPL:",chaîne1
:EffEcr
:Output(3,1,"OK "+chaîne1
:Output(4,1,"C'EST QUAND TU  VEUX !
:Pause
:Repeat N=30
:   Effvar Q Effvar H
:   EffEcr
:   (N>9)entAléat(11,19->J
:   (N>19)entAléat(11,20->M
:   (N[inférieur ou égal à]9)entAléat(2,9->B
:   (N<20)entAléat(2,9->C
:   (B+J)*(C+M->D
:   E2ent(0.01D->L                         << C'est le E de la puissance de 10 >>
:   10ent(0.1D->F
:   If F>99:F-L->F
:   D-10ent(0.1D->G
:   (L[différent de 0)(92-10ent((L-100)/300)+3partDéc((L-100)/300))+(F[différent de]0)(92-10ent((F-10)/30)+3partDéc((F-10)/30))+(G[différent de]0)(92-10ent((G-1)/3)+3partDéc((G-1)/3))+102(G=0)+((F<L)not(F
:   Output(1,1,"LEVEL
:   Output(1,8,N+1
:   Output(7,1,"IL TE RESTE  s
:   If B+J>9
:      Output(4,1,J
:   If B+J[inférieur ou égal à]9
:      Output(4,2,B
:   Output(4,3,"*
:   Output(4,4,C+M
:   Output(4,6,"=
:   For(I,1,4
:      Disp "
:   End
:   For(I,200-50(N>4)-30(N>14),1,-1
:      Output(7,13,ent(I/40
:      codeTouche->K
:      (K+Q)(K(différent de)45->Q
:   End
:   EffEcr
:   If Q[différent de H
:   Goto (théta)
:   1+N->N
:   For(I,1,80
:      Output(4,4,"LEVEL UP !
:   End
:   EffEcr
:   For(I,1,800
:      If N[différent de]15
:         800->I
:      If N=15
:         Disp "AUGMENTER","VITESSE ?         << Le Disp est remplaçable par un Output si jamais il y a un disp avant dans le code >>
:   End     
:   For(I,1,300(N=5)+500(1<partEnt(N/5
:      If N=5
:         Output(4,3,"PLUS VITE !
:      If N=10
:         Disp "BIEN, ON VA","POUVOIR PASSER","AUX CHOSES","SERIEUSES =}
:      If N=15
:         Disp "TU PENSAIS","VRAIMENT AVOIR,"LE CHOIX xD
:      If N=20
:         Disp "IMPRESSIONANT !","MAIS SERAS-TU","CAPABLE D'ALLER","JUSQU'AU BOUT ?
:   End
:End
:EffEcr
:Lbl (thêta)
:Output(3,1,chaîne1
:Disp "","DESOLE","","TU AS PERDU...","TON SCORE EST DE"
:Output(6,8,N
:If N=30
:Then
:   Disp "","","","FELICITATION","","TU AS GAGNE !","","TON NOM ENTRERA","DANS LA LEGENDE!
:   Pause
:   EffEcr
:   Disp "","ENFIN DANS LA","RUBRIQUE DEDIEE","AU VAINQUEURS","POUR L'INSTANT...         << Tu as fait une faute d'orthographe! >>
:   "("+chaîne1+")"+chaîne0->chaîne0
:   1+[(thêta)min]->[(thêta)min]
:End
:Pause
:EffEcr
:Goto Z
:Lbl B
:If [(thêta)min]>0
:Then
:   longueur(chaîne0->L
:   [(thêta)min]->I
:   For(I,1,[(thêta)min]
:      carChaîne(chaîne0,"("->N
:      carChaîne(chaîne0,")"->M
:      sous-Chaîne(chaîne0,N+1,M-1-N->chaîne8
:      Disp chaîne8
:      If I/7=ent(I/7:Pause
:      sous-Chaîne(chaîne0,M+1,L-M)+"("+chaîne8+")->chaîne0
:   End
:Else
:   Output(4,7,"VIDE
:End
:Pause
:EffEcr
:Goto Z
:Lbl C
:EffEcr
:Disp "BY MOMOTHEFIRST","       =)


Et ne t'en fais pas, je fais beaucoup d'efforts et j'accepte volontier la critique quand la personne est irréprochable (oui j'accepte mal qu'une personne faisant des erreurs d'orthographe qui changent la sonorité d'un mot me fasse des remarques).

Sangohan38

PS: Il n'y a pas que Molière qui à écrit un français littéraire, il y a toute la pléthore de poètes et écrivains français.
sandro le 18/04/2012 à 10:46
Code
If ([thêta)min](différent de)ent([(thêta)min]

peut devenir
Code
If fPart([thétamin]


Code
:EffVar Q Effvar L Effvar N EffVar Z
:Input "TON PSEUDO STPL:",chaîne1
peut devenir
Code
:EffVar Q Effvar L Effvar N EffVar ZInput "TON PSEUDO STPL:",chaîne1


Code
:   Effvar Q Effvar H
:   EffEcr
peut devenir
Code
:   Effvar Q Effvar HEffEcr


Code
D-10ent(0.1D->G
peut je crois être transformé(car D est un entier positif) en
Code
10fPart(.1D->G


Code
:   If Q[différent de H
devient
Code
:   If Q-H


Code
:      If N[différent de]15
devient
Code
If N-15


Code
For(I,1,300(N=5)+500(1<partEnt(N/5
devient
Code
For(I,1,E2(3(N=5)+5(1<partEnt(.2N


Code
:   Disp "","","","FELICITATION","","TU AS GAGNE !","","TON NOM ENTRERA","DANS LA LEGENDE!
:   Pause
devient
Code
:   Disp "","","","FELICITATION","","TU AS GAGNE !","","TON NOM ENTRERA
:   Pause"DANS LA LEGENDE!


Code
If I/7=ent(I/7:Pause
devient
Code
If non(fPart(7[^-1]I


Sandro
mystery_enigma le 19/04/2012 à 02:03
Petit aparté littéraire :

Sangohan38 a écrit :
ENFIN DANS LA","RUBRIQUE DEDIEE","AU VAINQUEURS","POUR L'INSTANT... << Tu as fait une faute d'orthographe! >>

Ah oui, et quelle faute ! Merci de l'avoir signalée. Cependant je n'ai pas bien saisi ce que tu entendais par :
Citation
oui j'accepte mal qu'une personne faisant des erreurs d'orthographe qui changent la sonorité d'un mot me fasse des remarques
car il me semble que dans ma phrase l'ajout du "x" à la fin du "au" ne change en rien l'aspect phonétique de celle-ci (à moins que tu ne parles d'une autre faute ?). De plus, si tu connais des personnes irréprochables au niveau de n'importe quel domaine ou si tu en trouves un jour n'oublie pas de me faire signe. Il me semble pourtant que tu fais régulièrement des remarques sur ce forum à propos de la qualité des codes postés par les internautes (ce que je trouve tout à fait profitable). Tu sous-entendrais donc que puisque tu te permets de faire des remarques aux autres sur ce domaine, ton niveau en programmation serait irréprochable ? Laisse moi en douter...

Citation
PS: Il n'y a pas que Molière qui à écrit un français littéraire, il y a toute la pléthore de poètes et écrivains français.

Non sans blague crazy.gif! Sache que la plupart des langues possèdent un équivalent éponymique (langue de Shakespear pour l'anglais, langue de Virgile pour le latin ...). Et il me semble qu'en aucun cas je n'ai dit que Molière ait été le seul à manier d'une façon remarquable cette langue sublime que tu as l'air de malmener au plus haut point.

Fin de l'aparté.



Merci tout de même à Sangohan38 et Sandro pour ces optimisations qui m'ont beaucoup appris et m'ont permis d'éliminer 219 octets par rapport au programme de départ

Cependant, je pense que cette partie de code est fausse Sandro :
Sandro a écrit :
Code
D-10ent(0.1D->G   <<avec D=6, G=6


peut je crois être transformé(car D est un entier positif) en
Code
10fPart(.1D->G   <<avec D=6, G=60
sandro le 19/04/2012 à 09:52
mystery_enigma a écrit :
Cependant, je pense que cette partie de code est fausse Sandro :
Sandro a écrit :
Code
D-10ent(0.1D->G   <<avec D=6, G=6


peut je crois être transformé(car D est un entier positif) en
Code
10fPart(.1D->G   <<avec D=6, G=60


Refait bien le second calcul, il donne bien 6 comme le premier:
.1*6=0.6
fPart(0.6)=0.6
10*0.6=6
donc 10*fPart(.1*6)=6
CQFD
mystery_enigma le 19/04/2012 à 12:49
Ah d'accord désolé. Je pensais que fpart(ou partDec en français) renvoyait la partie décimale sous forme unitaire, par exemple 6 avec 4.6, mais il s'avère que mon raisonnement était complètement faux; merci pour ton intervention Sandro happy.gif
Avec toutes ces optimisations, je pense qu'un nouveau post de mon programme s'impose :
Code
If partDec([thêta)min]
:Then
:   0->[(thêta)min]
:   "->chaîne0
:End
:EffEcr
:Lbl Z
:Menu("  CALCUL MENTAL ","    JOUER",A,"  VAINQUEURS",B,"   QUITTER",C
:Lbl A
:1->H
:EffVar QEffvar LEffvar NEffVar ZInput "TON PSEUDO STPL:",chaîne1
:EffEcr
:Output(3,1,"OK "+chaîne1
:Output(4,1,"C'EST QUAND TU  VEUX !
:Pause
:Repeat N=30
:   Effvar QEffvar HEffEcr
:   (N>9)entAléat(11,19->J
:   (N>19)entAléat(11,20->M
:   (N[inférieur ou égal à]9)entAléat(2,9->B
:   (N<20)entAléat(2,9->C
:   (B+J)*(C+M->D
:   $E$2ent(.01D->L                         << C'est le E de la puissance de 10 que je noterai $E$ à partir de maintenant (sur TI on peut le trouver en faisant "2nde"+",")>>
:   10ent(0.1D->F
:   If F>99:F-L->F
:   10partDec(.1D->G
:   (L[différent de 0)(92-10ent((L-$E$2)/300)+3partDéc((L-$E$2)/300))+(F[différent de]0)(92-10ent((F-10)/30)+3partDéc((F-10)/30))+(G[différent de]0)(92-10ent((G-1)/3)+3partDéc((G-1)/3))+102(G=0)+((F<L)not(F
:   Output(1,1,"LEVEL
:   Output(1,8,N+1
:   Output(7,1,"IL TE RESTE  s
:   If B+J>9
:      Output(4,1,J
:   If B+J[inférieur ou égal à]9
:      Output(4,2,B
:   Output(4,3,"*
:   Output(4,4,C+M
:   Output(4,6,"=
:   For(I,1,4
:      Disp "
:   End
:   For(I,200-50(N>4)-30(N>14),1,-1
:      Output(7,13,ent(.25I
:      codeTouche->K
:      (K+Q)(K(différent de)45->Q
:   End
:   EffEcr
:   If Q-H
:   Goto (théta)
:   1+N->N
:   For(I,1,80
:      Output(4,4,"LEVEL UP !
:   End
:   EffEcr
:   For(I,1,800
:      If N-15
:         800->I
:      If N=15
:         Disp "AUGMENTER","VITESSE ?
:   End     
:   For(I,1,$E$2(3(N=5)+5(1<partEnt(0.2N
:      If N=5
:         Output(4,3,"PLUS VITE !
:      If N=10
:         Disp "BIEN, ON VA","POUVOIR PASSER","AUX CHOSES","SERIEUSES =}
:      If N=15
:           Then
:           Disp "TU PENSAIS","VRAIMENT AVOIR,"LE CHOIX x1   <<c'est le x1 des variables statistiques, accessible en tapant"var"->"Statistiques..."->"PTS"->"1>>
:           Output(3,11,"D
:           End
:      If N=20
:         Disp "IMPRESSIONANT !","MAIS SERAS-TU","CAPABLE D'ALLER","JUSQU'AU BOUT ?
:   End
:End
:EffEcr
:Lbl (thêta)
:Output(3,1,chaîne1
:Disp "","DESOLE","","TU AS PERDU...","TON SCORE EST DE"
:Output(6,8,N
:If N=30
:Then
:   Disp "","","","FELICITATION","","TU AS GAGNE !","","TON NOM ENTRERA
:   Pause"DANS LA LEGENDE!
:   EffEcr
:   Disp "","ENFIN DANS LA","RUBRIQUE DEDIEE","AUX VAINQUEURS","POUR L'INSTANT...
:   "("+chaîne1+")"+chaîne0->chaîne0
:   1+[(thêta)min]->[(thêta)min]
:End
:Pause
:EffEcr
:Goto Z
:Lbl B
:If [(thêta)min]>0
:Then
:   longueur(chaîne0->L
:   [(thêta)min]->I
:   For(I,1,[(thêta)min]
:      carChaîne(chaîne0,"("->N
:      carChaîne(chaîne0,")"->M
:      sous-Chaîne(chaîne0,N+1,M-1-N->chaîne8
:      Disp chaîne8
:      If non(partDec(7[^-1^]I:Pause
:      sous-Chaîne(chaîne0,M+1,L-M)+"("+chaîne8+")->chaîne0
:   End
:Else
:   Output(4,7,"VIDE
:End
:Pause
:EffEcr
:Goto Z
:Lbl C
:EffEcr
:Disp "BY MOMOTHEFIRST","       =)
sandro le 19/04/2012 à 13:33
encore 2 autres:
Code
:      carChaîne(chaîne0,"("->N
:      carChaîne(chaîne0,")"->M
devient
Code
:      carChaîne(chaîne0,"(->N
:      carChaîne(chaîne0,")->M


et
Code
:   (L[différent de 0)(92-10ent((L-$E$2)/300)+3partDéc((L-$E$2)/300))+(F[différent de]0)(92-10ent((F-10)/30)+3partDéc((F-10)/30))+(G[différent de]0)(92-10ent((G-1)/3)+3partDéc((G-1)/3))+102(G=0)+((F<L)not(F
devient
Code
:   not(L)(92-10ent((L-$E$2)/300)+3partDéc((L-$E$2)/300))+(F[différent de]0)(92-10ent((F-10)/30)+3partDéc((F-10)/30))+(G[différent de]0)(92-10ent((G-1)/3)+3partDéc((G-1)/3))+102(G=0)+((F<L)not(F

d'ailleur, c'est quoi ces "$"?

Sandro

PS : maintenant, il y en a pour combien d'octets?
Sangohan38 le 19/04/2012 à 16:46
Je n'ai jamais vu un sujet avec autant de citations. Va falloir vous calmer: quand il s'agit du message précédent pas la peine de faire de citation.

Bon sinon à propos du $E$ c'est pour indiquer que c'est le E de la puissance de 10. Ainsi $E$2=100 ce qui fait un octet d'économisé.


@ Mystery-enigma: je voulais dire que je n'accepte pas qu'une personne faisant des fautes d'orthographes qui changent la phonétique (ex: vous avais au lieu de vous avez) me fassent des remarques ce qui n'est pas ton cas.


@ Sandro: Je ne vois pas l'intérêt de cette modification: "If Q[différent de H devient If Q-H" car cela n'économise pas d'octets. Pareil pour la modification qui la suit.
A part sa, dans ta dernière ligne de code je ne vois pas l'intérêt du 7^(-1)... Autant mettre I/7.

Sangohan38
linkakro le 19/04/2012 à 17:02
Sandro te répondra probablement que c'est plus rapide.
(c'est vrai mais négligeable)

J'hallucine sur le nombres de modifications simples qui ont été effectuées.
Et les grosses simplifications sont bien aussi
Continue comme ça happy.gif
(moi je ne suis pas vraiment libre, désolé)
sandro le 19/04/2012 à 21:22
Oui, pour ces modifications, c'est un gain de temps (les tests, c'est lourd, même si ça l'est pas autant que les If), et en plus, c'est une habittude que je commence à prendre avec l'axe (ou même !IfA-B est plus léger que If A=B).
mystery_enigma le 19/04/2012 à 22:53
@Sangohan38 : Désolé pour le malentendu sur les fautes de grammaire et changements de phonétique; je pensais que ta critique m'était adressée.

@Sandro : Je prends note de tes nouvelles optimisations. Par contre la seconde est en partie fausse puisque not(L) renvoie 1 si L=0 alors que L[différent de] 0 renvoie 0 si L=0.
Mais du coup on peut écrire ça:
Code
:   (L[différent de]0)(92-10ent((L-$E$2)/300)+3partDéc((L-$E$2)/300))+(F[différent de]0)(92-10ent((F-10)/30)+3partDéc((F-10)/30))+G[différent de]0)(92-10ent((G-1)/3)+3partDéc((G-1)/3))+102not(G)+((F<L)not(F

Ce qui reprend ton idée avec l'histoire des not(.
Bon, bah... ça va nous faire 211 octets d'économisés ! On peut dire qu'on a fait pas mal de chemin depuis le premier code glasses.gif
sandro le 19/04/2012 à 22:58
pardon, c'était une étourderie, c'est bien ta version qui est correcte