π
<-
Chat plein-écran
[^]

1er programme pour HP39gII : calcul mental

Programmation et implémentation d'algorithmes.

1er programme pour HP39gII : calcul mental

Message non lude zorglub13 » 17 Sep 2014, 05:36

Bonjour,

Je ne sais pas si cela intéresse vraiment quelqu'un mais bon histoire de contribuer un peu sur cette partie du forum sur les HP voici un exemple de programme permettant de s'entrainer au calcul mental (addition, soustraction, multiplication et division); bref un gros classique mais qui a l'avantage de montrer les avancées au niveau du langage par rapport à une TI83 (du moins quand la HP ne plante pas). Ceci n'est pas une critique pour la TI83, car même si le langage est réduit, cela donne l'avantage de savoir ce qu'on peut faire, comment le faire avec un langage, le ti basic z80, stable.

Code: Tout sélectionner
// Declaration des fonctions
Comparaison();
Addition();
Soustraction();
Multiplication();
Division();

// Programme principal
EXPORT Calcul_Mental()
BEGIN
LOCAL vmx, emx, chx;
RANDSEED();
vmx:=10;
emx:=3;
REPEAT
  CHOOSE(chx,"Travail","Addition","Soustraction","Multiplication","Division","Quitter");
  IF chx==1 THEN
   Addition(vmx, emx);
  END;
  IF chx==2 THEN
   Soustraction(vmx, emx);
  END;
  IF chx==3 THEN
   Multiplication(vmx, emx);
  END;
  IF chx==4 THEN
   Division(vmx, emx);
  END;
UNTIL chx==5;
END;

// Les additions
Addition(vmx, emx)
BEGIN
LOCAL vl1, vl2, res;
vl1:=INT(RANDOM(vmx-1))+1;
vl2:=INT(RANDOM(vmx-1))+1;
res:=vl1+vl2;
Comparaison(vl1, vl2, res, emx, "+");
END;

// Les soustractions
Soustraction(vmx, emx)
BEGIN
LOCAL vl1, vl2, res;
vl1:=INT(RANDOM(vmx-1))+1;
vl2:=INT(RANDOM(vmx-1))+1;
IF vl1 < vl2 THEN
  res:=vl1;
  vl1:=vl2;
  vl2:=res;
END;
res:=vl1-vl2;
Comparaison(vl1, vl2, res, emx, "-");
END;

// Les multiplications
Multiplication(vmx, emx)
BEGIN
LOCAL vl1, vl2, res;
vl1:=INT(RANDOM(vmx-1))+1;
vl2:=INT(RANDOM(vmx-1))+1;
res:=vl1*vl2;
Comparaison(vl1, vl2, res, emx, "*");
END;

// Les divisions
Division(vmx, emx)
BEGIN
LOCAL vl1, vl2, res;
vl1:=INT(RANDOM(vmx-1))+1;
vl2:=INT(RANDOM(vmx-1))+1;
Comparaison(vl1*vl2, vl2, vl1, emx, "/");
END;

// Comparaison de valeurs
Comparaison(vl1, vl2, res, emx, ope)
BEGIN
LOCAL ess, nbr, ok;
LOCAL msg, txt;
LOCAL pos,dec;
pos:=0;
dec:=12;
ess:=0;
txt:=vl1+ope+vl2+"=";
REPEAT
  INPUT(nbr,"Opération",txt,"0");
  RECT_P;
  ess:=ess+1;
  msg:="Essai n"+ess+" : " + txt + nbr;
  TEXTOUT_P(msg+" ?",0,pos,0);
  ok:=(nbr==res);
  IF ok THEN
   TEXTOUT_P("Bravo, c'est la bonne réponse !",0,dec,0);
  ELSE
   IF ess < emx THEN
    TEXTOUT_P("Erreur, essaye encore !",0,dec,0);
   ELSE
    TEXTOUT_P("Erreur, "+txt+res+" !",0,dec,0);
   END;
  END;
  // 20 (BACK) pour la HP39Gii et 4 (ESC) pour la HP Prime
  REPEAT UNTIL ISKEYDOWN(20);
UNTIL ok OR (ess==emx);
END;


J'ai eu pas mal de soucis avec la commande PRINT (que j'ai remplacé par TEXTOUT_P) car lors d'exécution multiple du PRINT, le texte fini par depasser la taille de l'écran et ne scrolle pas. Comme le programme attend ensuite une touche particulière pour passer à la suite on ne peut pas utiliser les touches haut et bas pour faire scroller l'écran. De plus, je n'ai pas vu comment effacer la console d'écran (utilisée avec les PRINT). Ce problème n'existait pas avec les HP Prime.

Autre soucis avec le CASE (avant les IF et en rajoutant une clause DEFAULT à la fin) qui ne fonctionne pas sur la 39gII.

