4ème partie :
LE LANGAGE BASIC

Nous ne prétendons pas ici donner une présentation complète du langage BASIC. On trouve en effet en librairie une grande variété d'ouvrages de cette nature, du plus austère au plus humoristique. Par ailleurs les constructeurs livrent leurs machines accompagnées d'un manuel d'apprentissage et il est couramment admis qu'il suffit d'une heure à un ingénieur pour connaître les rudiments de ce langage, sans oublier qu'il existe maintenant une énorme bibliothèque de programmes de démonstration dans les domaines les plus divers.

Fidèles à notre principe, nous supposons que nous ne nous adressons pas ici à de futurs informaticiens. Nous n'entrerons donc pas dans les subtilités des différents dialectes du BASIC et nous nous contenterons de faciliter la transition depuis les petites cal-culatrices, maintenant largement répandues, vers les petits systèmes informatiques appelés à leur succéder.

4.1. Une machine à calculer

Une première façon d'utiliser un ordinateur en langage BASIC consiste à lui demander des services analogues à ceux d'une machine à calculer de bureau. Le caractère conversationnel de ce langage nous aide puissamment et, pour un calcul simple, le plus gros travail demandé à l'utilisateur consistera à mettre en marche la machine et à procéder ai une série de manoeuvres destinées à établir le dialogue.

Ensuite, la forme du dialogue est extrêmement simple. Pour connaître la somme de deux nombres, on tapera sur le clavier:

?
2
+
2
ENTER

qui a la signification suivante

?
signifie que l'on pose une question à l'ordinateur, c'est-à-dire que l'on va lui demander de calculer une expression
2
est un premier opérande numérique
+
est le symbole de l'addition
2
est un second opérande numérique
ENTER
signifie que l'expression est terminée

