Section courante

A propos

Section administrative du site

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 :

  1. 10 PRINT "EXCUSE-MOI..."
  2. 20 PRINT "QUEL EST VOTRE NOM";
  3. 30 INPUT NAMES
  4. 40 PRINT "BONJOUR, ";NAME$;", RAVI DE VOUS RENCONTRER."
  5. RUN

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 :

  1. 10 ' MOVPRINT.BAS
  2. 20 FULLW 2 : CLEARW 2 : ' CECI EFFACER LA FENETRE OUTPUT
  3. 30 GOTOXY 0,0: PRINT "JE VAIS AFFICHER"
  4. 40 GOTOXY 5,5: PRINT "ICI"
  5. 50 GOTOXY 10,10 : PRINT "... ET ICI"
  6. 60 GOTOXY 5,12: PRINT "... ET ICI!"     

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 :

  1. 10 DATA 10,15,25,45
  2. 20 READ NUMBER
  3. 30 PRINT NUMBER
  4. 40 READ NUMBER
  5. 50 PRINT NUMBER
  6. 60 READ NUMBER
  7. 70 PRINT NUMBER
  8. 80 READ NUMBER
  9. 90 PRINT NUMBER
  10. 100 END
  11. RUN

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 :

  1. 10 DATA ANNIE,15,NICOLAS,45
  2. 20 READ NAME$
  3. 30 PRINT NAME$,
  4. 40 READ SCORE
  5. 50 PRINT SCORE
  6. 60 READ NAME$
  7. 70 PRINT NAME$,
  8. 80 READ SCORE
  9. 90 PRINT SCORE
  10. 100 END
  11. RUN     

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 :

  1. 100 RESTORE 10
  2. 110 GOTO 20

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 :

  1. 20 READ NAMES
  2. 30 PRINT NAMES,
  3. 40 READ SCORE
  4. 50 PRINT SCORE

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 :

  1. 10 PRINT "BONJOUR"
  2. 20 GOTO 10

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 :

  1. 10 FOR COUNT=1 to 4
  2. 20 READ NAME$,SCORE
  3. 30 PRINT NAME$,SCORE
  4. 40 NEXT COUNT
  5. 50 PRINT "FAIT"
  6. 60 END
  7. 70 DATA ROBERT, 20, ADAM, 30, MICHEL, 40, DENIS, 45

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 :

  1. 10 FOR COUNT=1 TO 4
  2. 20 READ NAME$,SCORE
  3. 30 PRINT NAME$,SCORE
  4. 40 NEXT COUNT
  5. 50 PRINT "FAIT"
  6. 60 END
  7. 70 DATA ROBERT, 20, ADAM, 30, MICHEL, 40, DENIS, 45

Le dernier exemple indique à ST BASIC d'ajouter un nombre autre que 1 à la variable.

L'exemple suivant indique à ST BASIC de compter à rebours :

  1. 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 :

  1. 10 READ MAXIMUM
  2. 20 FOR COUNT=1 TO MAXIMUM
  3. 30 READ NAME$, SCORE
  4. 40 PRINT NAME$, SCORE
  5. 50 NEXT COUNT
  6. 60 PRINT "FAIT"
  7. 70 END
  8. 80 DATA 5, WILLIAM, 20, ADAM, 30, MICHEL, 40, DENIS, 45, ROBERT, 50

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 :

  1. 10 READ NAME$,SCORE
  2. 20 WHILE NAME$<>"STOP"
  3. 30 PRINT NAME$,SCORE
  4. 40 READ NAME$,SCORE
  5. 50 WEND
  6. 60 PRINT "FAIT"
  7. 70 END
  8. 80 DATA WILLIAM, 20, ADAM, 30, MICHEL, 40, DENIS, 45, ROBERT, 50, STOP, 0

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 :

  1. 10 FOR COUNT=1 TO 5
  2. 20 IF COUNT=3 THEN PRINT "REGARDE UN ";
  3. 30 PRINT COUNT
  4. 40 NEXT COUNT
  5. 50 END

Ajouter ELSE donne au programme plus de flexibilité. Éditez le programme comme suit :

  1. 10 FOR COUNT=1 TO 5
  2. 20 IF COUNT=3 THEN PRINT "REGARDE UN"; ELSE PRINT "OOPS! UN ENNUI";
  3. 30 PRINT COUNT
  4. 40 NEXT COUNT
  5. 50 END