Autre problème du genre pour passer à l'écran suivant j'appuie une seule fois sur la touche ENTREE mais à l'écran suivant il y a un menu qui prend malheureusement en compte la touche ENTREE une 2ème fois et l'option par défaut (ou la dernière sélectionnée) du menu est sélectionné automatiquement. Du coup pour éviter ce problème, la touche ESC sur la 39gII est utilisée pour sortir d'un écran d'affichage de message. Je n'ai pas utilisé MSGBOX car lorsque le message est affiché, je vois en arrière-plan, l'écran de gestion des programmes...

Par contre, avantage pour le côté moderne : variables locales, fonctions avec paramètres... sauf que le CASE ne marche pas.

A+
Avatar de l’utilisateur
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 95.3%
 
Messages: 103
Images: 0
Inscription: 14 Sep 2014, 12:11
Localisation: Aix en provence
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: travail

Re: 1er programme pour HP39gII : calcul mental

Message non lude zorglub13 » 18 Sep 2014, 20:36

C'est marrant, j'essaye de programmer en TI Basic 68k (émulateur) et finalement je découvre que le langage est encore bien mieux que ce que je pensais par rapport au TI Basic Z80. Il est du même style que celui de HP mais sans les bugs... De plus, j'ai l'impression qu'il y a plus de possibilité en matière d'interface graphique (boîte de dialogue...). Donc finalement HP a essayé de copier TI et s'est planté !
Avatar de l’utilisateur
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 95.3%
 
Messages: 103
Images: 0
Inscription: 14 Sep 2014, 12:11
Localisation: Aix en provence
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: travail

Re: 1er programme pour HP39gII : calcul mental

Message non lude zorglub13 » 18 Sep 2014, 21:27

Sauf qu'il y a peut être des limitations dans le ti basic 68k : dans mon programme sur HP, le programme calcul_mental appelle le sous programme addition qui appelle lui-meme comparaison. Je n'ai pas pu le faire en basic 68k ? Comme si dans un même programme on ne pouvait définir qu'un seul niveau de sous programmes ? Est-ce bien le cas ?

Je suppose qu'on peut s'en sortir en sortant comparaison du programme calcul_mental ?

À+
Avatar de l’utilisateur
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 95.3%
 
Messages: 103
Images: 0
Inscription: 14 Sep 2014, 12:11
Localisation: Aix en provence
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: travail

Re: 1er programme pour HP39gII : calcul mental

Message non lude Bisam » 18 Sep 2014, 22:09

Non, il n'y a pas du tout de limitations de ce genre dans le Basic 68k.
La seule limitation est qu'une fonction ne peut pas appeler un programme (mais un programme peut appeler un programme ou une fonction et une fonction peut appeler une fonction également)
On peut même faire de la récursivité, si on veut !
Avatar de l’utilisateur
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 69.5%
 
Messages: 5665
Inscription: 11 Mar 2008, 00:00
Localisation: Lyon
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: 1er programme pour HP39gII : calcul mental

Message non lude zorglub13 » 19 Sep 2014, 05:15

Ok je vais vérifier cela merci..
Dernière édition par zorglub13 le 22 Sep 2014, 21:06, édité 1 fois.
Avatar de l’utilisateur
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 95.3%
 
Messages: 103
Images: 0
Inscription: 14 Sep 2014, 12:11
Localisation: Aix en provence
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: travail

Re: 1er programme pour HP39gII : calcul mental

Message non lude zorglub13 » 22 Sep 2014, 21:06

Apparemment je ne peux pas mettre tout dans le même programme TI89 (tant pis si c'est le forum HP mais c'est dans la suite du post)...

Voici le 1er programme "calcul"

Code: Tout sélectionner
calcul(vmx,emx)
Prgm

Local add,sub,mul,div

Define add(vmx,emx)=Prgm
Local vl1,vl2,res
rand(vmx)->vl1
rand(vmx)->vl2
vl1+vl2->res
opecmp(vl1,vl2,res,emx,"+")
EndPrgm


Define sub(vmx,emx)=Prgm
Local vl1,vl2,res
rand(vmx)->vl1
rand(vmx)->vl2
If vl1<vl2 Then
  vl1->res
  vl2->vl1
  res->vl2
EndIf
vl1-vl2->res
opecmp(vl1,vl2,res,emx,"-")
EndPrgm

Define mul(vmx,emx)=Prgm
Local vl1,vl2,res
rand(vmx)->vl1
rand(vmx)->vl2
vl1*vl2->res
opecmp(vl1,vl2,res,emx,"*")
EndPrgm

Define div(vmx,emx)=Prgm
Local vl1,vl2,res
rand(vmx)->res
rand(vmx)->vl2
res*vl2->vl1
opecmp(vl1,vl2,res,emx,"/")
EndPrgm