La touche ENTER est à peine enfoncée que l'ordinateur effectue le calcul et affiche sur l'écran (ou sur l'imprimante) le résultat : : 4

Des expressions plus complexes peuvent être calculées en utilisant les différents symboles existants en BASIC :

+ addition

- soustraction

* multiplication

/ division

­ exponentiation

Des parenthèses peuvent être utilisées pour définir des expressions complexes. Les opérations situées à l'intérieur des parenthèses les plus intérieures sont réalisées en premier lieu ; ensuite celles du niveau suivant sont effectuées, et ainsi de suite jusqu'aux opérations qui ne sont pas entre parenthèses. Au même niveau, les opérations sont réalisées dans l'ordre suivant :

Exposant : A ­ B

Négation : - X

* et / (de gauche à droite)

+ et - (de gauche à droite)

Certaines fonctions arithmétiques usuelles sont connues de la machine
ABS(x)	valeur absolue de x
ATN(x)	arc (en radians) dont la tangente est x
COS(x)	cosinus de l'angle x, exprimé en radians
EXP(x)	exponentielle ex
INT(x)	partie entière de x
LOG(x)	logarithme naturel de x
SIN(x)	sinus
SQR(x)	racine carrée
TAN(x)	tangente

Beaucoup d'autres fonctions arithmétiques peuvent être déduites de celles-ci, par exemple le sinus hyperbolique, égal à (EXP(x)-EXP(-x)/2.

Les opérandes numériques peuvent être eux-mêmes écrits sous trois formes

- nombre entier		ex : 3

- nombre décimal ex 3.14

- nombre en notation exponentielle ex 6.023E23

Voici des exemples d'utilisation du mode "machine à calculer"

?SQR(2)	(1)
?(EXP(4)-EKP(-4)/2	(2)
?4*ATN(l) (3)
?SQR(10­2+l5­2) (4)

De même qu'avec les calculatrices de poche, il est possible d'enchaîner des calculs en affectant des valeurs à des variables intermédiaires. Si par exemple, on cherche le périmètre et la surafce d'un cercle dont le rayon est égal à 4.28571, on peut écrire la suite d'instructions :

R=4.28571
PI=3.14157
?2*PI*R
?PI*R*R

L'enchaînement de ces instructions est rendu possible par le fait que la machine est capable de reconnaître les variables algébriques "R" et "PI" définies par l'utilisateur et d'en mémoriser la valeur. Par contre, dans les exemples qui précèdent, les expressions mathématiques sont calculées, et leur résultat est affiché, mais le programme de calcul qu'elles représentent n'est pas mémorisé par la machine.

Le langage BASIC offre bien sûr la possibilité de mémoriser, non seulement les valeurs de variables définies par l'utilisateur, mais aussi un enchaînement de calculs : c'est la notion de programme.

4.2. Un programme de calcul

Si l'on désire faire plusieurs fois une même série de calculs à partir de données initiales différentes, il est commode de décrire ces calculs une fois pour toutes dans un programme, qui sera organisé de telle sorte que les données qui varient puissent être commodément introduites.

Pour prendre un exemple simple, rappelons que l'équation du second degré :

ax2 + bx + c = 0

possède les deux racines suivantes

si le discriminant

D = b2 - 4ac

est positif

Un programme BASIC permettant de chercher les racines pour tout triplet de nombres a, b, c peut s'écrire

REM Equation a*x­2+b*x+c-0
10 INPUT "A,B,C"; A,B,C
20 LET D=B*B-4*A*C
30 IF D<0 then print "PAS DE RACINE REELLE": goto 10
40 if d=o then print "RACINE DOUBLE: "; -b/(2*a): goto 10
50 print "LES RACINES SONT "; (-b+sqr(d))/(2*a);" ET ";(-b-sqr(d))/(2*a)
60 goto 10

Ce programme nous donne un premier aperçu du langage BASIC.

Les nombres entiers qui figurent au début de chaque ligne sont les numéros de ligne. Ils sont rangés systématiquement par ordre croissant et indiquent l'ordre normal d'exécution des instructions du programme.

Ligne 1 la première ligne, qui commence par le mot "REM" est un commentaire destiné à faciliter la lisibilité du programme par le lecteur ; ce n'est pas une instruction exécutable.
Ligne 10 L'instruction INPUT permet d'introduire en mode conversationnel les trois données du programme.
Ligne 20 Calcul du discriminant D. La plupart des machines modernes admettent la suppression du mot LET, qui symbolise l'affectation de valeur de l'expression située à droite du signe égal à la variable dont le nom figure à gauche de ce même signe.
Ligne 30 La forme IF ... THEN permet au programme de réagir différemment selon la valeur du discriminant. S'il est négatif, l'exécution du programme se poursuit immédiatement. après le mot "THEN" par l'affichage ("PRINT") du message "PAS DE RACINE", puis l'instruction "GOTO 10" provoque le retour au début du programme en vue de reprendre le calcul avec d'autres données.
Si le discriminant n'est pas négatif, les instructions qui suivent THEN sur la même ligne sont ignorées et le programme continue à la ligne suivante.
Ligne 40 Dans le cas particulier d'un discriminant nul, la racine double est obtenue par 1'expression -b/2a
Ligne 5O L'ordinateur calcule les deux racines
Ligne 60 Retour au début du programme

Remarquons bien dans cet exemple, plusieurs concepts fondamentaux du langage BASIC :

4.3. Du courrier répétitif

Il arrive fréquemment qu'un même texte doive être dactylogra-phié de façon répétitive, soit sous une forme fixe, soit avec de légères variantes.

Le cas des textes fixes suggère l'usage du papier carbone ou des machines de reproduction usuelles (duplicateur à alcool, ronéo, offset, etc.). Ces moyens supportent de légères variantes, à condition de laisser en blanc les passages à modifier.

L'idée est venue progressivement d'utiliser les programmes écrits en langage informatique pour manipuler des textes comportant des parties fixes et des parties variables. Pratiquement impossible avec les premiers langages tels que FORTRAN et COBOL, le traitement de texte est tout à fait possible avec les langages plus évolués tels que BASIC ou APL, qui acceptent de considérer les chaînes de caractères Comme des variables sur lesquelles on peut effectuer les opérations suivantes

(Par souci de clarté, les noms de variables de cette nature seront suivis du symbole "$")

Constante "PAPA ET MAMAN"
Comparaison A$ < B$ signifie que A$ précède B$ dans l'ordre alphabétique
A$ = B$ signifie que A$ et B$ sont identiques
Concaténation A$ + B$ est une chaîne composée de A$ suivie de B$
Extraction LEFTS(A$,n) est une chaîne composée des n caractères les plus à gauche dans A$

RIGHTS(A$,n) est une chaîne composée des n caractères les plus à droite dans B$

MIDS(A$,i,n) est une sous-chaîne de A$ composée de n caractères, en partant du ième caractère de A$

Création STR$(x) est une chaîne de caractères développant "en clair" le nombre x

STRING$(n, C$) est une chaîne de n caractères identiques au caractère C$

Longueur : LEN(A$) fournit la longueur de la chaîne A$

Exemple :

10 INPUT "MONSIEUR OU DAME";G$
20 IF LEFT$(G$,1)="D" THEN C$="CHERE MADAME"
   ELSE C$="CHER MONSIEUR"
30 PRINT "VEUILLEZ AGREER, ";C$;", L'EXPRESSION DE MES MEILLEURS SENTIMENTS'

De nombreuses fonctions de mise en page ont été introduites, notamment la fonction de tabulation TAB. Soit T$ un titre à centrer au milieu d'une ligne de 64 caractères. On écrira en BASIC

PRINT TAB(32-LEN(T$)/2)T$

Sans entrer dans des détails qui varient selon les machines utilisées, on aperçoit la possibilité d'obtenir une précieuse assistance dans les cas suivants :

4.4. Les tableaux

Dès que les programmes que l'on désire traiter deviennent un peu complexes apparaît la nécessité de grouper les variables par familles, de la même manière qu'en mathématiques, les composantes d'un vecteur seront baptisées xi ou les éléments d'une matrice aij

De manière générale, les langages informatiques évolués admettent la notion de tableau, avec un ou plusieurs indices, avec une notation du type X(i) ou A(i,j).

Imaginons un espace vectoriel à trois dimensions et deux vecteurs X et Y. Au lieu de désigner leurs coordonnées Xl, X2, X3 et Y1, Y2, Y3, nous pouvons définir deux tableaux X et Y de trois éléments chacun de sorte que ces mêmes coordonnées s'écrivent X(1), X(2), X(3) et Y(1), Y(2) et Y(3).

Le produit scalaire S de ces deux vecteurs s'écrit

S=X(1)*Y(1)+X(2)*Y(2)+X(3)*Y(3)

Autre exemple :

A l'école, on s'intéresse aux noms, prénoms, sexe et âge des élèves d'une classe. Sans même connaître au départ le nombre exact d'élèves, on peut définir différents traitements sur ces paramètres N$(i), P$(i), S$(i), A(i) tels que :

On peut gérer de la même manière un fichier clients, une liste d'adresses, etc.

4.5. Structure des programmes

Un algorithme complexe devient vite très difficile à programmer si quelques précautions simples ne sont pas prises.

Il est essentiel d'avoir des idées claires sur la démarche à suivre et que l'écriture du programme en BASIC en soit le reflet. Il apparaît clairement aujourd'hui que la meilleure technique est celle dite de programmation modulaire dans laquelle un problème complexe doit être clairement décomposé en sous-problèmes (un peu) plus simples dans son écriture.

Le langage BASIC n'est malheureusement pas très propice à l'application de ces principes, mais comme il ne les exclut pas totalement, il est bon de s'y astreindre.

1ère règle : Si une même série d'instructions doit être exécutée plusieurs fois, utiliser une boucle FOR... NEXT

Exemple : pour calculer le produit scalaire de deux vecteurs X et Y dans un espace à n dimensions

S=O: FOR I=1 TO N: S-S+X(I)*Y(I): NEXT I

2ème règle : Si une même série d'instructions doit être exécutée à plusieurs reprises à des stades différents de l'exécution du programme (ou même une seule fois si cette série a une signification particulière), il est avantageux de lui donner la forme d'un sous-programme.

Exemple : (dérivé de l'équation du second degré) :

100 REM CE SOUS-PROGRAMME CHERCHE LES RACINES
11O REM DE L'EQUATION A*X*X+B*X+C=O
115 IF A=O THEN RETURN
120 D=B­2-4*A*C
130 IF D<O THEN PRINT"PAS DE RACINE": RETURN
140 IF D=O THEN PRINT"RACINE DOUBLE: ";-B/2/A:RETURN
150 PRINT "LES RACINES SONT ";(-B+SQR(D))/2/A;" ET ";(-B-SQR(D))/2/A
160 RETURN

Depuis tout endroit du programme, l'instruction "GOSUB 100" provoque l'exécution du sous-programme commençant à la ligne 100, qui s'achèvera sur la rencontre de l'instruction "RETURN", laquelle renverra à l'instruction qui suit l'appel "GOSUB". Comme il n'existe pas de limitation particulière au nombre d'instructions d'un sous--programme, et qu'un sous-programme peut lui-même en appeler un autre, et ainsi de suite, la notion de sous-programme permet de programmer avec une grande élégance les algorithmes les plus compliqués, dès lors qu'on sait à chaque stade de l'analyse, décomposer le problème posé eh un petit nombre de sous-problèmes.

Ici se situe l'un des progrès-clés qu'apportent les langages évolués par rapport aux langages-machines qui incitaient plut8t à un raisonnement par ordinogrammes.

4.6. L'ordinateur peut-il ne tromper ? Ses conclusions peuvent-elles varier ?

Un ordinateur en bon état ne commet pas d'erreur de calcul : une division par zéro, l'extraction de la racine carrée d'un nombre négatif provoquent l'apparition d'un message d'erreur en anglais plus ou moins intelligible suivant la taille de la machine. Il ne faudrait pas en inférer que les résu1tats fournis par l'ordinateur sont toujours justes, car il existe deux grandes sources d'erreurs d'origine extérieure :

Il n'existe pas, en dehors de quelques cas d'école, de moyen parfait de prouver l'exactitude de la programmation, sans même évoquer le problème de l'exactitude des données numériques. Il faut en conclure que dans de nombreux cas, la confiance à accorder aux résultats produits par un ordinateur reste un acte de foi dans le talent de celui qui a écrit le programme.

Autre paradoxe :quelle que soit la vraisemblance des résultats, ils sont invariablement reproduits à chaque exécution d'un même programme avec les mêmes données d'entrée. L'ordinateur ne serait-il pas capable de .... fantaisie ? Eh bien, si, grâce à une fonction spéciale, qui est maintenant disponible sur la plupart des machines, il est parfaitement possible d'insuffler une certaine dose de hasard dans l'exécution d'un programme BASIC, grâce à la curieuse fonction RND.

Une exécution de RND(O) fournit un nombre aléatoire uniformément compris entre 0 et 1 tandis que RND(n) tire un nombre entier au hasard compris entre 1 et n inclus.

Exemple :

pour noter les devoirs de philo

FOR I=1 TO N : NM(I)=PM(20): NEXT I

pour simuler le jeu de la roulette russe

IF RND(6)=l THEN PRINT "PAN ! VOUS ETES MORT"

4.7. Le graphisme

Les progrès des consoles de visualisation et des imprimantes permettent d'obtenir des ordinateurs bien plus que des manipulations de nombres et de textes : ils peuvent créer des images, en couleur, en relief, etc ...

Sans entrer dans des problèmes particuliers tels que la C.A.O. (conception assistée par ordinateur) et la télémanipulation, qui font appel à des langages spécialisés, le langage BASIC permet de traiter l'écran de visualisation (ou la feuille de papier de l'imprimante) comme une matrice de points qui peuvent soit être allumés, soit éteints, en plus de la possibilité de faire apparaître des caractères à tout emplacement de l'écran.

Les conventions peuvent varier d'une machine à l'autre et donnent naissance à des dialectes spécifiques. Celle adoptée par TRS-80, et que nous allons décrire, est pourtant assez typique.

Pour l'écriture des caractères, l'écran est divisé en 16 lignes de 64 colonnes, soit 1024 cases numérotées de 0 à 1023. Pour écrire le caractère CS à la case numéro i, utiliser l'instruction :

PRINT@I,C$;

Pour l'écriture de points en mode graphique, le même écran est divisé en U lignes de 128 colonnes. Pour allumer la case d'abscisse x (0<= x < 128) et d'ordonnée y (0< =Y< 47) utiliser l'instruction

SET(X,Y)

Pour éteindre cette même case

RESET (X, Y)

Pour éteindre instantanément tout l'écran

CLS

Exemple : pour tracer une sinusoïde sur l'écran

CIS: FOR X=O TO 127: SFT(X,24): SET(X,24+20*SIN(X/10)): NEKT

Il est possible de combiner les modes "caractère" et "graphique" pour graduer des axes, commenter des histogrammes, etc...

4.8. L'environnement de BASIC

Pour atteindre sa pleine dimension, le langage BASIC doit bénéficier d'un environnement :

a) il faut pouvoir ranger les programmes en mémoire permanente (ruban perforé, bande ou disque magnétique) de façon à pouvoir les réutiliser ultérieurement. C'est le r8le des fonctions LOAD et SAVE, qui n'appartiennent pas vraiment au langage BASIC mais plutôt au système d'exploitation qui l'environne.

b) Dès lors que l'ordinateur dispose, en dehors de sa mémoire centrale (RAM et ROM) d'une mémoire auxiliaire (disques), les programmes BASIC doivent pouvoir échanger des informations avec ces mémoires auxiliaires (avec des délais évidemment plus longs). C'est l'objet d'instructions spéciales d'entrée-sortie :