GOTO dirige ST BASIC vers une ligne de programme. En utilisant IF...THEN et GOTO, vous pouvez faire une boucle. Entrez ce programme :

  1. 10 READ NAME$, SCORE
  2. 20 IF NAME$="STOP" THEN GOTO 60
  3. 30 PRINT NAME$, SCORE
  4. 40 READ NAME$, SCORE
  5. 50 GOTO 20
  6. 60 PRINT "FAIT"
  7. 70 END
  8. 80 DATA WILLIAM, 20, ADAM, 30, MICHEL, 40, DENIS, 45, ROBERT, 50, STOP, 0

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 :

  1. 10 IF 2+2=4 AND 3+2=6 THEN PRINT "BRILLIANT" ELSE PRINT "PAS BRILLIANT"

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 :

  1. 5 A$="AU REVOIR"
  2. 10 IF 2+2=4 AND 3+2=5 AND A$="BONJOUR" THEN PRINT "BRILLIANT" ELSE PRINT "PAS BRILLIANT"

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 :

  1. 10 IF 2+2=4 OR 3+2=6 THEN PRINT "BRILLIANT" ELSE PRINT "PAS BRILLIANT"

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 :

  1. 5 A$="AU REVOIR"
  2. 10 IF 2+2=5 OR 3+3=5 OR A$="BONJOUR" THEN PRINT"BRILLIANT" ELSE PRINT "PAS BRILLIANT"

Ce programme affichera PAS BRILLANT. Changez A$ en "BONJOUR" et il affichera BRILLIANT.

NOT

NOT annule les déclarations logiques. Par exemple :

  1. 5 A$="AU REVOIR"
  2. 10 IF 2+2=5 OR 3+3=5 OR NOT A$="BONJOUR" THEN PRINT "BRILLIANT" ELSE PRINT "PAS BRILLIANT"

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 :

  1. 10 IF 2+2=4 IMP 3+3=6 THEN PRINT "VRAI IMPLICATION" ELSE PRINT "FAUSSE IMPLICATION"
  2. 20 IF 2+2=3 IMP 3+3=7 THEN PRINT "VRAI IMPLICATION" ELSE PRINT "FAUSSE IMPLICATION"
  3. 30 IF 2+2=3 IMP 3+3=6 THEN PRINT "VRAI IMPLICATION" ELSE PRINT "FAUSSE IMPLICATION"
  4. 40 IF 2+2=4 IMP 3+3=7 THEN PRINT "VRAI IMPLICATION" ELSE PRINT "FAUSSE IMPLICATION"

Ce programme affichera :

