HP-71C27estFacileLEMODECLAVIERBASIC
=MODE CLAVIER BASIC=
Quand vous êtes en mode CALC, il y a un petit signe "CALC" à l'affichage. Il est appelé "l'indicateur de mode CALC" parce qu'il annonce que vous êtes en mode CALC. Il y a d'autres indicateurs, mais nous passerons ce pont quand nous l'aurons atteint. Pour l'instant, s'il vous plaît, sortez du mode calc si vous y êtes en pressant [f] [CALC]. L'indicateur de mode CALC doit disparaître.
Dès lors que l'indicateur de mode CALC n'est pas apparent, vous êtes en mode BASIC. De la même façon que le mode CALC attendait de vous des calculs mathématiques, le mode BASIC attend de vous que vous tapiez des commandes du langage BASIC.
Si vous êtes en mode BASIC et que vous avez besoin d'effectuer des calculs, vous avez deux options. Vous pouvez entrer en mode CALC, effectuer vos calcul puis retourner en mode BASIC. Vous pouvez aussi effectuer les calculs en mode BASIC !
Par exemple essayons les même calculs que ceux déjà faits. C'était :
105+5*105/(105-30)
Pour faire cela en mode BASIC, tapez simplement l'ensemble tel que vous le voyez, mais ne pressez pas encore [ENDLINE]. Vous devez voir :
>105+5*105/(105-30)
à l'affichage. Rappelez-vous, le ">" signifie que vous êtes en mode CLAVIER BASIC. Remarquez que BASIC ne vous donne aucune réponse intermédiaire, contrairement au mode CALC. Voici une règle générale :
Le mode CLAVIER BASIC vous ignore tant que vous n'avez pas pressé [ENDLINE]
Comme 105+5*105/(105-30) est une commande du BASIC du HP-71, dès que vous aurez
pressé [ENDLINE], le HP-71 l'interprètera et obéira à votre commande :
[ENDLINE]
112
Si vous voulez utiliser la pile de commande en mode BASIC, vous ne pouvez pas vous contenter de presser la touche [HAUT] comme vous le faites en mode CALC. Vous devez presser d'abord [g] [CMDS] pour entrer dans la pile de commande. Vous pouvez alors monter et descendre dans la pile avec les touches à flèches.
Essayez dès maintenant. Presser [ENDLINE] quand vous êtes dans la pile de commande réexécute la commande affichée. Vous pouvez utiliser >] et [< pour déplacer le curseur dans la commande, ce qui vous permet de la modifier avant de l'exécuter ! n'oubliez pas le curseur d'insertion (pressez [f] [I/R] pour l'obtenir) qui vous permet d'insérer des choses...
Voici une autre règle à retenir :
LE HP-71 EST FACILE A UTILISER PARCE QU'IL A UNE PILE DE COMMANDE
Aussi, plus vite vous apprendrez à jongler avec la pile de commande, plus vite vous utiliserez le HP-71 au doigt et à l'oeil.
==LE LANGAGE DE BASE DU HP-71 ==
L'affichage doit apparaître comme ceci :
>
Le ">" signifie "Hé, Je suis BASIC, que voulez-vous ?". Le pavé clignotant (le curseur de remplacement) signifie "tapez au-dessus de moi".
Avant d'essayer quelque commande que ce soit, assurez-vous que la Clé Minuscules est active. C'est facile à faire. Pressez n'importe quelle lettre. Si c'est une majuscule, pressez [f] [LC]. Pressez [ATTN] pour effacer l'affichage. A partir de maintenant, je supposerai que vous laissez la Clé Minuscule active.
Nous y sommes ! Pressez ces touches de lettres : [B] [E] [E] [P]. Vous devez voir:
BEEP C'est une commande du BASIC qui dit a l'ordinateur de faire un bruit qu'un sourd-muet pourrait confondre avec une note de musique! Alors, pourquoi l'ordinateur n'a-t-il pas bippé ? Rappelez-vous, la commande est ignorée jusqu'à ce que vous pressiez [ENDLINE] ! Allez-y, pressez [ENDLINE] maintenant et écoutez le magnifique bip.
Remarquez que BEEP est sur votre clavier, imprimé en jaune au dessus de la touche [L]. Comme vous vous en doutez, vous pouvez obtenir la commande BEEP sans la taper, simplement en pressant la touche [f] puis la touche [L]. Ceci en abrégé [f] [BEEP] ou même simplement [BEEP]. Remarquez que cette aide à la frappe affiche BEEP en majuscule, sans égard pour l'état de la Clé Minuscules. Ainsi vous pouvez savoir, dans ce livre, si vous avez à taper vous même (ce sera en minuscules) ou s'il y a une aide à la frappe (ce sera en majuscules).
Comme vous devez presser [ENDLINE] pour exécuter quelque commande que ce soit, à partir de maintenant je ne me soucierai plus de vous dire de presser [ENDLINE]. Si je vous dis d'exécuter la commande BEEP, ou si je vous dis simplement que vous devez faire BEEP, vous devez taper BEEP et presser [ENDLINE]. Je ne veux pas dire, bien sûr, que vous devez bipper. Vous pouvez, si vous voulez, mais c'est une autre question...
Pour voir la puissance de BASIC, exécutez cette commande :
FOR x=1 TO 10 @ x @ NEXT x
Vous avez juste dit au HP-71 de compter de 1 à 10, ce qu'il a fait ! (nous étudierons FOR, TO et NEXT plus tard). Si cela a semblé terriblement lent (environ une demi-seconde par nombre), c'est parce que le HP-71 se ralentit pour vous donner le temps de voir les nombres. Si vous voulez l'accélérer jusqu'à 1/10º de seconde par nombre, utilisez cette commande :
delay .1
Maintenant entrez dans la pile de commande en pressant [g] [CMDS], montez dans la pile jusqu'à retrouver la commande FOR que vous venez de taper ci-dessus, et pressez [ENDLINE] pour l'exécuter à nouveau. Voyez à quelle vitesse la HP-71 compte jusqu'à 10 maintenant! Essayez DELAY 0, et voyez le se défoncer
En général, la commande DELAY demande simplement au HP-71 de ralentir l'affichage
du nombre de secondes que vous spécifiez.
Il y a plusieurs autres commandes en BASIC qui contrôlent l'affichage. CONTRAST en est une intéressante qui vous permet de modifier le contraste de l'affichage. Si l'affichage vous semble trop pâle, essayez d'exécuter :
contrast 12
ou même un contraste plus élevé. Si l'affichage est trop sombre, avec tous les points apparents, essayez :
contrast 6
ou même un contraste plus bas. Le contraste "normal" (après la première mise en place des batteries) est CONTRAST 9. Je conserve mon HP-71 réglé sur CONTRAST 7, parce que je suis avachi sur ma chaise. Vous trouverez certainement vous aussi votre contraste favori. Si vous travaillez tantôt assis tantôt debout, vous réglerez sans doute le contraste bas quand vous serez assis et haut quand vous serez debout.
Jusqu'ici, tous nos calculs ont été faits avec l'affichage du HP-71 en mode standard. C'est-à-dire que les 12 chiffres de la réponse sont montrés, sauf s'il s'agit de zéros non significatifs, qui sont bien sûr éliminés. Par exemple, 1/4 donne .25 (pas . 250000000000), mais 1/7 donne .142857142857 (pas .14).
Il y a trois autres modes d'affichage disponibles, si vous en voulez. Pour avoir des réponses en monnaie, vous pouvez taper :
fix 2
Ce que cela fait est d'indiquer au HP-71 de montrer toujours deux chiffres après le point décimal, sans considération de leur valeur. Aussi 1/4 vaut toujours 0.25, mais 1/7 vaut maintenant 0.14, le reste ayant disparu. Remarquez bien
ce mode "FIX" n'affecte que l'affichage ! Il ne fait rien
disparaître à l'intérieur. Il est juste comme la fonction FIX des calculatrices HP, Texas, Casio ou autres.
Pour revenir à l'affichage précédent, exécutez :
std
ce qui ramène l'affichage à la normale. Sont aussi disponible SCI et ENG, identiques à ceux des calculatrices scientifiques. Si vous tapez:
sci 4
les réponses sont affichées en notation scientifique avec 4 chiffres après le point décimal. De même eng 3 dispose l'affichage pour qu'il montre toutes les réponses en notation ingénieur (analogue à la notation scientifique, mais l'exposant est toujours un multiple de 3), avec 3 chiffres après le premier. Remarquez que ces modes d'affichages continuent à marcher en mode CALC. Mais pour les changer, il faut être en mode BASIC.
Jusqu'à ce que vous soyez au chapitre sur le mode PROGRAMME BASIC, je vais supposer que vous essayez tous les exemples donnés directement au clavier. Vous ne pouvez pas commencer à écrire des programmes BASIC tant que vous ne connaissez pas le mode CLAVIER BASIC. les prochains chapitres vous montreront comment utiliser le CLAVIER BASIC à fond.
La leçon de ce chapitre a été que vous êtes en mode CLAVIER BASIC quand vous devez taper les commandes en BASIC et presser [ENDLINE] avant que quoi que ce soit arrive. Dans les chapitres suivants nous allons voir les règles fondamentales de la grammaire BASIC.
==VOCABULAIRE DE BASE DU BASIC ==
Contrairement au français, qui a des tonnes de catégories de mots (noms, pronoms, verbes, adjectifs, adverbes,...), le BASIC du HP-71 n'a que 4 types de mots. Ces 4 types sont :
(1) COMMANDES
Quand vous tapez BEEP, vous commandez au HP-71 d'émettre un son. Vous n'attendez aucune sorte de réponse, vous voulez juste dire à la machine de faire quelque chose de façon interne. Tous les mots et expressions qui disent au HP-71 de faire quelque chose sans qu'il vous renvoie en échange un nombre ou une chaîne, sont appelés des "commandes".
Si une analogie avec le français peut vous aider, vous pouvez penser aux commandes en termes de verbes, verbes à la forme impérative : Hé, vous, BEEPez ! Parfois les commandes admettent des chiffres comme argument, pour modifier l'action de la commande. Par exemple, BEEP 1000 émet un bip deux fois plus haut que le bip normal. Remarquez que le 1000 n'est pas entre parenthèses. Les commandes n'exigent jamais de parenthèses.
(2) FONCTIONS
Quand vous tapez SIN(45), vous attendez une réponse à un problème mathématique : le sinus de 45º. la partie SIN est la fonction, la partie 45 est l'argument de la fonction et les parenthèses montrent le début et la fin de l'argument. Aussi SIN(45) est très différent de SIN(45)+45. Dans notre analogie avec le français, les fonctions sont comme les adjectifs, leurs arguments étant comme des noms. Quand je dis "maison bleue", bleue est un adjectif agissant sur le nom maison. Le mot "bleue" est une fonction qui rend bleu son argument ! SIN est un adjectif qui modifie le nom 45 et le transforme en sinus. Les fonctions qui ont des arguments exigent toujours des parenthèses.
(3) SUFFIXES
Quand vous tapez CFLAG ALL, vous commandez au HP-71 de baisser tous les drapeaux utilisateurs (de 0 à 63). Le mot CFLAG est une commande, comme dit plus haut. Le mot ALL n'est pas une commande, car par lui même il ne signifie rien, il ne représente pas une expression valide. Il est autorisé après CFLAG parce qu'il modifie la commande CFLAG. Comme ces mots sont toujours placés après les commandes, je les appelle "suffixes" dans ce livre. En français nous modifions les verbes avec des adverbes, en BASIC nous modifions les commandes avec des suffixes. CFLAG ALL en français : Hé, vous, baissez (de Clear, effacer) les drapeaux (de FLAG, drapeau) complètement (de ALL, tout). En BASIC, les suffixes ne modifient que des commandes, pas des fonctions. Ne soyez donc pas trop à cheval sur cette analogie entre suffixes et adverbes!
(4) OPÉRATEURS
Les "opérateurs" (+, -, *, /, etc...) sont comme les prépositions en français. Comme les prépositions, ils ne viennent jamais à la fin d'une phrase, et peuvent débuter des phrases simples ou compliquées. Leur utilisation est presque identique à la façon courante d'écrire l'algèbre, comme 1+2*(3-7) qui se traduit en français par "un plus deux par trois moins sept". Malheureusement, comme en français, quelques mots BASIC peuvent être utilisés de plusieurs façons. OFF seul est une commande, mais BEEP OFF utilise OFF comme suffixe ! ANGLE est à la fois une fonction (comme dans ANGLE(x,y)) et un suffixe (comme dans OPTION ANGLE DEGREES) ! Aussi il est inutile d'apprendre par coeur quels mots sont des commandes, quels sont des fonctions, quels sont des suffixes ou quels sont des opérateurs. C'est leur usage qui détermine ce que sont les mots.
Quelques mots admettent plusieurs usages. Toutes ces catégories de mots vous sont familières. Il n'y en a qu'un que j'avais tenu secret. C'est le symbole "@". Il est exactement parallèle aux mots "et ensuite" en français. Supposons que je veuille demander à l'ordinateur "BEEP et ensuite BEEP 1000".
Plutôt que de taper deux lignes, je peux faire juste :
BEEP @ BEEP 1000
Le symbole "@" "concatène" (assemble) les deux commandes en une seule longue commande. Vous pouvez utiliser @ aussi souvent que vous voulez, vous pouvez taper des commandes les unes derrière les autres jusqu'à 96 caractères de long. Mais OYEZ MON AVERTISSEMENT ! Le symbole @ est aussi dangereux que "et ensuite" en français ! Vous devez connaître ces gens qui vous racontent une histoire, puis une autre, puis s'embrouillent dans des détails inutiles, puis racontent comment leur tante se porte etc, etc... La conversation avec ce genre de gens est pour le moins frustrante. Les phrases sans fin ont causé plus de maux de tête, de pertes de sang froid, de mariages brisés et de meurtres que toutes les autres causes combinées ! Si vous commencez à parler à votre HP-71 de cette façon, soyez prudent, un jour il refusera peut-être de s'allumer !
Sérieusement, n'abusez-pas de @. C'est bien, c'est même parfois nécessaire, comme pour les boucles FOR-NEXT tapées au clavier (davantage là-dessus plus tard). De plus cela vous permet de mettre dans la pile de commande des tonnes de commandes ! Mais ne prenez pas l'habitude de taper @ chaque fois que vous devez presser [ENDLINE]. Sinon, vos programmes seront écrits de la même façon, et leur mise au point sera plus difficile.
Davantage là-dessus quand nous arriverons au chapitre sur le mode PROGRAMME BASIC.
Dans ce chapitre, nous avons vu les règles de la grammaire BASIC. Dans le prochain, nous verrons comment utiliser le BASIC pour manipuler les variables par des méthodes inutilisables en mode CALC.
==VARIABLES EN CLAVIER BASIC ==
En mode CALC, nous avons vu comment assigner des valeurs aux variables. Par exemple, nous avons tapé W=SQR(222-182) pour placer 12,65 dans W, la hauteur de la gouttière de l'hôtel Fonch après sa chute contre le mur de la banque. Ça marche aussi en mode BASIC. En fait, les variables conservent leurs valeurs quand on passe du mode CALC au mode BASIC
Si vous affectez une variable dans un mode, vous pouvez utiliser sa valeur
dans les autres modes. C'est un des recouvrements entre les modes CALC et BASIC.
Mais les variables sont plus puissantes en mode BASIC qu'en mode CALC. Par exemple, en BASIC, vous pouvez demander au HP-71 de considérer X non pas seulement comme un nombre, mais comme le nom d'une liste de nombres (disons 100 nombres), tous cachés sous le nom X. Vous pouvez aussi effacer toutes vos variables en un éclair
Vous pouvez charger des variables dans un "fichier" en mémoire,
à l'abri du danger, pour pouvoir les rappeler plus tard du fichier (comme sur un lecteur de disquettes incorporé !). Mieux que tout, vous pouvez aussi mettre des mots français ou n'importe quel autre texte dans des variables!
===DÉCLARER LES VARIABLES===
En mode CALC, nous avons utilisé des variables pour représenter des nombres. Ces variables, comme la fonction PI, ont toujours 12 chiffres de long. Aussi, si vous tapez X=1/3, puis X, vous verrez que le contenu de X est 0,333333333333, ce qui n'est pas réellement 1/3 ; ce sont seulement les 12 premiers chiffres de 1/3 (ce qui est la valeur la plus voisine de la valeur réelle de 1/3 que l'ordinateur peut manipuler). Si vous tapez X=1/4, alors X contient .25, ce qui fait toujours 12 chiffres, mais les dix derniers sont des zéros.
Ainsi X contient 12 chiffres. C'est la précision maximale qu'une variable peut avoir dans le HP-71. Mais les variables peuvent avoir moins de précision si vous le désirez. Si vous voulez qu'une variable ait toute sa précision de 12 chiffres, vous devez en informer le HP-71. On dit qu'on "déclare" la précision de la variable. La façon de déclarer une précision de 12 chiffres pour une variable X est de taper :
real x
Si nous l'appelons "real" ("réelle" en français), c'est parce que, pour autant que l'ordinateur est concerné, 12 chiffres de précision vous donnent la réponse réelle (NdT : disons que la représentation à 12 chiffres est la plus proche de ce que les mathématiciens appellent un nombre réel). Peu importe à l'ordinateur que tout ce qu'il y a après le douzième chiffre soit fichu, il fait ce qu'il peut. Aussi il appelle le nombre un nombre réel. Plus tard nous discuterons les fonctions trappe et drapeau qui vous permettront de découvrir exactement quand le HP-71 élimine quelque chose après le douzième chiffre et quand il ne le fait pas. Pour la plupart des gens 12 chiffres est plus qu'il n'en faut.
Mais supposons que 12 chiffres soient trop pour vous et que tous ces chiffres encombrant l'écran vous fassent horreur ! Supposons que vous voulez juste 5 chiffres de précision. Vous avez deux options. Une option est de changer le mode d'affichage en FIX 5, ce qui montre tout avec 5 chiffres de précision. Cette méthode a deux inconvénients : D'une part elle montre tout avec 5 chiffres, même quand il y a des zéros non significatifs et cela peut devenir très gênant. D'autre part FIX 5 est uniquement un mode d'affichage, dans la machine les nombres ont toujours 12 chiffres de long, ce qui fait que ce que vous voyez n'est pas exactement ce que vous avez, ce qui peut entraîner des confusions.
Par exemple, en mode FIX 5 assigner 1/3 à X met dans X . 333333333333. Maintenant, 3*X affiche 1.00000, mais RES-1 (qui apparemment devrait donner 0) donne -1.00000E-12, qui est la notation scientifique pour -0,000000000001. La raison de cette "erreur" est évidente en mode d'affichage STD.
L'autre option est en fait de forcer X à n'avoir que 5 chiffres de précision, de cette façon :
short X
Après l'exécution de cette commande, X sera nul. Essayez le, puis faites X=1/3.
Remarquez que X ne contient pas l'habituel .333333333333 (12 chiffres), mais .33333 (5 chiffres). Ceci n'est pas un mode d'affichage ; X ne contient bien que les 5 premiers digits de 1/3 !
Maintenant, en mode STD, notre problème d'avoir 3*X affiché comme 1 est résolu. 3*X donne .99999 ce qui n'est visiblement pas 1. L'erreur d'arrondi, pratiquement invisible en précision réelle devient évidente en précision courte (SHORT) (NdT : Il y a un petit défaut à signaler dans l'explication qui précède, en effet FIX 5 n'affiche pas 5 chiffres significatifs mais 5 chiffres après la virgule ; 123.45678 est un nombre valable en FIX 5, pas en précision SHORT).
Il y a encore un type de précision, appelé INTEGER (entier). Si vous tapez :
integer x
X ne peut plus contenir le moindre chiffre après la virgule, elle ne peut être qu'entière et, de plus, seulement entre -99999 et 99999. Aussi, si vous faites X=1/3, X ne contient que 0 (1/3 est plus voisin de 0 que de 1). Par contre, si vous tapez X=2/3, X contient 1 (2/3 est plus près de 1 que de 0).
Note importante ! Vous pouvez changer la précision d'une variable n'importe quand, mais dans ce cas, il faut se rappeler trois choses :
Premièrement, chaque fois que vous changez la précision d'une variable en déclarant une nouvelle précision, son ancienne valeur est perdue et sa nouvelle valeur est 0.
Deuxièmement, changer la précision d'une variable n'affecte que cette variable et n'affecte absolument rien d'autre !
Par exemple, même si c'est à une variable SHORT que vous affectez 1/3, RES contient quand même la précision complète de 12 chiffres de 1/3, même si la variable n'en prend que 5 chiffres.
Les variables peuvent avoir différentes précisions, mais les calculs du HP-71 (comme la fonction PI) sont toujours exécutés avec 12 chiffres (en fait, si cela vous intéresse, sachez que les calculs sont effectués avec une précision de 15 chiffres de façon interne, et quelquefois même avec une précision plus grande, mais après la fin du calcul le résultat est arrondi à 12 chiffres).
Troisièmement, et c'est le plus important, les variables conservent leur précision et leur valeur quand vous passez du mode CALC au mode BASIC et vice-versa. Vous êtes donc prévenus que la précision de vos calculs en mode CALC dépend de la précision déclarée des variables que vous utilisez ! Vous ne pouvez pas espérer que X=2/3 marche correctement si X est une variable entière.
Test. Après avoir tapé ce qui suit, que montre l'affichage ? Pourquoi ? Essayez.
short x
x=1/3
1/3-x
===DIMENSIONNER LES VARIABLES===
Jusqu'ici nous avons utilisé X pour représenter un seul nombre (même si c'est un nombre variable). Mais supposez qu'on veuille enregistrer toute une liste de nombres dans l'ordinateur, par exemple le montant des timbres pour l'expédition de lettres urgentes, en fonction du poids. Il n'est pas nécessaire d'utiliser plein de variables différentes comme ceci :
A=2.20
B=3.90
C=5.00
D=10.70
E=13.4
F=17.90
G=24.00
.....
Vous pouvez faire comme ça si vous voulez, mais il y a un meilleur système. En mathématiques, nous utilisons souvent des expressions comme <i>P</i><sub>1</sub> , <i>P</i><sub>2</sub> ou <i>P</i><sub>3</sub> pour indiquer différents nombres. De fait, vous pouvez utiliser <i>P</i><sub><i>n</i></sub> pour indiquer le "nième" nombre de la liste P (dans cet exemple, <i>P</i><sub>3</sub> est 3ième prix du tarif, <i>P</i><sub><i>n</i></sub> est le nième prix du tarif).
Cette notation est appelée "notation indicée" parce que le nombre est écrit en petit après la variable. Une liste de nombres sous le même nom est généralement appelée un tableau.
En BASIC, nous avons aussi des variables indicées, et elles sont aussi appelées tableaux. Avant de pouvoir utiliser un tableau, nous devons le déclarer. De cette façon, l'ordinateur peut prévoir la mémoire nécessaire pour stocker toutes les variables dont vous allez avoir besoin. La quantité de mémoire dépend de la longueur du tableau et ceci ne dépend que de vous.
Supposons que vous vouliez un tableau contenant les sept nombres ci-dessus. Décidez d'abord de quelle précision vous avez besoin. Comme les 7 nombres sont courts, nous pouvons aussi bien utiliser la précision courte (qui épargne de la mémoire). La façon de déclarer un tableau de nombres courts appelé P et contenant 7 nombres est :
short p(7)
Le nombre entre parenthèses après p dit à l'ordinateur combien il y a de nombres dans le tableau. De la même façon, vous tapez l'indice entre parenthèses :
p(1)=2.20
p(2)=3.90
p(3)=5.00
p(4)=10.70
p(5)=13.40
p(6)=17.90
p(7)=24.00
Aussi, si vous voulez trouver le prix du port pour une lettre de 100 grammes, tapez juste p(3), et voilà, c'est 5,00F. De même, pour trouver <i>P</i><sub>4</sub> , vous tapez p(4). Et devinez quoi ? Vous pouvez même faire comme en math, retrouver
<i>P</i><sub><i>n</i></sub> en tapant p(n). Essayez ceci : n=5, puis p(n). Vous devez voir
13.40, parce que <i>P</i><sub><i>n</i></sub> = 13.40 quand n=5.
D'étranges gens ne se satisfont pas de listes de nombres en ligne, appelées tableaux, ils veulent tout un carré de nombres appelé "matrice". Par exemple, ils veulent enregistrer cet arrangement de nombres :
1 2 -3 -4
2 3 -4 5
5 -6 7 -8
dans une seule variable, comme en mathématiques avancées. Comme c'est une matrice, appelons-la M. En math, nous appelons le nombre du premier rang, première colonne
<i>M</i><sub>1,1</sub> = 1 et le nombre du troisième rang, quatrième colonne <i>M</i><sub>3,4</sub> = <font face=symbol>-</font
>8 . Voyez ça ! Le HP-71 marche avec les matrices exactement comme avec les tableaux
Tout ce que vous avez à faire est de spécifier combien de rangs et combien
de colonnes vous voulez. Comme les matrices nécessitent en général beaucoup de précision, créons une matrice 3 par 4 de précision réelle et appelons-la M :
real m(3,4)
Pour remplir M, faisons comme pour le tableau :
m(1,1)=1
m(1,2)=2
m(1,3)=-3
m(1,4)=-4
m(2,1)=2
m(2,2)=3
m(2,3)=-4
m(2,4)=5
m(3,1)=5
m(3,2)=-6
m(3,3)=7
m(3,4)=-8
Combien vaut <i>M</i><sub>2,3</sub> ? Tapez simplement m(2,3) et -4 sera affiché. Si une variable à un indice est appelée tableau et une variable avec deux indices matrice, comment est appelée une variable avec 3 indices ? Elle n'est pas appelée du tout, car le HP-71 ne peut pas la traiter. Mais remarquez que les manuels HP se réfèrent aux indices comme à la "dimension" des variables. Les tableaux sont des variables à une dimension, les matrices sont des variables à 2 dimensions. Aussi, un autre terme pour "déclarer" une variable est de la "dimensionner". En fait, REAL X(100) et DIM X(100) sont des commandes identiques ! Vous pouvez utiliser DIM à la place de REAL si vous voulez. N'oubliez jamais que DIM fait plus que dimensionner la variable, il déclare aussi une précision réelle.
Mais comment appelle-t-on une de nos vieilles, ordinaires, simples variables sans aucun indice ? Elle est appelée une variable "scalaire". Une variable scalaire contient un nombre scalaire : un simple nombre, sans bénéfice accessoire. Les scalaires sont tout ce dont la plupart des simples mortels ont besoin la plupart du temps. Si vous avez besoin d'un tableau une fois par hasard, ou même d'une matrice, c'est quand même bien que le HP-71 puisse les manipuler aussi facilement.
De fait, si vous achetez le module math du HP-71, il vous permettra de travailler avec les tableaux et les matrices de façon fantastique. Il vous permet d'additionner des tableaux, de multiplier ou d'inverser des matrices, de résoudre des systèmes d'équations, le tout en une seule commande. Il réalise des transformations de Fourrier finies, trouve les racines d'une fonction, et plus encore en un clin d'oeil. Si vous êtes un utilisateur sérieux de tableaux et de matrices, l'achat du module math doit vous intéresser, rien que pour ses performances dans l'utilisation des tableaux.
Note : Si vous essayez d'utiliser une variable dans un sens contraire à son type déclaré, vous aurez un message d'erreur. Si P est un tableau, vous ne pouvez pas faire P=4. Si vous le faites, vous verrez le message d'erreur "Data Type". Si vous voulez supprimer complètement de la mémoire un tableau ou une matrice, utilisez la commande DESTROY. Pour supprimer votre tableau P et votre matrice M, tapez :
destroy p,m
La commande DESTROY ne se contente pas d'effacer une variable, elle la détruit complètement ! La variable n'est plus une matrice, un tableau, un scalaire ou rien d'autre. Elle n'existe plus. Si vos tableaux et vos matrices commencent à encombrer la mémoire, vous pouvez avoir à en détruire un ou deux pour éviter l'erreur dramatique "Insufficient Memory" (mémoire insuffisante).
Si vous êtes vraiment très à court de mémoire, vous pouvez détruire toutes vos variables d'un coup par cette commande :
destroy all
Même si cette commande semble inquiétante (la seule qui soit encore plus inquiétante est END ALL, discuté plus loin), n'hésitez pas à l'utiliser, elle ne détruit que vos variables, et rien d'autre.
===DONNÉES DE TYPE COMPLEXE===
Le HP-71 a été étudié avec 5 types de bases pour les variables. Nous avons déjà vu les types REAL, SHORT et INTEGER (qui permettent tous des indices). Le quatrième type de variable est appelé COMPLEX et représente des nombres "complexes" comme 3-4i (où "i" représente la racine carrée de -1).
Malheureusement, quand le groupe d'étude de HP a fini d'écrire le système d'exploitation du HP-71, il faisait 80K de long, et il n'y avait de place que pour 64K. Aussi ils on dû supprimer quelques propriétés du système d'exploitation et les mettre dans un module optionnel que vous pouvez acheter. Une de ces propriétés qui a disparu était le type de données complexe. Le HP-71 peut avoir des variables complexes, mais à moins que vous ayez le module math, vous ne pouvez rien en faire. La commande qui déclare les variables complexes est elle-même dans le module math !
Aussi si vous avez besoin de nombres complexes (aussi appelés "imaginaires"), achetez le module math, qui peut les manipuler même mieux que ne le fait une HP-15. Comme mentionné précédemment, n'oubliez pas que les variables conservent leur précision quand on entre dans le mode CALC ou quand on en sort. Elle gardent aussi leur dimension. Si vous avez besoin d'un tableau en mode CALC, dimensionnez-le simplement en BASIC, puis retournez en mode CALC !
Note finale : Si vous "redimensionnez" un tableau, c'est à dire si vous déclarez la même précision mais un nombre différent d'éléments, alors le tableau n'est PAS rempli automatiquement de zéros ! Il est simplement raccourci (auquel cas quelques valeurs sont perdues) ou rallongé (avec des zéros). La même chose est vraie pour les matrices ; si la matrice est redimensionnée, les valeurs sont ré-arrangées (rang par rang, pas colonne par colonne) mais pas effacées. Il n'y a pas de restriction sur le redimensionnement des tableaux et des matrices. Si la précision est changée, cependant, toutes les valeurs sont effacées. Essayez ceci avec quelques petits tableaux et quelques petites matrices pour en prendre l'habitude.
===VARIABLES CHAÎNES===
Toutes les variables discutées ci-dessus ont une chose en commun : elles contiennent des nombres. Mais comment faire si vous voulez enregistrer votre nom, ou un mot français, dans une variable ?
Quand vous enregistrez un nombre dans une variable réelle, vous enregistrez combien de chiffres ? 12. Toujours. Même si vous voulez seulement enregistrer le nombre 3 dans la variable réelle X, X contient toujours 12 chiffres (dont 11 zéros). Vous le savez déjà.
X est juste un nombre, contenant 12 chiffres. Mais si vous voulez enregistrer, disons, le mot "Hello" dans une variable, vous n'avez aucun chiffre à enregistrer. Vous voulez enregistrer cinq lettres chaînées l'une à l'autre. Comme vous ne voulez pas un nombre mais une "chaîne" de caractères, la variable qui les contient est appelée une "variable chaîne".
Les variables chaînes ressemblent aux variables (numériques) habituelles, mais elles ont un symbole "$" écrit juste après elles. Par exemple, essayez ceci :
N$="Hello"
N$ (prononcez "N dollar") est la variable chaîne, et nous y avons mis la chaîne "Hello". Pour voir ce que N$ contient, il faut faire comme pour les variables numériques, juste taper N$ et presser [ENDLINE].
Vous pouvez être surpris de ce que nous avons affecté "Hello" à N$ mais que quand vous regardez le contenu de N$ vous ne voyez que Hello, sans guillemets autour. Les guillemets dans notre instruction d'assignation originale, N$="Hello" ne sont là que pour dire à l'ordinateur que Hello est une chaîne, pas un nombre. Si vous tapez PI, vous avez le nombre 3,14159265359. Mais si vous tapez "PI", vous avez le mot PI. Essayez.
===DÉCLARER DES VARIABLES CHAÎNE===
Si vous ne déclarez pas la précision d'une variable numérique, le HP-71 suppose que vous voulez la précision REAL. De la même manière, le HP-71 suppose que votre variable chaîne doit contenir 32 caractères. Vous pouvez taper N$="Hello" sans dimensionner N$ parce que "Hello" fait moins de 32 caractères de long. Mais si vous deviez taper ceci :
N$="C'est le temps qui façonne l'homme"
vous auriez une erreur "String Ovfl" ("string overflow", dépassement de capacité chaîne) parce que N$ ne peut pas contenir plus de 32 caractères. Si vous voulez une chaîne de plus de 32 caractères, vous devez la dimensionner. Si vous voulez que N$ contienne jusqu'à 100 caractères, tapez :
DIM N100
Remarquez les crochets. Les crochets, pour le HP-71, ont rapport à la position d'un caractère dans une chaîne. Aussi DIM N100 signifie "allouer de la mémoire pour N$ jusqu'au centième caractère". Si vous voulez un tableau de chaînes, rappelez-vous simplement que la dimension vient d'abord, entre parenthèses normales et la taille des chaînes en second, entre crochets, comme ceci:
DIM N$(7)[100]
qui prépare la mémoire pour 7 chaînes contenant jusqu'à 100 caractères chacune. On s'y réfère par N$(1), N$(2) etc... Le HP-71 ne permet pas les matrices de chaînes, mais, si vous en avez besoin, nous verrons un moyen de les simuler quand nous arriverons au chapitre sur le mode PROGRAMME BASIC. Vite ! Que fait DIM N96,X,Y,Z ? Juste ! Il déclare N$ à 96 caractères de long et X,Y et Z en précision réelle.
===FONCTIONS CHAÎNES SPÉCIALES===
Les fonctions qui opèrent sur des nombres sont appelées fonctions numériques (surprise !), et les fonctions qui opèrent sur des chaînes sont appelées (tous en choeur avec moi !) fonctions chaînes ! Il y a beaucoup moins de fonctions chaînes que de fonctions numériques. N'ayez crainte ! Le HP-71 est d'abord une machine à traiter les nombres. Il préfère calculer SQR(X) ou FACT(253). Il n'apprécie pas qu'on lui demande SQR("FRED") ou FACT("Hello"). Comme il ne s'agit pas d'expressions valides, le HP-71 le dit.
Essayez. Remarquez aussi que le mode CALC est strictement pour le traitement des nombres, il n'admet aucune chaîne ou fonction chaîne.
Une fonction chaîne très utile est LEN. Elle vous donne la longueur de la chaîne spécifiée. Par exemple, essayez :
len(n$)
qui vous donne la longueur de N$, qui doit être 5, puisqu'elle est égale à "Hello" qui a 5 caractères de long. Les fonctions numériques discutées plus haut ont toutes une chose en commun : Elle peuvent utiliser une variable numérique comme argument, par exemple SIN(Y), ou vous pouvez utiliser un nombre écrit tel que, par exemple SIN(17.7). La même chose est vraie des fonctions chaînes. Vous pouvez utiliser une variable chaîne, par exemple LEN(N$), ou vous pouvez utiliser une chaîne utilisée telle que (entre guillemets). Une expression utilisée telle que, épelée "littéralement" est appelée un "littéral". Un exemple de littéral numérique est 1537. Un exemple de littéral chaîne est "Hello". Vous pouvez utiliser aussi bien les guillemets (") que les apostrophes(') pour délimiter les littéraux chaînes (c'est une habitude anglo-saxonne), mais ne les mélangez pas ! Si vous débutez une chaîne avec des guillemets, finissez avec des guillemets ; si vous commencez avec une apostrophe, finissez avec une apostrophe. Le HP-71 semble parfois changer les guillemets en apostrophe (nous en verrons des exemples dans les assignations de touches et dans les labels de programmes) mais vous pouvez taper ce qu'il vous plaira.
Note aux philosophes : Remarquez que PI n'est ni une variable (il ne varie pas) ni un littéral (il ne contient pas de chiffre). C'est une fonction. Un philosophe des mathématiques dirait "Il y a une contradiction dans les termes ; les fonctions doivent être des fonctions de quelque chose, mais PI n'a pas d'argument et donne toujours la même valeur, donc ce n'est pas une fonction, mais une constante". J'approuve de tout coeur. PI devrait être appelé une constante, mais ce n'est pas le cas. Il est appelé une fonction. Ceci résout le dilemme de savoir comment appeler des fonctions similaires comme RES.
RES agit comme une constante (il donne une valeur mais n'a pas d'argument), mais il varie. Il ne peut pas être appelé une variable, cependant, parce que la méthode d'affectation d'une valeur aux variables ne marche pas avec RES (essayez RES=1234 et voyez ce qui arrive). Aussi contentez-vous de l'appeler une fonction.
Quand à RES, remarquez que RES n'est jamais une chaîne. La valeur de RES est changée chaque fois qu'une variable numérique se voit assigner une valeur (ou chaque fois qu'une valeur est affichée ou imprimée). RES n'est jamais changé par une opération sur les chaînes.
===CROCHETS ET SOUS-CHAÎNES===
Tapez ces commandes :
DIM N96
N$="C'est le remps qui faconne l'homme"
N10,26
Que voyez-vous ? Vous devez voir trois mots. Les crochets aux extrémités de la chaîne sont des opérateurs spéciaux qui indiquent quelle part de la chaîne utiliser. Le 10 signifie "débutez au 10 ème caractère" et le 26 signifie "arrétez au 26ème caractère". Ainsi nous obtenons une partie de N$, du 10ème au 26ème caractères (inclus). Une petite chaîne extraite d'une plus grosse est appelée une sous-chaîne. Si vous n'utilisez qu'un nombre, il est pris comme valeur de départ. A l'aide de la pile de commande, pour ne pas avoir à le retaper, essayez cette expression :
N10
C'est ce qu'il y a de mieux dans les sous-chaînes. Supposons que vous ne vouliez pas "remps" dans cette chaîne, mais "temps". A l'aide des sous-chaînes, vous pouvez changer une partie de N$ en quelque chose d'autre :
N10,10="t"
N$
Maintenant, vous voyez "C'est le temps qui faconne l'homme". Essayez ceci :
N11,11="a"
N14,14="on"
N30,31="e tr"
N35,37="u"
N$
Vous devez voir une nouvelle phrase au sujet d'un travail de maçon !
Bien que ce ne soit pas mentionné dans les documents HP, remarquez que les crochets peuvent modifier non seulement les chaînes, mais les sous-chaînes ! Essayez ça :
NLEN(N$)/2[4,5]
Ceci veut dire que vous voulez les caractères du 3ème au 5ème de la deuxième moitié de N$, ce qui donne "fa". Comme ceci met en jeu deux concepts de sous-chaîne ("deuxième moitié" et "du 3ème au 5ème caractère"), le faire avec des crochets doubles est logique. Le faire en suivant les manuels HP aurait donné :
NLEN(N$)/2+4,LEN(N$)/2+5
Remarquez, cependant, que les commandes d'assignement ne peuvent avoir qu'un jeu de crochets à gauche du signe égal. N10,20="XYZ" est bon, mais N10,20[2,4]="!" n'est pas autorisé.
Il y a un autre truc qui n'est pas indiqué dans le manuel. Vous pouvez avoir besoin d'insérer quelque chose au milieu d'une chaîne. Pour ce faire, spécifiez une chaîne qui part de là où vous voulez, mais qui n'a pas de longueur :
N10,0="Texte inséré"
Pour insérer du texte au tout début d'une chaîne, vous pouvez utiliser N1,0 ou N0,0, comme vous voulez.
Test ! Supposons que I$="123456789".
Que vaut I3,6 ? I6 ? Que fait I3,7="-" à I$ ? Réfléchissez. Essayez.
Note pour les curieux : Le HP-71 utilise une notation algébrique homogène en mode CALC ; toutes les fonctions viennent avant le nombre utilisé et tous les opérateurs viennent entre. La même chose est vraie pour toutes les fonctions du HP-71, même les fonctions chaîne... sauf pour les crochets.
Ils viennent toujours à la fin. Si vous avez l'habitude de la façon dont les autres BASIC travaillent sur les sous-chaînes (avec des fonctions comme MID$, LEFT$ et RIGHT$), les crochets vous donneront un peu de mal avant que vous y soyez habitués. Si vous n'avez jamais travaillé auparavant avec BASIC, vous trouverez les crochets commodes d'usage.
===LE ET COMMERCIAL &===
De la même façon que les crochets vous permettent de raccourcir des chaînes en chaînes plus petites, le "et commercial" (&) vous permet d'assembler des chaînes en chaînes plus longues. Par exemple :
"ABC"&"123"
donne un résultat de "ABC123". Le "&" peut être vu comme un ET ; il rassemble les deux chaînes. Certaines personnes voient le "&" comme un "+", comme si il additionnait les deux chaînes. Ceci peut être mal compris. Quand vous additionnez 1+2, vous n'obtenez pas 12, mais "1"&"2" donne "12". Plutôt que +, le symbole & ressemble au symbole @ qui rassemble des instructions sur une même ligne.
L'opération faite par "&" pourra être appelée "concaténation".
Notez que vous pouvez combiner les crochets et le & de façon surprenante. Par exemple :
"ABCDEFG"[2,6]&"1234567"[3,5]
donne
"BCDEF345
parce que nous avons concaténé les caractères 2 à 6 de "ABCDEFG" avec les caractères 3 à 5 de "1234567". Mais remarquez que :
("ABCDEFG"[2,6]&"1234567")[3,5]
donne "DEF" parce qu'il s'agit des caractères 3 à 5 de :
"ABCDEFG"[2,6]&"1234567"
Cette utilisation des parenthèses est la seule façon qui permet d'appliquer les crochets à plus que la chaîne immédiatement précédente. Vous rappelez-vous la hiérarchie algébrique que nous avons apprise pour les fonctions mathématiques ? La multiplication "a priorité" sur l'addition. Pareil ici, les crochets "ont priorité" sur "&" dans l'évaluation des chaînes. Je présume qu'on peut appeler cela une hiérarchie des fonctions chaîne, mais personne ne le fait, je n'en ferai donc rien. Rappelez-vous seulement que les parenthèses sont plus importantes que les crochets et les crochets plus importants que &.
===CHR$ ET NUM===
CHR$ (CHaRacter, caractère, prononcez "cé hache ere dollar") est une fonction commode qui transforme un nombre en chaîne d'un caractère. Par exemple, essayez ceci :
CHR$(74)&CHR$(72).
Vous devez voir "JH" à l'affichage. Ceci parce que le 74ème caractère connu du HP-71 est "J" et le 72ème "H". Ces nombres sont appelés les codes ASCII (prononcez "aski") des caractères correspondants. Quand le HP-71 enregistre une chaîne, il enregistre en fait une suite de codes ASCII; quand vous affichez la chaîne, il convertit chaque code dans le caractère correspondant. Je n'ai pas inclus une table des codes ASCII dans ce livre, parce qu'il y en a une très bonne qui vous est fournie avec le HP-71, pages 43 à 47 de l'aide mémoire du HP-71, que vous avez tout intérêt à conserver en permanence dans l'étui du 71.
Vous pouvez objecter que vous pouvez obtenir "JH" en tapant "JH", à quoi peut donc bien servir CHR$ ? Vous en avez besoin pour les caractères que vous ne pouvez pas taper. Par exemple la barre de fraction inversée (\) qui n'est pas au clavier. Elle a le code ASCII 92. Si vous voulez l'afficher, tapez CHR$(92).
Ainsi, CHR$ prend un code ASCII et vous donne le caractère correspondant. La fonction inverse est appelée NUM ("NUMber", nombre). NUM prend un caractère et vous donne son code ASCII. Par exemple, NUM("J") donne 74, parce que le code ASCII pour J est 74.
Remarquez que les majuscules ont un code différent des minuscules. NUM ne regarde que le premier caractère de son argument, aussi vous pouvez lui envoyer des chaînes longues. Par exemple, NUM("Jack Horner") donne aussi 74. Tout ce qu'il y a après le premier caractère est ignoré par NUM.
Vous pouvez utiliser CHR$ et NUM pour comprimer beaucoup de nombres dans peu de place. Par exemple, si vous avez 100 nombres à stocker, allant de 0 à 255, vous pouvez les stocker ensembles dans une chaîne de caractères ASCII. Ceci prend seulement une fraction de la mémoire qui serait nécessitée par un tableau.
Exemple : Faisons le d'abord avec un tableau, puis voyons comment on fait avec une chaîne. Pour faire un tableau nommé "A" de 100 entiers, vous devez taper integer A(100). Pour rendre le 17ème égal à 153, vous devez taper A(17)=153. Pour récupérer le 17ème, vous avez juste à taper A(17). Maintenant faisons-le avec une chaîne. Pour créer une chaîne nommée A$, de 100 caractères de long, tapez DIM A100. pour rendre le 17ème caractère égal au code ASCII 153, tapez A17,17=CHR$(153).
Pour récupérer le code ASCII du 17ème caractère, tapez NUM(A17).
===STR$ ET VAL===
Avez-vous remarqué que, chaque fois que vous affichez un nombre, le HP-71 ajoute un espace devant et derrière ? Essayez ceci : X=153 @ "Prix =";X;"F". Ce que nous nous attendons à voir, c'est :
Prix =153F
mais ce n'est pas ce que nous obtenons. A la place, nous avons :
Prix = 153 F
avec un espace entre = et 153 et un espace entre 153 et F. Nous pouvons nous en débarrasser en utilisant la fonction STR$ ("STRing", chaîne, prononcer "esse té ere dollar"). La fonction STR$ prend un nombre et renvoie une chaîne qui ressemble exactement au nombre comme il serait affiché, sauf qu'elle n'ajoute pas ces espaces inutiles ! Aussi, tapez "Prix =";STR$(X);"F" et vous verrez :
Prix =153F
L'utilisation de STR$ uniquement pour éliminer les espaces, cependant, est comme d'utiliser le HP-71 uniquement en mode CALC. C'est bien, mais quel gaspillage de puissance! La vraie puissance de STR$ réside dans la façon dont elle vous permet d'utiliser des nombres comme des chaînes. Beaucoup de fonctions ne travaillent que sur des chaînes, aussi si vous voulez utiliser cette fonction avec un nombre, utilisez d'abord STR$. Par exemple, la fonction LEN ne vous donne que la longueur d'une chaîne, pas la longueur des nombres. Supposons que vous vouliez trouver la longueur prise par l'affichage de X. Vous pouvez l'afficher et compter le nombre de positions d'affichage. Vous pouvez aussi utiliser LEN(STR$(X)). Essayez. Ce principe s'applique à toutes les fonctions chaînes. Pour les utiliser sur des nombres, utilisez d'abord STR$ pour transformer le nombre en chaîne.
La fonction opposée est VAL (VALeur). VAL prend une chaîne et la transforme en nombre. Par exemple, tapez A$="153". Maintenant, supposez que vous voulez récupérer le nombre 153 dans la chaîne A$. Vous ne pouvez pas utiliser NUM ; cela ne donnerait que des codes ASCII, dont nous n'avons que faire. Utilisez VAL(A$) ; cela vous renvoie 153. Mais VAL est beaucoup plus puissante que cela ! Elle peut aussi évaluer des expressions mathématiques complètes. Par exemple, si A$="1+2*34", alors VAL(A$) est 163, comme si vous aviez tapé 1+2*34 en mode CALC.
Mais voici la vraie conclusion sur la fonction VAL. Vous pouvez lui envoyer des chaînes contenant des variables, et elle les évalue correctement ! Par exemple, faites A$="PI*R2". C'est la formule qui donne l'aire d'un cercle de rayon R. Pour trouver l'aire d'un cercle de rayon 7, faites R=7 puis tapez VAL(A$) pour voir 153.938040026, l'aire. Pour utiliser des chaînes compliquées, avec de nombreuses variables, assurez-vous d'avoir dimensionné la chaîne d'abord. Cette capacité de VAL d'évaluer des expressions est le coeur de quelques un des plus puissants programmes écrits pour le HP-71.
Note : Même si nous n'avons pas encore discuté de programmation, nous avons vu deux façons de "programmer" le HP-71 pour faire des calculs répétitifs. La première méthode, en mode CALC, est d'utiliser la pile de commande. Les expressions utilisant des variables sont évaluées en mode CALC, puis les variables modifiées, l'expression retrouvée dans la pile de commande et ré-évaluée. La seconde méthode vient juste d'être discutée. Les expressions sont placées dans des chaînes, évaluées avec la fonction VAL, les variables changées puis les chaînes ré-évaluées avec la fonction VAL.
De ces deux méthodes, CALC est la plus simple pour une ou deux fonctions. Mais la pile de commande n'est pas assez haute si vous avez beaucoup de fonctions à évaluer. Dans ce cas, utilisez la méthode VAL/chaîne de caractères. Il n'y a presque pas de limite au nombre d'expressions chaîne que vous pouvez avoir en mémoire en même temps. Par exemple, vous pouvez stocker une expression dans A$, une autre dans B$, etc... Le truc est de se rappeler le nom de chacune
vous pouvez toujours regarder A$, bien sûr ! tout ce que vous avez à faire
est de taper A$ et de presser [ENDLINE].
===POS, UPRC$ ET VER$===
Il n'y a que trois autres fonctions chaînes, sans relation entre elles. La première est POS ("POSition"), et elle est utilisée pour trouver des sous-chaînes dans des chaînes plus longues.
Tapez A$="C'est le tamps qui faconne l'homme"
Remarquez l'orthographe : elle aurait dû être "temps" et non pas "tamps". Nous avons déjà vu comment changer le "a" en "e", avec les crochets, mais il faut savoir où est le "a" dans la chaîne. Le faire à la main est pénible. Laissons donc l'ordinateur le faire !
Tapez POS(A$,"a") et vous verrez 11. Ceci signifie que le "a" que nous voulons est le 11ème caractère de la chaîne A$. POS cherche dans la chaîne que vous spécifiez et vous dit où est la première apparition du caractère dans la chaîne. Heureusement, le "a" que nous voulons est le premier dans la chaîne ! pour le changer en "e", comme il doit être, tapez :
ARES,RES="e" @ A$
J'utilise RES parce que la mémoire de RES est meilleure que la mienne ! Truc : habituez-vous à beaucoup utiliser RES. C'est une fonction commode. Juste comme les bons utilisateurs de HP-41 utilisent LASTx pour un oui ou pour un non. J'attends encore de voir un programme qui fasse un usage significatif de RES, mais cela va sûrement changer avec l'augmentation d'expérience des utilisateurs de HP-71.
Maintenant, que faire si vous voulez trouver non pas le premier "m" dans la chaîne, mais le second ? Il y a deux façons de le faire. Vous pouvez spécifier juste une partie de la chaîne dans la fonction POS en utilisant des crochets ; POS(A13,"m") cherche pour "m" du treizième au dernier caractère de la chaîne A$. L'autre moyen est de spécifier dans POS elle-même quelle portion de la chaîne explorer. POS(A$,"m",13) cherche "m" dans A$ à partir du 13ème caractère. Aussi, pour trouver le deuxième "m" dans A$, tapez POS(A$,"m",POS(A$,"m")+1), qui doit donner 32, parce que nous avons dit à l'ordinateur de trouver le premier "m", d'ajouter 1 puis de chercher à nouveau pour "m" à partir de cette nouvelle position.
N'oubliez jamais que les fonctions ne sont pas limitées à de timides nombres comme arguments, elles peuvent utiliser des expressions aussi formidables de complexité que vous pouvez les rêver ! A mesure de l'accroissement de votre expertise en BASIC, vous trouverez plus facile d'utiliser des arguments imbriqués comme ceux-ci, comme vous utilisez en français des formes grammaticales qui sont difficiles à comprendre pour les étudiants étrangers. Grâce à Dieu, le HP-71 parle BASIC mieux qu'aucun de nous le fera jamais.
Remarque mal intentionnée : La HP-41 a une capacité limitée de traitement des chaînes ASCII. Si vous créez un fichier ASCII (texte) en mémoire d'extension consistant en un seul enregistrement contenant 253 "A" suivis d'un seul "B", puis utilisez la fonction POSFL pour trouver une sous-chaîne formée de 23 "A" suivis d'un "B", la HP-41 met une minute et 7 secondes à la trouver. Le HP-71 mange des chaînes de caractères au petit déjeuner. Utiliser la fonction POS pour trouver 23 "A" suivis d'un "B" dans une chaîne de 253 "A" suivis par un "B" prend moins de trois dixièmes de seconde
(le HP-75 met 0,53s) Si vous êtes un expert en HP-41, ne vous souciez pas
du temps mis par le HP-71 pour exécuter les fonctions chaîne. Elle n'en mettent pas. Elle sont même plus rapides que les fonctions du BASIC Microsoft_H(R) trouvés sur la plupart des ordinateurs familiaux, du TRS-80 (R) à l'IBM (R) PC.
Une autre fonction chaîne commode est UPRC$ ("UPpeRCase", majuscule, prononcer "u pé ere cé dollar"). Si vous voulez voir en majuscules toutes les minuscules de A$, faites simplement UPRC$(A$). Notez bien : UPRC$ ne change pas son argument, elle renvoie simplement la version majuscule de celui-ci. Si vous voulez changer A$ elle même en majuscules, tapez A$=UPRC$(A$). Ceci est vrai de toutes les fonctions, elle ne changent pas leur argument mais simplement renvoient quelque chose basé sur l'argument. Supposons que vous voulez trouver le premier "e" d'une chaîne, qu'il soit en majuscule ou en minuscule. Voici comment faire:
POS(UPRC$(A$),"E")
qui balaye la version majuscule de A$ à la recherche de "E". Remarquez que A$ elle-même n'est pas changée en majuscules ! Cette méthode est souvent utilisée dans les programmes.
Une fonction chaîne de plus : VER$
("VERsion"). Tapez VER$ et voyez le résultat.
Si vous voyez seulement HP71:1BBBB, alors vous avez un HP-71 tout nu, original sans rien de branché dans les ports. Si vous voyez autre chose après la version du HP-71, cela indique que vous avez d'autres fichiers LEX branchés dans les ports ou flottant quelque part dans la mémoire vive et vous pouvez probablement estimer ce qu'ils sont en voyant ce qui est affiché par VER$. Les BBBB indiquent la version des quatre modules internes du HP-71. La première version commercialisée du HP-71 était la version BBBB (si vous avez une version AAAA, vous n'avez aucun besoin de lire ce livre). Un HP-71 acheté plus tard peut avoir des lettres plus hautes. Des modèles futurs du HP-71 (par exemple HP-71C) auront certainement des versions plus hautes.
Par exemple, la HP-41C a eu plusieurs versions, puis est venu un modèle avec davantage de mémoire vive incorporée, puis est sorti le modèle HP-41CX qui a plus de mémoire vive et de mémoire morte. Ma HP-41CX est la CX originale et les lettres de version de ses trois modules internes sont NFL ! Ainsi VER$ deviendra une fonction importante avec le temps. HP pourra mettre à jour vos modules internes pour la nouvelle version pour un prix nominal.
Comprenez-vous les fonctions chaîne ? Les programmes, les routines, les suggestions qui les utilisent toutes se trouvent après le chapitre sur le mode PROGRAMME BASIC.
===LET===
Pour l'instant, quand nous avons voulu assigner une valeur à une variable, nous avons simplement écrit l'égalité. Par exemple, pour rendre X égal à PI, nous avons simplement écrit X=PI. Il y a une autre façon d'écrire la même chose, que les débutants trouvent moins confuse :
LET X=PI (que X soit égal à PI)
La commande "LET" en BASIC signifie quelque chose comme "Que la fête commence" ou "Qu'ils mangent les gateaux". Personnellement, je pense qu'on aurait dû utiliser SET (mettre, au lieu de LET, laisser). Et il pleuvrait de la bière. Mais ce n'est pas le cas !
Comment ajouter 1 à X ? Bien sûr vous devez taper X=X+1. Ce genre d'instruction fiche la frousse aux mathématiciens. Comment au monde, X peut-il être égal à X+1 ! Si vous êtes un puriste, vous pouvez taper LET X=X+1 à la place, les deux commandes sont identiques.
La commande LET est toujours facultative.
===FOR / NEXT===
Supposons que vous ayez une commande à exécuter plusieurs fois. Vous avez deux possibilités. La solution évidente est d'aller de l'avant et de le faire vous même plusieurs fois. Par exemple, pour bipper dix fois, vous pouvez taper BEEP et presser [ENDLINE] dix fois. Évidemment vous pouvez utiliser la pile de commande pour simplifier votre travail.
Il y a une meilleure façon. Tout ce qu'il vous faut c'est un compteur qui compte de 1 à 10 et bippe pendant ce temps. Vous pouvez utiliser n'importe quelle variable comme compteur. Utilisons X, parce que c'est ma variable favorite. Voici le scénario. Je dis au 71 de bipper pour toutes les valeurs de X de 1 à 10. Le 71 met alors X à 1, bippe, passe à la valeur suivante de X (soit 2), bippe, passe à la valeur suivante de X (soit 3), bippe, etc... Jusqu'à ce qu'il bippe pour une valeur de X égale à 10 et stoppe. Essayez ceci :
FOR X=1 TO 10 @ BEEP @ NEXT X
(les espaces, ici, comme toujours, sont facultatifs). Rappelez-vous que le symbole @ est le "concaténateur de commandes" qui chaîne les commandes les unes à la suite des autres.
Nous avons ici trois commandes. FOR X=1 TO 10 signifie "utilisez X comme compteur de 1 à 10". En elle même cette instruction ne fait que mettre le compteur à 1. Mais si elle est suivie, sur la même ligne, par NEXT X, le X comptera de 1 à 10 et toutes les instructions chaînées entre le FOR et le NEXT seront exécutées pendant ce temps ! Essayez de changer 10 par un autre nombre (utilisez la pile de commande !). Essayez de changer BEEP par une autre commande (essayez X tout seul). Cette faculté de "boucler" à partir du clavier est très utile, spécialement quand vous utilisez la valeur du compteur lui-même.
Supposons que vous vouliez effacer une partie d'un tableau. Voyez-vous pourquoi :
FOR X=10 TO 20 @ M(X)=0 @ NEXT X
effacerait M(10), M(11), M(12),... ,M(20) en les mettant à 0 ?
En plus des points de départ et de fin du comptage, vous pouvez spécifier de combien il faut compter à la fois :
FOR X=200 TO 2000 STEP 100 @ BEEP X @ NEXT X
chante une bête chansonnette. Essayez-la et rendez votre chat fou. Ce qui arrive, évidemment, c'est que le HP-71 a bippé à une fréquence de 200 Hertz, puis 300 Hz, 400 Hz, etc... jusqu'à 2000 Hz. "STEP 100" signifie "ajoutez 100 au compteur chaque fois que vous calculez la valeur suivante". Si aucun STEP (pas) n'est spécifié, comme précédemment, une valeur par défaut de 1 est utilisée.
Parfois une boucle infinie est utile. Essayez ceci :
FOR X=1 TO INF @ TIME$ @ NEXT X
Comment cela ! Nous avons une montre digitale en état de marche et nous n'avons même pas écrit un programme ! Si l'affichage semble clignotant (quelques secondes restent trop longtemps, d'autres pas assez), tapez DELAY 0,0 ce qui ordonne au HP-71 de n'utiliser aucun délai entre l'affichage des différents éléments. Normalement il y a 1/2 seconde entre les affichages. Pour ramener l'affichage à son délai normal, tapez :
DELAY .5
La boucle FOR/NEXT est un des aspects les plus puissants du BASIC. Il n'y a pas de limites à son usage. Supposons que vous voulez additionner les nombres de 1 à 100, que vous avez oublié la formule, ne voulez pas la chercher ni vous ennuyer à faire l'addition vous-même. Essayez ceci :
T=0 @ FOR X=1 TO 100 @ T=T+X @ NEXT X @ T
Ceci signifie "Effacer le total courant, ajouter les nombres de 1 à 100 au total courant, puis afficher celui-ci". En moins de deux secondes, le total (5050) est affiché !
Vous pouvez aussi compter à l'envers dans une boucle ! Utilisez simplement un pas (STEP) négatif. Après avoir tapé DELAY 1, tapez ce qui suit sur une seule ligne puis pressez [ENDLINE] :
FOR X=10 TO 1 STEP -1 @ "T MOINS";X;"SECONDES"
@ NEXT X @ "Decollez !"
Le seul problème est "1 secondes", mais que voulez-vous ? Une bonne grammaire ou un bon temps ? Pouvez-vous trouver comment corriger pour qu'il dise "1 seconde" ? Une solution peu élégante est :
FOR X=10 TO 2 STEP -1 @ "T MOINS";X;"SECONDES" @
NEXT X @ "T MOINS 1 SECONDE" @ "Decollez !"
Essayez d'inventer des boucles FOR/NEXT folles et sauvages à votre guise. Presque tous les gros utilisateurs de variables sont inévitablement des gros utilisateurs de boucles FOR/NEXT. Non seulement elle font gagner du temps, mais elles sont amusantes !
Dans ce chapitre, nous avons vu comment utiliser des variables pour retenir des données, à partir du clavier. Dans le prochain chapitre nous allons voir d'autres façons plus permanentes de stocker des variables dans le HP-71.