OPEN : ouverture de fichier
INPUT, PRINT, GET, PUT : échange d'informations avec fichier ouvert
CLOSE : fermeture de fichier

c) Pour certaines applications en temps réel, l'ordinateur bénéficie d'une horloge, qui lui permet de mieux gérer son propre fonctionnement, et de communiquer à distance avec d'autres ordinateurs. Il n'existe pas encore de standard pour les instructions de communication en temps réel.


Extrait du manuel du BASIC NIVEAU II
de Radio Shack (TRS-80)

A/ Résumé du NIVEAU II

Caractères spéciaux et abréviations

Mode Commande


ENTER
Passage à la ligne logique suivante et interprétation de la commande.
¬ Recul du curseur et suppression du dernier caractère introduit.
SHIFT ¬ Retour du curseur au début de la ligne logique; effacement de celle-ci.
¯ Passage à la ligne d'écran suivante.
: Séparateur d'instructions dans une même ligne
® Avance du curseur à la position de tabulation suivante. Les positions d'arrêt sont les suivantes : 0, 8. 16, 24, 32, 40, 48, 56.
SHIFT ® Conversion de l'affichage en 32 caractères par ligne.
CLEAR Effacement de l'écran et conversion en 64 caractères par ligne.

Mode Exécution


SHIFT @ Suspension de l'exécution; suspension de l'affichage pendant un LIST
BREAK Arrêt de l'exécution
ENTER
Envoi des données introduites au clavier et demandées par INPUT

