Forum

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

CMD: Un traducteur Algorithme scolaire > TI-Basic

Persalteas le 21/06/2012 à 17:24
Bonjour,

Vous qui venez ici, vous êtes peut-être un membre habitué qui avez remarqué tout au long de l'année des gens demander de traduire un algorithme étudié en cours de maths en "langage calculette", ou alors vous êtes peut-être un visiteur venu demander une telle traduction.

CMD est fait pour vous !!

Ce programme élaboré par maxence sur Espace-TI (topic officiel) est en fait un IDE de TI-Basic...en TI-Basic.

Il est censé traduire le langage "algorithme" qu'on apprend en cours en TI-Basic.

voici un exemple (quoiqu'assez mauvais et un peu trop simple) du programme en action:


Le code fait assez mal aux yeux. Attention aux erreurs de recopiage. Si vous préférez, téléchargez le 83p ici.

Dans le code ci-dessous, "->" correspond a la flèche de la touche [sto->] et "=/=" au symbole "différent de" [2nde][maths][2]

Code

:ClrHome
:Lbl MN
:Menu(" (CMD...      ) ","(CREER)",CR,"(QUITTER)",QT
:Lbl QT
:Output(1,1,"
:Stop
:Lbl CR
:" ->Str8
:Repeat Str0="STOP
:Input ":",Str0
:If Str0="ANNUL":Then
:ClrHome
:" ->Str8
:Else
:Str8+Str0+"[carré]->Str8    // le [carré] se trouve en faisant [2nde][0] et plusieurs fois fleche du haut
:End:End
:sub(Str8,2,length(Str8)-1->Str8
:ClrHome
:Output(1,1,"(TRADUCTION... )
:Output(2,6,"(  I%)
:Output(2,9,"
:length(Str8->[theta]           //la lettre [theta] se trouve avec [alpha][3]
:0->Z
:"0:->Str1
:Repeat Str0="STOP
:inString(Str8,"[carré]->A
:sub(Str8,1,A-1->Str0
:If Str0=/="STOP":sub(Str8,A+1,length(Str8)-A->Str8
:inString(Str0,".->A
:If A and "="=/=sub(Str0,2,1:Then
:sub(Str0,1,A-1
:If Ans="AFF":Str1+"Disp "+sub(Str0,A+1,length(Str0)-A)+":->Str1
:If Ans="DEMANDER" and inString(Str0,".",10:Str1+"Input "+sub(Str0,10,length(Str0)-11)+","+sub(Str0,length(Str0),1)+":->Str1
:If Ans="DEMANDER":Str1+"Prompt "+sub(Str0,10,length(Str0)-9)+":->Str1
:If Ans="SI":Str1+"If "+sub(Str0,4,length(Str0)-3)+":->Str1
:If Ans="TANT QUE":Str1+"While "+sub(Str0,10,length(Str0)-9)+":->Str1
:If Ans="PLACER POINT":Then
:Str1+"Pt-On(->Str1
:sub(Str0,14,length(Str0)-13->Str0
:inString(Str0,".->B
:Str1+sub(Str0,1,B-1)+","+sub(Str0,B+1,length(Str0)-B)+",3:->Str1
:End
:If Ans="DEMANDER FONCTION":Then
:Str1+"Input Str0:->Str1
:"FONCTION.Str0."+sub(Str0,19,length(Str0)-18->Str0
:"FONCTION
:End
:If Ans="FONCTION":Then
:Str1+"String>Equ(->Str1
:sub(Str0,10,length(Str0)-9->Str0
:inString(Str0,".->B
:Str1+sub(Str0,1,B-1)+","+sub("Y1Y2Y3Y4Y5Y6Y7Y8Y9Y0",expr(sub(Str0,B+1,length(Str0)-B)),1)+":->Str1

//Y1 etc, il s'agit bien des variables. [vars][>][1]

:End
:If Ans="PLACER":Then
:Str1+"Output(->Str1
:sub(Str0,8,length(Str0)-7->Str0
:For(Y,0,1
:inString(Str0,".->B
:Str1+sub(Str0,1,B-1)+",->Str1
:sub(Str0,B+1,length(Str0)-B->Str0
:End
:Str1+Str0+":->Str1
:End
:If Ans="PART ENT"
:Str1+"For("+sub(Str0,length(Str0),1)+",iPart("+sub(Str0,length(Str0),1)+"),"+sub(Str0,length(Str0),1)+"-1):End:->Str1
:If Ans="PART DEC"
:Str1+"For("+sub(Str0,length(Str0),1)+",fPart("+sub(Str0,length(Str0),1)+"),fPart("+sub(Str0,length(Str0),1)+")-1):End:->Str1
:If Ans="POSITIF"
:Str1+"For("+sub(Str0,length(Str0),1)+",abs("+sub(Str0,length(Str0),1)+"),"+sub(Str0,length(Str0),1)+"-1):End:->Str1
:If Ans="NEGATIF"
:Str1+"For("+sub(Str0,length(Str0),1)+",-abs("+sub(Str0,length(Str0),1)+"),-abs("+sub(Str0,length(Str0),1)+")-1):End:->Str1

//attention, les moins qui se situent devant les "abs" sont des moins de négativité


:If Ans="PRECEDENT":Str1+"For("+sub(Str0,length(Str0),1)+",Ans,Ans-1):End:->Str1
:Else
:If Str0="EFF":Str1+"ClrHome:ClrDraw:->Str1
:If Str0="PAUSE":Str1+"Pause :->Str1
:If "="=sub(Str0,2,1
:Str1+"For("+sub(Str0,1,1)+","+sub(Str0,3,length(Str0)-2)+","+sub(Str0,3,length(Str0)-2)+"-1):End:->Str1
:If Str0="ALORS":Str1+"Then:->Str1
:If Str0="SINON":Str1+"Else:->Str1
:If Str0="FIN":Str1+"End:->Str1
:If "//"=sub(Str0,1,2:Str1+sub(Str0,3,length(Str0)-2)+":->Str1
:If Str0="GRAPH STANDART":Str1+"ZStandard:->Str1
:If Str0="GRAPH AJUSTE":Str1+"ZoomFit:->Str1
:If Str0="AFF GRAPH":Str1+"DispGraph:->Str1
:End
:Output(2,7,iPart(([theta]-length(Str8))(100/[theta]
:End
:Output(2,7,"100
:For([theta],0,400):End
:Str1+"DelVar Str0Output(1,1,->Str1
:DelVar Str0DelVar Str8DelVar Str1
:ClrHome
:Output(1,1,"



Mode d'emploi pour composer un programme:

1) créer son programme

la première ligne du programme en "langage CMD" ou langage "algo" est une description du prog.

Ensuite, il on peut entrer une suite d'instructions.
entrez l'instruction qui correspond a votre souhait, puis les "arguments" en les séparant avec des points comme sur l'exemple animé ci-dessus.

Liste de commandes:


AFF.cequ'ilfautafficher

PLACER.numérodeligne.numérodecolonne.cequ'ilfautafficher pour afficher quelque chose a un endroit précis de l'écran.

DEMANDER.variableademander1.variableademander2.variableademander3.etc... pour stocker des valeurs dans des variables

DEMANDER.textedelaquestion.variableademander pour écrire une question personnalisée en demandant la valeur de la variable

PAUSE (pour que le programme attende que l'utilisateur appuie sur [entrer])

variable=valeur pour assigner une valeur à une variable

SI.condition
ALORS
...
SINON
...
FIN

TANT QUE.condition
...
FIN

EFF
pour effacer l'écran et les fonctions tracées

POSITIF.variable pour donner la valeur absolue d'une variable

NEGATIF.variable donne l'opposé de cette valeur absolue

// sert à éxécuter une instruction TI-Basic qui n'est pas en langage algo mais déjà traduite. sert aussi a faire un calcul, si elle est suivie de PRECEDENT.

PRECEDENT.variable assigne à la variable la dernière valeur calculée

PLACER POINT.X.Y où X et Y sont les coordonées du point

GRAPH STANDART initialise les axes standart (X et Y allant de -10 à 10) et trace les fonctions

GRAPH AJUSTE ajuste le graphe aux fonctions en cours et les trace

FONCTION."fonction".numérode0à9 pour enregistrer une fonction dans Y1 a Y9 (qui se traceront automatiquement dès l'affichage du graphique)

AFF GRAPH trace les fonctions sans changer les axes

DEMANDER FONCTION.numérode0à9 demande une fonction a l'utilisateur et l'enregistre dans Y0 à Y9

ANNUL effacer tout ce qu'on a écrit et recommencer.

STOP termine l'écriture du programme et le traduit en TI-basic


Une fois que c'est fait, créez un nouveau programme avec [prgm][<][entrer] et entrez-lui un nom en majuscules.

Dans ce programme, sur la première ligne, tapez [2nde][sto->][2nde][( - )][entrer].

Puis positionnez vous sur le guillemet qui commence le code qui s'affiche et appuyez sur [suppr].

Quittez l'éditeur avec [2nde][mode], puis vous pouvez éxécuter le programme créé.
F-BVXT le 21/06/2012 à 17:32
Mais c'est super ingénieux comme programme ça !
Je sais pas si ça sera plus rapide de marquer DEMANDER à chaque fois ou de marquer traduire directement le programme mais en tout cas l'idée est super pour ceux qui n'aurait pas envie de se casser la tête à traduire leurs algorithmes.
Persalteas le 21/06/2012 à 17:46
Il y a une erreur dans le "DEMANDER" d'ailleurs, la traduction en Prompt passe pas...
F-BVXT le 21/06/2012 à 18:09
L'erreur ne viendrai pas de cette ligne là par hasard :
Code
:If Ans="DEMANDER":Str1+"Prompt "+sub(Str0,10,length(Str0)-9)+":->Str1

Parce qu'il exécute plusieurs actions sans "Then" ?
blg_flg le 21/06/2012 à 18:21
De toute façon il vaut mieux apprendre le TI BASIC. C'est quand même au programme, donc ça peut tomber au bac! Et puis ce n'est quand même pas très compliqué. On se fait des idées fausses sur la programmation.
Maxence le 21/06/2012 à 18:23
Bonjour, désoler je ne suis pas inscrit sur ce forum, mais je suis en fait le "maxence" en question ^^

F-BVXT: L'erreur ne vient pas de cette ligne, car elle n’effectue qu'une seule action je t'assure, regarde bien happy.gif

En fait, comme je l'ai dit à persaeltas sur espace-ti, je pense que le problème vient du fait qu'il s'est tromper en la testant, car il faut ecrire:

DEMANDER.A,B,C // avec des virgules pour séparer les variables et non pas:
DEMANDER.A.B.C // avec des points entre les variables.

Juste 2 commandes qui n'ont pas été évoquées:

PART ENT.variable // La variable devient égale à sa partie entière
exemple (A est egal à 5.3): PART ENT.A // A vaut désormais 5

PART DEC.variable // le même chose mais avec la partie décimale happy.gif
F-BVXT le 21/06/2012 à 18:35
Oui, effectivement je viens de vérifier sur émulateur et ça fonctionne parfaitement.
Le Grec : ce sont les algorithmes et la programmation qui sont au programme mais pas le TI-BASIC (dans mon lycée ils ont tous des Casio alors...). Et ce qu'on peut te demander au bac c'est d'écrire un algorithme ou de faire fonctionner un programme mais je pense pas qu'on puisse te demander d'écrire un programme parce que ça serait vraiment trop dur à corriger.
blg_flg le 21/06/2012 à 18:52
Ah bon. Au temps pour moi. Je pensais qu'on était obligés de comprendre et de savoir faire des programmes simples sur Casio ou TI. Dommage, car ça aurait été pas mal de tomber là-dessus au bac. winkle.gif Ça nous aurait fait des points pour pas cher.
F-BVXT le 21/06/2012 à 19:00
Citation
Je pensais qu'on était obligés de comprendre et de savoir faire des programmes simples sur Casio ou TI.

Ma prof nous a jamais parlé de ça en tout cas, mais je pense pas parce que vu qu'on a le droit d'avoir un peu près n'importe quel calculette, il faudrait qu'ils mettent pleins de langages différents. Par contre, il faut savoir faire un programme mais vu que tu ne va pas rendre ta calculette pour qu'on te la corrige (si on me demande ça je la rend pas godgrace.gif ), on ne peut que soit te demander d'écrire un algorithme ou alors de faire un programme et ils vérifieraient qu'ils fonctionne en te demandant des résultats. (Source : ma prof de maths)
blg_flg le 21/06/2012 à 19:03
Ainsi on te demanderait un algorithme avec des "demander", des "si", etc.? Si c'est le cas, j'aimerais bien que l'on fasse un programme inverse de celui de Maxence! Je trouve ça beaucoup plus compliqué.
Samos le 21/06/2012 à 19:05
Bientôt on pourra programmer dans sa langue maternelle godgrace.gif
F-BVXT le 21/06/2012 à 19:10
Non, c'est pas franchement très difficile, surtout pas au niveau auquel on te le demandera. Normalement, comme tu sais programmer, tu ne devrais pas avoir de problème pour les algorithmes. En fait, c'est quasi la même chose tu verras sauf que pour faire un algorithme, tu n'as pas besoin de connaitre les fonctions de ta calculette. En plus, quand les autres essaieront de comprendre le programme, tu n'auras qu'à te concentrer sur l'algorithme godgrace.gif
Persalteas le 21/06/2012 à 22:23
Mais je rejoins le Grec sur le fait que les "vieux" comme linkakro ou moi, qui n'ont pas appris l'algorithmique en cours de maths, pensent en TI-Basic quand il s'agit de réfléchir a un programme.

Même quand je programme dans d'autres langages, je raisonne en TI-Basic (et c'est pour ça que je suis nul en Axe :p )
F-BVXT le 21/06/2012 à 22:42
Oui c'est sûr qu'il doit y avoir un petit temps d'adaptation mais c'est presque comme apprendre un autre langage (beaucoup plus facile qu'un langage complet quand même), donc il y a pas de quoi s'inquiéter, surtout avec l'objectif de l'Etat d'avoir plus de 80% de réussite au Bac, je pense que la plupart des membres de ce forum sont largement capable de faire les algorithmes demandés.