Rechercher
Connexion
Chatbox externe
Derniers sujets
Partenaires
TI-Planet | Espace-TI : Forum |
Faire un don à Tout-82...
Où va cet argent ?
Membres donateurs:- Persalteas (10€)
- Wistaro (5€)
- jo2geek (22€)
Les posteurs les plus actifs du mois
Aucun utilisateur |
[TUTO] Programmer des programmes mathématiques simples.
4 participants
Page 1 sur 1
[TUTO] Programmer des programmes mathématiques simples.
Bonjours chers lecteurs,
le but de ce tutos est de passer à la pratique après la théorie du tutoriel de Linkakro (il est préférable que vous l'ayez lu donc je ferais comme si) disponible ici :
https://tout82.forumactif.org/t26-algorithmique-vers-ti-basic
Je vous préviens tout de suite je suis bien plus un programmeur qu'un algorithmeur (ça se dit?), c'est comme les maths on doit tout expliquer et passer des heures pour écrire un truc que tout le monde comprends. Mais enfin cela n'entravera pas le tuto. Tout cela pour dire que celui-ci sera orienté sur de (relativement) petits programmes mathématiques (algorithmes et programmation donc, mais surtout du deuxième).
A la fin le but est que vous soyez capables de faire vos propres programmes (relativement) compliqués de maths.
1. Révision de ce que vous avez déjà vu
Et oui déjà un TP arg! mais normalement vous avez lu le tuto de Linkakro donc vous connaissez les bases (variables, conditions, boucles, etc...). Ce que nous allons faire c'est un petit programme permettant de faire une division euclidienne, c'est pratique puisque cette fonction n'existe pas sur une TI-82 stats.fr.
C'est le début alors je suis gentil, je vous explique toutes les étapes:
-En principe ce que je vais vous demander n'est pas primordial mais c'est plus clair, ça vous refait voir plus de trucs, et puis c'est moi qui décide nyerk, nyerk !
Donc vous allez afficher un petit message expliquant à l'utilisateur à quoi sert le programme. Au début je le faisais pas mais quand on a une dizaine de programme dans le genre on commence déjà à s'y perdre. Vu que vous voulez faire des algorithme vous n'avez pas besoin de l'optimiser pour qu'il soit tout léger en mémoire mais bon c'est pas la peine de faire un truc lourd inutilement.
-Saisissez le numérateur et le dénominateur sinon ça va être dur.
-Faites le calcul. Aide: le quotient est égal à la partie entière de résultat pour n'obtenir que ce qu'il y a avant la virgule c'est la fonction [partEnd( ] dans la caltoche que vous trouverez dans la partie -NUM- du menu [maths] c'est le numéro 5. De toute manières si vous ne savez pas où trouver une fonction vous pouvez aller la chercher dans le catalogue ( [2nde] + 0 ). Le reste lui est égal à la différence du numérateur et du produit du quotient et du dénominateur.Si vous ne comprenez pas cette dernière phrase laissez tomber (allez c'est simple ).
-Finalement affichez le quotient et le reste.
Voila c'est pas sorcier moi ça me donne 6 lignes, 8 pour effacer l'écran avant et après + 1 pour la pause avant le deuxième effaçage obtenue avec la fonction Pause.
Vous pouvez écrire l'algorithme avant si ça vous chante.
Bon comparons nos codes:
Bon là c'est un joli programme, je connais des gens qui raffinerait un peu moins mais bon, je trouve ça mieux comme ça.
Et bien c'est super vous pouvez désormais faire des divisions euclidiennes (oui c'est pas super super utile mais voyez le bon côté des choses).
Si vous ne savez pas ce qu'est l'optimisation c'est ce qui permet de rendre un programme plus léger, on peut le faire en supprimant le " final ou la ) finale ou encore en écrivant "If non(V" plutôt que "If V=0". Aller voir le tuto "Candide ou l'Optimisation" pour en savoir plus. Le code optimisé donnerait :
tuto "Candide ou l'Optimisation" : https://tout82.forumactif.org/t50-candide-ou-l-optimisation (si j'étais vous j'attendrais un peu pour ce tuto parce que vous n'allez rien comprendre)
Si vous ne comprenez pas tout ne vous inquiétez pas on y viendra.
Bien comme je l'ai déjà dit je vous apprends à faire des programmes de maths. Donc en fait je fais un mélange et je parlerais de moins en moins d'algorithme, mon but étant plutôt de vous faire comprendre la logique de la conception de ces programmes. Le titre de la section est "Algorithmique et Cours de Maths" donc ce tuto n'est pas un H.S. pour autant.
Il y a de fortes chances que le lecteur soit au Lycée, et de surcroît en Seconde. Ce n'est pas sur mais même moi en Terminale S j'utilise encore les programmes qu'on fera tout au long du tuto. Tout ça pour dire que tout les programmes qu'on verra sont utiles en plus de vous entrainez, c'est-i pas super?
2. Un deuxième petit test
Oui je sais je suis embêtant à force avec tout ces tests. Mais c'est comme en maths on faits des exos après le cours. Et puis ce sont des exercices courts. Bon la dernière fois je vous ai expliqués comment faire étape par étape, il est temps de voir ce que vous avez engrangé et que vous ayez un peu plus d'autonomie.
Voila ce que je vous demande :
- Un programme qui calcule un vecteur à partir de 2 points du plan A(xa;ya) et B(xb;yb). Si vous ne savez pas comment on fait : l'abscisse du vecteur vaut xb - xa, et son ordonnée ya - yb. Vous devez avouer que c'est vraiment fastoche. En plus je vous ai encore donné la réponse. Bon allez c'est parti, et n'oubliez pas d'expliquer avant ce que fait le programme.
Vous avez réussi? Super ! Sinon revoyez ce qu'on a dit et puis ça viendra on a pas terminé!
3.Où le lecteur apprends enfin quelque chose au lieu de gagner seulement de l'expérience
Vous deviez l'attendre, je vais enfin vous apprendre quelque chose de concret, cependant toutes les choses que je vous apprendraient seront surtout des astuces.
Bien imaginons que nous ayons un programme et que le résultat final soit un quotient (non euclidien) et par extension un résultat décimal par exemple : 19,6920769. On est d'accord pour dire que c'est pas génial, il y a 7 chiffres après la virgule (encore 7! Je vous jure que c'est une coïncidence, la preuve : dans la liste des chiffres mon préféré c'est 8, ça ressemble à l'infini,(remarque j'aime bien 6 aussi) enfin si je dois choisir hein, je ne chéris pas particulièrement les chiffres, mais bref je m'égare.)
Ce serait bien que nous puissions changer ce nombre décimal en fraction n'est-ce pas? En l'occurrence c'est 256/13. Et bien figurez-vous que c'est possible! En même temps je n'en parlerais pas sinon. C'est la fonction [>Frac] dans le menu [maths] (n° 1 de l'onglet MATH). Génial me direz-vous. Empressez-vous donc de convertir un nombre décimal en fraction (attention ça ne marche pas toujours par exemple 1,414213562 n'est pas le résultat d'une division mais d'une racine celle de 2).
Jusqu'à peu je pensais que c'était impossible de le faire sur une variable et du coup j'utilisais une autre astuce dans mes programmes. Je comptais sur ce supposé bug pour monter une autre astuce. Si vous n'avez lu que le tuto de Linka vous ne devriez pas connaitre la touche [Rép] ou [Ans] de votre calculette, en fait vous l'avez surement déjà fait sans le savoir :
Allez il est temps de pratiquer voici un exercice : vous devez faire un programme qui prend les coordonnées de deux points d'un plan et qui calcule le point aux milieu. Le calcul consiste à faire la moyenne des abscisses pour obtenir l'abscisse du milieu, et de même pour l'ordonnée. Allez je veux un résultat sous forme de fraction et vous n'avez le droit de n'utiliser que deux variables (vous pouvez même vous passez de Rep pour le coup).
A vrai dire les >Frac sont assez inutiles ici, en général les coordonnées sont des nombres entiers donc on devrait avoir au pire des nombres avec deux chiffres après la virgule.
Allez un deuxième exo pour encrez les connaissance : on va faire un programme qui trouve la formule d'une fonction affine (de la forme mx+p) à partir de deux points qui appartiennent à sa courbe. Pour calculer m on fait le calcul (ya - yb) / (xa - xb), p = b - m * xa. Allez cette fois je vous dispense d'explications au début du prog. Mettez-moi 2 Rep, vous n'avez le droit qu'à 4 variables, et pour finir je veux les résultats en fraction.
4.Un vrai programme de maths
Bon on va rentrer dans le vif du sujet, ils sont bien sympathiques nos programmes mais assez basiques, et puis excessivement simples à faire (si c'est pas le cas ça viendras avec le temps). Cette fois au lieu de faire une pléthore de mini programmes qui vont envahir la faible mémoire de votre calculatrice on va faire du tir groupé. Je m'explique au lieu de faire trois petits programmes indépendants ce serait pas cool de faire un trois en un? Pour ça on va utiliser différentes fonctions, attention prêtez attention à ce qui va suivre c'est nouveau.
Notre but c'est que l'utilisateur puisse choisir le programme qu'il veut utiliser. On va utiliser pour ça la fonction : Menu(, une magnifique fonction que vous ne retrouverez pas dans de nombreux autres languages de progra (en C faut faire des switch, avec de break, c'est chiant, mais bon vous vous en foutez on fait du TI-Basic nous). En gros ça va afficher différentes options qu'on peut choisir. Je vous montre un exemple de programme qu'on va étudiez ensemble :
C'est normal. Je vais expliquer étape par étape. D'abord on écrit la fonction : Menu(, jusque la ça va non? Ensuite on met le nom du menu (qui sera affiché) entre guillemets vu que c'est du texte, j'ai choisis un truc pas très original : MENU. Ensuite on met les noms des options entre guillemets. Ouais mais c'est quoi le 1, le 2 et le 3. Aïe, c'est là que ça se complique!
Malheureusement vous expliquez cela va être un peu long alors on va laissez Menu( pour quelques instants. Donc ces numéros sont des références à des étiquettes.
Tout d'abord qu'est-ce qu'une étiquette? C'est un repère dans le programme, on peut lui donner un numéro, ou une variable pour nom. Un repère c'est un peu vague, donc je vais essayer d'être plus clair. Imaginez une faille spatio temporelle, en gros parfois vous allez vouloir revenir dans un endroit du programme, ou allez plus loin. C'est là qu'intervienne les étiquettes, vous en mettez une à un endroits puis vous mettez un renvoi quelque part et le programme va chercher en arrière ou plus loin et l'étiquette va lui dire "Youhou par ici mec!" et le programme va faire le saut en arrière ou en avant. C'est très pratique. Je vais vous montrez un exemple pour que vous compreniez mieux.
La fonction pour initialiser une étiquette est Lbl (pour label = étiquette en anglais). Une autre fonction importante est Goto qui est le renvoi. Bon allez un exemple :
Linkakro a fait un autre tuto sur la mauvaise utilisation des Goto dans les boucles, si ça vous intéresse:
http://tout82.free.fr/forum/sujet.php?sujet=2757
Bon revenons à Menu( , je vous remets le code :
Vous allez me regroupez les deux derniers programmes qu'on a fait soit celui-là :
Bon et bien voila une bonne chose de faite.
5.Le chapitre de la fin
Et bien chers amis il est bientôt temps de se quitter mais il va d'abord falloir faire un exercice qui synthétise toutes les connaissances acquises au cours du tutoriel. Ce sera un programme sur les polynômes du second degré, si vous êtes un 1ère S vous devriez très bien savoir ce que c'est. Ce programme vous sera très utile en temps voulu.
Un polynôme du second degré est une fonction de la forme ax²+bx+c avec a, b et c des réel, et a non nul. Ils possèdent une forme canonique de la forme a(x-(alpha))²+(bêta). Je vais vous renvoyez à un cours pour en savoir plus :
http://www.maths-cours.fr/premiere-es/polynomes-du-second-degre
Vous pouvez arrêter aux inégalités. Si vous ne connaissez pas ce cours lisez-le attentivement je ne vous dirais plus comment calculer maintenant.
Voila le programme que je veux que vous fassiez :
- Dans un premier temps demandez les valeurs de A, B et C. Calculez Delta et stockez le dans une variable.
- Dans un deuxième temps faite un menu qui donne deux options : forme canonique, et calcul des racines (donnez les noms que vous voulez)
- Dans l'option forme canonique calculez alpha et bêta et donnez les valeurs à l'utilisateur.
- Dans l'option calcul des racines :
a) Si delta est négatif prévenez l'utilisateur qu'il n'y a pas de racines
b) Si delta est nul donnez l'unique racine à l'utilisateur
c) Si delta est positif donnez les deux racines du polynômes
- Voila vous avez terminé le programme
Astuce : Vous pouvez faire une option quittez en mettant dans l'instruction un Stop une fonction qui arrête le programme, ou plus simple et moins spacieux dans la mémoire : mettez l'étiquette de l'option à la dernière ligne du programme et c'est tout, ce sera donc la fin du programme.
(Rappels : si = If, sinon = Else, et = and, ou inclusif = or, pour plus d'infos revoyez le tuto de Linka)
Allez creusez-vous un peu les méninges, je ne serais pas toujours là pour vous tenir la main.
Bon il est temps de comparez nos résultats:
Si nos programmes sont différents mais que le votre marche tout va bien. Bon et bien vous avez terminé le tuto bravo!
J'espère que ça vous a plu et surtout aidé.
Dans un avenir plutôt proche je pense faire la suite du tuto intitulé : Des programmes de maths aux jeux simples où l'on apprendra à faire des jeux simples. Si vous avez des questions n'hésitez pas à m'envoyer des mp. Vous pourrez trouver mes programmes dans ma signature, il y aura les lien de mes programmes de maths (y en a que je ne vous ai pas fait faire).
Bonne chance programmeur en herbe et à bientôt.
le but de ce tutos est de passer à la pratique après la théorie du tutoriel de Linkakro (il est préférable que vous l'ayez lu donc je ferais comme si) disponible ici :
https://tout82.forumactif.org/t26-algorithmique-vers-ti-basic
Je vous préviens tout de suite je suis bien plus un programmeur qu'un algorithmeur (ça se dit?), c'est comme les maths on doit tout expliquer et passer des heures pour écrire un truc que tout le monde comprends. Mais enfin cela n'entravera pas le tuto. Tout cela pour dire que celui-ci sera orienté sur de (relativement) petits programmes mathématiques (algorithmes et programmation donc, mais surtout du deuxième).
A la fin le but est que vous soyez capables de faire vos propres programmes (relativement) compliqués de maths.
1. Révision de ce que vous avez déjà vu
Et oui déjà un TP arg! mais normalement vous avez lu le tuto de Linkakro donc vous connaissez les bases (variables, conditions, boucles, etc...). Ce que nous allons faire c'est un petit programme permettant de faire une division euclidienne, c'est pratique puisque cette fonction n'existe pas sur une TI-82 stats.fr.
C'est le début alors je suis gentil, je vous explique toutes les étapes:
-En principe ce que je vais vous demander n'est pas primordial mais c'est plus clair, ça vous refait voir plus de trucs, et puis c'est moi qui décide nyerk, nyerk !
Donc vous allez afficher un petit message expliquant à l'utilisateur à quoi sert le programme. Au début je le faisais pas mais quand on a une dizaine de programme dans le genre on commence déjà à s'y perdre. Vu que vous voulez faire des algorithme vous n'avez pas besoin de l'optimiser pour qu'il soit tout léger en mémoire mais bon c'est pas la peine de faire un truc lourd inutilement.
-Saisissez le numérateur et le dénominateur sinon ça va être dur.
-Faites le calcul. Aide: le quotient est égal à la partie entière de résultat pour n'obtenir que ce qu'il y a avant la virgule c'est la fonction [partEnd( ] dans la caltoche que vous trouverez dans la partie -NUM- du menu [maths] c'est le numéro 5. De toute manières si vous ne savez pas où trouver une fonction vous pouvez aller la chercher dans le catalogue ( [2nde] + 0 ). Le reste lui est égal à la différence du numérateur et du produit du quotient et du dénominateur.
-Finalement affichez le quotient et le reste.
Voila c'est pas sorcier moi ça me donne 6 lignes, 8 pour effacer l'écran avant et après + 1 pour la pause avant le deuxième effaçage obtenue avec la fonction Pause.
Vous pouvez écrire l'algorithme avant si ça vous chante.
Bon comparons nos codes:
- SOLUTION:
nombres réels a,b
Début
Lire a
Lire b
Q<-partie entière de a/b
R<-A-B*Q
Afficher "Q=",Q
Afficher "R=",R
Fin
:EffEcr
:Disp "DIVISION","EUCLIDIENNE","DE A PAR B /* explications, l'Output n'est pas nécessaire ici mais bon ce n'est pas une erreur d'en mettre un */
:Prompt A,B // saisie
:partEnt(A/B)->Q // calcul du quotient
:A-B*Q->R // calcul du reste
:Disp "Q=",Q // si vous mettez les résultats sans expliquer c'est pas clair
:Disp "R=",R
:Pause
:EffEcr
Bon là c'est un joli programme, je connais des gens qui raffinerait un peu moins mais bon, je trouve ça mieux comme ça.
Et bien c'est super vous pouvez désormais faire des divisions euclidiennes (oui c'est pas super super utile mais voyez le bon côté des choses).
Si vous ne savez pas ce qu'est l'optimisation c'est ce qui permet de rendre un programme plus léger, on peut le faire en supprimant le " final ou la ) finale ou encore en écrivant "If non(V" plutôt que "If V=0". Aller voir le tuto "Candide ou l'Optimisation" pour en savoir plus. Le code optimisé donnerait :
tuto "Candide ou l'Optimisation" : https://tout82.forumactif.org/t50-candide-ou-l-optimisation (si j'étais vous j'attendrais un peu pour ce tuto parce que vous n'allez rien comprendre)
- Optimisation:
- :EffEcr
:Disp "DIVISION","EUCLIDIENNE","DE A PAR B
:Prompt A,B
:partEnt(A/B->Q
:Disp "Q=",Q
:Pause A-BRép /* merci m@t mais je ne pense pas que se soit très compréhensible on a même pas encore vu les Rep */
:EffEcr
Si vous ne comprenez pas tout ne vous inquiétez pas on y viendra.
Bien comme je l'ai déjà dit je vous apprends à faire des programmes de maths. Donc en fait je fais un mélange et je parlerais de moins en moins d'algorithme, mon but étant plutôt de vous faire comprendre la logique de la conception de ces programmes. Le titre de la section est "Algorithmique et Cours de Maths" donc ce tuto n'est pas un H.S. pour autant.
Il y a de fortes chances que le lecteur soit au Lycée, et de surcroît en Seconde. Ce n'est pas sur mais même moi en Terminale S j'utilise encore les programmes qu'on fera tout au long du tuto. Tout ça pour dire que tout les programmes qu'on verra sont utiles en plus de vous entrainez, c'est-i pas super?
2. Un deuxième petit test
Oui je sais je suis embêtant à force avec tout ces tests. Mais c'est comme en maths on faits des exos après le cours. Et puis ce sont des exercices courts. Bon la dernière fois je vous ai expliqués comment faire étape par étape, il est temps de voir ce que vous avez engrangé et que vous ayez un peu plus d'autonomie.
Voila ce que je vous demande :
- Un programme qui calcule un vecteur à partir de 2 points du plan A(xa;ya) et B(xb;yb). Si vous ne savez pas comment on fait : l'abscisse du vecteur vaut xb - xa, et son ordonnée ya - yb. Vous devez avouer que c'est vraiment fastoche. En plus je vous ai encore donné la réponse. Bon allez c'est parti, et n'oubliez pas d'expliquer avant ce que fait le programme.
- SOLUTION:
- :EffEcr
:Disp "OBTENIR UN","VECTEUR A PARTIR","DE 2 POINTS","a(A,B) b(C,D) /*pas besoin de supprimer la dernière parenthèse c'est pour l'esthétique du texte, vu que j'utilise des Prompt j'explique ce que représente les variables que l'utilisateur doit entrer, vous pouvez utiliser des Outputs si vous préférez mais ça risque d'être plus lourd */
:Prompt A,B,C,D
:Disp "v(E,F), E=",C-A," F=",D-B /* vous pouvez trouver les minuscules en cherchant bien, les 7 espaces sont purement esthétiques, si vous avez remarqué j'aime bien ça */
:Pause
:EffEcr
Vous avez réussi? Super ! Sinon revoyez ce qu'on a dit et puis ça viendra on a pas terminé!
3.Où le lecteur apprends enfin quelque chose au lieu de gagner seulement de l'expérience
Vous deviez l'attendre, je vais enfin vous apprendre quelque chose de concret, cependant toutes les choses que je vous apprendraient seront surtout des astuces.
Bien imaginons que nous ayons un programme et que le résultat final soit un quotient (non euclidien) et par extension un résultat décimal par exemple : 19,6920769. On est d'accord pour dire que c'est pas génial, il y a 7 chiffres après la virgule (encore 7! Je vous jure que c'est une coïncidence, la preuve : dans la liste des chiffres mon préféré c'est 8, ça ressemble à l'infini,(remarque j'aime bien 6 aussi) enfin si je dois choisir hein, je ne chéris pas particulièrement les chiffres, mais bref je m'égare.)
Ce serait bien que nous puissions changer ce nombre décimal en fraction n'est-ce pas? En l'occurrence c'est 256/13. Et bien figurez-vous que c'est possible! En même temps je n'en parlerais pas sinon. C'est la fonction [>Frac] dans le menu [maths] (n° 1 de l'onglet MATH). Génial me direz-vous. Empressez-vous donc de convertir un nombre décimal en fraction (attention ça ne marche pas toujours par exemple 1,414213562 n'est pas le résultat d'une division mais d'une racine celle de 2).
Jusqu'à peu je pensais que c'était impossible de le faire sur une variable et du coup j'utilisais une autre astuce dans mes programmes. Je comptais sur ce supposé bug pour monter une autre astuce. Si vous n'avez lu que le tuto de Linka vous ne devriez pas connaitre la touche [Rép] ou [Ans] de votre calculette, en fait vous l'avez surement déjà fait sans le savoir :
- Code:
24-8
16
/* vous tapez /2 */
Rep/2 // voici notre ami Rep
8
- Code:
A+B+C+...+X+Y+Z+#(thêta)
Disp "RESULTAT =",Rep
Allez il est temps de pratiquer voici un exercice : vous devez faire un programme qui prend les coordonnées de deux points d'un plan et qui calcule le point aux milieu. Le calcul consiste à faire la moyenne des abscisses pour obtenir l'abscisse du milieu, et de même pour l'ordonnée. Allez je veux un résultat sous forme de fraction et vous n'avez le droit de n'utiliser que deux variables (vous pouvez même vous passez de Rep pour le coup).
- SOLUTION:
- :EffEcr
:Disp "OBTENIR LE","MILIEU DE LA","DROITE DE 2 PTS","a(A,B) b(C,D)
:Prompt A,B,C,D
:Disp "LE MILIEU A","POUR COORDONNEES",(A+C)/2>Frac,"ET",(B+D)/2>Frac
:Pause
:EffEcr
A vrai dire les >Frac sont assez inutiles ici, en général les coordonnées sont des nombres entiers donc on devrait avoir au pire des nombres avec deux chiffres après la virgule.
Allez un deuxième exo pour encrez les connaissance : on va faire un programme qui trouve la formule d'une fonction affine (de la forme mx+p) à partir de deux points qui appartiennent à sa courbe. Pour calculer m on fait le calcul (ya - yb) / (xa - xb), p = b - m * xa. Allez cette fois je vous dispense d'explications au début du prog. Mettez-moi 2 Rep, vous n'avez le droit qu'à 4 variables, et pour finir je veux les résultats en fraction.
- SOLUTION:
- :EffEcr
:Disp "a(A,B) b(C,D)
:Prompt A,B,C,D
:(B-D)/(A-C
:Disp "MX+P: M=",Rep>Frac,"P=",B-RepA>Frac
:Pause
:EffEcr
4.Un vrai programme de maths
Bon on va rentrer dans le vif du sujet, ils sont bien sympathiques nos programmes mais assez basiques, et puis excessivement simples à faire (si c'est pas le cas ça viendras avec le temps). Cette fois au lieu de faire une pléthore de mini programmes qui vont envahir la faible mémoire de votre calculatrice on va faire du tir groupé. Je m'explique au lieu de faire trois petits programmes indépendants ce serait pas cool de faire un trois en un? Pour ça on va utiliser différentes fonctions, attention prêtez attention à ce qui va suivre c'est nouveau.
Notre but c'est que l'utilisateur puisse choisir le programme qu'il veut utiliser. On va utiliser pour ça la fonction : Menu(, une magnifique fonction que vous ne retrouverez pas dans de nombreux autres languages de progra (en C faut faire des switch, avec de break, c'est chiant, mais bon vous vous en foutez on fait du TI-Basic nous). En gros ça va afficher différentes options qu'on peut choisir. Je vous montre un exemple de programme qu'on va étudiez ensemble :
- Code:
:Menu("MENU","TRUC",1,"MACHIN",2,"BIDULE",3
C'est normal. Je vais expliquer étape par étape. D'abord on écrit la fonction : Menu(, jusque la ça va non? Ensuite on met le nom du menu (qui sera affiché) entre guillemets vu que c'est du texte, j'ai choisis un truc pas très original : MENU. Ensuite on met les noms des options entre guillemets. Ouais mais c'est quoi le 1, le 2 et le 3. Aïe, c'est là que ça se complique!
Malheureusement vous expliquez cela va être un peu long alors on va laissez Menu( pour quelques instants. Donc ces numéros sont des références à des étiquettes.
Tout d'abord qu'est-ce qu'une étiquette? C'est un repère dans le programme, on peut lui donner un numéro, ou une variable pour nom. Un repère c'est un peu vague, donc je vais essayer d'être plus clair. Imaginez une faille spatio temporelle, en gros parfois vous allez vouloir revenir dans un endroit du programme, ou allez plus loin. C'est là qu'intervienne les étiquettes, vous en mettez une à un endroits puis vous mettez un renvoi quelque part et le programme va chercher en arrière ou plus loin et l'étiquette va lui dire "Youhou par ici mec!" et le programme va faire le saut en arrière ou en avant. C'est très pratique. Je vais vous montrez un exemple pour que vous compreniez mieux.
La fonction pour initialiser une étiquette est Lbl (pour label = étiquette en anglais). Une autre fonction importante est Goto qui est le renvoi. Bon allez un exemple :
- Code:
:Lbl A
:Disp "EXEMPLE
:Goto A
- Code:
:Lbl B
:Goto A // préparation au saut spatio-temporel
:2+3 // calcul totalement débile et inutile
:Lbl A
:Disp "EXEMPLE
:Goto B
Linkakro a fait un autre tuto sur la mauvaise utilisation des Goto dans les boucles, si ça vous intéresse:
http://tout82.free.fr/forum/sujet.php?sujet=2757
Bon revenons à Menu( , je vous remets le code :
- Code:
:Menu("MENU","TRUC",1,"MACHIN",2,"BIDULE",3
- Code:
:Menu("MENU","TRUC",A,"MACHIN",B,"BIDULE",C
- Code:
:Menu("MENU","TRUC",A,"MACHIN",B,"BIDULE",C
:Lbl A
:Disp "TRUC
:Lbl B
:Disp "MACHIN
:Lbl C
:Disp "BIDULE
- Code:
:Lbl M
:Menu("MENU","TRUC",A,"MACHIN",B,"BIDULE",C
:Lbl A
:Disp "TRUC
:Goto M
:Lbl B
:Disp "MACHIN
:Goto M
:Lbl C
:Disp "BIDULE
:Goto M
Vous allez me regroupez les deux derniers programmes qu'on a fait soit celui-là :
- Code:
:EffEcr
:Disp "OBTENIR UN","VECTEUR A PARTIR","DE 2 POINTS","a(A,B) b(C,D)
:Prompt A,B,C,D
:Disp "v(E,F), E=",C-A," F=",D-B
:Pause
:EffEcr
- Code:
:EffEcr
:Disp "a(A,B) b(C,D)
:Prompt A,B,C,D
:(B-D)/(A-C
:Disp "MX+P: M=",Rep>Frac,"P=",B-RepA>Frac
:Pause
:EffEc
- SOLUTION:
- :Lbl M
:EffEcr
:Menu("MATHS","VECTEUR",1,"DROITE",2
:Lbl 1
:Disp "OBTENIR UN","VECTEUR A PARTIR","DE 2 POINTS","a(A,B) b(C,D)
:Prompt A,B,C,D
:Disp "v(E,F), E=",C-A," F=",D-B
:Pause
:Goto M
:Lbl 2
:Disp "a(A,B) b(C,D)
:Prompt A,B,C,D
:(B-D)/(A-C
:Disp "MX+P: M=",Rep>Frac,"P=",B-RepA>Frac
:Pause
:Goto M
Bon et bien voila une bonne chose de faite.
5.Le chapitre de la fin
Et bien chers amis il est bientôt temps de se quitter mais il va d'abord falloir faire un exercice qui synthétise toutes les connaissances acquises au cours du tutoriel. Ce sera un programme sur les polynômes du second degré, si vous êtes un 1ère S vous devriez très bien savoir ce que c'est. Ce programme vous sera très utile en temps voulu.
Un polynôme du second degré est une fonction de la forme ax²+bx+c avec a, b et c des réel, et a non nul. Ils possèdent une forme canonique de la forme a(x-(alpha))²+(bêta). Je vais vous renvoyez à un cours pour en savoir plus :
http://www.maths-cours.fr/premiere-es/polynomes-du-second-degre
Vous pouvez arrêter aux inégalités. Si vous ne connaissez pas ce cours lisez-le attentivement je ne vous dirais plus comment calculer maintenant.
Voila le programme que je veux que vous fassiez :
- Dans un premier temps demandez les valeurs de A, B et C. Calculez Delta et stockez le dans une variable.
- Dans un deuxième temps faite un menu qui donne deux options : forme canonique, et calcul des racines (donnez les noms que vous voulez)
- Dans l'option forme canonique calculez alpha et bêta et donnez les valeurs à l'utilisateur.
- Dans l'option calcul des racines :
a) Si delta est négatif prévenez l'utilisateur qu'il n'y a pas de racines
b) Si delta est nul donnez l'unique racine à l'utilisateur
c) Si delta est positif donnez les deux racines du polynômes
- Voila vous avez terminé le programme
Astuce : Vous pouvez faire une option quittez en mettant dans l'instruction un Stop une fonction qui arrête le programme, ou plus simple et moins spacieux dans la mémoire : mettez l'étiquette de l'option à la dernière ligne du programme et c'est tout, ce sera donc la fin du programme.
(Rappels : si = If, sinon = Else, et = and, ou inclusif = or, pour plus d'infos revoyez le tuto de Linka)
Allez creusez-vous un peu les méninges, je ne serais pas toujours là pour vous tenir la main.
Bon il est temps de comparez nos résultats:
- Ma Proposition:
- :Lbl M
:EffEcr
:Disp "AX²+BX+C
:Prompt A,B,C
:B²-4AC→D
:Lbl Z // vous comprendrez l'utilité plus tard
:EffEcr
:Menu("CANONIQUE","a(X-α)²+ϐ",A,"RACINE",B,"NOUVEAU",C,"QUITTEZ",Q // pour alpha et bêta vous pouvez mettre a et b minuscule dans var, puis statistique, puis l'onglet EQ
:Lbl C
:Goto M
:Lbl A
:Disp "a(X-α)²+ϐ
:Disp "Δ=",Ans►Frac // utilisez un D pour delta
:Disp "α=",-B/(2A)►Frac
:Disp "ϐ=",-D/(4A)►Frac
:Pause
:Goto Z
:Lbl B
:If D=0:Then
:Disp "Δ=0 1 SOLUCE
:Disp "a(X-α)²
:Disp "α=",‾B/(2A)►Frac
:Pause
:Goto Z
:End
:If D<0:Then
:Disp "0 SOLUCE Δ=",D
:Pause
:Goto Z
:End
:If D>0:Then
:Disp "2 SOLUCE A=",A
:Disp "A(X-X1)(X-X2)
:Disp "X1=",(-B-√(D))/(2A)►Frac,"X2=",(-B+√(D))/(2A)►Frac
:Disp "D=",D
:Pause
:Goto Z
:End
:Lbl Q
Si nos programmes sont différents mais que le votre marche tout va bien. Bon et bien vous avez terminé le tuto bravo!
J'espère que ça vous a plu et surtout aidé.
Dans un avenir plutôt proche je pense faire la suite du tuto intitulé : Des programmes de maths aux jeux simples où l'on apprendra à faire des jeux simples. Si vous avez des questions n'hésitez pas à m'envoyer des mp. Vous pourrez trouver mes programmes dans ma signature, il y aura les lien de mes programmes de maths (y en a que je ne vous ai pas fait faire).
Bonne chance programmeur en herbe et à bientôt.
Dernière édition par ashtrail le Mer 25 Sep 2013 - 23:19, édité 2 fois
Re: [TUTO] Programmer des programmes mathématiques simples.
Merci beaucoup, mon brave.
Je n'ai personnellement pas lu l'intégralité du tuto, mais j'ai une entière confiance en toi.
Je n'ai personnellement pas lu l'intégralité du tuto, mais j'ai une entière confiance en toi.
blg_flg- Connaisseur
- Messages : 249
Points Concours : 45
Productivité : 6
Date d'inscription : 04/06/2013
Localisation : Pantruche
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: [TUTO] Programmer des programmes mathématiques simples.
Je ne sais pas comment tu l'as acquise mais ça fait toujours plaisir (en revanche mon brave... ).blg_flg a écrit:j'ai une entière confiance en toi
Re: [TUTO] Programmer des programmes mathématiques simples.
Félicitations ashtrail !
Je mets ce topic en post-it !
Je mets ce topic en post-it !
Re: [TUTO] Programmer des programmes mathématiques simples.
Petite remarque:
Pour la division euclidienne tu donnes un 2e code que tu dis optimisé, alors tant qu'à faire autant y aller franchement :
Joli travail sinon .
PS: Quand tu parles des Goto/Lbl, il faudrait donner un lien vers l'explication de Linka sur la mauvaise utilisation des Goto dans les boucles:
http://tout82.free.fr/forum/sujet.php?sujet=2757
Pour la division euclidienne tu donnes un 2e code que tu dis optimisé, alors tant qu'à faire autant y aller franchement :
- Code:
EffEcr
Disp "DIVISION","EUCLIDIENNE","DE A PAR B
Prompt A,B
partEnt(A/B->Q
Disp "Q=",Q,"R=",A-B*Q
Pause
EffEcr
- Code:
EffEcr
Disp "DIVISION","EUCLIDIENNE","DE A PAR B
Prompt A,B
partEnt(A/B
Disp "Q=",Rép,"R=
Pause A-BRép //C'est surtout la non utilisation de la multiplication implicite qui est importante
EffEcr
Joli travail sinon .
PS: Quand tu parles des Goto/Lbl, il faudrait donner un lien vers l'explication de Linka sur la mauvaise utilisation des Goto dans les boucles:
http://tout82.free.fr/forum/sujet.php?sujet=2757
m@thieu41- ----------------------
- Messages : 939
Points Concours : 65
Productivité : 47
Date d'inscription : 02/06/2013
Localisation : Nice, France
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: [TUTO] Programmer des programmes mathématiques simples.
Ashtrail, pour éviter les torticolis et autres entorses du doigt qui manie la molette de la souris, pourrais-tu incorporer au fur et à mesure les remarques ? Si tu ne le fais pas déjà, évidemment.
blg_flg- Connaisseur
- Messages : 249
Points Concours : 45
Productivité : 6
Date d'inscription : 04/06/2013
Localisation : Pantruche
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: [TUTO] Programmer des programmes mathématiques simples.
@ m@t : ok merci je règle ça le plus tôt possible
@ Keb : tu veux dire des commentaires dans les codes? Auquel ças je le fais, sinon de toutes manières ce sont des codes court. Si c'est autre chose je ne vois pas ce que tu veux dire...
@ Keb : tu veux dire des commentaires dans les codes? Auquel ças je le fais, sinon de toutes manières ce sont des codes court. Si c'est autre chose je ne vois pas ce que tu veux dire...
Re: [TUTO] Programmer des programmes mathématiques simples.
Non, non, je veux juste dire les astuces, conseils, remarques et autres, comme le post de mat, ci-dessus.
blg_flg- Connaisseur
- Messages : 249
Points Concours : 45
Productivité : 6
Date d'inscription : 04/06/2013
Localisation : Pantruche
Calculatrice(s) :- TI-82 Stats.fr
. :
Re: [TUTO] Programmer des programmes mathématiques simples.
Ah bah oui bien sur c'est beaucoup plus simple comme ça. Agir autrement serait illogique. J'aime la clarté!
blg_flg- Connaisseur
- Messages : 249
Points Concours : 45
Productivité : 6
Date d'inscription : 04/06/2013
Localisation : Pantruche
Calculatrice(s) :- TI-82 Stats.fr
. :
Sujets similaires
» Regroupement de Programmes de Maths
» Regroupement de Programmes de Maths 2
» Sciences Ingénieur - Programmes
» Liste des Programmes du Site
» Relier là TI à l'ordi et transfert de programmes
» Regroupement de Programmes de Maths 2
» Sciences Ingénieur - Programmes
» Liste des Programmes du Site
» Relier là TI à l'ordi et transfert de programmes
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
Dim 16 Oct 2022 - 21:11 par Wistaro
» Bonne année 2018!
Ven 2 Nov 2018 - 19:42 par Ti64CLi++
» Lancement du TI-Concours 2017 !
Sam 20 Mai 2017 - 0:27 par Paulo1026
» Chaînes Youtube des membres
Ven 19 Mai 2017 - 22:41 par Wistaro
» cacul du taux d'intêret
Ven 24 Mar 2017 - 21:50 par m@thieu41
» [Projet] Un mario by tout82
Dim 29 Jan 2017 - 14:09 par Wistaro
» Cherche documentation assembleur TI82stat
Mer 25 Jan 2017 - 12:29 par Ti64CLi++
» Probleme Ti-82 Stats fr
Jeu 12 Jan 2017 - 13:56 par Ti64CLi++
» ROM 82 stats.fr
Jeu 15 Déc 2016 - 10:24 par Ti64CLi++