VRAI IMPLICATION
VRAI 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 :

  1. 10 CLEARW 2 : REM JEU DE CHOISIR UN PRIX
  2. 20 INPUT "ENTREZ UN CHIFFRE ENTRE 1 ET 5 POUR VOIR QU'IL VOUS EST MINIMUM !", PRIZE
  3. 30 ON PRIZE GOTO 50, 60, 70, 80, 90
  4. 40 PRINT "CORRESPOND A MES LEVRES..." GOTO 10
  5. 50 PRINT "UNE MAISON ET";
  6. 60 PRINT "UNE VOITURE ET";
  7. 70 PRINT "DES VACANCES ET";
  8. 80 PRINT "UNE TELEVISION ET";
  9. 90 PRINT "UN BATON DE CHOCOLAT"
  10. 100 INPUT "VOULEZ-VOUS REESSAYER (O/N)"; ANSWERS
  11. 110 IF ANSWERS="O" THEN GOTO 20
  12. 120 IF ANSWER$="N" THEN END
  13. 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 :

  1. 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 :

  1. 10 PRINT "C'EST LE DEROULEMENT NORMAL DU PROGRAMME."
  2. 20 GOSUB 60
  3. 30 PRINT "C'EST LE RESTE DU FLUX NORMAL DU PROGRAMME."
  4. 40 GOSUB 70
  5. 50 END
  6. 60 PRINT "C'EST:"
  7. 70 PRINT "UNE SOUS-ROUTINE."
  8. 80 RETURN

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.

  1. 10 FOR 1=1 TO 4
  2. 20 PRINT "C'EST LA ";
  3. 30 ON I GOSUB 60, 70, 80, 90
  4. 40 NEXT I
  5. 50 END
  6. 60 PRINT "SOUS-ROUTINE 1"
  7. 65 RETURN
  8. 70 PRINT "SOUS-ROUTINE 2"
  9. 75 RETURN
  10. 80 PRINT "SOUS-ROUTINE 3"
  11. 85 RETURN
  12. 90 PRINT "SOUS-ROUTINE 4"
  13. 95 RETURN

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 :

  1. 10 REM JEU DES DEVINETTES
  2. 20 ANSWER$="O"
  3. 30 WHILE ANSWER$<>"N"
  4. 40 COUNT=0: CLEARW 2 : REM ***** EFFACE LA FENETRE OUTPUT *****
  5. 45 REM ***** [:] PERMET PLUSIEURS INSTRUCTIONS SUR 1 LIGNE *****
  6. 50 READ NUMBER: IF NUMBER=-1 THEN RESTORE: GOTO 50
  7. 60 PRINT: PRINT "JE PENSE A UN NOMBRE ENTRE 1 ET 20." : PRINT
  8. 70 TRY: INPUT "VOTRE ESTIMATION: ", GUESS: ' ***** ESSAYER CET ETIQUETTE *****
  9. 80 COUNT=COUNT+1: 'COMPTER LES PROPOSITIONS
  10. 90 IF GUESS=NUMBER THEN GOTO OK : '***** OK EST UNE ETIQUETTE UTILISEE AVEC GOTO *****
  11. 100 IF GUESS>NUMBER THEN GOTO HIGH
  12. 110 ?: PRINT "NON. TROP BAS. ESSAYER A NOUVEAU.";: GOTO TRY: ' ***** ? SIGNIFIE PRINT *****
  13. 120 HIGH: PRINT: PRINT "VOUS AVEZ DEVINE AVEC UN NOMBRE TROP HAUT. ESSAYER A NOUVEAU.";:GOTO TRY
  14. 130 OK: PRINT: PRINT"TOUTES NOS FELICITATIONS! VOUS L'AVEZ EU EN " ; COUNT; " COUPS!"
  15. 140 INPUT "VOULEZ-VOUS JOUER ENCORE (O/N)"; ANSWER$
  16. 150 IF ANSWER$<>"O" AND ANSWER$<>"N" THEN GOTO 140
  17. 160 WEND
  18. 170 CLEARW 2: PRINT "MERCI D'AVOIR JOUE!" : END
  19. 180 ' ***** LES CHIFFRES VIENNENT DE LA LIGNE SUIVANTE *****
  20. 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 :

  1. FOR I=1 TO 10:NEXT I

