π
<-
Chat plein-écran
[^]

1er programme pour HP39gII : calcul mental

Programmation et implémentation d'algorithmes.

1er programme pour HP39gII : calcul mental

Unread postby 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: Select all
// 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+
User avatar
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 95.3%
 
Posts: 103
Images: 0
Joined: 14 Sep 2014, 12:11
Location: Aix en provence
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: travail

Re: 1er programme pour HP39gII : calcul mental

Unread postby 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é !
User avatar
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 95.3%
 
Posts: 103
Images: 0
Joined: 14 Sep 2014, 12:11
Location: Aix en provence
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: travail

Re: 1er programme pour HP39gII : calcul mental

Unread postby 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 ?

À+
User avatar
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 95.3%
 
Posts: 103
Images: 0
Joined: 14 Sep 2014, 12:11
Location: Aix en provence
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: travail

Re: 1er programme pour HP39gII : calcul mental

Unread postby 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 !
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5665
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: 1er programme pour HP39gII : calcul mental

Unread postby zorglub13 » 19 Sep 2014, 05:15

Ok je vais vérifier cela merci..
Last edited by zorglub13 on 22 Sep 2014, 21:06, edited 1 time in total.
User avatar
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 95.3%
 
Posts: 103
Images: 0
Joined: 14 Sep 2014, 12:11
Location: Aix en provence
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: travail

Re: 1er programme pour HP39gII : calcul mental

Unread postby 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: Select all
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: Select all
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
Last edited by zorglub13 on 24 Sep 2014, 16:41, edited 4 times in total.
User avatar
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 95.3%
 
Posts: 103
Images: 0
Joined: 14 Sep 2014, 12:11
Location: Aix en provence
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: travail

Re: 1er programme pour HP39gII : calcul mental

Unread postby 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
User avatar
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 95.3%
 
Posts: 103
Images: 0
Joined: 14 Sep 2014, 12:11
Location: Aix en provence
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: travail

Re: 1er programme pour HP39gII : calcul mental

Unread postby critor » 24 Sep 2014, 19:37

zorglub13 wrote: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
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 42.6%
 
Posts: 41501
Images: 14719
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: 1er programme pour HP39gII : calcul mental

Unread postby 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.

À+
User avatar
zorglub13
Niveau 7: EP (Espèce Protégée: geek)
Niveau 7: EP (Espèce Protégée: geek)
Level up: 95.3%
 
Posts: 103
Images: 0
Joined: 14 Sep 2014, 12:11
Location: Aix en provence
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: travail

Re: 1er programme pour HP39gII : calcul mental

Unread postby 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.
User avatar
Lepzulnag
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 78.5%
 
Posts: 151
Joined: 02 Aug 2012, 21:15
Location: Bretagne
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: M2 Maths

Next

Return to Programmation

Who is online

Users browsing this forum: No registered users and 67 guests

-
Search
-
Social TI-Planet
-
Featured topics
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
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1464 utilisateurs:
>1455 invités
>4 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)