linkakro le 09/10/2012 à 19:21
Une version périmée de ce tutoriel est dans le nouveau forum. Pour l'instant aucune mise à jour n'a été transférée.
http://tout82.forumactif.org/t[...]e-vers-ti-basic
Je me focalise sur une approche à partir de l'algorithmie, et complète avec des explications qui dépendent des fonctions de la calculatrice.
Mais d'autres tutoriels abordent la calculatrice directement.
Mon tuto aide à griller les étapes pour ceux qui se limitent aux exercice d'algorithmie du Lycée.
Célèbre tutoriel de mdr1 che[...]s (SiteDuZero).
Autre tutoriel intéressant po[...]er sur TI82/83.
Complément réalisé par ashtrail.
ashtrail a rédigé avant mes mise à jour.
Intro
Ce tutoriel a pour but de donner une traduction de la plupart des instructions d'algorithmie en TI-Basic pour ceux qui l'étudient au lycée et ne savent pas comment le saisir sur leur calculatrice TI 82/82stat/82statfr/83/82plus/83plus/84plus. Les 73 et 76 sont similaires mais bourrées de différences de menus.
Pour les compatibilités, rappelez vous les comparaisons suivantes.
82stats=82statfr=83
82plus=83plus
82<83<83plus<84plus
Les paresseux peuvent s'intéresser au programme CMD de maxence et aussi TXT et leur dérivé commun LOGICBOX.
http://espace-ti.forumactif.co[...]revolutionnaire
http://espace-ti.forumactif.com/t961-cmd-version-2
http://espace-ti.forumactif.co[...]ti-concours-txt
http://tout82.free.fr/forum/sujet.php?sujet=3629
http://espace-ti.forumactif.co[...]ccesseur-de-cmd
Les encore plus paresseux ou ceux devant un ordinateur peuvent essayer directement
http://festivalgo.fr/ pour convertir un algorithme automatiquement.
Je suis preneur de toute suggestion. Surtout des demandes de solutions supplémentaires.
Le vocabulaire des fonctions est donné autant en français que ce que la ti82statfr accepte (et si j'y pense). Il faudra traduire pour les autres dont 82(stat).
(voir ci-après le catalogue des fonctions pour pouvoir traduire)
Les emplacements des fonctions (et leurs traductions en français/anglais) dans la calculatrice sont donnés par le catalogue suivant et ma signature :
http://tout82.free.fr/forum/sujet.php?sujet=2833
Généralités
Quasiment toutes les commandes en algorithmie se traduisent mot-à-mot dans la calculatrice TI. L'algorithmie est en fait un concept commun à divers langages.
Certaines fonctions de la calculatrice peuvent remplacer des fragments d'algorithmes.
Ou au contraire des concepts utilisés dans un algorithme peuvent nécessiter plus de développement avant d'être codés. (par exemple une condition de parité d'un nombre)
Les ponctuations de fin de ligne (comme les guillemets ou des parenthèses) peuvent être omises dans une TI.
Idem juste avant la fonction [sto->].
Les lettres sont presque toutes majuscules. Les exceptions sont les suites u,v,w et quelques variables du menu [var]. Aucune autre lettre minuscule que celles-ci n'existe sur les 82 et 82stats.
Je suis partagé entre les syntaxes Basic/Pascal et langage C, d'autant que le forum ne supporte pas l'unicode (égal barré par exemple ne passera pas et j'utilise plutôt "!=" comme le C ou "=/=").
Les commentaires se font avec "//".
Tutoriel par exemples de traduction
Citation
Les informations de début et fin de programme n'existent pas en TI-Basic.
Il est inutile de déclarer les variables, il faut seulement les initialiser.
Cette initialisation doit être écrite au début du programme.
Les types de variables sont prédéfinis dans une TI. Les lettres majuscules désigneront des nombres réels (ou complexe sur 82stats et après)
Donc aucune déclaration des variables n'est prévue par le TI-Basic.
Observez au passage l'instruction d'affectation : "->" saisi par la touche [sto->] comme "store" en anglais.
Les variables se saisissent par le clavier ou des menus, mais pas par le catalogue de fonctions.
Les lettres majuscules (nombres), listes L1 à L6, et les suites u,v,w sont sur le clavier.
Les autres listes (ti82stats et après) sont dans le menu liste=2nde+stats.
Les matrices dans le menu matrice ([2nde]+[x^-1] à partir de la 83plus/82plus).
Les variables finance dans le menu finance. ([Apps]+[1] à partir de la 83plus/82plus)
Le variable "n" des suites est sur la touche [x,t,¤,n] et dans le catalogue des fonctions.
Tout le reste des variables (sauf ce que je peux avoir oublié) est dans le menu de la touche [var].
Sur TI 82 2nde+var permet d'accéder aux équations de courbes au lieu de var+droite sur les autres TI.
Code
Entrées :
nombres réels a,b
Initialisation :
a initialisé à 1
Début
a<-2 // "a est affecté à la valeur 2" , "a prend la valeur 2"
b<-3*a
Fin
Code
1->A // ceci est l'initialisation
2->A // ceci est le traitement
3A->B
On voit bien que des choses n'ont pas besoin de détail.
Citation
Effacer l'écran se fait avec EffEcr. (ClrHome)
L'affichage se fait avec Disp.
La saisie se fait avec Prompt. Cela affiche automatiquement le nom de la variable et un "=?". On peut cumuler les variables.
Pour afficher quelque chose avant la saisie : Input "txt",variable .
Pour effectuer une pause attendant la touche entrer : Pause.
Pour afficher quelque chose avant la pause, on précise le texte à la fonction Pause "txt".
Pour placer un texte/variable en (X,Y) : Output(Y,X,txt)
Vous pouvez afficher une fraction avec : nombre>Frac , >Frac est dans math. Mais Frac n'est supportée que par Disp et Pause.
Vous pouvez utiliser Texte(y,x,arg1,arg2,...) pour afficher dans le graphique.
Avertissement : la fonction ">Frac" ne fonctionne pas dans Output et Texte.
Code
nombres réels c,d
Début
Effacer l'écran
Ecrire "LOL" // ces deux commandes sont la même chose, vocabulaire varié
Afficher "LOL"
// ces deux saisies de suites montreront la cumulation des variables pour gagner du temps dans le programme avec la commande Prompt
Afficher "c=?"
Lire c
Afficher "d=?"
Lire d
// affichage et saisie (Input)
Afficher "variable:"
Lire c
// une simple pause
pause
// une pause avec affichage
Afficher d
pause
// montrera que l'affichage et la pause connaissent la commande ">Frac"
Afficher 2/3 sous forme de fraction
Afficher 4/3 sous forme de fraction
pause
Texte graphique au pixel (0;0) : "BONJOUR"
pause // la pause permet d'admirer avant d'effacer
Effacer l'écran
Placer "coucou" en ligne 2 et colonne 1
Fin
Toutes les fonctions suivantes sont dans le menu prgm.Code
EffEcr
Disp "LOL
Prompt C,D // cumule les variables
Input "VARIABLE:",C
Pause
Pause D // pause et affiche le nombre D
Disp 2/3>Frac // fonction ">Frac" , ne supporte que Disp et Pause
Pause 4/3>Frac
Texte(0,0,"BONJOUR
Pause
EffEcr
Output(2,1,"COUCOU
Citation
Comparaisons pratiques des affichages sur la calculatrice.
Code
EffEcr // Effaçons l'écran
Output(6,14,"ABCDE // cela dépasse de l'écran et "DE" revient à la ligne
// Aperçu de l'écran
|| ABC||
||DE ||
Disp "12344567890123456789 // la fin est perdue et 6 est remplacé par "..."
||123456789012345.||
Pause "AZERTYUIOPQSDFGHJKLM // "..." signalés, touches fléchées pour défiler
// aperçu de base
||AZERTYUIOPQSDF.||
// aperçu après un premier défilement
||.ERTYUIOPQSDFG.||
// aperçu après défilement maxi
||.UIOPQSDFGHJKLM||
Disp "A" // affichage quelconque, monte l'écran si c'est tout en bas
// IDEM pour: Pause "A"
// Vous pouvez afficher du vierge aussi
// et cela peut aussi monter l'écran et effacer des lignes
Disp ""
Pause ""
Output(1,1,""
Citation
Ici j'illustre uniquement les écritures de conditions qu'on utilisera dans les tests Si et les boucles.
Les signes de comparaisons se saisissent chacun avec un unique caractère du menu test=2nde+math. J'utilise la syntaxe du langage C pour les symboles.
Code
Si c>8
Si c>=8 // ">=" représente "supérieur ou égal"
Si c<=8 // "<=" représente "inférieur ou égal"
Si c!=8 // "!=" ou "=/=" représente "différent", le égal barré
Si c>8 et c<20
Si c<8 ou c>20
Si non(c<8) // complémente le résultat (Faux<->Vrai)
Si c=1 OuExclusif c=0 // n'existe pas sur ti82 basique
Code
If C>8
If C>=8 // ">=" se saisit en un seul caractère avec le menu 2nde+math(test)
If C!=8 // "!=" idem
If C>8 et C<20 // " et " est une fonction
If C<8 ou C>20 // " ou " idem
If non(C<8) // "non(" idem
If c=1 OuExclusif c=0 // "xor" en anglais
// cela s'écrit aussi : If c=1 et c!=0 ou c=0 et c!=1
// ou encore : If c=1 et non(c=0) ou c=0 et non(c=1)
// ces variantes sont même obligatoires sur ti82basique.
Sachez aussi que la priorité des oprérations est :
-parenthèses (et fonctions à parenthèses)
-calculs
-et
-"ouExclusif" et "ou" sont exécutées de gauche à droite
Citation
La TI utilise la fonction If en guise de Si.
Elle supporte le sous-entendu de la fin LORSQU'IL N'Y A QU'UNE INSTRUCTION DEDANS ET PAS D'AUTRE ALTERNATIVE.
Code
Nombres réels a,b,c
Début
Si c=3
alors
a<-2 // UNE SEULE INSTRUCTION POUR CET EXEMPLE
fin_Si
Si c=3
alors
a<-2 // une ou plusieurs instructions
b<-5
fin_Si
Si c=4
alors
a<-3
sinon
a<-5
fin_Si
Fin
Code
If C=3
2->A // UNE SEULE INSTRUCTION, juste suivant le test
If C=3
Then
2->A // une ou plusieurs instructions
5->B
End
If C=4
Then
3->A
Else
5->A
End
Vous pouvez aussi imbriquer plusieurs choses. L'exemple suivant est courant.
Code
Si condition1
alors
// cas1
sinon
si condition2
alors
// cas2
sinon
// cas3 (conditions 1 et 2 fausses)
fin_si
fin_si
Citation
La TI connaît trois types de boucles.
Pour : For
Tant que : While
Repète : Repeat
Il faudra parfois adapter vos algorithmes aux instructions de la TI.
Fait xxx tant que yyy ==== Répète xxx jusqu'à non(yyy)
Je vous déconseille de tenter d'utiliser Goto/Lbl qui permettent de faire trop n'importe quoi et causent des bugs si mal utilisés. Le programme saute d'un Goto vers le Label correspondant.
Goto A1
Lbl A1
Une seule instruction ferme les boucles : End
Contrairement aux Fins dont on précise l'instruction ouvrante en algorithmie.Code
nombres réels a,c,d
Début
Pour d variant de 1 à c par pas de 2
Ecrire d
Fin_Pour
Tant_que a<8
a<-a+1
Fin_Tant_Que
Répète
a<-a-1
jusqu'à a<5
Fait
a<-a+1
tant que a>10 // jusqu'à a>=10
Fin
Code
// ci dessous une syntaxe proche du C que je vois parfois
Pour d variant de 1 à c par pas de 2
Début_Pour
Ecrire d
Fin_Pour
TANT_QUE (A<8) FAIRE
DEBUT_TANT_QUE
A PREND_LA_VALEUR A+1
FIN_TANT_QUE
Répète
Début_répète
a<-a-1
jusqu'à a<5
Fin_répète
Fait
a<-a+1
tant que a>10 // jusqu'à a>=10 // Fin_Fait
Code
For(D,1,C,2
Disp D
End
While A<8
A+1->A
End
Repeat A<5
A-1->A
End
Repeat A>=10
A+1->A
End
Citation
NbrAléat (=rand) est la fonction qui donne x réel aléatoire équilibré tel que 0<x<1.
Pour obtenir des entiers variés, les 82stat(fr) ont une fonction simple.
Les Ti82 doivent obligatoirement effectuer un calcul pour obtenir d'autres aléatoires que décimaux.
Je génère ci-dessous un entier aléatoire équilibré entre 3 et 6 inclus. Généralisé à [A,B].
Solution simple :
-sur ti82stat : randInt(3,6)
-sur ti82statfr : entAléat(3,6)
// randInt(A,B) : entre A et B inclus
Solution décomposée : (toujours entre 3 et 6, avec 6-3+1=4)
-sur ti82 : 3+int 4rand
-sur ti82stat : 3+int(4rand)
-sur ti82statfr : 3+ent(4NbrAléat)
// A+int((B-A+1)rand : aléa de A à B
Cela consiste à multiplier l'aléatoire 0<X<1 par y entier pour obtenir 0<yX<y
Puis on le rend entier avec la fonction int. 0<=int(yX)<=y-1<y
Puis on ajoute z tel que z<=z+int(yX)<=z+y-1<z+y
Remarquez que z est inclus et z+y est exclus.
En choisissant y=B-A+1 et z=A, on obtient un entier aléatoire entre A et B inclus.
----------
Les parenthèses à proximité de rand ou NbrAléat doivent être correctement utilisées.
En effet la syntaxe peut commander une liste d'aléatoire au lieu de faire un produit.
NbrAléat(N) : répond une liste de N aléatoires
Donc à ne pas confondre avec le produit NbrAléat*(N).
----------
Vous pouvez initialiser l'aléatoire.
Chaque exécution d'une même initialisation sera suivie de la même série pseudo-aléatoire. La configuration d'origine de la TI est 0->NbrAléat.
L'initialisation ressemble à une affectation mais ce n'en est pas une.
Citation
La parité se teste de plusieurs manières, la plus courte utilise la fonction partDéc qui donne la partie décimale.
On peut aussi comparer un nombre à sa partie entière.
On peut même étudier le reste de la division. (reste nul si division juste ; voir prochain chapitre si ça vous intéresse)
Les fonctions partDéc(), partEnt() et ent() sont dans le menu math
Cela se généralise à la divisibilité par un nombre quelconque.
Code
Si A est pair
/////////////////////////
Si A divisible par B
Code
If non(parDéc(.5A // rappelez vous, cela donne If parDéc(A/2)=0
// ou bien
If ent(A/2)=A/2
///////////////////////
If non(partDéc(A/B
// ou bien
If ent(A/B)=A/B
Citation
La racine carrée en anglais s'appelle "square root" abrégé en "sqrt" que vous pouvez rencontrer dans des algorithmes.
"floor(X)" en anglais est la fonction entière en math. Elle réduit à l'entier inférieur. Cela correspond à la fonction "int" de TI en anglais et "partEnt" de TI en français.
Je n'ai pas commis d'erreur, c'est TI qui est mal traduite.
La troncature se fait avec "iPart" en anglais et "ent" en français.
"ceil(X)" est l'augmentation à l'entier supérieur. TI n'a pas ça. Remplacez par
Si X-floor(X) est non-nul
alors
1+floor(X)
Fin_Si
Pour arrondir à N décimales, c'est "round(x,N)" en anglais et "arrondi" en français.
Citation
On calcule le quotient avec la fonction entière ou bien la troncature.
On calcule le reste avec les décimales ou le quotient.
Mais attention en divisant un nombre négatif :
La partie décimale et la troncature donnent un résultat différent d'Euclide. Le reste est alors négatif et le quotient supérieur à la fraction.
Tandis que la fonction entière donne le résultat rigoureux d'Euclide, le reste positif et le quotient inférieur à la fraction.
Attention à la mauvaise traduction de TI.
partie entière = int = partEnt // rigoureusement euclidien
troncature = iPart = ent
quotient classique en anglais
iPart(N/D)
quotient classique en français
ent(N/D)
quotient rigoureusement euclidien en anglais
int(N/D)
quotient rigoureusement euclidien en français
partEnt(N/D)
Reste classique en anglais :
DfPart(N/D) erreur faible possible
N-iPart(N/D) toujours juste
Reste rigoureusement euclidien en anglais :
N-int(N/D)
Reste classique en français :
DpartDéc(N/D) erreur faible possible
N-Dent(N/D) toujours juste
Reste rigoureusement euclidien en français :
N-DpartEnt(N/D)
Citation
Les maximums et les minimums s'obtiennent soit avec des tests soit avec les fonctions max(a,b) et min(a,b).
Avec des alternatives, souvenez vous que le cas d'égalité peut exister.
- ">" / "<="
- ">" / "=" / "<"
- ">=" / "<"
Code
Si A>B , alors X prend la valeur A , fin_si
Si A<=B , alors X prend la valeur B , fin_si
Code
Si A>B
alors
X prend la valeur A
sinon
X prend la valeur B
fin_si
Code
X affecté à la valeur maximale entre A et B
Code
If A>B
A->X
If A<=B
B->X
Code
If A>B
Then
A->X
Else
B->X
End
EDITE le 10/11/2012 : ajoût de traductions de tests et d'un lien vers le catalogue des fonctions TI, pour trouver dans la calculatrice l'emplacement des fonctions. Et une correction de copier/coller où j'ai laissé "Si" en TI-Basic.
EDITE le 11/03/2013 : remplacement des deux balises de code par une série de plusieurs balises, afin d'être plus compréhensible en classant par petits groupe.
EDITE le 8/4/2013 : améliorations mineures de phrases et ajoût de paragraphes sur l'aléatoire et la parité
EDITE le 25/4/2013 : ajout de calculs courants sur le reste d'une division
EDITE le 3/9/2013 : réécriture des aléatoires avec justification et un meilleur ordre. Correction de priorités xor/or.
EDITE le 4/9/2013 : ajout d'une intro à propos des cas mot-à-mot ou plus compliqué.
EDITE le 5/9/2013 : ajouts de maximums, par fonction ou alternatives
EDIT 12/09/2013 : prise en compte de la copie et du complément sur tout82.forumactif.org. Ajout de l'initialisation des pseudoaléatoires. Ajout d'un paragraphe mentionnant Frac et Texte.
EDIT 15/9: ajout d'un peu de vocabulaire (afficher,floor,sqrt,ceil,round) + un lien d'exemples + exemples d'algorithmes présentés comme le langage C.
EDIT 12/10/13 : Quelques détails sont donnés à propos du comportement des affichages en fin de ligne.
EDIT 4/11/13 : Ajout d'un exemple de fractions et de texte graphique, et un exemple de triple alternative via une imbrication.
EDIT 4/12/13 : Ajout de deux liens vers autres sources.
EDIT 17/04/2014 : une retouche de l'intro, guillemet manquant
EDIT 09/09/2014 : Plus d'infos sur les variables. Commentaire sur la compatibilité des modèles et ajout de la 82plus. Séparation des généralités, diverses retouches.