Vous pouvez également exprimer FOR...NEXT comme suit :

  1. FOR I=1 TO 10:NEXT

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 :

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 :

  1. 10 COLOR 1,0,1
  2. 20 PRINT "LETTRES NOIR"
  3. 30 COLOR 2,0,1
  4. 40 PRINT "LETTRES ROUGE"
  5. 50 COLOR 3,0,1
  6. 60 PRINT "LETTRES VERTE"
  7. 70 FOR I=1 TO 5000: NEXT
  8. 75 COLOR 1,0,1
  9. 80 END

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 :

  1. 10 COLOR 0,0,1
  2. 20 PRINT "LETTRES BLANCHES"
  3. 30 COLOR 2,0,1
  4. 40 PRINT "LETTRES ROUGE"
  5. 50 COLOR 3,0,1
  6. 60 PRINT "LETTRES VERTE"
  7. 70 FOR I=1 TO 5000 : NEXT
  8. 75 COLOR 1,0,1
  9. 80 END

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 :

  1. 10 REM COLORS.BAS
  2. 20 WHITE=0: BLACK=1: RED=2: GREEN=3
  3. 30 COLOR BLACK,RED,GREEN
  4. 40 FULLW 2: CLEARW 2: FILL 0,0 :'***** FIXE LE REMPLISSAGE DE L'ARRIERE-PLAN A LA COULEUR ROUGE
  5. 50 PRINT "TEXTE NOIR, REMPLISSAGE ROUGE, CERCLE VERT, ";
  6. 60 CIRCLE 100,80,50
  7. 70 GOSUB DELAY
  8. 80 COLOR BLACK,WHITE,GREEN: '***** FAIRE REMPLISSAGE BLANC
  9. 90 PCIRCLE 100,80,50,0,450: '***** NOUS EXPLIQUERONS PCIRCLE PLUS TARD
  10. 100 PRINT "COIN BLANC";
  11. 110 GOSUB DELAY: GOSUB DELAY
  12. 120 END
  13. 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 :

  1. 5 ' PATTERNS.BAS
  2. 10 COLOR 1,3,1,4,4: ' ***** REMPLIR L'ECRAN AVEC DU VERT FUJI
  3. 20 FULLW 2: CLEARW 2: FILL 0,0
  4. 30 FOR P=2 TO 4
  5. 40 FOR I=1 TO 5
  6. 45 GOTOXY 8,13: PRINT " COLOR 1,2,1,I,P"
  7. 50 COLOR 1,2,1,I,P: ' I ET P CHOISSIS LE MOTIF. REMPLI AVEC ROUGE
  8. 60 PCIRCLE 150,80,80: ' ***** PCIRCLE UTILISER POUR LA COULEUR DE REMPLISSAGE
  9. 70 FOR D=1 TO 700 :NEXT D : ' ***** UNE BOUCLE DE DELAI
  10. 80 NEXT I
  11. 90 NEXT P
  12. 95 COLOR 1,0,1,1,1: ' ***** RETOURNE AUX COULEURS PAR DEFAUT
  13. 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 :

  1. 5 ' PATTERNS.BAS
  2. 10 COLOR 1,3,1,1,1: ' ***** FENETRE VERTE
  3. 20 FULLW 2: CLEARW 2: FILL 0,0
  4. 30 COLOR 1,2,1,1,1: ' ***** REMPLISSAGE ROUGE SOLIDE
  5. 40 CIRCLE 150,80,80
  6. 50 FILL 150,80
  7. 60 FOR D=1 TO 700 : NEXT
  8. 70 COLOR 1,1,1,4,4: ' ***** REMPLISSAGE DE MOTIF NOIR
  9. 80 FILL 150,80
  10. 90 END

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 :

  1. 10 COLOR 1,0,1,1,1: FULLW 2: CLEARW 2
  2. 20 CIRCLE 100,80,50
  3. 30 FOR I=1 TO 5000: NEXT
  4. 40 END

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 :

  1. 10 COLOR 1,0,1: FULLW 2: CLEARW 2 : R=1: ' ***** LE RAYON EST 1 *****
  2. 20 FOR C=0 TO 15 : ' ***** 16 COULEURS *****
  3. 30 COLOR 1,0,C
  4. 40 FOR I=1 TO 5 : '***** 5 CERCLES PAR COULEUR *****
  5. 50 CIRCLE 150, 80, R
  6. 60 R=R+1
  7. 70 NEXT
  8. 80 NEXT
  9. 90 FOR I=1 TO 5000: NEXT: ' ***** PAUSE *****
  10. 100 END

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 :

  1. 10 COLOR 1,0,1: FULLW 2: CLEARW 2
  2. 20 PRINT " PLUS DE MOTIFS" ;
  3. 30 V=80 : R=100
  4. 40 FOR H=200 TO 400 STEP 2
  5. 50 CIRCLE H, V, R
  6. 60 NEXT
  7. 70 H=300
  8. 80 FOR R=1 TO 98 STEP 2
  9. 90 CIRCLE H, V, R
  10. 100 NEXT
  11. 110 FOR I=1 TO 5000: NEXT: END

on obtiendra un résultat ressemblant à ceci :

La commande CIRCLE peut également dessiner des arcs. Entrez ce programme :

  1. 5 REM SEMICIRC.BAS
  2. 10 COLOR 1,0,1: FULLW 2: CLEARW 2
  3. 20 FOR I=20 TO 200 STEP 20
  4. 30 CIRCLE 300,100,I,0,1800
  5. 40 NEXT
  6. 50 FOR I=1 TO 5000: NEXT
  7. 60 END

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 :

  1. 5 ' SEMELIP5.BAS
  2. 10 COLOR 1,0,1: FULLW 2: CLEARW 2
  3. 20 FOR I=10 TO 100 STEP 10
  4. 30 ELLIPSE 300,100,I,50,0,1800
  5. 40 NEXT
  6. 50 END

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é :

  1. 5 'SPELLIPS.BAS
  2. 10 COLOR 1,1,1: FULLW 2: CLEARW 2
  3. 20 FOR I=10 TO 100 STEP 10
  4. 30 PELLIPSE 300,100,I,50,0,1800
  5. 40 NEXT: COLOR 1,0,1
  6. 50 END

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 :

  1. 5 FULLW 2
  2. 10 CLEARW 2
  3. 20 LINEF 50,50,100,100
  4. 30 FOR I=1 TO 5000: NEXT: END