Abréviations


? Mis pour PRINT
' Remplace: REM
. Désigne la ligne courante dans LIST, EDIT....

Caractères de déclaration de type
Caractère Type Exemples

$ alphanumérique (chaîne) A$, ZZ$
% entier Al%, SOMME%
! simple précision A!, N1!
# double précision A#, 1/3#
D double précision (notation exponentielle) 1.23456789D-12
E simple précision (notation exponentielle) 1.23456E+30

Opérateurs arithmétiques


+ addition - soustraction * multiplication
/ division ­ puissance (p.ex, 2 ­ 3 = 8)

Opérateur alphanumérique


+ concaténation (assemblage de chaînes) "AB"+"CD"="ABCO"

Opérateurs de comparaison


Symbole signification numérique alphanumérique
< inférieur à précède
> supérieur à suit
= égal à est égal à
< = ou = < inférieur ou égal à précède ou est égal à
>= ou = > supérieur ou.égal à suit ou est égal à
< > ou > < différent de est différent de

Ordre d'exécution des opérations
(les opérateurs sur une même ligne ont mème priorité)


­
-
*, /
+, -
Opérateurs de comparaison ­ NOT ­ AND ­ OR

Commandes
Commande Fontion Exemples

AUTO mm, nn Enclenche la numérotation automatique des lignes à partir de mm, par incrément de nn AUTO
AUTO 10
AUTO 5,5
AUTO -10
CLEAR Réinitialise les variables numériques à zéro et les variables alphanumériques à vide. CLEAR
CLEAR n Même fonction que CLEAR avec réservation de n bytes pour les chaînes CLEAR 500
CLEAR MEM/4
CONT Fait reprendre une exécution arrêtée par un BREAK CONT
DELETE mm-nn Supprime les lignes mm à nn dans le programme DELETE 100
DELETE 10-50
DELETE
EDIT mm Entrée dans le mode Editeur pour corriger la ligne mm
(voir ci-dessous)
EDIT 100
EDIT.
LIST mm-nn Affiche les lignes mm à nn du programme LIST
LIST 30-60
LIST 30-
LIST -60
LIST -
NEW Effacement de programme résident, réinitialisation des variables, pointeurs, etc. NEW
RUN mm Exécuter le programme à partir de la ligne mm ou de la ligne dont le numéro est le plus petit. RUN 55
RUN
SYSTEM Entrée dans le mode moniteur pour charger des programmes en langage machine écrits sur cassette. voir Chapitre 2
TROFF Arrêt de la fonction Trace TROFF
TRON Enclenchement de la fonction Trace TRON

