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+