on obtiendra un résultat ressemblant à ceci :

Le programme suivant affiche un défilé de lignes de différentes couleurs :

  1. 10 C=0: TOP=40: BOTTOM=120
  2. 20 FOR H=20 TO 580 STEP 20
  3. 30 COLOR 1,0,C
  4. 40 LINEF H,TOP,H,BOTTOM
  5. 50 IF C<4 THEN C=C + 1 ELSE C=1
  6. 60 NEXT
  7. 70 FOR I=1 TO 5000: NEXT: END

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 :

  1. 10 COLOR 1,0,1: FULLW 2: CLEARW 2
  2. 15 '***** QUATRE ESPACES AU DEBUT, UN A LA FIN *****
  3. 20 PRINT " JAN FEV MAR AVR MAI JUI JUI AOU SEP OCT NOV DEC";
  4. 30 LINEF 27,92,453,92
  5. 40 FOR C=32 TO 384 STEP 32: ' ***** C EST UN COMPTEUR DE COLONNE *****
  6. 50 READ SALES: AVERAGE = AVERAGE+SALES
  7. 60 IF SALES<60 THEN COLOR 1,1,2 ELSE COLOR 1,1,3
  8. 70 TOP=SALES: GOSUB BAR
  9. 80 NEXT
  10. 90 AVERAGE=AVERAGE/12
  11. 100 IF AVERAGE<60 THEN COLOR 2,1,2 ELSE COLOR 3,1,3
  12. 110 PRINT "AVG";
  13. 120 TOP=AVERAGE: C=424: GOSUB BAR
  14. 130 FOR D=1 TO 5000: NEXT
  15. 140 COLOR 1,0,1: END
  16. 150 DATA 50, 70, 60, 56, 50, 45, 70, 90, 100, 80, 70, 59
  17. 160 BAR: FOR P=1 TO 24 : ' ***** DESSINE UNE BARRE VERTICALE *****
  18. 165 ' ***** SOUSTRAIRE LA VALEUR DU BAS DU GRAPHIQUE POUR LA RENDRE A L'ORDRE VERS LE HAUT ****
  19. 170 LINEF C+P, 152-TOP,C+P,152
  20. 180 NEXT
  21. 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 :

  1. 10 '***** DESSINE UNE IMAGE *****
  2. 15 CLEARW 2
  3. 20 INPUT "POSITION (X,Y)"; H0, V0
  4. 30 COLOR 1,0,1
  5. 40 READ COUNT
  6. 50 FOR PART=1 TO COUNT
  7. 60 GOSUB DRAW
  8. 70 NEXT
  9. 80 FOR I=1 TO 5000: NEXT: END
  10. 90 DRAW: '***** DESSINE UNE FORME *****
  11. 100 READ H1,V1,H2,V2
  12. 110 WHILE H2<>999
  13. 120 LINEF H0+H1,V0-V1,H0+H2,V0-V2
  14. 130 H1=H2: V1=V2
  15. 140 READ H2,V2
  16. 150 WEND
  17. 160 RETURN
  18. 170 DATA 5
  19. 180 ' ***** CADRE *****
  20. 190 DATA 0, 12, 0, 0, 40, 0, 40, 12, 999, 0
  21. 200 ' ***** TOIT *****
  22. 210 DATA -4, 10, 20, 27, 44, 10, 999, 0
  23. 220 ' ***** CHEMINEE *****
  24. 230 DATA 0, 12, 0, 22, 4, 22, 4, 15, 999, 0
  25. 240 ' ***** FENETRE *****
  26. 250 DATA 4, 3, 4, 9, 20, 9, 20, 3, 4, 3, 999, 0
  27. 260 ' ***** PORTE *****
  28. 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 :

  1. 10 VOICE=1: VOLUME=8
  2. 20 READ VOLUME,NOTE,OCTAVE,DURATION
  3. 30 WHILE NOTE<>0
  4. 40 SOUND VOICE,VOLUME,NOTE,OCTAVE,DURATION
  5. 50 SOUND 1,0 : '***** DESACTIVE LA VOIX 1 *****
  6. 60 READ VOLUME,NOTE,OCTAVE,DURATION
  7. 70 WEND
  8. 80 END
  9. 90 DATA 8,12,4,25,8,9,4,25,8,5,4,25,8,12,3,25,8,2,4,5
  10. 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
  11. 110 DATA 8,7,4,25,8,12,4,25,8,9,4,25,8,5,4,25,8,2,4,5
  12. 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
  13. 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
  14. 140 DATA 8,7,4,15,8,5,4,5,0,1,4,15
  15. 150 DATA 8,7,4,5,8,9,4,15,8,5,4,5,8,2,4,15,8,5,4,5
  16. 160 DATA 8,2,4,5,8,12,3,15,0,1,4,15
  17. 170 DATA 8,12,3,5,8,5,4,15,8,9,4,5,8,7,4,15
  18. 180 DATA 8,12,3,5,8,5,4,15,8,9,4,5,8,7,4,5
  19. 190 DATA 8,9,4,5,8,10,4,5,8,12,4,5
  20. 200 DATA 8,9,4,5,8,5,4,5,8,7,4,15
  21. 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 :

  1. 10 CLEARW 2
  2. 20 OPEN "O", #1, "TESTFILE" ' "O" POUR OUTPUT
  3. 30 WHILE NAME$<>"*"
  4. 40 INPUT #1,NAME$
  5. 50 PRINT #1,NAME$: ' ***** PRINT# METS LES DONNES DANS LE FICHIER
  6. 60 WEND
  7. 70 CLOSE #1
  8. 80 END

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 :

  1. 10 CLEARW 2
  2. 20 OPEN "I",#1,"TESTFILE" ' "I" POUR INPUT
  3. 30 INPUT #1,NAME$
  4. 40 WHILE NOT EOF(1) : ' ***** EOF SIGNIFIE FIN DE FICHIER
  5. 50 PRINT NAME$
  6. 60 INPUT #1, NAME$
  7. 70 WEND
  8. 80 CLOSE #1
  9. 90 END

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 :

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.

  1. 10 CLEARW 2: COUNT=0
  2. 20 INPUT "ENTREZ LE POINTAGE: ", SCORE
  3. 30 WHILE SCORE>0
  4. 40 TALLY(COUNT)=SCORE
  5. 50 INPUT "ENTREZ LE POINTAGE: ", SCORE
  6. 60 COUNT=COUNT+1
  7. 70 WEND
  8. 80 CLEARW 2
  9. 90 FOR 1=0 TO COUNT
  10. 100 AVERAGE=AVERAGE+TALLY(I):NEXT:AVERAGE=AVERAGE/COUNT
  11. 110 PRINT "LA MOYENNE POUR ";COUNT;" ET LE POINTAGE EST:";AVERAGE
  12. 120 PRINT: INPUT "QUEL POINTAGE AIMERIEZ-VOUS VOIR";SELECTION
  13. 130 WHILE SELECTION>0 AND SELECTION<COUNT+1
  14. 140 PRINT "LE POINTAGE ";SELECTION " EST :";TALLY(SELECTION)
  15. 150 PRINT:INPUT "QUEL POINTAGE AIMERIEZ-VOUS VOIR"; SELECTION
  16. 160 WEND
  17. 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 :

  1. 10 CLEARW 2: COUNT=0
  2. 20 INPUT "ENTREZ LES VENTES: ", SALES(COUNT,0): '***** ENTREE DIRECTEMENT DANS LE TABLEAU *****
  3. 30 WHILE SALES(COUNT,0)>-0
  4. 40 SALES(COUNT,1)=SALES(COUNT,0)*0.08: '***** COMMISSION DE CALCUL *****
  5. 50 INPUT "ENTREZ LES VENTES: ", SALES(COUNT,0)
  6. 60 COUNT=COUNT+1
  7. 70 WEND
  8. 80 CLEARW 2
  9. 90 PRINT "COMMISSION D'ENTREE SUR LES VENTES"
  10. 100 FOR I=0 TO COUNT
  11. 110 PRINT I, SALES(I,0), SALES(I,1)
  12. 120 NEXT
  13. 130 END
  14. 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 :

  1. 10 OPTION BASE 1
  2. 20 DIM POINTS(0,5)

