Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : AMOS - Calculette RPN
(Article écrit par Denis Bernard et extrait d'Amiga News - septembre 1994)
|
|
Les inconditionnels des calculatrices HP vont être ravis : voici une calculette RPN (Reverse Polski Notation
ou Notation Polonaise Inversée tout bonnement), dédiée aux conversions de bases, du décimal à
l'hexadécimal et vice-versa.
Vu la taille du programme, je vais surtout vous expliquer comment vous en servir, commençons donc par quelques
mots à propos de la notation polonaise inversée (que j'appellerai "notation RPN" par la suite). Il ne s'agit
pas d'une forme exotique d'affichage des nombres, mais plutôt d'une forme (comme une autre) de dialoguer avec
la calculette. Prenons plutôt un exemple concret : sur une calculette dite "standard", du type de celles qu'on
vous donne comme support de publicité, lorsque vous voulez calculer 2+2, et bien vous appuyez, dans l'ordre, sur
les touches "2", "+", "2" et enfin "=" pour obtenir "4" à l'écran. Avec une calculette fonctionnant en notation
RPN, la séquence de touches est la suivante : "2", "Entrée", "2", "Entrée" et enfin "+" pour obtenir le
résultat.
Avant d'aller plus loin, tapez le programme et lancez le. Pour ceux qui n'ont pas AMOS Pro, vous pouvez enlever
la ligne "Set Accessory", remplacez la ligne "If A$<>0 or A<>0" par "If (A$<>0)or A<>0", faites
d'ailleurs de même pour toute ligne où dans une même condition If on effectue simultanément un test sur une
chaîne et un test sur un nombre : il faut mettre le test sur une chaîne entre parenthèses. Ne cherchez pas
le caractère (plus ou moins) sur votre clavier, il suffit de presser les touches "Alt" et "W".
Une heure plus tard...
Maintenant que vous avez une belle calculette qui fonctionne, vous allez pouvoir comprendre ce que je vous raconte.
Description de la calculette
A gauche, l'affichage avec les 10 éléments de la pile (sans mercure), numérotés de bas en haut de 0 à 9.
Juste en dessous (le dernier "0" affiché tout en bas), c'est la zone d'édition, c'est là que le nombre
que vous entrez s'affiche. La partie de droite, c'est le clavier (il est bô hein ?). Notez qu'à part
pour les touches "DEC", "BS", "CLR" et "ENTER", le raccourcis clavier de chaque touche (à l'écran)
correspond exactement à sa première lettre : si vous appuyez sur la touche "5" du clavier de votre Amiga,
un "5" sera entré dans la zone d'édition, de même si vous faites "Shift" + "<" (>), cela reviendra
au même que si vous aviez cliqué sur la touche ">>" à l'écran, ainsi que "S" correspond à "STO".
Voici un bref descriptif avec un petit exemple pour chaque :
En noir, les chiffres de 0 à 9 et de A à F (pour les nombres hexa)...
Les touches blanches sont les opérateurs :
- +, *, / : tout le monde connaît.
- : opposé (1 devient -1 ).
- ~ : not (non) (0 devient -1, en hexa $0 devient $FFFFFFFF).
- << : décalage à gauche des bits (1 2<<donne 4).
- >> : décalage à droite des bits (4 2>>donne 1).
- & : and (et) (1 3 & donne 1).
- | : or (ou) (1 2 | donne 3).
- ^ : xor (ou exclusif) (3 I ^ donne 2).
- % : modulo (15 8 % donne 7).
Les touches bleues sont les touches à actions spéciales :
- DEC : choix du mode d'affichage et d'entrée des nombres (par défaut).
Raccourci clavier : Espace. Si vous cliquez sur cette touche, le texte en deviendra
"HEX", et si vous cliquez une autre fois, celle-ci reviendra à l'état "DEC".
Notez qu'à chaque fois le nombre édité est converti dans la base correspondante.
- STO : stockage dans une mémoire (stocke l'élément 1 de la pile dans la mémoire dont
le numéro est l'élément 0 de la pile).
- RCL : restitue le contenu d'une mémoire (l'élément 0 de la pile devient le contenu de
la mémoire dont le numéro est l'élément 0 de la pile).
- BS : Backspace, efface le dernier caractère entré dans la zone d'édition.
Raccourci clavier : touche "Backspace" (juste au-dessus de la touche "Entrée").
- CLR : vide la zone d'édition. Raccourci clavier : touche "Del".
- $ : change la base du nombre dans la zone d'édition (et le convertit par la même occasion). Par exemple,
si vous aviez "15" dans la zone d'édition, vous obtiendrez "$F" après avoir utilisé cette touche et vice-versa.
- U : Undo (pas vraiment), effectue simplement un "désempilage" (ou ...ationnement),
en remontant toute la pile d'un cran après avoir reporté l'élément 0 dans la zone d'édition.
- ENTER : Entrée, place le nombre entré (affiché dans la zone d'édition) au sommet de la pile
(élément 0) et met "0" ou "$0" dans la zone d'édition.
Il faut vous dire que j'ai choisi la notation RPN pour une question de préférence personnelle,
mais aussi de facilité de programmation. Disons que le rapport performances/effort est imbattable,
et puis vous verrez, l'essayer c'est l'adopter (à part pour quelques rares individus...) !
Ce système de calcul est basé sur une pile de nombres... Imaginez que vous avez une presse papier,
c'est la même chose : pour faire une opération, on prend les deux éléments du dessus, on fait
le calcul puis on repose le résultat sur la pile. Allez, deux petits exemples de calculs pour
que ceux qui débarquent comprennent bien comment ça fonctionne (regardez bien sur votre écran ce
qui se passe au niveau de la pile !), chaque touche ou nombre entré étant encadré entre crochets
(<>) pour que vous ne fassiez pas de confusions :
Calcul de "7*(3+2)" : <7> <ENTER> <3> <ENTER> <2> <ENTER> <+> <*>
Ou encore : <3> <ENTER> <2> <ENTER> <+> <7> <ENTER> <*>
Si vous ne trouvez pas 35, c'est que vous avez fait une erreur en tapant le programme.
Conversion du résultat de "(3+$F) Xor 2" en hexadécimal (la touche DEC/HEX doit indiquer
DEC avant d'effectuer l'opération) : <3> <ENTER> <$> <F> <ENTER> <2> <ENTER> <^> <DEC>
La touche <DEC> devenant <HEX>, tous les nombres sont maintenant affichés en
hexa, le résultat est donc $13. Notez que le raccourci clavier pour l'opérateur "^"
(Xor) est la touche permettant d'obtenir un accent circonflexe sur le clavier de votre Amiga,
je fais ce rappel puisque, d'habitude, cette touche n'a de résultat que sur la touche suivante
(et uniquement sur les voyelles).
Voilà, j'espère surtout que vous saurez vous en servir car c'est tellement utile d'avoir une calculette
qui fasse les conversions. Pour ceux qui ne connaissaient pas la notation RPN, vous verrez, on s'y fait
très vite.
Code source
Pour le mois prochain, j'ai sous le coude un évaluateur d'expressions (RPN toujours) :
vous passez par exemple la chaîne "15 2* 0 STO SIN0 RCLCOS +" et la procédure vous retourne le
résultat de l'expression (normale) "Sin(15*2) + Cos(15*2)", ce qui vous permet de faire un traceur
de courbes, ou tout ce que vous voulez qui soit capable de faire des calculs (dynamiquement !).
|