Constantes, variables, expressions et opérateurs
Le GWBASIC vous permet d'utiliser des constantes, des variables, des expressions et des opérateurs, et les utiliser pour développer des programmes plus sophistiqués.
Constantes
Les constantes sont des valeurs statiques que l'interpréteur GWBASIC utilisent lors de l'exécution de votre programme. Il existe deux types de constantes : chaîne de caractères et numérique.
Une constante de chaîne de caractères est une séquence de 0 à 255 caractères alphanumériques entre guillemets doubles. Voici des exemples de constantes de chaîne de caractères :
BONJOUR $25,000.00 Nombre d'employes |
Les constantes numériques peuvent être positives ou négatives. Lorsque vous entrez une constante numérique dans GWBASIC, vous ne devez pas taper les virgules. Par exemple, si le nombre 10,000 devait être saisi en tant que constante, il serait saisi sous la forme 10000. Il existe cinq types de constantes numériques : nombre entier, nombre à virgule fixe, nombre à virgule flottante, nombre hexadécimal et nombre octal :
Constante | Description |
---|---|
Entier | Nombres entiers entre -32768 et +32767. Ils ne contiennent pas de points décimaux. |
Virgule fixe | Nombres réels positifs ou négatifs contenant des décimales. |
Constantes à virgule flottante | Nombres positifs ou négatifs représentés sous forme exponentielle (similaire à la notation scientifique). Une constante à virgule flottante est constituée d'un entier
éventuellement signé ou d'un nombre à virgule fixe (la mantisse), suivi de la lettre E et d'un entier éventuellement signé (l'exposant). L'intervalle autorisée pour les
constantes à virgule flottante est de 3,0×10-39 à 1,7×1038. Par exemple : 235.988E-7=.0000235988 2359E6=2359000000 |
Hexadécimal | Nombres hexadécimaux avec préfixe &H. Par exemple : &H76 &H32F |
Octal | Nombres octaux avec le préfixe &O ou &. Par exemple : &O347 &1234 |
Format réel de simple et double précision pour les constantes numériques
Les constantes numériques peuvent être des entiers, des nombres réels de simple précision ou de double précision. Les constantes entières sont entreposées sous forme de nombres entiers uniquement. Les constantes numériques simple précision sont entreposées avec 7 chiffres (bien que seulement 6 puissent être précis). Les constantes numériques à double précision sont entreposées avec une précision de 17 chiffres et affichées avec jusqu'à 16 chiffres.
Une constante de simple précision est une constante numérique avec soit :
- Sept chiffres ou moins
- Format exponentielle utilisant E
- Un point d'exclamation à la fin (!)
Une constante de double précision est une constante numérique avec soit :
- Huit chiffres ou plus
- Format exponentielle utilisant D
- Un signe dièse à la fin (#)
Voici des exemples de constantes numériques de simple et de double précision :
Constantes de simple précision | Constantes de double précision |
---|---|
46.8 | 345692811 |
-1.09E-06 | -1.09432D-06 |
3489.0 | 3490.0# |
22.5! | 7654321.1234 |
Variables
Les variables sont les noms que vous avez choisis pour représenter les valeurs utilisées dans un programme GW-BASIC. La valeur d'une variable peut être attribuée spécifiquement ou peut être le résultat de calculs dans votre programme. Si aucune valeur n'est attribuée à une variable, le GW-BASIC suppose que la valeur de la variable est zéro.
Noms et déclarations des variables
Les noms de variables GWBASIC peuvent avoir n'importe quelle longueur ; jusqu'à 40 caractères sont significatifs. Les caractères autorisés dans un nom de variable sont les lettres, les chiffres et le point décimal. Le premier caractère du nom de la variable doit être une lettre. Les caractères spéciaux de déclaration de type sont également autorisés.
Les mots réservés (tous les mots utilisés comme commandes, instructions, fonctions et opérateurs GWBASIC) ne peuvent pas être utilisés comme noms de variable. Cependant, si le mot réservé est intégré dans le nom de la variable, il sera autorisé.
Les variables peuvent représenter des valeurs numériques ou des chaînes de caractères.
Caractères de déclaration de type
Les caractères de déclaration de type indiquent ce qu'une variable représente. Les caractères de déclaration de type suivants sont reconnus :
Caractère | Type de variables |
---|---|
$ | Variable de chaîne de caractères |
% | Variable entière |
! | Variable réel de simple précision |
# | Variable réel de double précision |
Voici des exemples de noms de variables pour chaque type :
Type de variables | Nom de l'échantillon |
---|---|
Variable de chaîne de caractères | N$ |
Variable entière | LIMIT% |
Variable simple précision | MINIMUM! |
Variable de double précision | Pl# |
Le type par défaut d'un nom de variable numérique est de simple précision. La double précision, bien que très précise, utilise plus d'espace mémoire et plus de temps de calcul. La simple précision est suffisamment précise pour la plupart des applications. Cependant, le septième chiffre significatif (s'il est affiché) ne sera pas toujours exact. Vous devez être très prudent lorsque vous effectuez des conversions entre des variables entières, simple précision et double précision.
La variable suivante est une valeur de simple précision par défaut :
ABC |
Les variables commençant par FN sont supposées être des appels à une fonction définie par l'utilisateur.
Les instructions DEFINT, DEFSTR, DEFSNG et DEFDBL de GWBASIC peuvent être incluses dans un programme pour déclarer les types de valeurs pour certains noms de variables.
Variables de tableau
Un tableau est un groupe ou un tableau de valeurs référencées par le même nom de variable. Chaque élément d'un tableau est référencé par une variable de tableau étant un entier en indice ou une expression d'entier. L'indice est entre parenthèses. Un nom de variable de tableau a autant d'indices qu'il y a de dimensions dans le tableau.
Par exemple :
- V(10)
fait référence à une valeur dans un tableau unidimensionnel, tandis que :
- T(1,4)
fait référence à une valeur dans un tableau à deux dimensions.
Le nombre maximal de dimensions pour un tableau dans GWBASIC est de 255. Le nombre maximal d'éléments par dimension est de 32767.
Si vous utilisez un tableau avec une valeur d'indice supérieure à 10, vous devez utiliser l'instruction DIM. Si un indice supérieur au maximum spécifié est utilisé, vous recevrez le message d'erreur :
Subscript out of range |
Les tableaux multidimensionnels (plusieurs indices séparés par des virgules) sont utiles pour entreposer des données tabulaires. Par exemple, A(1,4) peut être utilisé pour représenter un tableau à deux lignes et cinq colonnes tel que le suivant :
Colonne | 0 | ||||
1 | 2 | 3 | 4 | ||
Ligne 0 | 10 | 20 | 30 | 40 | 50 |
Ligne 1 | 60 | 70 | 80 | 90 | 100 |
Dans cet exemple, élément A(1,2)=80 et A(0,3)=40. Les lignes et les colonnes commencent par 0 et non par 1, sauf indication contraire.
Espace mémoire requis pour l'entreposage variable
Les différents types de variables nécessitent différentes quantités d'entreposage. Selon la capacité d'entreposage et de mémoire de votre ordinateur et la taille du programme que vous développez, ces considérations peuvent être importantes.
Variable | Octets d'entreposage requis |
---|---|
Entier | 2 |
Simple précision | 4 |
Double précision | 8 |
Tableaux | Octets d'entreposage requis |
Entier | 2 par élément |
Simple précision | 4 par élément |
Double précision | 8 par élément |
Chaînes de caractères : Surdébit de trois octets, plus le contenu actuel de la chaîne de caractères sous la forme d'un octet pour chaque caractère de la chaîne de caractères. Les guillemets marquant le début et la fin de chaque chaîne de caractères ne sont pas comptés.
Conversion des types
Si nécessaire, le GWBASIC convertit une constante numérique d'un type de variable à un autre, selon les règles suivantes :
- Si une constante numérique d'un type est égale à une variable numérique d'un type différent, le nombre est entreposé sous le type déclaré dans le nom de la variable. Par exemple :
- 10 A% = 23.42
- 20 PRINT A%
- RUN
- Lors d'une évaluation d'expression, tous les opérandes d'une opération arithmétique ou relationnelle sont convertis au même degré de précision ; c'est-à-dire
celle de l'opérande le plus précis. Aussi, le résultat d'une opération arithmétique est ramené à ce degré de précision. Par exemple :
- 10 D# = 6#/7
- 20 PRINT D#
- RUN
on obtiendra :
.8571428571428571L'arithmétique est effectuée en double précision et le résultat est renvoyé en D# sous la forme d'une valeur en double précision.
- 10 D = 6#/7
- 20 PRINT D
- RUN
on obtiendra :
.8571429L'arithmétique est effectuée en double précision et le résultat est renvoyé à D (variable simple précision) arrondi et affiché sous la forme d'une valeur simple précision.
- Les opérateurs logiques convertissent leurs opérandes en entiers et renvoient un résultat entier. Les opérandes doivent être compris entre -32768 et 32767, sinon une erreur :
- Lorsqu'une valeur à virgule flottante est convertie en nombre entier, la partie fractionnaire est arrondie. Par exemple :
- 10 C% = 55.88
- 20 PRINT C%
- RUN
- 10 A = 2.04
- 20 B# = A
- 30 PRINT A;B#
- RUN
on obtiendra :
23Si une variable de chaîne à caractères est définie comme égale à une valeur numérique ou vice versa, une erreur :
Type Mismatch |
se produit.
Overflow |
se produit.
on obtiendra :
56Si une variable à double précision se voit attribuer une valeur à simple précision, seuls les sept premiers chiffres (arrondis) du nombre converti sont valides. En effet, seuls sept chiffres de précision ont été fournis avec la valeur simple précision. La valeur absolue de la différence entre le nombre à double précision affiché et la valeur à simple précision d'origine est inférieure à 6,3E-8 fois la valeur à simple précision d'origine. Par exemple :
on obtiendra :
2.04 2.039999961853027Expressions et opérateurs
Une expression peut être simplement une chaîne de caractères ou une constante numérique, une variable, ou elle peut combiner des constantes et des variables avec des opérateurs pour produire une valeur unique.
Les opérateurs effectuent des opérations mathématiques ou logiques sur les valeurs. Les opérateurs fournis par GWBASIC est divisés en quatre catégories :
- Arithmétique
- Relationnel
- Logique
- Fonctionnel
Opérateurs arithmétiques
Voici les opérateurs arithmétiques reconnus par GWBASIC. Ils apparaissent par ordre de priorité :
Opérateur | Opération |
---|---|
^ | Exponentiation |
- | Négation |
* | Multiplication |
/ | Division en virgule flottante |
+ | Addition |
- | Soustraction |
Les opérations entre parenthèses sont effectuées en premier. À l'intérieur des parenthèses, l'ordre de priorité habituel est maintenu. Voici des exemples d'expressions algébriques et leurs équivalents GWBASIC :
Expression algébrique | Expression de BASIC |
---|---|
X-Z/Y | (X-Y)/Z |
XY/Z | X*Y/Z |
X+Y/Z | (X+Y)/Z |
(X2)Y | (X^2)^Y |
XYZ | X^(Y^Z) |
X(-Y) | X*(-Y) |
Deux opérateurs consécutifs doivent être séparés par des parenthèses.
Division entière et arithmétique du module
Deux opérateurs arithmétiques supplémentaires sont disponibles : la division entière et l'arithmétique du module.
La division entière est indiquée par la barre oblique inverse (\). Les opérandes sont arrondis à des nombres entiers (doit être compris entre -32768 et 32767) avant que la division ne soit effectuée, et le quotient est tronqué à un nombre entier.
Voici des exemples de division entière :
- 10\4 = 2
- 25.68\6.99 = 3
Dans l'ordre d'apparition dans GWBASIC, la division entière sera effectuée juste après la division en virgule flottante.
L'arithmétique du module est désignée par l'opérateur MOD. Il donne la valeur entière étant le reste d'une division entière.
Voici des exemples d'arithmétique de module :
10.4 MOD 4 = 2 | (10/4=2 avec un reste 2) |
25.68 MOD 6.99 = 5 | (26/7=3 avec un reste 5) |
Dans l'ordre d'apparition dans GWBASIC, l'arithmétique du module suit la division entière. Les fonctions INT et FIX, sont également utiles dans l'arithmétique de module.
Débordement et division par zéro
Si, lors de l'évaluation d'une expression, une division par zéro est rencontrée, le message d'erreur :
Division by zero |
apparaît, l'infini machine avec le signe du numérateur est fourni comme résultat de la division, et l'exécution continue.
Si l'évaluation d'une exponentiation entraîne l'élévation de zéro à une puissance négative, le message d'erreur
Division by zero |
apparaît, l'infini positif de la machine est fourni comme résultat de l'exponentiation et l'exécution se poursuit.
Si un débordement se produit, le message d'erreur
Overflow |
apparaît, l'infini machine avec le signe algébriquement correct est fourni comme résultat et l'exécution continue. Les erreurs se produisant en cas de débordement et de division par zéro ne seront pas interceptées par la fonction d'interception d'erreurs.
Opérateurs relationnels
Les opérateurs relationnels vous permettent de comparer deux valeurs. Le résultat de la comparaison est soit vrai (-1) soit faux (0). Ce résultat peut ensuite être utilisé pour prendre une décision concernant le déroulement du programme. Le tableau suivant affiche les opérateurs relationnels :
Opérateur | Relation testée | Expression |
---|---|---|
= | Égalité | X=Y |
<> | Inégalité | X<>Y |
< | Moins que | X<Y |
> | Plus grand que | X>Y |
<= | Inférieur ou égal à | X<=Y |
>= | Plus grand ou égal à | X>=Y |
Le signe égal est également utilisé pour attribuer une valeur à une variable. Voir l'instruction LET.
Lorsque des opérateurs arithmétiques et relationnels sont combinés dans une même expression, l'arithmétique est toujours effectuée en premier :
- X+Y < (T-1)/Z
Cette expression est vraie si la valeur de X plus Y est inférieure à la valeur de T-1 divisée par Z.
Opérateurs logiques
Les opérateurs logiques effectuent des tests sur plusieurs relations, des manipulations de bits ou des opérations booléennes. L'opérateur logique renvoie un résultat au niveau du bit étant soit vrai (non nul) soit faux (zéro). Dans une expression, les opérations logiques sont effectuées après les opérations arithmétiques et relationnelles. Le résultat d'une opération logique est déterminé comme indiqué dans le tableau suivant. Les opérateurs sont classés par ordre de priorité.
Résultats renvoyés par les opérations logiques :
Opération | Valeur | Valeur | Résultat |
---|---|---|---|
NOT | X | NOT X | |
V | F | ||
F | V | ||
AND | X | Y | X AND Y |
V | V | V | |
V | F | F | |
F | V | F | |
F | F | F | |
OR | X | Y | X OR Y |
V | V | V | |
V | F | V | |
F | V | V | |
F | F | F | |
XOR | X | Y | X XOR Y |
V | V | F | |
V | F | V | |
F | V | V | |
F | F | F | |
EQV | X | Y | X EQV Y |
V | V | V | |
V | F | F | |
F | V | F | |
F | F | V | |
IMP | X | Y | X IMP Y |
V | V | V | |
T | F | F | |
F | V | V | |
F | F | V |
Tout comme les opérateurs relationnels peuvent être utilisés pour prendre des décisions concernant le déroulement du programme, les opérateurs logiques peuvent connecter deux relations ou plus et renvoyer une valeur vraie ou fausse à utiliser dans une décision. Par exemple :
Les opérateurs logiques convertissent leurs opérandes en entiers 16 bits, signés, complément à deux dans la plage de -32768 à +32767 (si les opérandes ne sont pas dans cette intervalle, une erreur se produit). Si les deux opérandes sont fournis sous la forme 0 ou -1, les opérateurs logiques renvoient 0 ou -1. L'opération donnée est effectuée sur ces entiers en bits ; c'est-à-dire que chaque bit du résultat est déterminé par les bits correspondants dans les deux opérandes.
Ainsi, il est possible d'utiliser des opérateurs logiques pour tester des octets pour une configuration binaire particulière. Par exemple, l'opérateur AND peut être utilisé pour masquer tous les bits sauf un d'un octet d'état au niveau d'un port d'entrée/sortie de machine. L'opérateur OR peut être utilisé pour fusionner deux octets afin de créer une valeur binaire particulière. Les exemples suivants illustrent le fonctionnement des opérateurs logiques :
Exemple | Explication |
---|---|
63 AND 16=16 | 63 = binaire 111111 et 16 = binaire 10000, donc 63 ET 16 = 16 |
15 AND 14=14 | 15 = binaire 1111 et 14 = binaire 1110, donc 15 ET 14 = 14 (binaire 1110) |
-1 AND 8=8 | -1 = binaire 1111111111111111 et 8 = binaire 1000, donc -1 ET 8 = 8 |
4 OR 2=6 | 4 = binaire 100 et 2 = binaire 10, donc 4 OU 2 = 6 (binaire 110) |
10 OR 10=10 | 10 = binaire 1010, donc 1010 OU 1010 =1010 (10) |
-1 OR -2=-1 | -1 = binaire 1111111111111111 et -2 = binaire 1111111111111110, donc -1 OU -2 = -1. Le complément binaire de 16 zéros est de 16 uns, étant la représentation du complément à deux de -1. |
NOT X=-(X+1) | Le complément à deux de tout entier est le complément de bit plus un. |
Opérateurs fonctionnels
Une fonction est utilisée dans une expression pour appeler une opération prédéterminée devant être effectuée sur un opérande. Le GWBASIC a des fonctions intrinsèques résidant dans le système, telles que SQR (racine carrée) ou SIN (sinus).
Le GWBASIC permet également des fonctions définies par l'utilisateur écrites par le programmeur. Voir l'instruction DEF FN.
Opérateurs de chaîne de caractères
Pour comparer des chaînes de caractères, utilisez les mêmes opérateurs relationnels que ceux utilisés avec les nombres :
Opérateur | Description |
---|---|
= | Égal à |
<> | Inégale |
< | Moins que |
> | Plus grand que |
<= | Inférieur ou égal à |
>= | Plus grand ou égal à |
L'interpréteur GWBASIC compare les chaînes de caractères en prenant un caractère à la fois de chaque chaîne de caractères et en comparant leurs codes ASCII. Si les codes ASCII de chaque chaîne sont identiques, les chaînes de caractères sont égales. Si les codes ASCII diffèrent, le numéro de code inférieur précédera le code supérieur. Si l'interpréteur atteint la fin d'une chaîne lors de la comparaison de chaînes de caractères, la chaîne de caractères la plus courte est dite plus petite, à condition que les deux chaînes de caractères soient identiques jusqu'à ce point. Les blancs de début et de fin sont significatifs.
Par exemple :
- "AA" < "AB"
- "FILENAME" = "FILENAME"
- "X&" > "X#"
- "CL " > "CL"
- "kg" > "KG"
- "SMYTH" < "SMYTHE"
- B$ < "9/12/78" où B$ = "8/12/78"
Les comparaisons de chaînes de caractères peuvent également être utilisées pour tester des valeurs de chaîne de caractères ou pour classer les chaînes de caractères par ordre alphabétique. Toutes les constantes de chaîne de caractères utilisées dans les expressions de comparaison doivent être placées entre guillemets.
Les chaînes de caractères peuvent être concaténées à l'aide du signe plus (+). Par exemple :
on obtiendra :
FILENAMENEW FILENAME