Le premier élément du tableau POINTS est (1,1).

  1. 30 OPTION BASE 0
  2. 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 :

  1. 10 CLEARW 2
  2. 20 A$="JEAN THOMAS TREMBLAY"
  3. 30 B$=LEFT$(A$,4):PRINT B$: ' ***** AFFICHE LES 3 CARACTERES A GAUCHE *****
  4. 40 B$=MID$(A$,6,3):PRINT B$: ' ***** AFFICHE LES 3 CARACTERES DEBUTANT AU 6IEME CARACTERES *****
  5. 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 :

  1. 10 FULLW 2: CLEARW 2
  2. 20 A$="                     ": '20 ESPACES
  3. 30 BS="JEAN-FRANCOIS GAGNON"
  4. 40 LSET A$=RIGHT$(B$,6)
  5. 50 PRINT A$
  6. 60 RSET A$=LEFT$(B$,4)
  7. 70 PRINT A$
  8. 80 END

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$ :

  1. A$=STR$(TOTAL)

La fonction VAL reconvertit les variables numériques en variables de chaîne de caractères :

  1. 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 :

  1. 10 DEF FNCOST=QUANTITY*PRICE
  2. 20 INPUT "QUANTITE : ",QUANTITY
  3. 30 INPUT "PRIX: ", PRICE
  4. 40 PRINT "LE COUT EST "; FNCOST
  5. 50 END

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 :

  1. 10 DEF FNPAY(SALES)=SALES*COMMISSION-0.02*SALES
  2. 20 INPUT "COMMISSION : ",COMMISSION
  3. 30 INPUT "VENTES : ",SALES
  4. 40 WHILE SALES>0
  5. 50 PRINT "LA PAYE EST DE ";FNPAY(SALES)
  6. 60 INPUT "VENTES: ",SALES
  7. 70 WEND
  8. 80 END

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 :

  1. 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 :

  1. 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 :

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 :

  1. BSAVE "ARRAY" ,100,65

