Voici quelques exemples simples pour vous permettre de vous lancer dans le RPL.
Si vous avez d'autres exemples vous pouvez les envoyer (retirer "pas_de_spam")
afin que d'autres personnes en profitent ou si vous avez des suggestions (retirer "pas_de_spam")

Consigne:
Mettez vous en mode RPN pour utiliser ces exemples.
Le symbole ¶ indique un retour à la ligne.
: flèche vers la droite (au cas ou votre navigateur ne l'affiche pas correctement)

Sommaire








Viewer (affichage de texte, attente, gel d'écran...)
 

Avant de créer le viewer, voici quelques notions sur l'affichage de texte.
« CLLCD "BONJOUR" 1
DISP 3 WAIT
"une touche = continue"
3 DISP 0 WAIT
" Vous avez appuyé sur¶
la touche numéro: "
SWAP + 2 DISP 1 FREEZE
»
efface l'écran (CLLCD:clear lcd), 1 DISP : affiche BONJOUR à la ligne 1 et attend 3 sec. 0 WAIT: attend l'appuie d'une touche (attention: cancel interrompt le programme) et renvoie le numéro de touche.
SWAP: inverse l'élément 1 avec le 2);11.1: touche A; + concaténation des deux objets;

1 FREEZE: gèle la partie haute de l'écran (affichage répertoire, rad,..)
(2 pour la partie du milieu: entre la ligne du haut et le menu 4 pour la barre des menus; 3: partie 1 et 2; 5: partie 1 et 4; ...; 7: gèle les trois parties de l'écran)
'EX1' STO(pour l'enregistrer), appuyer sur A (EX1) pour le lancer.

Vous pouvez essayée avec le mode debbug:
'EX1' left-shift, CAT, NXT, NXT, C (RUN), A(DEBBUG), SST ...

NEXT: voir les instructions suivantes (2 par 2)
SST: exécute l'instruction suivante du programme en cours
SST:( si l'affichage est incorrect, : flèche vers le bas) exécute l'instruction suivante du programme en cours et des sous programmes.
KILL: arrête le mode debug (le HALT disparaît de l'écran, le mode debug est désactivé dès que le programme se termine)

Nous allons maintenant créer un viewer simple, qui pourra vous resservir.

Le texte à visualiser ne devra pas faire plus de 7 lignes (pour les 48 et les 49 en FONT 6,7 ou 8 ) avec 22 caractères par ligne (espace compris, pour éviter que des mots soit tronqués par les 3 points).
« CLLCD 1 DISP 0
WAIT DROP
»
'VIEW' STO

DROP: supprime le numéro de touche renvoyé (qui est ici inutile)

vérifiez que vous êtes dans le répertoire HOME avant de le stocker.

Sommaire



Trucs et astuces
 

1) sauvegardes en lots
 

Pour enregistrer plusieurs programmes on peut mettre les données et les noms sous forme de liste:
{1 2 3}{ x y z } STO

{ objet1 objet2 objet3 }
{ nom1 nom2 nom3 } STO
x a la valeur 1, y la valeur 2 et z la valeur 3


et plus généralement: (objet: programme, chaîne de caractères, listes, ..


Sommaire

2) optimisation du test IF..THEN...(ELSE...)
 

Après un INFORM, INPUT, CHOOSE, ... il n'est pas nécessaire de faire un test du type: 1 = = ou 1 SAME

on peut mettre directement IF THEN <instructions_si_vrai> ( ELSE <instuctions_si_faux> ) END
IF 1 == THEN ...
IF THEN ...
est équivalent à: (il faut que le premier élément de la pile soit un vrai (1) ou faux (0) ).


Sommaire

3) INFORM
 

Si vous voulez avoir un nombre de colonnes différents à chaque ligne, vous devez mettre le nombre maximum de colonnes voulues et mettre des sous listes vides

exemple:
"essai"
{{ "ligne1" }{ }{ }
{ "L2c1" } { "L2c2" }
{ } { "L3c1" } { "L3c2" }{ "L3 c3" }}
{3}
{NOVAL NOVAL NOVAL NOVAL NOVAL NOVAL }
DUP
INFORM


ligne 1 : 1 colonne
ligne 2 : 2 colonnes
ligne 3 : 3 colonnes

3 colonnes
NOVAL: pas de valeur (vide)


valeur par défaut = valeur reset
Vous pouvez télécharger un autre exemple pour mettre dans votre HP48 ou 49.

Pour tester si l'utilisateur n'a pas laissé de champ vide (= NOVAL) il suffit de faire une petite procédure de tests qui vérifie chaque valeur de la liste en la comparant à NOVAL (exemple: IF NOVAL == THEN "MAUVAISE SAISIE" DOERR ELSE < votre programme> END)


Sommaire

4) intercepter les erreurs et l'appuie sur la touche CANCEL
 

IFERR <programme>
THEN <action en cas d'erreur>
(ELSE <action s'il n'y a pas eu d'erreur>)
END
Avec ce genre de programme, on peut intercepté l'appuie de la touche CANCEL qui est interprété comme une erreur.

Voici un petit exemple:
« RCLF DEPTH
nbobjet
« IFERR
<programme>
THEN
DEPTH nbobjet - DROPN
STOF
ELSE
STOF
END
»
»
RCLF récupère la configuration de votre hp (cette commande n'est utile que si le programme modifie les flags systèmes et/ou les flags utilisateurs).
on récupère le nombre d'objet sur la pile avec DEPTH puis on sauvegarde ce nombre dans la variable nbobjet.
le programme n'a pas d'importance dans ce chapitre.
fin en cas d'erreur:
on efface que les objets appartenant au programme
on rétablit la configuration des flags (fonction inverse de RCLF)
fin normal:
on restore l'état des flags

Inconvénients:
-Si une autre erreur se produit (autre que l'appuie de la touche CANCEL) le programme s'interrompt.
-Impossibilité d'utiliser les commandes de debugage (DEBUG,...) en cas d'erreur dans le programme, il faut alors vérifier que le programme principale fonctionne correctement puis ajouter le IFERR THEN ... (ELSE...) END


Sommaire



Programme pour visualiser les caractères MINIFONT (uniquement pour la HP49)
 

Dans ce programme, il y a deux compteur imbriqués l'un dans l'autre (boucle: 0 15 FOR K 0 15 FOR .... NEXT NEXT). La première variable (K) permet d'obtenir les 15 lignes. La seconde variable (J) nous donne les 15 colonnes.

En faisant l'opération: 16*K+J on obtient le numéro de caractère en cours de traitement.
« CLLCD
"Création de la table¶
de caractères minifont¶
en cours... (~ 1 min)"
2 DISP
#131d #130d BLANK
0 15 FOR K
0 15 FOR J
16 K * J +
DUP "Caractère " SWAP + "/255" + 1 DISP
IR CHR
1 GROB
J RB 8 * 2 +
K 8 * RB 2 +
2 LIST
SWAP REPL
NEXT NEXT
»
Affichage message d'attente (voir programme ci-dessus)




crée un graphique vierge de 131*130 pixels
1ère boucle de comptage de 0 à 15 de variable K, 2éme boucle de comptage de 0 à 15 de variable J
(16 K * J + =numéro de caractère) Affiche le numéro de caractère en cours de traitement.
IR: supprime le "." du chiffre (provoque une erreur pour l'instruction suivante). Le numéro de caractère est converti en caractère avec "CHR" puis en GROB (objet graphique) en utilisant la taille 1 qui correspond à la minifont (1 GROB). A partir de J et K on calcule les coordonnées du caractère. RB: convertion d'un nombre réel (ex: 1 sans point) en binaire (# 1d). LIST: crée une liste à partir de n objets (ici n=2)
REPL: colle un GROB (GROB du caractère) dans un autre GROB (le graphique vierge du début) aux coordonnées spécifiées (en binaire)
'CRTABMNF' STO pour l'enregistrer

Vous trouverez l'équivalant de ce programme en RPL système (plus rapide) dans la section SysRPL.

télécharger cette version (en User RPL)

Sommaire



Les variables locales et INFORM: calcul des racines d'un polynôme du 2nd degré (pour 49, pour la 48 consulter la remarque à la fin de cette exemple)
 

« "Eq2Deg (ax^2+bx+c)"
{{"a=" "Coefficient a" 0 }
{ "b=" " Coefficient b" 0}
{ "c=" " Coefficient c" 0}}
{1}
{0 0 0} DUP
INFORM
IF THEN 0 0 0 4 ROLL
OBJ DROP
d x1 x2 a b c
« b 2 ^ 4 a * c * -
RI
'd' STO
CASE
d 0 < THEN
-103 SF
"Racines Complexes:¶
d= " d + "¶
x1= " +
b NEG d - a 2 * /
DUP 'x1' STO + "¶
x2= " + x1 CONJ + END
d 0 == THEN
"Racine double:¶
d= " d + "¶
x= " +
b NEG d - 2 a * /
+ END
d 0 > THEN
"2 Racines réelle:¶
d= " d + "¶
x1= " +
b NEG d - 2 a * /
+ "¶
x2= " +
b NEG d + 2 a * /
+ END
END
»
CLLCD 1 DISP 0 WAIT DROP END
»
Titre de la boite de saisie

Liste des éléments ( label, aide, type de variable), ici il y a 3 éléments.

nombre de colonne sous forme de liste (ici 1)
Valeurs par défaut, valeurs lors de la réinitialisation (DEL)

IF THEN : (cf Trucs et astuces)
(il y a 6 objets dans la pile)
Déclarations des variables locales (d=0, x1=0, x2=0, a=valeur de a dans le polynome, b= ..., c= ...)

calcul de b^2-4*a*c
conversion d'un réel en entier (pour supprimer le point sur la 49)
sauvegarde le calcul sous d (qui est une variable locale)
test de d
si d est négatif: on arme le flag 103 (mode complexe)

(rappel: ¶= retour à la ligne)
concaténation du texte
: racine carré
calcul de x1=(-b-d)/(2*a) (x1 est un nombre complexe)
et concaténation avec le texte après l'enregistrement du résultat
calcul de x2=CONJ(x1) (x2 est le conjugué de x1)
si d=0:



calcul: x= (-b-d)/(2*a)




calcul de x1= (-b-d)/(2*a)

concaténation de 2 chaînes de caractères
calcul de x2= (-b+d)/(2*a)

fin de l'instruction CASE

Affichage du résultats
Les variables locales n'apparaissent pas dans le menu des variables et sont automatiquement détruites lorsque le programme se termine.

Cette version ne vérifie pas si l'utilisateur a laissé des champs de saisie vide. (cf trucs et astuces n°3)

Pour la version 48: supprimer les instructions 'RI' et '-103 SF'

Les arguments pour la commande INFORM (input form) sont:
"titre"
{{ "nom_1" "Instructions_1" type_d'objet_1 }
{ "nom_2" " Instructions_2" type_d'objet_2 }
{ ... }... { "nom_n" " Instructions_n" type_d'objet_n }}
{n_colonne}
{défaut_1 défaut_2 ... défaut_n}
{reset_1 reset_2 ... reset_n}



type_d'objet: 0 pour un entier, ... (cf: faq - divers - les types d'objets)





nombre de colonnes (cf Trucs et astuces n°3)
valeurs par défaut (NOVAL = pas de valeur : cf Trucs et astuces n°3)

valeurs lors d'un reset (DEL)
Les arguments retournés:
si OK


si Cancel
2: { liste de n objets}
1: 1

1: 0

Sommaire



Mini Golf
 

Télécharger le fichier

Ce petit jeu peut vous aider à progresser en RPL (exemples d'utilisations de certaines fonctions: graphique, test des variables, input, variable locale...).

Il n'est pas terminé (il fonctionne mal), vous pouvez le corriger, l'améliorer, ... (voir le fichier MGolf.txt dans l'archive)

Sommaire