Programmation avec ST BASIC
Lorsque vous écrivez ou utilisez un programme ST BASIC, vous demandez à l'ordinateur d'effectuer une tâche. Le ST BASIC est un langage interprétatif. Vous écrivez le programme en ST BASIC ; ST BASIC traduit ensuite vos instructions en code machine, le langage de programmation compris par l'ordinateur Atari ST.
Commandes, énoncés et fonctions
Le langage de programmation ST BASIC utilise trois types de mots réservés (ou mots clefs) : commandes, instructions et fonctions.
Chaque mot réservé a une signification spécifique dans le langage de programmation ST BASIC. Il ne peut être utilisé que pour exprimer ce sens. Vous ne pouvez pas utiliser un mot réservé comme étiquette, comme nom pour une variable de programme ou à toute autre fin dans un programme.
Les commandes
Une commande indique au programme ST BASIC d'exécuter une fonction (c'est-à-dire de charger un fichier programme ou de modifier un programme en mémoire) et vous permet de contrôler ST BASIC pendant que vous écrivez ou déboguez votre programme. Cependant, vous ne pouvez pas utiliser une commande dans un programme ST BASIC. Par exemple, vous ne pouvez pas utiliser la commande LOAD pour charger un autre programme en mémoire pendant qu'un programme ST BASIC est en cours d'exécution.
Les instructions
Les instructions indiquent à l'ordinateur quelle fonction vous voulez que votre programme exécute. Le ST BASIC utilise trois types d'instructions : les instructions de programme, les instructions exécutables et les instructions non exécutables.
Une instruction de programme oblige ST BASIC à faire quelque chose pendant qu'un programme est en cours d'exécution. L'instruction CHAIN, par exemple, demande à ST BASIC de mettre un autre programme en mémoire pendant que le programme en cours est en cours d'exécution.
Les instructions exécutables (c'est-à-dire PRINT, INPUT et GOTO) effectuent des calculs. Vous pouvez utiliser des instructions exécutables dans un programme ou les entrer directement à partir du clavier dans la fenêtre de commande.
Une instruction faite directement au clavier est une instruction directe (faite en «mode direct»). Une instruction exécutée dans un programme est une instruction indirecte (faite en «mode indirect»).
Les instructions non exécutables ne sont pas instructives. Par exemple, l'instruction REM (abréviation de REMark) indique à ST BASIC d'ignorer le reste d'une ligne de programme plutôt que d'exécuter une nouvelle fonction. Les instructions non exécutables ne sont jamais utilisées en mode de programmation directe.
Les fonctions
Les fonctions attribuent des valeurs aux variables. Une variable est le nom que vous attribuez à une valeur changeant à la suite de calculs effectués pendant l'exécution du programme. Si vous vouliez suivre un total dont la valeur change au fur et à mesure que vous y ajoutez des nombres dans un programme, vous pouvez attribuer le nom de variable TOTAL à cette valeur modifiable.
La fonction INT, par exemple, renvoie le nombre entier ou la valeur entière d'un calcul. L'instruction de programme, MYSHARE=INT(5/2), renvoie le nombre 2 car 2 va deux fois dans 5 avec une fraction restante. La variable MYSHARE prend la valeur 2.
Les fonctions doivent être utilisées dans une phrase ST BASIC complète. Par exemple, INT(5/2) en lui-même n'a aucune signification. Utilisé dans une phrase complète, cependant, MYSHARE=INT(5/2) signifie «MYSHARE est égal au nombre entier obtenu en divisant 5 par 2».
En ST BASIC, vous déclarez une variable simplement en l'utilisant avec une fonction ou une instruction. Vous pouvez utiliser n'importe quel mot comme nom de variable tant qu'il commence par une lettre et qu'il ne s'agit pas d'un mot réservé ST BASIC. MYSHARE, dans l'exemple de programme, est une variable car sa valeur peut être amenée à changer ou à varier au sein d'un programme.
Vous pouvez utiliser les fonctions dans les programmes ou les saisir directement à partir du clavier.
Entrée et sortie (E/S)
L'entrée est l'information que vous entrez dans l'ordinateur. La sortie est l'information que l'ordinateur vous envoie. L'entrée est entrée à partir d'un certain nombre de sources, y compris le clavier, l'unité de disque, le modem ou le port MIDI. La sortie est généralement envoyée au moniteur vidéo ou à une imprimante.
L'instruction INPUT prend l'entrée du clavier ; l'instruction PRINT affiche des caractères sur le moniteur ; et l'instruction LPRINT imprime des caractères sur une imprimante.
Entrez ce programme :
Notez la ponctuation de l'instruction PRINT. La ligne 20 a un point-virgule. La ligne 10 ne le fait pas. Lorsque vous exécutez cet exemple de programme, les mots entre les guillemets de la ligne 10 sont imprimés sur une ligne, suivis d'un saut de ligne et d'un retour chariot. La ligne 20 affiche les mots entre guillemets car le point-virgule empêche l'imprimante d'aller à la ligne suivante.
Remarquez également le point d'interrogation après "QUEL EST VOTRE NOM". C'est dans la fenêtre Output, mais pas dans le programme. INPUT affiche le point d'interrogation dans la fenêtre Output comme une invite et attend une entrée.
INPUT doit faire référence à une variable. Dans le programme, NAMES est utilisé comme variable de chaîne de caractères. Une variable de chaîne de caractères est une série de caractères n'étant pas interprétée comme un nombre dans les calculs. Mettre un $ après un nom de variable le désigne comme une variable de chaîne de caractères.
La ligne 40 montre la polyvalence de l'instruction PRINT. Tout d'abord, la chaîne de caractères entre guillemets est affichée. Ensuite, la variable de chaîne de caractères NAMES s'affiche sur la même ligne (à cause du point-virgule). Et puis la dernière chaîne de caractères entre guillemets est affichée. Le ST BASIC place un retour chariot et un saut de ligne à la fin de la ligne du programme car il n'y a pas de point-virgule après la dernière chaîne de caractères.
Les chaînes de caractères entre guillemets sont appelées constantes de chaîne de caractères car elles ne peuvent pas être modifiées par l'instruction INPUT.
L'instruction GOTOXY vous permet d'afficher n'importe où dans la fenêtre de sortie. La fenêtre de sortie peut contenir 24 lignes de texte, chacune pouvant contenir jusqu'à 80 caractères. Si vous considérez que la colonne d'affichage la plus à gauche est la colonne 0 et que la ligne du haut est la ligne 0, vous pouvez spécifier n'importe quelle position d'affichage dans la fenêtre avec deux nombres. Par exemple, 0,0 signifie la colonne 0 de la ligne 0 ; 5,8 signifie la colonne 5 de la ligne 8, et ainsi de suite.
Entrez ce programme :
Les deux programmes précédents montrent comment les instructions PRINT, INPUT et GOTOXY sont utilisées. Vous apprendrez des variantes de PRINT et INPUT dans des exemples de programmation plus loin dans cette page.
Instruction DATA
Lorsque vous souhaitez mettre différentes valeurs dans une variable, utilisez une instruction DATA.
Entrez ce programme :
Le programme affiche les nombres dans le même ordre qu'ils apparaissent dans l'instruction DATA. Chaque instruction READ place une valeur DATA dans la variable NUMBER. Puisque NUMBER n'a pas de $ à la fin, c'est une variable numérique, pas une variable de chaîne de caractères.
Rappelez-vous qu'une variable est le nom donné à une information pouvant changer pendant le fonctionnement d'un programme.
Les instructions DATA peuvent mélanger des chaînes de caractères et des nombres. Modifiez le programme précédent comme indiqué, puis exécutez le programme :
Remarquez comment la virgule dans la ligne PRINT fait tabuler SCORE. Si vous avez une imprimante, vous pouvez diriger la sortie vers celle-ci à partir du programme en remplaçant PRINT par LPRINT.
L'instruction RESTORE vous permet d'utiliser une liste DATA plusieurs fois dans un programme. Sans l'instruction RESTORE, le programme utiliserait tous les éléments de l'instruction DATA et le message d'erreur «Out of data» apparaîtrait. Les messages d'erreur sont des messages informatiques vous informant que quelque chose s'est mal passé pendant que le programme est en cours d'exécution.
Effectuez la modification suivante à la ligne 100 du programme :
Le programme continuera à afficher jusqu'à ce que vous appuyiez sur Control+G.
Contrôle du programme
Votre ordinateur continuera un calcul jusqu'à ce que vous lui demandiez de s'arrêter. Dans l'exemple de programmation précédent, votre ordinateur aurait pu lire et afficher un nombre infini de noms et de partitions. Cependant, vous vous fatigueriez de taper les lignes de données suivantes encore et encore :
Vous pouvez utiliser une technique de programmation appelée boucle pour éviter les répétitions fastidieuses de saisie de données. L'instruction GOTO que vous avez ajoutée au programme précédent est un exemple de boucle.
Boucles
Une boucle est un segment de programme qui se répète. Entrez le programme court suivant :
Ceci est un exemple de boucle infinie sans condition de sortie. La plupart des boucles ont des conditions de sortie intégrées afin qu'elles puissent être contrôlées.
Appuyez sur Control+G pour arrêter la boucle.
Boucles FOR...NEXT
La boucle FOR...NEXT permet de répéter un segment de programme un nombre de fois défini. Regardez l'exemple suivant :
Les instructions des lignes 20 et 30 sont la partie en boucle du programme. Les lignes 10 et 40 définissent les conditions et les limites de la boucle. Lorsque ST BASIC voit l'instruction FOR, il définit la variable COUNT sur une valeur de départ, dans ce cas, 1. Le ST BASIC note également que la valeur maximale de COUNT est 4.
Après avoir exécuté les lignes 20 et 30, le ST BASIC rencontre l'instruction NEXT à la ligne 40. Le ST BASIC vérifie si la valeur de COUNT est égale ou supérieure au maximum donné dans l'instruction FOR. Si COUNT est inférieur à la valeur maximale, le ST BASIC ajoute 1 à COUNT et passe à la ligne 20.
Lorsque COUNT est égal ou supérieur au maximum donné, le ST BASIC passe à l'instruction après NEXT.
Les boucles FOR...NEXT sont extrêmement polyvalentes. Vous pouvez utiliser n'importe quel nom de variable numérique dans l'instruction FOR et n'importe quel nombre valide pour définir les limites inférieure et supérieure de la boucle. Vous pouvez également indiquer à ST BASIC d'ajouter un nombre autre que 1 à la variable à chaque passage dans la boucle. Les exemples suivants sont des instructions FOR légitimes :
Le dernier exemple indique à ST BASIC d'ajouter un nombre autre que 1 à la variable.
L'exemple suivant indique à ST BASIC de compter à rebours :
- FOR COUNT=10 TO 0 STEP -1
Limites de variables
Vous pouvez utiliser une variable pour définir la limite de boucle. Cela vous permet de modifier les données de votre programme sans modifier l'instruction FOR. Le programme suivant montre comment rendre la boucle FOR...NEXT plus flexible.
Éditez le programme comme suit :
La première valeur de l'instruction DATA 5, est le nombre de paires de nom et de SCORE dans la liste DATA. Le ST BASIC affecte la première valeur de l'instruction DATA à la variable MAXIMUM. Ensuite, il passe par la boucle FOR...NEXT.
Boucles WHILE...WEND
Entrez ce programme :
Le programme illustre le fonctionnement d'une boucle WHILE...WEND. Lorsque ST BASIC voit l'instruction WHILE, il vérifie si la condition d'entrée indiquée est vraie.
Dans le programme, la condition d'entrée est que NAME$ n'est pas égal à STOP. (Les symboles < et > signifient "inférieur à" et "supérieur à". Utilisés ensemble, ils signifient "différent de".) Tant que la condition d'entrée est vraie, ST BASIC exécute les instructions entre WHILE et WEND. Lorsque la condition d'entrée n'est plus vraie et que NAME$ est égal à STOP, le ST BASIC passe à l'instruction suivante après WEND. Notez que WHILE nécessite une valeur à vérifier, donc le programme lit NAME$ et SCORE avant d'entrer dans la boucle (à la ligne 20) ainsi qu'à l'intérieur de la boucle (à la ligne 40).
Remarque : Une différence importante entre WHILE et FOR est que WHILE vérifie les conditions avant d'exécuter une boucle et FOR vérifie les conditions après l'avoir exécutée.
Boucles conditionnelles
Vous pouvez rendre votre boucle conditionnelle en utilisant les instructions IF...THEN et GOTO.
Les instructions IF...THEN sont des instructions conditionnelles. Si une condition est remplie, alors le ST BASIC effectuera une tâche désignée.
Entrez ce programme :
Ajouter ELSE donne au programme plus de flexibilité. Éditez le programme comme suit :
GOTO dirige ST BASIC vers une ligne de programme. En utilisant IF...THEN et GOTO, vous pouvez faire une boucle. Entrez ce programme :
Ce programme fonctionne exactement comme le programme que vous avez écrit pour démontrer WHILE...WEND.
Opérateurs logiques
La logique est la mécanique de la prise de décision valide. Les déclarations logiques dans les programmes vous permettent de tirer des conclusions valables à partir d'un ensemble de prémisses. Vous pouvez effectuer une logique formelle en utilisant les termes AND, OR et NOT.
AND
AND teste la condition que tous ses termes soient vrais. Par exemple :
Exécutez ce programme et il affichera PAS BRILLIANT car l'un des paramètres, 3+2=6, n'est pas vrai. Changez le paramètre en 3+2=5, et le programme affichera BRILLIANT.
Vous pouvez enchaîner plus de deux paramètres avec AND :
Ce programme affichera PAS BRILLANT. Remplacez A$ par BONJOUR et le programme affichera BRILLIANT.
OR
OR teste la condition selon laquelle l'un de ses termes est vrai. Par exemple :
Si vous exécutez ce programme, il affichera BRILLIANT car l'un des paramètre, 2+2=4, est vrai. Changez le paramètre en 2+2=5, et le programme affichera PAS BRILLANT.
Vous pouvez enchaîner plus de deux paramètres avec OR. Par exemple :
Ce programme affichera PAS BRILLANT. Changez A$ en "BONJOUR" et il affichera BRILLIANT.
NOT
NOT annule les déclarations logiques. Par exemple :
Parce qu'il n'est pas vrai que A$="BONJOUR", l'énoncé NOT A$="BONJOUR" est vrai. Le programme affiche BRILLIANT. Examinez attentivement ce paramètre de programme et exécutez-le pour vous assurer qu'il est clair.
IMP
IMP est l'abréviation d'implication. IMP vérifie la validité des conclusions tirées des prémisses.
IMP s'assure que vous ne tirez pas de fausses conclusions à partir de vraies prémisses. Vous pouvez tirer de vraies conclusions à partir de vraies prémisses, de fausses conclusions à partir de fausses prémisses ou de vraies conclusions à partir de fausses prémisses. Par exemple :
- 10 IF 2+2=4 IMP 3+3=6 THEN PRINT "VRAI IMPLICATION" ELSE PRINT "FAUSSE IMPLICATION"
- 20 IF 2+2=3 IMP 3+3=7 THEN PRINT "VRAI IMPLICATION" ELSE PRINT "FAUSSE IMPLICATION"
- 30 IF 2+2=3 IMP 3+3=6 THEN PRINT "VRAI IMPLICATION" ELSE PRINT "FAUSSE IMPLICATION"
- 40 IF 2+2=4 IMP 3+3=7 THEN PRINT "VRAI IMPLICATION" ELSE PRINT "FAUSSE IMPLICATION"
Ce programme affichera :
VRAI IMPLICATIONVRAI IMPLICATION
VRAI IMPLICATION
FAUSSE IMPLICATION
Le ST BASIC peut également effectuer des opérations logiques sur les bits d'un octet. Les bits, abréviation de chiffres binaires, sont les blocs de construction logiques utilisés pour représenter les lettres et les chiffres dans votre ordinateur. Chaque bit représente un 1 ou un 0 ; 8 bits forment un octet. Un octet est un "mot" informatique - la quantité d'informations nécessaire pour exprimer un nombre entier de 1 à 255 ou un caractère alphabétique.
ON...GOTO
L'instruction ON...GOTO vous permet d'exécuter différentes parties d'un programme en fonction de la valeur d'une variable.
Entrez ce programme :
- 10 CLEARW 2 : REM JEU DE CHOISIR UN PRIX
- 20 INPUT "ENTREZ UN CHIFFRE ENTRE 1 ET 5 POUR VOIR QU'IL VOUS EST MINIMUM !", PRIZE
- 30 ON PRIZE GOTO 50, 60, 70, 80, 90
- 40 PRINT "CORRESPOND A MES LEVRES..." GOTO 10
- 50 PRINT "UNE MAISON ET";
- 60 PRINT "UNE VOITURE ET";
- 70 PRINT "DES VACANCES ET";
- 80 PRINT "UNE TELEVISION ET";
- 90 PRINT "UN BATON DE CHOCOLAT"
- 100 INPUT "VOULEZ-VOUS REESSAYER (O/N)"; ANSWERS
- 110 IF ANSWERS="O" THEN GOTO 20
- 120 IF ANSWER$="N" THEN END
- 130 GOTO 100
Puisqu'il y a cinq numéros de ligne après l'instruction ON...GOTO, les numéros de 1 à 5 enverront l'exécution du programme à différentes lignes. Tout nombre en dehors de cet intervalle permet à ST BASIC d'aller à la ligne après l'instruction ON...GOTO.
Vous pouvez mettre les numéros de ligne GOTO dans n'importe quel ordre et ils seront sélectionnés dans cet ordre.
Remplacez la ligne 30 par :
- 30 ON PRIZE GOTO 90, 80, 70, 60, 50
Cet exemple de programme illustre quelques nouvelles techniques de programmation.
La ligne 10 contient une instruction de remarque. REM indique à ST BASIC d'ignorer le reste de la ligne. Les lignes REM vous permettent de mettre des commentaires dans un programme pour aider à clarifier ce que fait le programme.
Les lignes 20 et 100 contiennent des instructions INPUT avec des prompts affectées. Rappelez-vous, vous pouvez remplacer le prompt ? avec votre propre prompt. Ces lignes illustrent deux variantes de l'instruction INPUT.
La virgule après la chaîne de caractères de prompt à la ligne 20 indique à ST BASIC d'afficher votre prompt sans espace ni point d'interrogation après celle-ci.
À la ligne 100, le point-virgule indique à ST BASIC d'afficher un point d'interrogation et un espace après votre prompt.
Ces signes de ponctuation vous permettent d'indiquer des instructions ou des questions dans votre programme.
GOSUB...RETURN
L'instruction GOSUB...RETURN vous permet d'utiliser une partie d'un programme, puis de revenir au déroulement normal du programme sans avoir à vous préoccuper des instructions GOTO. Entrez ce programme :
Lorsque ST BASIC voit l'instruction GOSUB, il accède à la ligne de programme spécifiée. Ceci est similaire à GOTO, mais ST BASIC se souvient de l'endroit où l'instruction GOSUB s'est produite. Lorsque ST BASIC voit l'instruction RETURN, il revient à l'instruction suivant immédiatement GOSUB.
Un segment de programme se terminant par RETURN est appelé un sous-programme.
L'exemple précédent montre qu'il n'est pas important où l'instruction GOSUB envoie le programme ST BASIC. Dès que ST BASIC rencontre RETURN, il revient au programme principal. Dans les limites de la mémoire disponible, vous pouvez avoir autant de sous-programmes que vous le souhaitez dans un programme ST BASIC. Cependant, chaque GOSUB doit se terminer par une instruction RETURN.
ON...GOSUB...RETURN
L'instruction ON...GOSUB est identique à ON...GOTO sauf qu'elle envoie le programme ST BASIC à un sous-programme au lieu d'une ligne de programme différente.
Examinez le programme suivant pour voir comment ON...GOSUB...RETURN fonctionne.
Conseils de programmation et raccourcis
Le jeu des devinettes
Le programme de jeu des devinettes présente certaines fonctionnalités ST BASIC pouvant rendre vos programmes plus compacts. Entrez ce programme :
- 10 REM JEU DES DEVINETTES
- 20 ANSWER$="O"
- 30 WHILE ANSWER$<>"N"
- 40 COUNT=0: CLEARW 2 : REM ***** EFFACE LA FENETRE OUTPUT *****
- 45 REM ***** [:] PERMET PLUSIEURS INSTRUCTIONS SUR 1 LIGNE *****
- 50 READ NUMBER: IF NUMBER=-1 THEN RESTORE: GOTO 50
- 60 PRINT: PRINT "JE PENSE A UN NOMBRE ENTRE 1 ET 20." : PRINT
- 70 TRY: INPUT "VOTRE ESTIMATION: ", GUESS: ' ***** ESSAYER CET ETIQUETTE *****
- 80 COUNT=COUNT+1: 'COMPTER LES PROPOSITIONS
- 90 IF GUESS=NUMBER THEN GOTO OK : '***** OK EST UNE ETIQUETTE UTILISEE AVEC GOTO *****
- 100 IF GUESS>NUMBER THEN GOTO HIGH
- 110 ?: PRINT "NON. TROP BAS. ESSAYER A NOUVEAU.";: GOTO TRY: ' ***** ? SIGNIFIE PRINT *****
- 120 HIGH: PRINT: PRINT "VOUS AVEZ DEVINE AVEC UN NOMBRE TROP HAUT. ESSAYER A NOUVEAU.";:GOTO TRY
- 130 OK: PRINT: PRINT"TOUTES NOS FELICITATIONS! VOUS L'AVEZ EU EN " ; COUNT; " COUPS!"
- 140 INPUT "VOULEZ-VOUS JOUER ENCORE (O/N)"; ANSWER$
- 150 IF ANSWER$<>"O" AND ANSWER$<>"N" THEN GOTO 140
- 160 WEND
- 170 CLEARW 2: PRINT "MERCI D'AVOIR JOUE!" : END
- 180 ' ***** LES CHIFFRES VIENNENT DE LA LIGNE SUIVANTE *****
- 190 DATA 15, 4, 19, 8, 10, 7, 17, 3, 14, 13, 5, 12, 1, 16, 11, 9, 12, 6, 18, -1
Regardez attentivement l'exemple. Vous devez comprendre comment cela fonctionne. Recherchez tous les mots ST BASIC inconnus.
Étiquettes
Au lieu d'utiliser des numéros de ligne dans les instructions GOTO et GOSUB, vous pouvez spécifier une étiquette (LABEL:) pour une ligne particulière et faire référence à la ligne par son nom. Cela facilite la lecture des programmes. Lorsque vous regardez un programme des mois après qu'il a été écrit, les étiquettes vous aideront à comprendre ce que vous avez fait.
REMarques (')
Les remarques aident également à rendre un programme plus facile à lire. Mettre des commentaires dans votre travail vous aidera à vous rappeler le but d'une routine particulière. L'apostrophe (') est un symbole de remplacement pratique pour REM. Les remarques occupent de l'espace mémoire, alors soyez brefs. Tout texte saisi dans une instruction après REM (') ne sera pas exécuté dans le cadre de l'instruction.
PRINT (?)
Vous pouvez utiliser le point d'interrogation à la place du mot PRINT dans un programme ST BASIC. Le symbole de point d'interrogation (?) est facile à taper et accélère la saisie du programme.
Déclarations sur plusieurs lignes (:)
La saisie de plusieurs instructions après un seul numéro de ligne facilite la lecture des sous-routines courtes. Assurez-vous de séparer les instructions par deux-points (:).
Remarque : Les instructions suivant une instruction IF...THEN ne seront exécutées qu'après que la condition IF...THEN soit satisfaite.
NEXT
FOR...NEXT est généralement exprimé comme suit :
Vous pouvez également exprimer FOR...NEXT comme suit :
Vous pouvez omettre la référence de variable après NEXT. (Après NEXT, le FOR précédent sera exécuté.) Lorsque vous avez une boucle imbriquée - une boucle s'exécutant dans une boucle - assurez-vous que chaque FOR a une instruction NEXT correspondante. Bien que vous n'ayez pas besoin d'avoir une référence de variable après chaque NEXT, dans les boucles imbriquées, il est parfois conseillé de conserver les références de variable car elles vous permettent de tracer la boucle lorsque vous éditez ou déboguez le programme.
END
L'instruction END doit être la dernière instruction exécutée dans un programme ST BASIC. Il garantit que les fichiers et les variables sont laissés dans un état ordonné. END est une instruction facultative, mais laisser un programme dans un état désordonné peut entraîner des problèmes inattendus lors du débogage du programme.
Graphique
Avant de commencer à dessiner des graphiques et des images, vous devez comprendre le fonctionnement de l'écran d'affichage.
Résolution d'écran
La fenêtre Output est divisée en éléments appelés pixels. Les pixels sont les points sur l'écran que ST BASIC utilise pour tracer des lignes et dessiner des cercles. Imaginez que la fenêtre soit une feuille de papier quadrillé. Chaque case correspond à un pixel. Les pixels sont comptés à partir du coin supérieur gauche. Le nombre de pixels disponibles lorsque la fenêtre est en pleine taille dépend de la résolution d'écran que vous avez sélectionnée.
Basse résolution
La fenêtre mesure 303 pixels de large sur 166 pixels de haut.
Résolution moyenne
La fenêtre mesure 607 pixels de large sur 166 pixels de haut.
Haute résolution
La fenêtre mesure 615 pixels de large sur 344 pixels de haut.
Le ST BASIC peut également dessiner en couleurs. Le nombre de couleurs disponibles dépend également de la résolution d'écran que vous utilisez.
Basse résolution
La basse résolution supporte 16 couleurs.
Résolution moyenne
La moyenne résolution supporte 4 couleurs.
Haute résolution
La haute résolution supporte uniquement le noir et blanc.
Déclarations graphiques
Les instructions graphiques ST BASIC sont les suivantes :
Nom | Description |
---|---|
CLEARW | Cette instruction permet d'effacer la fenêtre ST BASIC. |
FULLW | Cette instruction permet de fixer la fenêtre ST BASIC en mode plein écran. |
COLOR | Cette instruction permet de fixer la couleur du texte, du remplissage, des couleurs des pixels et la palette de remplissage. |
FILL | Cette instruction permet de remplir une forme avec une couleur et une palette. |
CIRCLE | Cette instruction permet d'afficher un cercle. |
PCIRCLE | Cette instruction permet de dessiner un cercle remplit et des «pointes de tartes». |
ELLIPSE | Cette instruction permet de dessiner une ellipse ou arc d'ellipse. |
PELLIPSE | Cette instruction permet de dessiner une ellipse ou arc d'ellipse remplit. |
LINEF | Cette instruction permet de tracer une ligne graphique. |
CLEARW
Dans l'exemple de programme précédent, CLEARW 2 a effacé la fenêtre Output. CLEARW peut également effacer les fenêtres de commande, de liste et d'édition :
Exemple | Description |
---|---|
CLEARW 0 | Efface la fenêtre Edit. |
CLEARW 1 | Efface la fenêtre List. |
CLEARW 2 | Efface la fenêtre Output. |
CLEARW 3 | Efface la fenêtre Command. |
FULLW
FULLW crée une taille de fenêtre en plein écran. Les numéros d'écran sont les mêmes que pour CLEARW :
Exemple | Description |
---|---|
FULLW 0 | Agrandit la fenêtre Edit. |
FULLW 1 | Agrandit la fenêtre List. |
FULLW 2 | Agrandit la fenêtre Output. |
FULLW 3 | Agrandit la fenêtre Command. |
COLOR
La commande COLOR contrôle trois paramètres :
- La couleur du texte affiché à l'écran.
- La couleur de remplissage (FILL) utilisée pour remplir les formes et l'arrière-plan de la fenêtre.
- La couleur utilisée pour les lignes dessinées dans la fenêtre de sortie.
Remarque : Dans les programmes suivants, l'écran est généralement réglé sur une résolution moyenne. Réglez la résolution sur faible et voyez à quoi ressemble le programme.
Le programme suivant illustre la commande COLOR :
on obtiendra un résultat ressemblant à ceci :
Le premier chiffre change la couleur du texte. La couleur reste la même jusqu'à la prochaine commande COLOR. Éditez le programme comme suit :
Le deuxième nombre change la couleur de remplissage utilisée pour la couleur d'arrière-plan et les instructions PCIRCLE et PELLIPSE. Le troisième nombre définit la couleur pour dessiner des images et des graphiques.
Entrez ce programme :
- 10 REM COLORS.BAS
- 20 WHITE=0: BLACK=1: RED=2: GREEN=3
- 30 COLOR BLACK,RED,GREEN
- 40 FULLW 2: CLEARW 2: FILL 0,0 :'***** FIXE LE REMPLISSAGE DE L'ARRIERE-PLAN A LA COULEUR ROUGE
- 50 PRINT "TEXTE NOIR, REMPLISSAGE ROUGE, CERCLE VERT, ";
- 60 CIRCLE 100,80,50
- 70 GOSUB DELAY
- 80 COLOR BLACK,WHITE,GREEN: '***** FAIRE REMPLISSAGE BLANC
- 90 PCIRCLE 100,80,50,0,450: '***** NOUS EXPLIQUERONS PCIRCLE PLUS TARD
- 100 PRINT "COIN BLANC";
- 110 GOSUB DELAY: GOSUB DELAY
- 120 END
- 130 DELAY: FOR I=1 TO 2500: NEXT: RETURN
on obtiendra un résultat ressemblant à ceci :
Le tableau suivant montre les nombres de couleurs dans différentes résolutions d'écran :
Couleur | Numéro | Basse | Moyenne | Haute |
---|---|---|---|---|
Blanc | 0 | X | X | X |
Noir | 1 | X | X | X |
Rouge | 2 | X | X | |
Vert | 3 | X | X | |
Bleu | 4 | X | ||
Bleu foncé | 5 | X | ||
Brun | 6 | X | ||
Vert foncé | 7 | X | ||
Gris | 8 | X | ||
Gris foncé | 9 | X | ||
Bleu clair | 10 | X | ||
Bleu vert | 11 | X | ||
Violet clair | 12 | X | ||
Violet foncé | 13 | X | ||
Jaune clair | 14 | X | ||
Jaune foncé | 15 | X |
Remarque : Les couleurs répertoriées dans le tableau sont les couleurs par défaut, les couleurs de la palette lorsque vous allumez l'ordinateur. Ils peuvent être modifiés avec le panneau de configuration ou en écrivant un programme ST BASIC modifiant spécifiquement les couleurs.
La commande COLOR peut également sélectionner des motifs pour remplacer la couleur de remplissage unie. Entrez et exécutez ce programme :
- 5 ' PATTERNS.BAS
- 10 COLOR 1,3,1,4,4: ' ***** REMPLIR L'ECRAN AVEC DU VERT FUJI
- 20 FULLW 2: CLEARW 2: FILL 0,0
- 30 FOR P=2 TO 4
- 40 FOR I=1 TO 5
- 45 GOTOXY 8,13: PRINT " COLOR 1,2,1,I,P"
- 50 COLOR 1,2,1,I,P: ' I ET P CHOISSIS LE MOTIF. REMPLI AVEC ROUGE
- 60 PCIRCLE 150,80,80: ' ***** PCIRCLE UTILISER POUR LA COULEUR DE REMPLISSAGE
- 70 FOR D=1 TO 700 :NEXT D : ' ***** UNE BOUCLE DE DELAI
- 80 NEXT I
- 90 NEXT P
- 95 COLOR 1,0,1,1,1: ' ***** RETOURNE AUX COULEURS PAR DEFAUT
- 100 END
on obtiendra un résultat ressemblant à ceci :
FILL
La commande FILL vous permet de remplir une forme avec une couleur ou un motif. Entrez et exécutez ce programme :
on obtiendra un résultat ressemblant à ceci :
CIRCLE et PCIRCLE
Dessiner les contours des cercles et des arcs est facile avec ST BASIC. Localisez simplement le centre d'un cercle et décidez de son rayon. L'emplacement du centre est spécifié en pixels. Le rayon aussi. Si vous voulez que le centre soit à 100 pixels vers la droite et à 80 pixels vers le bas à partir du coin supérieur gauche, vous diriez que le centre est situé à 100,80. Pour dessiner un cercle à cet emplacement, entrez le programme suivant :
on obtiendra un résultat ressemblant à ceci :
Les deux premiers paramètres de la commande CIRCLE donnent la position horizontale et verticale du centre. Le troisième paramètre est le rayon. CIRCLE 100,80,50 place un cercle à 100 pixels vers la droite et 80 pixels vers le bas à partir du coin supérieur gauche, puis dessine le cercle avec un rayon de 50 pixels.
La taille et la position exactes de votre cercle dépendent de la résolution d'écran que vous sélectionnez. La plupart des exemples sont plus beaux en résolution moyenne. Le programme suivant, créant des cercles dans toutes les couleurs disponibles, est écrit pour être exécuté en basse résolution. Exécutez-le en résolution moyenne pour voir la variation :
on obtiendra un résultat ressemblant à ceci :
Vous pouvez utiliser des cercles pour créer des motifs intéressants. L'exemple de programme suivant montre comment dessiner plusieurs cercles en utilisant différents centres et en modifiant les rayons :
on obtiendra un résultat ressemblant à ceci :
La commande CIRCLE peut également dessiner des arcs. Entrez ce programme :
on obtiendra un résultat ressemblant à ceci :
Les deux derniers paramètres de la commande CIRCLE spécifient les angles de début et de fin d'un arc. Zéro degré se trouve à droite de la fenêtre de sortie ; 180 degrés est à gauche. Quatre-vingt-dix degrés sont au sommet. Notez que les angles sont en dixièmes de degré - les 180 degrés s'écrivent 1800.
Remarque : PCIRCLE est similaire à CIRCLE sauf qu'il dessine des figures et des segments pleins plutôt que des contours de figures.
ELLIPSE et PELLIPSE
La commande ELLIPSE est similaire à CIRCLE sauf qu'une ellipse a à la fois un rayon horizontal et un rayon vertical.
ELLIPSE 200,80,80,20 dessine une ellipse horizontale.
ELLIPSE 200,80,20,80 en dessine une verticale.
La commande ELLIPSE peut également dessiner des arcs. Entrez ce programme :
Tout comme avec CIRCLE, les deux derniers paramètres sont les angles de début et de fin en dixièmes de degré.
Remarque : PELLIPSE est similaire à ELLIPSE sauf qu'il dessine des figures pleines au lieu de contours de figures. Les figures sont dessinées dans la couleur spécifiée par le deuxième paramètre de l'instruction COLOR précédente.
Modifiez le programme précédent comme indiqué :
LINEF
La commande LINEF dessine des lignes. Pour tracer une ligne, vous spécifiez les points de début et de fin. LINEF 50,50,100,100 trace une ligne entre les points situés à 50,50 et 100,100. Entrez ce programme :
on obtiendra un résultat ressemblant à ceci :
Le programme suivant affiche un défilé de lignes de différentes couleurs :
on obtiendra un résultat ressemblant à ceci :
Le programme suivant utilise des couleurs, du texte et des lignes pour représenter graphiquement les ventes mensuelles :
- 10 COLOR 1,0,1: FULLW 2: CLEARW 2
- 15 '***** QUATRE ESPACES AU DEBUT, UN A LA FIN *****
- 20 PRINT " JAN FEV MAR AVR MAI JUI JUI AOU SEP OCT NOV DEC";
- 30 LINEF 27,92,453,92
- 40 FOR C=32 TO 384 STEP 32: ' ***** C EST UN COMPTEUR DE COLONNE *****
- 50 READ SALES: AVERAGE = AVERAGE+SALES
- 60 IF SALES<60 THEN COLOR 1,1,2 ELSE COLOR 1,1,3
- 70 TOP=SALES: GOSUB BAR
- 80 NEXT
- 90 AVERAGE=AVERAGE/12
- 100 IF AVERAGE<60 THEN COLOR 2,1,2 ELSE COLOR 3,1,3
- 110 PRINT "AVG";
- 120 TOP=AVERAGE: C=424: GOSUB BAR
- 130 FOR D=1 TO 5000: NEXT
- 140 COLOR 1,0,1: END
- 150 DATA 50, 70, 60, 56, 50, 45, 70, 90, 100, 80, 70, 59
- 160 BAR: FOR P=1 TO 24 : ' ***** DESSINE UNE BARRE VERTICALE *****
- 165 ' ***** SOUSTRAIRE LA VALEUR DU BAS DU GRAPHIQUE POUR LA RENDRE A L'ORDRE VERS LE HAUT ****
- 170 LINEF C+P, 152-TOP,C+P,152
- 180 NEXT
- 190 RETURN
on obtiendra un résultat ressemblant à ceci :
Vous pouvez utiliser la commande LINEF pour dessiner presque n'importe quelle forme. En fournissant une série de points, vous pouvez créer des formes de forme LINEF en "reliant les points". Vous pouvez assembler différentes formes en images et modifier l'emplacement d'une série de formes. Le programme suivant montre comment dessiner une maison où vous voulez la placer dans la fenêtre de sortie. En ajoutant les valeurs de déplacement horizontal (H0) et de déplacement vertical (H0), vous pouvez déplacer l'image sur l'écran :
- 10 '***** DESSINE UNE IMAGE *****
- 15 CLEARW 2
- 20 INPUT "POSITION (X,Y)"; H0, V0
- 30 COLOR 1,0,1
- 40 READ COUNT
- 50 FOR PART=1 TO COUNT
- 60 GOSUB DRAW
- 70 NEXT
- 80 FOR I=1 TO 5000: NEXT: END
- 90 DRAW: '***** DESSINE UNE FORME *****
- 100 READ H1,V1,H2,V2
- 110 WHILE H2<>999
- 120 LINEF H0+H1,V0-V1,H0+H2,V0-V2
- 130 H1=H2: V1=V2
- 140 READ H2,V2
- 150 WEND
- 160 RETURN
- 170 DATA 5
- 180 ' ***** CADRE *****
- 190 DATA 0, 12, 0, 0, 40, 0, 40, 12, 999, 0
- 200 ' ***** TOIT *****
- 210 DATA -4, 10, 20, 27, 44, 10, 999, 0
- 220 ' ***** CHEMINEE *****
- 230 DATA 0, 12, 0, 22, 4, 22, 4, 15, 999, 0
- 240 ' ***** FENETRE *****
- 250 DATA 4, 3, 4, 9, 20, 9, 20, 3, 4, 3, 999, 0
- 260 ' ***** PORTE *****
- 270 DATA 26, 0, 26, 9, 36, 9, 36, 0, 999, 0
SOUND
La commande SOUND vous permet de créer des tonalités ou de jouer de la musique avec votre ordinateur Atari ST.
La commande SOUND contrôle trois voix musicales et un canal de bruit. Vous pouvez sélectionner une voix et contrôler le volume de la voix, les notes jouées, l'octave de la note et la durée de la note.
Pour écrire de la musique, vous devez comprendre les octaves et la relation entre les notes d'une gamme et les termes de votre ordinateur Atari ST. Les notes C, C#, D, D#, E, F, F#, G, G#, A, A#, B, se lisent comme 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 , 12 par l'ordinateur. Votre ordinateur numérote les octaves 1 à 8. Comme point de référence, la note A à 440 Hz est la note 10 de l'octave 4.
L'exemple de programme suivant lit une chanson étant l'une des préférées des ordinateurs :
- 10 VOICE=1: VOLUME=8
- 20 READ VOLUME,NOTE,OCTAVE,DURATION
- 30 WHILE NOTE<>0
- 40 SOUND VOICE,VOLUME,NOTE,OCTAVE,DURATION
- 50 SOUND 1,0 : '***** DESACTIVE LA VOIX 1 *****
- 60 READ VOLUME,NOTE,OCTAVE,DURATION
- 70 WEND
- 80 END
- 90 DATA 8,12,4,25,8,9,4,25,8,5,4,25,8,12,3,25,8,2,4,5
- 100 DATA 8,4,4,5,8,5,4,5,8,2,4,15,8,5,4,5,8,12,3,30,0,1,4,15
- 110 DATA 8,7,4,25,8,12,4,25,8,9,4,25,8,5,4,25,8,2,4,5
- 120 DATA 8,4,4,5,8,5,4,5,8,7,4,15,8,9,4,5,8,7,4,30,0,1,4,15
- 130 DATA 8,9,4,5,8,10,4,5,8,9,4,5,8,7,4,5,8,12,4,15,8,9,4,5
- 140 DATA 8,7,4,15,8,5,4,5,0,1,4,15
- 150 DATA 8,7,4,5,8,9,4,15,8,5,4,5,8,2,4,15,8,5,4,5
- 160 DATA 8,2,4,5,8,12,3,15,0,1,4,15
- 170 DATA 8,12,3,5,8,5,4,15,8,9,4,5,8,7,4,15
- 180 DATA 8,12,3,5,8,5,4,15,8,9,4,5,8,7,4,5
- 190 DATA 8,9,4,5,8,10,4,5,8,12,4,5
- 200 DATA 8,9,4,5,8,5,4,5,8,7,4,15
- 210 DATA 8,12,3,5,8,5,4,15,0,0,0,0
L'utilisation du canal de bruit nécessite une compréhension approfondie de la théorie du son.
Entreposage des informations sur disque
Le ST BASIC entrepose les informations dans des fichiers conservés sur vos disquettes. Tout comme dans un fichier physique, vous devez ouvrir un fichier disque (OPEN) pour saisir des informations (INPUT) à partir de celui-ci, ou écrire (PRINT) des informations dessus.
Le ST BASIC utilise les commandes suivantes pour contrôler l'accès aux données :
Nom | Description |
---|---|
OPEN | Cette instruction permet l'ouverture d'un fichier. |
INPUT | Cette instruction permet d'interroger l'utilisateur ou de lire dans un fichier. |
PRINT# | Cette instruction permet d'afficher du texte dans la sortie de fenêtre ou dans un fichier. |
CLOSE | Cette instruction permet de fermer d'un fichier sur disque. |
INPUT# | Cette instruction permet d'interroger l'utilisateur ou de lire dans un fichier. |
LINE INPUT# | Cette fonction permet la lecture d'une ligne entière texte d'une console ou d'un fichier. |
WRITE# | Cette instruction permet l'écriture d'un message entre guillemet. |
Les utilisations les plus courantes de ces commandes sont expliquées dans la section «Fichiers séquentiels».
Fichiers séquentiels
Les fichiers séquentiels sont des fichiers dont les enregistrements doivent être lus dans l'ordre où ils ont été écrits. Leur structure peut être comparée à une pile de fiches sans séparateurs. Pour trouver une carte particulière, vous devez parcourir la pile dans un ordre séquentiel, en commençant par la première carte. L'exemple de programme suivant montre comment sortir des noms dans un fichier :
Ce programme prend l'entrée du clavier et l'envoie à un fichier disque nommé TESTFILE.
La ligne 20 ouvre TESTFILE en tant que fichier numéro 1. Le O indique à ST BASIC d'ouvrir TESTFILE pour le préparer à la sortie de l'ordinateur. PRINT#1 envoie NAME$ à l'unité de disque tout comme la commande LPRINT l'envoie à une imprimante.
La boucle WHILE se termine lorsque vous entrez un astérisque (*) dans le programme. La ligne 80 ferme le fichier. Regardez attentivement le programme. Dans l'exemple de programme suivant, vous apprendrez comment recevoir INPUT à partir d'un fichier disque.
Le fichier créé par le programme suivant est un fichier séquentiel. Vous devez lire son contenu dans le même ordre qu'il a été placé dans le fichier. Le programme suivant lit les fichiers du disque :
La ligne 20 ouvre TESTFILE, en tant que fichier numéro 1, pour le préparer à l'entrée sur l'ordinateur. «I» signifie entrée.
La boucle d'entrée utilise la même technique que vous avez utilisée avec les instructions DATA. Au lieu de DATA, vous utilisez l'instruction INPUT#. La boucle WHILE se termine lorsque le fichier #1 de l'instruction OPEN répond à la condition EOF (End of File).
Lorsque la boucle est terminée, la ligne 80 ferme le fichier. Les fichiers séquentiels ont les caractéristiques importantes suivantes :
- Lorsque vous ouvrez un fichier (OPEN) pour la sortie, son contenu actuel est perdu.
- Si vous ouvrez un fichier inexistant pour la sortie, OPEN créera un fichier en utilisant le nom que vous donnez.
- Si vous essayez d'ouvrir un fichier (OPEN) inexistant pour INPUT, ST BASIC affichera un message d'erreur.
- Les fichiers sont numérotés pour faciliter leur référence dans un programme. Jusqu'à trois fichiers différents peuvent être ouverts simultanément.
Fichiers à accès aléatoire
Le ST BASIC peut également créer des fichiers accessibles de manière aléatoire par enregistrement. Un fichier à accès aléatoire peut être comparé à une pile de fiches avec des intercalaires étiquetés. Pour trouver la première, la dixième ou la centième carte, vous allez directement au séparateur étiqueté un, dix ou cent.
Vous pouvez rechercher ces fichiers plus rapidement que les fichiers séquentiels. L'utilisation de fichiers à accès aléatoire nécessite une compréhension des variables numériques, des tableaux et des chaînes de caractères. Ceux-ci sont décrits dans les sections suivantes. La dernière section, Concepts avancés, fournit plus de détails sur les fichiers à accès aléatoire.
Remarque : Lorsque vous saisissez des enregistrements à sauvegarder sur disque en tant que fichier à accès aléatoire, le premier enregistrement doit porter le numéro 1 (un) et tous les enregistrements suivants doivent être incrémentés de 1 (un). Ceci est plus facilement accompli en utilisant une boucle FOR...TO...NEXT (exemple: FOR RECORD = 1 TO 2000; IF RECORD = 0 THEN CLOSE #1:END).
Variables numériques
La plupart des programmes fonctionnent avec des unités de données exprimées sous forme de nombres ou de chaînes de caractères. Des noms sont généralement attribués aux unités de données pour aider à clarifier leur utilisation. Par exemple, vous pourriez vouloir faire le total d'une liste de ventes et de dépenses en disant que TOTAL = TOTAL + VENTES - DEPENSES. Étant donné que les valeurs des VENTES, des DEPENSES et du TOTAL varient, ce sont des variables.
Vous pouvez saisir une chaîne de caractères données, telle qu'un nom, dans une variable de chaîne de caractères. Et rappelez-vous qu'une chaîne de caractères est tout type de données, comme du texte, qui ne doit pas être interprétée comme un nombre.
Le ST BASIC peut représenter des nombres sous forme de nombres réels et de nombres entiers.
Les nombres réels peuvent avoir des valeurs fractionnaires. Pi (3,1416) est un nombre réel. Il en va de même pour 5,00, car il a un point décimal dans son expression.
Les nombres entiers sont des nombres entiers sans parties fractionnaires. Le nombre 5 est un entier ; il en va de même pour 5 729 346.
Si vous ne spécifiez pas une variable sous la forme d'un nombre réel ou d'un entier, le ST BASIC l'interprète comme un entier. Le ST BASIC convertit également les nombres entiers en nombres réels chaque fois que nécessaire.
Vous pouvez spécifier le type numérique en utilisant «%» et «!», par exemple :
Exemple | Description |
---|---|
TOTAL% | Une variable entière. |
TOTAL! | Une variable de nombre réel. |
Lorsque vous déclarez le type d'une variable, ST BASIC ne la convertit pas en un autre type, sauf si vous désignez le changement.
Vous pouvez convertir le type d'une variable numérique à l'aide des instructions suivantes :
Exemple | Description |
---|---|
CINT(TOTAL) | Convertit TOTAL en entier. |
BALANCE=INT(TOTAL) | La valeur entière de TOTAL est affectée à BALANCE, mais TOTAL reste inchangé. |
BALANCE=FIX(TOTAL) | BALANCE se voit attribuer la partie numérique entière de TOTAL avec toute partie décimale supprimée. La décimale n'est pas arrondie ; c'est coupé. |
Tableaux
Tout arrangement d'informations en lignes et en colonnes est appelé un tableau.
Chaque fois que vous organisez des nombres en lignes et en colonnes, comme dans une feuille de calcul, vous créez un tableau. Une page de texte affichée est un tableau de caractères (lignes) et de lignes (colonnes). Vous pouvez organiser les variables dans des tableaux en définissant leurs limites de ligne et de colonne lorsque vous les nommez.
- 10 CLEARW 2: COUNT=0
- 20 INPUT "ENTREZ LE POINTAGE: ", SCORE
- 30 WHILE SCORE>0
- 40 TALLY(COUNT)=SCORE
- 50 INPUT "ENTREZ LE POINTAGE: ", SCORE
- 60 COUNT=COUNT+1
- 70 WEND
- 80 CLEARW 2
- 90 FOR 1=0 TO COUNT
- 100 AVERAGE=AVERAGE+TALLY(I):NEXT:AVERAGE=AVERAGE/COUNT
- 110 PRINT "LA MOYENNE POUR ";COUNT;" ET LE POINTAGE EST:";AVERAGE
- 120 PRINT: INPUT "QUEL POINTAGE AIMERIEZ-VOUS VOIR";SELECTION
- 130 WHILE SELECTION>0 AND SELECTION<COUNT+1
- 140 PRINT "LE POINTAGE ";SELECTION " EST :";TALLY(SELECTION)
- 150 PRINT:INPUT "QUEL POINTAGE AIMERIEZ-VOUS VOIR"; SELECTION
- 160 WEND
- 170 END
Entrez jusqu'à 10 pointages. Lorsque vous avez terminé, entrez un 0 ou un score négatif pour sortir de la boucle d'entrée (voir ligne 30). L'utilisation d'un tableau vous permet de conserver de nombreuses entrées en mémoire et d'y accéder facilement.
Dans le programme précédent, TALLY est un tableau à une dimension (c'est-à-dire une ligne de plusieurs colonnes). Les tableaux peuvent avoir plusieurs dimensions. Si vous vouliez enregistrer les ventes et les commissions, vous pourriez écrire un programme similaire à l'exemple suivant :
- 10 CLEARW 2: COUNT=0
- 20 INPUT "ENTREZ LES VENTES: ", SALES(COUNT,0): '***** ENTREE DIRECTEMENT DANS LE TABLEAU *****
- 30 WHILE SALES(COUNT,0)>-0
- 40 SALES(COUNT,1)=SALES(COUNT,0)*0.08: '***** COMMISSION DE CALCUL *****
- 50 INPUT "ENTREZ LES VENTES: ", SALES(COUNT,0)
- 60 COUNT=COUNT+1
- 70 WEND
- 80 CLEARW 2
- 90 PRINT "COMMISSION D'ENTREE SUR LES VENTES"
- 100 FOR I=0 TO COUNT
- 110 PRINT I, SALES(I,0), SALES(I,1)
- 120 NEXT
- 130 END
- RUN
DIM
Le ST BASIC établit la taille d'un tableau la première fois que vous y faites référence. La taille par défaut d'un tableau est de 10 lignes sur 10 colonnes (10,10). Vous pouvez déclarer vos propres dimensions de tableau avec l'instruction DIM. DIM TOTAL(5,50) définit TOTAL comme un tableau de 5 lignes et 50 colonnes. DIM RECORD(5,50,100) définit RECORD comme un tableau de 5 lignes, 50 colonnes et 100 plans. Chaque nombre entre parenthèses fait référence à une dimension. Le ST BASIC autorise jusqu'à 15 dimensions dans un tableau. Le nombre d'éléments et de dimensions que vous pouvez utiliser dépend de la quantité de mémoire dont vous disposez pour un programme particulier.
Option Base
Les tableaux des programmes précédents commencent à l'élément (0,0). Cela signifie que l'élément 1 est en position (0,0). Il est maladroit d'adresser un élément comme (0,0). Le ST BASIC vous permet de spécifier (1,1) comme élément de base d'un tableau. Regardez les programmes suivants :
- 10 OPTION BASE 1
- 20 DIM POINTS(0,5)
Le premier élément du tableau POINTS est (1,1).
- 30 OPTION BASE 0
- 40 DIM VALUES(10,5)
Le premier élément du tableau VALUES est (0,0). Les deux tableaux ont la même taille.
Chaînes de caractères
Une chaîne de caractères est un type spécial de tableau. La première dimension d'une chaîne de caractères est sa longueur. DIM A$(40) définit une longueur de chaîne de caractères de 40 caractères. Les mots réservés ST BASIC suivants manipulent des chaînes de caractères :
Nom | Description |
---|---|
LEFT$ | Cette fonction permet de retourner les caractères du début d'une chaîne de caractères. |
LSET | Cette instruction permet de cadrer à gauche une chaîne de caractères. |
RIGHT$ | Cette fonction retourne les caractères à la fin d'une chaîne de caractères. |
RSET | Cette instruction permet de cadrer à droite une chaîne de caractères. |
MID$ | Cette fonction retourne une sous-chaîne de caractères contenu dans une chaîne de caractères. |
Entrez ce programme :
- 10 CLEARW 2
- 20 A$="JEAN THOMAS TREMBLAY"
- 30 B$=LEFT$(A$,4):PRINT B$: ' ***** AFFICHE LES 3 CARACTERES A GAUCHE *****
- 40 B$=MID$(A$,6,3):PRINT B$: ' ***** AFFICHE LES 3 CARACTERES DEBUTANT AU 6IEME CARACTERES *****
- 50 B$=RIGHT$(A$,7):PRINT B$: '***** AFFICHE LES 7 CHARACTERS A PARTIR DE LA DROITE *****
LSET et RSET justifient les chaînes de caractères à gauche et à droite. Saisissez cet exemple :
LSET et RSET modifient le contenu de A$ sans modifier sa longueur. Utilisez-les pour maintenir des longueurs de champ fixes dans les routines de saisie de données et les fichiers de disque à accès aléatoire.
LEFT$ accède aux caractères de la partie gauche d'une chaîne de caractères. Vous pouvez affecter les caractères à une autre chaîne de caractères ou les afficher sans modifier la chaîne de caractères.
MID$ et RIGHT$ prennent les caractères des parties milieu et droite de la chaîne de caractères. Ils peuvent être affectés à une autre chaîne de caractères ou affichés.
Conversion de variables de chaîne de caractères
Vous pouvez convertir des variables de chaîne en variables numériques à l'aide de STR$ :
- A$=STR$(TOTAL)
La fonction VAL reconvertit les variables numériques en variables de chaîne de caractères :
- TOTAL=VAL(A$)
Une fois qu'un programme a fini d'effectuer des calculs avec des nombres, vous pouvez inclure ces nombres dans un programme de traitement de texte. Dans un fichier texte (traitement de texte), il est plus facile de traiter les nombres comme des chaînes de caractères. Ou vous pouvez effectuer des calculs avec des nombres extraits d'un fichier texte. Les fonctions STR$ et VAL convertissent les valeurs afin que vous puissiez les utiliser à la fois dans des fichiers texte et des fichiers de données.
Concepts avancés
LE ST BASIC vous permet d'intégrer des fonctions personnalisées, des recouvrements chaînées et des modules de langage d'assemblage personnalisés dans vos programmes.
DEF FN
Parfois, vous pouvez avoir besoin d'une fonction n'existant pas dans ST BASIC. Vous pouvez définir vos propres fonctions dans ST BASIC avec l'instruction DEF FN. Entrez ce programme :
Ce programme définit FNCOST comme le résultat du calcul :
QUANTITY*PRICE |
Vous pouvez également définir une fonction et lui transmettre une valeur. Entrez ce programme :
Dans ce programme, le numéro que vous attribuez à FNPAY sera utilisé pour calculer le résultat de la fonction. Notez que dans les deux exemples de programme, les variables globales telles que QUANTITY ou COMMISSION obtiennent leurs valeurs en dehors de l'instruction de la fonction. Il en va de même pour les fonctions prédéfinies telles que +, où le résultat de LENGTH + WIDTH dépendrait des valeurs précédemment définies pour LENGTH et WIDTH.
Chaîner les programmes
Un programme ST BASIC peut en exécuter un autre. La ligne de programme :
- 100 CHAIN "NEXTPROG"
provoque le chargement et l'exécution du programme NEXTPROG.BAS, en remplaçant le programme en cours et en détruisant toutes les variables en cours.
La ligne de programme :
- 100 CHAIN MERGE "NEXTPROG"
charge NEXTPROG.BAS, mais laisse les variables actuelles intactes. CHAIN MERGE remplace les lignes de programme en cours par des lignes numérotées de manière similaire dans NEXTPROG.BAS. Le programme ne remplace pas les lignes dont les numéros ne sont pas dupliqués dans NEXTPROG.BAS.
Les règles de programmation suivantes s'appliquent à CHAIN et CHAIN MERGE :
- CHAIN détruit le programme en cours et les valeurs des variables.
- CHAIN MERGE ne modifie pas les valeurs des variables. Il ne remplace que les lignes en double.
Fichiers binaires
Un fichier binaire est composé d'octets de données n'étant pas interprétés comme des nombres ou du texte lorsqu'ils sont lus en mémoire. Ils sont chargés sous forme d'octets de 8 bits dans la mémoire.
Vous pouvez enregistrer des parties de la mémoire directement sur le disque (au format binaire) ou lire des fichiers binaires directement dans la mémoire. Ceci est utile pour enregistrer et charger des images d'écran et des modules de langage machine.
Un module de langage machine est un fichier binaire contenant des codes de programme pouvant être lus et exécutés directement par le microprocesseur 68000 de votre ordinateur Atari ST.
La ligne de programme :
- BSAVE "ARRAY" ,100,65
enregistre 650 octets, en commençant à l'adresse 100, dans un fichier nommé ARRAY. La ligne de programme :
- BLOAD "ARRAY",100
charge le fichier ARRAY en mémoire à partir de l'adresse 23.
Si votre fichier binaire est un module de langage machine, vous pouvez l'exécuter à partir de ST BASIC à l'aide de la commande CALL. Regardez l'exemple suivant :
- 100 PLOT=23
- 110 CALL PLOT(X,Y,Z)
Les lignes attribuent l'adresse de début d'une routine à la variable PLOT et indiquent à ST BASIC d'exécuter la routine, en transmettant les variables X, Y et Z au programme.
Fichiers à accès aléatoire
Vous pouvez accéder aux informations plus rapidement dans un fichier à accès aléatoire qu'un fichier séquentiel. Les fichiers à accès aléatoire doivent avoir des champs de longueur fixe car ils peuvent utiliser plus de mémoire pour entreposer du texte que les fichiers séquentiels. Cependant, les fichiers à accès aléatoire sont plus efficaces pour entreposer les nombres que les fichiers séquentiels car ils entreposent les nombres au format binaire, tandis que les fichiers séquentiels utilisent le format ASCII.
Remarque : ASCII signifie American Standard Code for Information Interchange. ASCII est le code standard de traduction des données informatiques en caractères affichables.
Les mots réservés suivants contrôlent les fichiers à accès aléatoire :
Nom | Description |
---|---|
OPEN | Cette instruction permet l'ouverture d'un fichier. |
CLOSE | Cette instruction permet de fermer d'un fichier sur disque. |
EOF | Cette fonction permet d'indiquer si la fin du fichier est atteinte. |
LSET | Cette instruction permet de cadrer à gauche une chaîne de caractères. |
RSET | Cette instruction permet de cadrer à droite une chaîne de caractères. |
FIELD | Cette instruction permet d'effectuer la réservation de la mémoire tampon pour des accès séquentielle dans un fichier. |
PUT | Cette instruction permet d'écrire une variable dans un fichier. |
GET | Cette instruction permet la lecture d'un fichier. |
LOC | Cette fonction permet d'indiquer la position du dernière enregistrement ayant été lu. |
L'instruction OPEN, CLOSE et EOF vous sont familiers dans la section sur les fichiers séquentiels. LSET et RSET ont été décrits dans la section sur les chaînes de caractères. FIELD, PUT, GET et LOC sont de nouvelles commandes.
FIELD spécifie le format d'un fichier à accès aléatoire. Chaque enregistrement du fichier comprendra le champ de données que vous spécifiez.
Vous mettez des enregistrements dans un fichier et demander (GET) des enregistrements à partir d'un fichier. Chaque enregistrement comprend le même nombre et les mêmes types de champs. Les champs sont définis dans l'instruction FIELD du programme ayant créé le fichier. Tout programme lisant les enregistrements doit définir des enregistrements correspondant à ceux déjà présents dans le fichier. (Le nombre et les types de champs doivent être identiques.) Vous n'êtes pas obligé d'utiliser les mêmes noms de variables dans chaque programme.
LOC vous permet de connaître votre emplacement dans un fichier. A=LOC(1) définit A égal au nombre d'octets lus à partir d'un fichier séquentiel ou au numéro d'enregistrement courant dans un fichier à accès aléatoire.
Le programme suivant montre comment accéder et modifier les enregistrements d'un fichier à accès aléatoire :
- 20 CLEARW 2 : FULLW 2
- 38 OPEN "R",#1, "TESTFILE" : '***** OPEN EN ACCES ALEATOIRE
- 35 '***** CHARGE ENREGISTREMENT DOIT AVOIR 3 CHAMPS
- 40 FIELD #1,20 AS V$,10 AS X$,30 AS N$: ' 20 ESPACES SONT RESERVES POUR V$,10 POUR X$,...
- 45 '***** JUSTIFICATION A GAUCHE V$ ET X$
- 50 LSET V$="BONJOUR"
- 60 LSET X$="CECI"
- 65 ' ***** JUSTIFICATION A DROITE N$
- 70 RSET N$="EST UN ENREGISTREMENT 1"
- 75 PRINT U$;X$;N$
- 80 PUT #1: '***** METTRE LE PREMIER ENREGISTREMENMT DANS UN FICHIER
- 90 RSET N$="EST UN ENREGISTREMENT 2"
- 95 PRINT V$;X$;N$
- 100 PUT #1: ' ***** METTRE LE SECOND ENREGISTREMENT DANS LE FICHIER
- 110 CLOSE 1
- 115 PRINT
- 120 OPEN "R",#1,"TESTFILE"
- 130 FIELD #1,20 AS A$,10 AS B$,30 AS C$ : ' ***** AVERTISSEMENT DE NOUVEAU NOMS DE VARIABLES
- 140 GET #1,2: ' ***** DEMANDE LE SECOND PREMIER ENREGISTREMENT
- 150 PRINT A$;B$;C$
- 160 GET #1,1: ' ***** DEMANDE LE PROCHAIN PREMIER ENREGISTREMENT
- 170 PRINT A$;B$;C$
- 180 CLOSE 1
- 190 END
Vous pouvez récupérer les enregistrements du fichier dans n'importe quel ordre.
Le programme suivant ajoute un enregistrement à la fin de :
- 10 '***** RAPPEND.BAS
- 20 CLEARW 2 : FULLW 2
- 30 OPEN "R", #1, "TESTFILE" : ' ***** OPEN EN ACCES ALEATOIRE
- 35 '***** CHAQUE ENREGISTREMENT A 3 CHAMPS
- 40 FIELD #1,20 AS V$,10 AS X$,30 AS N$
- 50 LSET U$="BONJOUR"
- 60 LSET KS="CECI"
- 65 ' ***** JUSTIFICATION A GAUCHE DE N$
- 70 RSET N$="EST L'ENREGISTREMENT 3"
- 75 PRINT V$;X$;N$
- 80 PUT #1,3: ' ***** METTRE L'ENREGISTREMENT DANS LE FICHIER
- 90 CLOSE 1
- 100 OPEN "R", #1,, "TESTFILE"
- 110 FIELD #1,20 AS A$,10 AS B$,30 AS C$
- 120 FOR I=1 TO 3
- 130 GET #1,I: ' ***** DEMANDE L'ENREGISTREMENT
- 140 PRINT V$;X$;N$: ' ***** AFFICHE L'ENREGISTREMENT
- 150 NEXT
- 160 CLOSE 1
- 170 END
Le programme suivant remplace un enregistrement au milieu du fichier :
- 10 ' ***** RINSERT.BAS
- 26 CLEARW 2: FULLW 2
- 30 OPEN "R" , #1, "TESTFILE": ' ***** OPEN EN ACCES ALEATOIRE
- 35 '***** CHAQUE ENREGISTREMENT A 3 CHAMPS
- 40 FIELD #1,20 AS V$,10 AS X$,30 AS N$
- 50 LSET V$="BONJOUR"
- 60 LSET X$="CECI"
- 65 '***** JUSTIFICATSION A DROITE N$
- 70 RSET N$="EST L'ENREGISTREMENT DU MILIEU"
- 75 PRINT V$;X$;N$
- 80 PUT #1,2: ' ***** REMPLACE LE SECOND ENREGISTREMENT
- 90 CLOSE 1
- 100 OPEN "R", #1,"TESTFILE"
- 110 FIELD #1,20 AS A$,10 AS B$,30 AS C$
- 120 FOR I=1 TO 3
- 130 GET #1,I: ' ****** DEMANDE L'ENREGISTREMENT
- 140 PRINT V$;X$;N$ : '***** AFFICHE L'ENREGISTREMENT
- 150 NEXT
- 160 CLOSE 1
- 170 END
Numéros dans les fichiers à accès aléatoire
Dans un fichier à accès aléatoire, il est plus efficace de représenter les nombres sous forme binaire pure. Les mots réservés ST BASIC suivants convertissent des entiers et des nombres réels vers et depuis la forme binaire à :
Nom | Description |
---|---|
MKI$ | Convertit des entiers en chaînes de caractères de 2 octets. |
MKS$ | Convertit les nombres réels en chaînes de caractères de 4 octets. |
MKD$ | Convertit les nombres réels en chaînes de caractères de 8 octets. |
CVI | Convertit les chaînes de caractères de 2 octets en nombres entiers. |
CVS | Convertit les chaînes de caractères de 4 octets en nombres réels. |
CVD | Convertit les chaînes de caractères de 8 octets en nombres réels. |
Le programme suivant montre pourquoi les nombres binaires peuvent être utilisés plus efficacement que les nombres au format ASCII dans un fichier à accès aléatoire :
- 10 ' RPUTNUM.BAS
- 20 FULLW 2: CLEARW 2
- 30 OPEN "R", #1, "TESTFILE"
- 40 FIELD #1,20 AS NAME$,2 AS AGE$,30 AS JOB$
- 50 INPUT "NOM : ",N$
- 60 WHILE NS<>"*"
- 70 INPUT "AGE : ", AGE
- 80 INPUT "EMPLOI : ",J$
- 90 LSET NAME$=N$: LSET JOB$=J$
- 95 AGE$=MKI$(AGE) : ' ***** CONVERTI L'AGE EN UNE CHAINE DE CARACTERES DE 2 OCTETS
- 180 PUT #1
- 110 INPUT "NOM: ", NAME$
- 120 WEND
- 130 CLOSE 1
- 140 PRINT
- 150 OPEN "R", #1, "TESTFILE"
- 160 FIELD #1,20 AS NAME$,2 AS AGE$,30 AS JOB$
- 170 FOR I=1 TO 3
- 180 GET #1,I
- 190 AGE=CVI(AGE$) : '***** CONVERTI L'AGE EN AGE ENTIER
- 200 PRINT NAME$;AGE;JOB$
- 210 NEXT
- 220 CLOSE 1
- 230 END
Remarque : Les fichiers à accès aléatoire ne peuvent pas contenir plus de 4 096 octets dans un enregistrement et 32 767 enregistrements dans un seul fichier.
Vous devriez maintenant avoir une bonne compréhension du vocabulaire et de la syntaxe de ST BASIC.