enregistre 650 octets, en commençant à l'adresse 100, dans un fichier nommé ARRAY. La ligne de programme :

  1. 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 :

  1. 100 PLOT=23
  2. 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 :

  1. 20 CLEARW 2 : FULLW 2
  2. 38 OPEN "R",#1, "TESTFILE" : '***** OPEN EN ACCES ALEATOIRE
  3. 35 '***** CHARGE ENREGISTREMENT DOIT AVOIR 3 CHAMPS
  4. 40 FIELD #1,20 AS V$,10 AS X$,30 AS N$: ' 20 ESPACES SONT RESERVES POUR V$,10 POUR X$,...
  5. 45 '***** JUSTIFICATION A GAUCHE V$ ET X$
  6. 50 LSET V$="BONJOUR"
  7. 60 LSET X$="CECI"
  8. 65 ' ***** JUSTIFICATION A DROITE N$
  9. 70 RSET N$="EST UN ENREGISTREMENT 1"
  10. 75 PRINT U$;X$;N$
  11. 80 PUT #1: '***** METTRE LE PREMIER ENREGISTREMENMT DANS UN FICHIER
  12. 90 RSET N$="EST UN ENREGISTREMENT 2"
  13. 95 PRINT V$;X$;N$
  14. 100 PUT #1: ' ***** METTRE LE SECOND ENREGISTREMENT DANS LE FICHIER
  15. 110 CLOSE 1
  16. 115 PRINT
  17. 120 OPEN "R",#1,"TESTFILE"
  18. 130 FIELD #1,20 AS A$,10 AS B$,30 AS C$ : ' ***** AVERTISSEMENT DE NOUVEAU NOMS DE VARIABLES
  19. 140 GET #1,2: ' ***** DEMANDE LE SECOND PREMIER ENREGISTREMENT
  20. 150 PRINT A$;B$;C$
  21. 160 GET #1,1: ' ***** DEMANDE LE PROCHAIN PREMIER ENREGISTREMENT
  22. 170 PRINT A$;B$;C$
  23. 180 CLOSE 1
  24. 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 :

  1. 10 '***** RAPPEND.BAS
  2. 20 CLEARW 2 : FULLW 2
  3. 30 OPEN "R", #1, "TESTFILE" : ' ***** OPEN EN ACCES ALEATOIRE
  4. 35 '***** CHAQUE ENREGISTREMENT A 3 CHAMPS
  5. 40 FIELD #1,20 AS V$,10 AS X$,30 AS N$
  6. 50 LSET U$="BONJOUR"
  7. 60 LSET KS="CECI"
  8. 65 ' ***** JUSTIFICATION A GAUCHE DE N$
  9. 70 RSET N$="EST L'ENREGISTREMENT 3"
  10. 75 PRINT V$;X$;N$
  11. 80 PUT #1,3: ' ***** METTRE L'ENREGISTREMENT DANS LE FICHIER
  12. 90 CLOSE 1
  13. 100 OPEN "R", #1,, "TESTFILE"
  14. 110 FIELD #1,20 AS A$,10 AS B$,30 AS C$
  15. 120 FOR I=1 TO 3
  16. 130 GET #1,I: ' ***** DEMANDE L'ENREGISTREMENT
  17. 140 PRINT V$;X$;N$: ' ***** AFFICHE L'ENREGISTREMENT
  18. 150 NEXT
  19. 160 CLOSE 1
  20. 170 END