Sous-commandes et touche de fonction du mode Editeur


Sous-commande/
touche de fonction
Fontion

ENTER
Fin des corrections et retour au mode Commande.
SHIFT ¬ Fin du mode Insertion; reste en mode Editeur.
n barre d'espace Avance du curseur de n positions vers la droite.
n ¬ Recul du curseur de n positions vers la gauche.
L Affichage du reste de la ligne et retour en début de ligne.
X Affichage du reste de la ligne, positionnement du curseur en fin de ligne et entrée en mode Insertion.
I Entrée en mode Insertion; tout caractère tapé est inséré à la position du curseur; sortie par SHIFT ¬
A Suppression de l'effet des corrections et retour du curseur en début de ligne.
E Fin des corrections et retour au mode Commande.
Q Suppression de l'effet des corrections et retour au mode Commande.
H Suppression du reste de la ligne et entrée en mode Insertion tapez SHIFT ­ pour en sortir.
nD Suppression de n caractères à partir de 1a position courante du curseur.
nC Remplacement des n caractères à partir de la position du curseur par les n caractères qui vont être tapés.
nSc Positionnement du curseur sur la nième occurrence du caractère c à partir de la position du curseur.
nKc Suppression des caractères entre la position du curseur et la nième occurrence du caractère c.

Instructions d'Entrée/Sortie
exp peut être une constante, une variable, un élément de tableau, une expression en général, ou une liste de ces éléments.

Instruction* Fontion Exemples