Local chx
Loop
ClrHome
ClrIO
PopUp {"Addition","Soustraction", "Multiplication", "Division", "Quitter"}, chx
If chx=1 Then
  add(vmx,emx)
ElseIf chx=2 Then
  sub(vmx,emx)
ElseIf chx=3 Then
  mul(vmx,emx)
ElseIf chx=4 Then
  div(vmx,emx)
Else
  Exit
EndIf
EndLoop

EndPrgm


qui appelle le programme "opecmp" :

Code: Tout sélectionner
opecmp(vl1,vl2,res,emx,ope)
Prgm
Local txt, ess, nbr
ClrIO
0->ess
string(vl1)&" "&ope&" "&string(vl2)&" = "->txt
Loop
  ess+1->ess
  Input "Essai n°"&string(ess)&" : "&txt&"?",nbr
  If nbr=res Then
   Disp "Bravo, bonne reponse !"
   Exit
  Else
   If ess<emx Then
   Disp "Erreur, mauvaise reponse !"
   Else
   Disp "Erreur, voici la correction !"
   Disp txt&string(res)
   Exit
   EndIf
  EndIf
EndLoop
Pause
EndPrgm


Donc "calcul" appelle soit le sous-programme "add", soit "sub", soit "mul", soit "div" qui pour chacun de ces 4 sous programmes appelle le programme "opecmp".

Le programme "opecmp" peut il être défini comme un sous-programme de calcul et être appelé de "add", "sub", "mul" et "div" ?

Merci
Dernière édition par zorglub13 le 24 Sep 2014, 16:41, édité 4 fois.
Avatar de l’utilisateur
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 95.3%
 
Messages: 103
Images: 0
Inscription: 14 Sep 2014, 12:11
Localisation: Aix en provence
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: travail

Re: 1er programme pour HP39gII : calcul mental

Message non lude zorglub13 » 24 Sep 2014, 16:39

Bonjour, je ne sais si j'ai été clair dans ma question ? Avez vous déjà expérimenté ce problème en ti basic 68k d'organisation du code ?

Merci
Avatar de l’utilisateur
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 95.3%
 
Messages: 103
Images: 0
Inscription: 14 Sep 2014, 12:11
Localisation: Aix en provence
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: travail

Re: 1er programme pour HP39gII : calcul mental

Message non lude critor » 24 Sep 2014, 19:37

zorglub13 a écrit:Donc "calcul" appelle soit le sous-programme "add", soit "sub", soit "mul", soit "div" qui pour chacun de ces 4 sous programmes appelle le programme "opecmp".

Le programme "opecmp" peut il être défini comme un sous-programme de calcul et être appelé de "add", "sub", "mul" et "div" ?


Déjà, quelle différence fais-tu entre "programme" et "sous-programme" ?

Car pour moi, "opecmp" est déjà un sous-programme au sens où il est appelé par les programmes add, sub, mul et div.

En quoi cette situation ne te convient-elle pas ?
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41470
Images: 14480
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: 1er programme pour HP39gII : calcul mental

Message non lude zorglub13 » 24 Sep 2014, 19:59

Salut

J'appelle un programme ce que'on crée à partir du program editor avec la commande New. Dans mon exemple, il y a calcul et opecmp. J'appelle sous-programme un programme définit dans un programme. J'appelle add, sub, mul et div des sous programmes parce qu'ils sont définis dans le programme calcul.

Ce que je souhaite faire c'est comme pour la version hp39gii, tout mettre dans un seul code pour faire un tout.

À+
Avatar de l’utilisateur
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Prochain niv.: 95.3%
 
Messages: 103
Images: 0
Inscription: 14 Sep 2014, 12:11
Localisation: Aix en provence
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: travail

Re: 1er programme pour HP39gII : calcul mental

Message non lude Lepzulnag » 24 Sep 2014, 20:24

D'après mes souvenirs (cela fait longtemps que je n'ai pas programmé en TI-Basic) tu ne peux en effet pas créer de sous-programme dans un programme, mais tu peux par contre créer des sous-fonctions (dans ce langage, une "fonction" est comme un "programme", sauf que toutes les variables doivent être locales).

Donc je te conseille de modifier un peu ton code pour utiliser non pas des sous-programmes, mais des sous-fonctions, et cela devrait marcher. Il va falloir que tu modifies la structure de ton code par contre, car une fonction ne peut pas appeler un programme, mais uniquement une autre fonction.
Avatar de l’utilisateur
Lepzulnag
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Prochain niv.: 78.5%
 
Messages: 151
Inscription: 02 Aoû 2012, 21:15
Localisation: Bretagne
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: M2 Maths

Suivante

Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
955 utilisateurs:
>939 invités
>11 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)