Le programme suivant remplace un enregistrement au milieu du fichier :

  1. 10 ' ***** RINSERT.BAS
  2. 26 CLEARW 2: FULLW 2
  3. 30 OPEN "R" , #1, "TESTFILE": ' ***** OPEN EN ACCES ALEATOIRE
  4. 35 '***** CHAQUE ENREGISTREMENT A 3 CHAMPS
  5. 40 FIELD #1,20 AS V$,10 AS X$,30 AS N$
  6. 50 LSET V$="BONJOUR"
  7. 60 LSET X$="CECI"
  8. 65 '***** JUSTIFICATSION A DROITE N$
  9. 70 RSET N$="EST L'ENREGISTREMENT DU MILIEU"
  10. 75 PRINT V$;X$;N$
  11. 80 PUT #1,2: ' ***** REMPLACE LE SECOND ENREGISTREMENT
  12. 90 CLOSE 1
  13. 100 OPEN "R", #1,"TESTFILE"
  14. 110 FIELD #1,20 AS A$,10 AS B$,30 AS C$
  15. 120 FOR I=1 TO 3
  16. 130 GET #1,I: ' ****** DEMANDE L'ENREGISTREMENT
  17. 140 PRINT V$;X$;N$ : '***** AFFICHE L'ENREGISTREMENT
  18. 150 NEXT
  19. 160 CLOSE 1
  20. 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 :

  1. 10 ' RPUTNUM.BAS
  2. 20 FULLW 2: CLEARW 2
  3. 30 OPEN "R", #1, "TESTFILE"
  4. 40 FIELD #1,20 AS NAME$,2 AS AGE$,30 AS JOB$
  5. 50 INPUT "NOM : ",N$
  6. 60 WHILE NS<>"*"
  7. 70 INPUT "AGE : ", AGE
  8. 80 INPUT "EMPLOI : ",J$
  9. 90 LSET NAME$=N$: LSET JOB$=J$
  10. 95 AGE$=MKI$(AGE) : ' ***** CONVERTI L'AGE EN UNE CHAINE DE CARACTERES DE 2 OCTETS
  11. 180 PUT #1
  12. 110 INPUT "NOM: ", NAME$
  13. 120 WEND
  14. 130 CLOSE 1
  15. 140 PRINT
  16. 150 OPEN "R", #1, "TESTFILE"
  17. 160 FIELD #1,20 AS NAME$,2 AS AGE$,30 AS JOB$
  18. 170 FOR I=1 TO 3
  19. 180 GET #1,I
  20. 190 AGE=CVI(AGE$) : '***** CONVERTI L'AGE EN AGE ENTIER
  21. 200 PRINT NAME$;AGE;JOB$
  22. 210 NEXT
  23. 220 CLOSE 1
  24. 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.



Dernière mise à jour : Mardi, le 4 avril 2023