PRINT exp Afficher à l'écran la valeur de exp
Exp peut être une constante ou une expression numérique ou alphabétique, ou une liste de tels éléments.
PRINT A$
PRINT X+3
PRINT "D=";D
, Les virgules modifient un PRINT en avançant le curseur jusqu'à la zone d'impression suivante.
A la fin de exp supprime le passage à la ligne suivante.
PRINT 1,2,3,4
PRINT "l", "2",
PRINT 1,,2
; Les point-virgules modifient un PRINT en insérant un espace après une valeur numérique dans exp (mais pas après une valeur numérique). A la fin de exp supprime le passage à la ligne suivante. PRINT X;*'=REPONSE"
PRINT X;Y;Z
PRINT "REPONSE='*;
PRINT @n Modificateur de PRINT;
commence l'impression à l'adresse n de l'écran.
PRINT @540,"CENTRE"
PRINT@ N+3, X*3
TAB n Modificateur de PRINT avance le curseur jusqu'à la position n de la ligne courant (n est une expression) PRINT TAB(N)
PRINT USING
chaîne; exp
Spécificateur de format impression = exp est imprimée selon le format chaîne
(voir ci-dessous)
PRINT USING A$;X
PRINT USING "#.#"; Y+Z
INPUT
"message"; variable
Imprimer le message 's'il y en a un) et attend des données du clavier. INPUT "NOM="; A$
INPUT "VALEUR"; X
INPUT "DEUX NOMBRES"; X,Y
INPUT A,B,C,D$
PRINT #-1 Ecriture sur la cassette n°1 PRINT #-1,A.B,C,D$
INPUT #-1 Lire sur la cassette n°1 INPUT #-1,A,B,C,D$
DATA
liste valeurs
Ligne contenant des données sous forme d'une liste de valeurs DATA 22,33,11,1.2345
DATA "HENRI", 74, "JEAN", 16
READ Affecte aux variables de la liste liste variables les valeurs suivantes à partir de la valeur courante des lignes DATA READ A,A1,A2,A3
READ A$,B$,C$,D
RESTORE Repositionne le pointeur courant au début des lignes DATA. RESTORE

Spécificateurs de zone des instructions PRINT USING


Caractère numérique Fonction Exemple
# Zone numérique (un chiffre par # ). # # #
. Position du point décimal # #.# # 0
+ Impression du signe en début ou en fin de zone (signe + et signe -). +#.# # #
#.# # #+
- Impression du signe - en fin de zone si le nombre est négatif. # #.# -
** Remplacement des zéros initiaux par des astérisques **# #.#
$$ Imprime un $ à la gauche du premier chiffre significatif $$# # # # #.# #
**$ Cfr. $$ avec remplissage des positions de gauche inoccupées par des astérisques. **$# #.# #
­­­­ Format exponentiel, le premier correspondant à un zéro. #.# # #­­­­
# # #.#­­­­
.# # #­­­­

Caractère alphanumérique Fonction Exemple
! Un seul caractère !
% espaces % chaîne de n caractères où n = 2 + nombre d'espaces %%
% %

Instructions

Instruction Fonction Exemple

Définition de type
DEFDBL
liste de lettres ou d'intervalles
Définit de type double précision toutes les variables dont le nom commence par une lettre appartenant à la liste de lettres ou d'intervalles. DEFDBL J
DEFDBL X,Y,A
DEFDBL A-E, J-L, X
DEFINT
liste de lettres ou d'intervalles
Définit de type entier toutes les variables dont le nom commence par une lettre appartenant à la liste de lettres ou d'intervalles. DEFINT A
DEFINT C, G, T
DEFINT F, G-T, B
DEFSNG
liste de lettres ou d'intervalles
Définit de type simple précision toutes les variables dont le nom commence par une lettre appartenant à la liste de lettres ou d'intervalles. DEFSNG F,0
DEFSNG Z, V-X
DEFSNG A-C, I-K
DEFSTR
liste de lettres ou d'intervalles
Définit de type alpariumérique toutes les variables dont le nom commence par une lettre appartenant à la liste de lettres ou d'intervalles. DEFSTR A, B, C
DEFSTR S, V-Y
DEFSTR C-E, G-K
Assignation et allocation
CLEAR n Réinitialise les variables et réserve n bytes pour les valeurs alphanumériques. CLEAR 750
CLEAR MEM/10
CLEAR 0
DIM
tab (dim l, ... dim k)
Alloue de l'espace pour un tableau tab de k dimensions ayant successivement une taille de dim 1, ..., dim k. DIM peut déclarer plusieurs tableaux. DIM A(2.3)
DIM Al(15), A2(15)
DIM B(X+2), C(J,K)
DIM T(3,3,5)
LET variable=expression Assigne la valeur de l'expression à la variable. LET est facultatif en BASIC NIVEAU II. LET A$="HENRI"
LET B$=C$
LET A%=1#
Enchaînement des instructions
END Termine l'exécution et provoque le retour en mode commande. 99 END
STOP Arrête l'exécution et imprime le message BREAK suivi du numéro de la ligne courante.
L'utilisateur peut faire reprendre l'exécution par CONT.
100 STOP
GOTO n° ligne Provoque un branchement à la ligne n° ligne. GOTO 100
GOSUB n° ligne Provoque l'exécution de la sous routine commençant à la ligne n° ligne. GOSUB 300
RETURN Provoque une branchement à l'instruction qui suit le dernier GOSUB exécuté. RETURN
ON exp GOTO
nl 1,... nl k
L'expression exp est évaluée; si INT(exp) est égal à l'un des nombres de 1 à k, il y aura branchement vers la ligne appropriée, sinon il y aura passage à l'instruction suivante. ON K+1 GOTO 100,200,300
ON exp GOSUB
nl 1,... nl k
Même fonction que avec exécution de la sous-routine nl 1, .... nl k selon la valeur de exp. ON J GOSUB 400,500
FOR var=exp 1 TO exp 2 STEP exp 3 Ouvre une boucle FOR-NEXT. STEP est facultatif; son absence correspond à un pas de 1 (voir Chapitre 4). FOR 1=1 TO 50 STEP 1.5
FOR M%=J% TO K-1%
NEXT var Clôture une boucle FOR-NEXT. var peut être omis ou être remplacé par une liste de noms de variable (voir Chapitre 4). NEXT
NEXT I
NEXT I,J
ERROR (code) Simule l'erreur spécifiée par code (voir table des codes d'erreur). ERROR (14)
ON ERROR GOTO
n° ligne
Si une erreur survient dans la suite du programme, elle provoquera un branchement à a, routine d'erreur commençant à la ligne n° ligne. ON ERROR GOTO 999
RESUME n Retour à la ligne n après exécution d'une routine de traitement d'erreur; si n est 0 ou est absent, le retour se fait à l'instruction ayant entraîné l'erreur; si n est "NEXT", le retour se fait à l'instruction qui suit celle qui a entraîné l'erreur. RESUME
RESUME 0
RESUME 100
RESUME NEXT
RANDOM Réinitialise le générateur de nombres aléatoires. RANDOM
REM Spécifie un commentaire et fait ignorer le reste de la ligne. REM A=ALTITUDE DU POINT
Instruction conditionnelle
IF exp THEN instr 1 ELSE instr 2 exp est évaluée: si exp est VRAI, les instructions instr 1 sont exécutées puis l'exécution se poursuit à la ligne suivante (sauf si instr 1 se termine par un GOTO).

Si exp est FAUX, les instructions instr 2 sont exécutées.

IF A=0 THEN PRINT "OUI"
ELSE PRINT "NON"
Instructions graphiques
CLS Efface l'écran. CLS
RESET (x, y) Eteint le segment graphique de coordonnée horizontale x et de coordonnée verticale y. 0<=x<123 et 0<y 48 RESET (8+B,11)
SET(x,y) Allume le segment graphique de coordonnées x et y. Mêmes limites que pour RESET. SET(A*2,B+C)
Instructions spéciales
POKE adresse, valeur Range la valeur dans le byte d'adresse spécifiée. Les arguments sont exprimés sous forme décimale et 0<=valeur<255 POKE 15635,34
POKE 1+1, 3*K
OUT port, valeur Envoie la valeur au port de numéro spécifié. Les arguments sont tous deux compris entre 0 et 255. OUT 255,10
OUT I,J

Fonctions alphanumériques

Fonction* Action Exemples

ASC(chaîne) Fournit le code ASCII du premier caractère de la chaîne. ASC(B$)
ASC("H")
CHRS(exp) Fournit le caractère correspondant au code exp. (voir table des Codes). CHR$(34)
CHR$(I+1)
FRE(chaîne) Fournit la quantité de mémoire disponible pour les chaînes.
Chaîne est un argument fictif.
FRE(A$)
INKEY$ Lit le clavier et fournit une chaîne constituée du caractère correspondant à la touche frappée. Cette chaîne est vide si aucune touche n'a été frappée. INKEY$
LEN(chaîne) Fournit la longueur de la chaîne. (Zéro si celle-ci est vide). LEN(A$+B$)
LEN("LONGUEUR")
LEFT$(chaîne,n) Fournit les n premiers caractères de la chaîne. LEFT$(A$,l)
LEFT$(A$+B$,21)
MID$(chaîne,p,n) Fournit les n caractères de la chaîne commençant à la position p MID$(M$,5,2)
MID$(A$+B$,P,L-1)
RIGHT$(chaîne,n) Fournit les n derniers caractères de la chaîne. RIGHT$(NA$,7)
RIGHT$(B$+C$,N-1)
STR$(exp) Fournit la représentation en caractères de la valeur numérique de exp. STR$(1.2345)
STR$(A + 2*8)
STRING$(n,car) Fournit une chaîne de n fois le premier caractère de car. STRING$(32,"*")
STRING$(K,A$)
VAL(chaîne) Fournit la valeur numérique que représente la chaîne. VAL("1"+A$+"."+B$)
VAL("3.1416")

*Chaîne peut être une constante, une variabliou une expression.

Fonctions mathématiques*

Fonction Action Exemples

ABS(exp) Fournit la valeur absolue de exp. ABS(L*.7)
ABS(SIN(X))
ATN(exp) Fournit l'arc-tangente (en radians) de exp. ATM (2.7)
ATN (A*3)
CDBL(exp) Fournit la valeur de exp en double précision. CDBL(A)
CDBL(A+1/3#)
CINT(exp) Fournit le plus grand entier inférieur ou égal à exp. -32768 < =exp < =32768. CINT(A#+B)
COS(exp) Fournit le cosinus de exp (en radians). COS(2*A)
COS (A/57.29578)
CSNG(exp) Fournit la valeur de exp en simple précision; si exp est en double précision le chiffre le moins significatif subit un arrondi 5/4. CSNG(A#)
CSNG(.33*B#)
EXP(exp) Fournit l'exponentielle de exp, soit : eexp EXP(34.5)
EXP(A*B*C-1)
FIX(exp) Fournit la partie entière de exp (suppression des décimales). FIX(A-B)
INT(exp) Fournit le plus grand entier inférieur ou égal à exp. INT(A+B*C)
LOG(exp) Fournit le logarithme naturel (en base e) de exp. exp doit être positif. LOG (34.5)
LOG(A­B+C)
RND (0) Fournit un nombre pseudo- aléatoire entre 0.000001 et 0.999999 inclus. RND(O)
RND(exp) Fournit un nombre entier pseudo-aléatoire compris entre 1 et INT(exp) inclus.
1<=exp<32768.
RND(40)
RND(A+B)
SNG(exp) Fournit -1 si exp est négatif, 0 si exp est nul et +1 si exp est positif. SGN(A­8+3)
SGN(COS(X))
SIN(exp) Fournit le sinus de exp (en radians). SIN(A/B)
SIN(90/57.29578)
SQR(exp) Fournit la racine carrée de exp
. exp doit être positif ou nul.
SOR(A*A-B*B)
TAN(exp) Fournit la tangente de exp (en radians). TAN(X)
TAN (X*.Ol 74533)

*exp est une constante, une variable au une expression de type numérique. Sauf spécification contraire, -1.7E+38 < =exp < = 1.7E+38.

Fonctions spéciales

Fonction Actions et limites Exemples

ERL Fournit le numéro de la ligne où l'erreur courante s'est produite. ERL
ERR Si une erreur s'est produite, fournit une valeur quii vaut : 2*(code d'erreur -1)
D'où également : code d'erreur= ERR/2 + 1.
ERR/2+1
INP(port) Fournit la valeur lue au port d'entrée-sortie spécifié. Cette valeur ainsi que port sont comprises entre 0 et 255 inclus. INP(55)
MEM Fournit la quantité de mémoire non protégée et non utilisée. MEM
PEEK(adr) Fournit la valeur du byte d'adresse adresse mémoire. adr doit être une valeur d'adresse valide sous forme décimale (voir Carte de la Mémoire, Annexe D). PEEK(15370)
POINT(x,y) Teste l'allumage du segment graphique de coordonnée horizontale x et de coorionnée verticale y. Si le segment est allumé, POINT fournit la valeur VRAI (-1), sinon elle fournit la valeur FAUX (0). Les limites sont 0<=x<128 et 0<=y<48. POINT(2-A,B)
POS(0) Fournit la position du curseur dans la ligne d'écran (de 0 à 63). 0 est un argument fictif. POS(0)
USR(n) Branche vers une sous-routine en langage machine et fournit la valeur qu'elle calcule.
Voir chapitre 8.
USR(45+I)
VARPTR(var) Fournit l'adresse de la variable var ou de son descripteur. var doit être un nom de variable valide ou d'un élément de tableau. Fournit 0 si la variable n'a pas encore reçu de valeur. VARPTR(A$)
VARPTR(A(I))

Search AdmiNet : options
Copyright. ©2000 AdmiNet. All rights reserved
Designed by vb - Powered by Spirit
URL : http://dredad.org/industrie/drire/1982/partie4.html
Top of page
Feedback
(Last update : Fri, 22 Dec 2000)