Entre dans une porte et sort par l'autre
GW-BASIC
(PC-BASIC)
Initiation au langage Basic
Les instructions d'entrée/sortie vous permettent d'envoyer des données (du clavier à l'ordinateur, de l'ordinateur à l'écran et de l'ordinateur à l'imprimante. Ces fonctions sont principalement utilisées à l'intérieur des programmes pour saisir des données et afficher des résultats et des messages.
Un lecteur de ligne
(LINE
INPUT)
La première instruction d'entrée/sortie est LINE INPUT, pour saisir une ligne entière (jusqu'à 255 caractères) à partir du clavier dans une variable de chaîne, en ignorant les délimiteurs.
Sa syntaxe est la suivante :
Pour saisir une ligne entière
(jusqu'à 255 caractères) à partir du clavier dans une variable de chaîne, en
ignorant les délimiteurs.
LINE INPUT [;][chaîne d'invite;]variable de
chaîne
la chaîne d'invite est un
littéral de chaîne, affiché à l'écran, qui permet à l'utilisateur de saisir
pendant l'exécution du programme.
Un point d'interrogation n'est imprimé
que s'il fait partie d'une chaîne d'invite.
La variable de chaîne accepte
toutes les entrées depuis la fin de l'invite jusqu'au retour de charriot. Les
blancs de fin sont ignorés.
LINE INPUT est presque identique à
l'instruction INPUT, sauf qu'elle accepte des caractères spéciaux (tels que des
virgules) dans l'entrée de l'opérateur pendant l'exécution du programme.
Si une séquence de saut de ligne/retour de charriot (cette commande uniquement)
est rencontrée, les deux caractères sont saisis et renvoyés en écho. La saisie
des données se poursuit.
Si LINE INPUT est immédiatement suivi d'un
point-virgule, appuyer sur la touche RETURN ne déplacera pas le curseur à la
ligne suivante.
Une entrée de ligne peut être échappée en tapant CTRL-C.
GW-BASIC revient au niveau de commande et affiche OK.
Taper CONT reprend
l'exécution à la ligne LINE INPUT.
Avec LINE INPUT, vous pouvez saisir des données de chaîne sans vous soucier d'inclure accidentellement des délimiteurs tels que des virgules, des guillemets et des deux-points.
L'ordinateur accepte tout. En effet, certaines situations nécessitent que vous saisissiez des virgules, des guillemets et des blancs de début dans le cadre des données.
Exemples:
LINE INPUT X$
vous permet d'entrer X$ sans afficher d'invite.
LINE INPUT "LAST NAME, FIRST NAME? ";N$
affiche l'invite « NOM, PRENOM ? » et saisit les données.
Les virgules ne terminent pas la chaîne d'entrée. Notez que l'invite inclut le point d'interrogation et l'espace suivant.
Pour mieux comprendre LINE INPUT, entrez et exécutez le programme suivant :
10 CLEAR 300: CLS
20 PRINT
TAB(8); "ÉNONCÉ D'ENTRÉE DE LIGNE":PRINT
30 PRINT: PRINT "*** Entrez du texte
***"
40 ' *** Obtenez la chaîne, puis imprimez-la ***
50 A$ = "" 'FIXE A$
À CHAÎNE NULLE
60 LINE INPUT "==> "; A$
70 IF A$ = "" THEN END' SI
TOUJOURS NUL, STOP!
80 PRINT A$
90 GOTO 50
Impression personnalisée
(PRINT USING)
Pour imprimer des chaînes
ou des nombres en utilisant un format spécifié.
Syntaxe:
PRINT USING string expressions;list of expressions[;]
Commentaires:
string expressions est une chaîne littérale ou une variable composée de
caractères de formatage spéciaux. Les caractères de formatage déterminent le
champ et le format des chaînes ou des nombres imprimés.
list of
expressions se compose de la chaîne ou des expressions numériques séparées par
des points-virgules.
Champs de chaîne
Les trois caractères suivants peuvent être utilisés pour formater le champ de chaîne :
! Spécifie que seul le premier caractère de la chaîne doit être imprimé.
\n espaces\
Spécifie que 2+n caractères de la chaîne doivent être imprimés.
Si les barres obliques inverses sont saisies sans espaces, deux caractères sont imprimés ; si les barres obliques inverses sont tapées avec un espace, trois caractères sont imprimés, et ainsi de suite.
Si la chaîne est plus longue que le champ, les caractères supplémentaires sont ignorés.
Si le champ est plus long que la chaîne, la chaîne est justifiée à gauche dans le champ et complétée par des espaces à droite.
Par exemple:
10 A$="LOOK": B$="OUT"
30 PRINT USING "!"; A$; B$
40 PRINT USING"\ \"; A$; B$
50 PRINT USING"\ \"; A$; B$;"!!"
RUN
LO
LOOKOUT
LOOK
OUT!!
&
Spécifie un champ de chaîne de longueur variable. Lorsque le champ est spécifié avec &, la chaîne est sortie exactement comme l'entrée.
Par exemple:
10 A$="LOOK": B$="OUT"
20 PRINT USING "!"; A$
30 PRINT USING "&"; B$
RUN
LOUT
Champs numériques
Les caractères spéciaux suivants peuvent être utilisés pour formater le champ numérique :
#
Un signe dièse est
utilisé pour représenter chaque position de chiffre. Les postes de chiffres sont
toujours pourvus.
Si le nombre à imprimer
comporte moins de chiffres que les positions spécifiées, le nombre est justifié
à droite (précédé d'espaces) dans le champ.
Un point décimal peut être
inséré à n'importe quelle position dans le champ.
Si la chaîne de format spécifie qu'un chiffre doit précéder la virgule décimale, le chiffre est toujours imprimé (comme 0 si nécessaire). Les nombres sont arrondis si nécessaire.
Par exemple:
PRINT USING "##.##";.78 0.78
PRINT USING "###.##";987.654 987.65
PRINT USING "##.##" ;10.2, 5.3, 66.789, .234 10.20 5.30 66.79 0.23
Dans le dernier exemple, trois espaces ont été insérés à la fin de la chaîne de format pour séparer les valeurs imprimées sur la ligne.
+ Un signe plus au début ou à la fin de la chaîne de format entraîne l'impression du signe du nombre (plus ou moins) avant ou après le nombre.
-
Un signe moins à la
fin du champ de format entraîne l'impression des nombres négatifs suivis d'un
signe moins.
Par exemple:
PRINT USING"+##.##";-68.95, 2.4, 55.6, -9 -68.95 +2.40 +55.60 -0.90
PRINT USING"##.##-";-68.95, 22.449, -7.01 68.95 22.45 7.01-
**
Un double
astérisque au début de la chaîne de format entraîne le remplissage des espaces
de début du champ numérique par des astérisques. Le ** spécifie également deux
positions de chiffres supplémentaires.
Par exemple:
PRINT USING "**#.#";12.39, -0.9, 765.1 *12.4* -09 765.1
$$
Un
signe de dollar double au début de la chaîne de format entraîne l'impression
d'un signe dollar immédiatement à gauche du nombre formaté. Le $$ spécifie deux
positions de chiffres supplémentaires, dont l'une est le signe de dollar. Le
format exponentiel ne peut pas être utilisé avec $$. Les nombres négatifs ne
peuvent pas être utilisés à moins que le signe moins soit vers la droite.
Par exemple:
PRINT USING
"$$###.##";456.78
$456.78
**$
Le
**$ au début d'une chaîne de format combine les effets des deux symboles
ci-dessus. Les espaces de début sont remplis d'astérisques et un signe dollar
est imprimé avant le nombre. **$ spécifie trois positions de chiffres
supplémentaires, dont l'une est le signe dollar.
Par exemple:
PRINT USING
"**$##.##" ;2.34
***$2.34
,
Une virgule à
gauche du point décimal dans la chaîne de format entraîne l'impression d'une
virgule à gauche de chaque troisième chiffre à gauche du point décimal. Une
virgule à la fin de la chaîne de format est imprimée dans le cadre de la chaîne.
PRINT USING "####.##";1234.5
1234.50
^^^^
Quatre carets
peuvent être placés après les caractères de position des chiffres pour spécifier
le format exponentiel. Les quatre carets permettent d'imprimer E+xx.
Toute position de la virgule décimale peut être spécifiée. Les chiffres significatifs sont justifiés à gauche et l'exposant est ajusté. À moins qu'un signe + ou un signe + ou - à la fin ne soit spécifié, une position de chiffre est utilisée à gauche de la virgule pour imprimer un espace ou un signe moins.
Par exemple:
PRINT USING "##.##^^^^";234.56 2.35E+02
PRINT USING ".####^^^^-";888888 OK
PRINT USING "+.##^^^^";123 +.12E+03
Notez que dans les exemples ci-dessus, la virgule n'est pas utilisée comme délimiteur avec le format exponentiel.
_
Un trait de soulignement dans la chaîne de format entraîne la sortie du caractère suivant sous forme de caractère littéral.
Par exemple:
PRINT USING "_!##.##_!";12.34
!12.34!
Le caractère littéral lui-même peut être un trait de soulignement en plaçant "_" dans la chaîne de format.
%
Un signe de
pourcentage est imprimé devant le nombre si le nombre à imprimer est supérieur
au champ numérique spécifié.
Si l'arrondi fait que le nombre dépasse le champ, un signe de pourcentage est imprimé devant le nombre arrondi.
Par exemple:
PRINT USING "##.##";111.22 %111.22
PRINT USING ".##"';.999 %1.00
Si le nombre de chiffres spécifié dépasse 24, une erreur "Illegal function call" se produit.
Exemple de programme
5 CLS
10 INPUT "REVENU ";I
15 INPUT "DÉPENSES ";E
20 N = I -E 'GAIN OU PERTE NET
25 A$ = "$$####.##"
30 B$ = "$$####.##"
35 C$ = "+$$####.##"
40 CLS: PRINT "RAPPORT MENSUEL
SUR LA SITUATION ÉCONOMIQUE"
45 PRINT STRING$(40,"-")
50 PRINT "
REVENU",
55 PRINT "DÉPENSES",
60 PRINT "TOTAL
(+) OU (-)"
65 PRINT STRING$(40 ,"-" )
70 PRINT USING A$; I;
75 PRINT
TAB(13) USING B$; E;
80 PRINT
TAB(30) USING C$; N
90
PRINT:PRINT
POS
POS est une fonction d'entrée/sortie qui renvoie la position actuelle du curseur sur l'écran.
Voici sa syntaxe :
POS(c)
c est un argument factice.
PRINT POS(X)
Une façon d'utiliser POS consiste à désactiver la fonction "wrap-around" sur l'écran ou l'imprimante. Faire cela empêche les mots d'être cassés au milieu. D'autre part, il raccourcit nécessairement la longueur de la ligne.
Exécutez le programme suivant pour voir POS au travail :
10 CLS
20 WIDTH 80
30
A$=INKEY$:IF A$=""THEN GOTO 30 ELSE PRINT A$;
40 IF POS(X)>10 THEN PRINT
CHR$(13);
50 GOTO 30
Provoque un retour de charriot après l'impression du 10e caractère sur chaque ligne de l'écran.
Périphérique
Avez-vous déjà pensé à votre écran vidéo comme un périphérique "de sortie" et à votre clavier comme un périphérique "d'entrée" ?
Temps après la minuterie
(TIMER)
Pour renvoyer des nombres à virgule flottante simple précision représentant le nombre de secondes écoulées depuis minuit ou la réinitialisation du système.
Votre ordinateur dispose également d'un "minuteur" intégré qui mesure le temps en soixantièmes de seconde (environ). Au moment où vous allumez l'ordinateur, la minuterie commence à compter à zéro.
A tout instant, vous pouvez voir le décompte de la minuterie en utilisant la fonction TIMER
Taper:
PRINT TIMER
Les fractions de secondes sont calculées au degré le plus proche possible. La minuterie est en lecture seule.
Une horloge est intégrée à chaque ordinateur, fonctionnant à une fréquence définie. Cette horloge est, bien, cadencée à des cycles par seconde, avec des unités en hertz, et est une mesure de la vitesse du processeur de l'ordinateur.
Mais l'horloge d'un ordinateur peut aussi, avec un peu de programmation astucieuse, donner l'heure. GW-BASIC rend cela facile : une variable de chaîne prédéfinie, appelée TIME$, est instantanément déclarée et initialisée chaque fois que l'interpréteur est chargé. TIME$, lorsqu'il est imprimé à l'écran, affiche l'heure au format suivant :
HEURE : MINUTE : SECONDE
où les heures sont en temps militaire (c'est-à-dire l'horloge de 24 heures). Par exemple, 14h53 et 22 secondes apparaîtraient comme suit :
16:53:22
Ce serait bien si nous avions quelques options, cependant.
Par exemple : et si nous voulions voir uniquement les minutes ou les secondes ? Et si nous voulions convertir l'heure militaire au format 12 heures ?
L'utilisation de la fonction MID$ sur la variable TIME$ nous permet d'extraire les heures, les minutes et/ou les secondes de l'horloge interne.
Pour convertir l'horloge de 24 heures en une horloge de 12 heures, l'heure doit d'abord être transformée en une variable numérique - la fonction VAL de la line 70 accomplit cette tâche. Ensuite, une série d'instructions conditionnelles (lignes 75 à 100) dispense de l'heure milliaire.
Le programme s'exécute indéfiniment, à moins que vous n'appuyiez sur la touche Échap pour le terminer. La variable INKEY$ sollicite l'entrée de l'utilisateur sur la line 110 ; si autre chose que CHR$(27) (une fonction extraite de la table ASCII, dans laquelle 27 = Échap) est pressé sur le clavier, le programme revient à la line 30.
10 KEY OFF
20 CLS
30 LOCATE 1,1:PRINT "VARIOUS FORMS OF THE
TIME:"
40 LOCATE 2,1:PRINT TIME$
50 LOCATE 3,1:PRINT "SECONDS:
";MID$(TIME$,7,2)
60 LOCATE 4,1:PRINT "MINUTES:
";MID$(TIME$,4,2)
70 HOUR=VAL(MID$(TIME$,1,2))
75 IF HOUR=0 THEN HOUR=12
80 IF HOUR>12 THEN H0UR=HOUR-12:LOCATE
5,1:PRINT "HOUR: ";HOUR;"PM"
90 IF HOUR*12 THEN LOCATE 5,1:PRINT "HOUR: ";HOUR
;"PM"
100 IF HOUR<12 THEN LOCATE 5,1:PRINT "HOUR:
";HOUR ; "AM"
110 I$=INKEY$
120 IF
I$<>CHR$(27) THEN 30
Maintenant que nous pouvons manipuler la variable de chaîne TIME$, la prochaine étape logique serait de créer une horloge analogique à l'écran. En effet, plus tard, nous le ferons.
Constantes hexadécimales et octales
HEX$
Pour renvoyer une chaîne qui représente la valeur hexadécimale de l'argument numérique.
v$=HEX$(x)
HEX$ convertit les valeurs
décimales comprises entre -32768 et +65535 en une expression de chaîne
hexadécimale comprise entre 0 et FFFF.
Les nombres hexadécimaux sont des
nombres en base 16, plutôt qu'en base 10 (nombres décimaux). L'annexe C et
l'annexe G du guide de l'utilisateur GW-BASIC(PC-BASIC)
contiennent plus d'informations sur les hexadécimaux et leurs équivalents.
x est arrondi à un entier avant l'évaluation de HEX$(x). Voir la fonction
OCT$ pour les conversions octales.
Si x est négatif, la forme de
complément à 2 (binaire) est utilisée.
10 CLS: INPUT "TAPEZ UN NOMBRE
DÉCIMAL";X
20 A$=HEX$(X)
30 PRINT X "DÉCIMAL EST "A$" HEXADÉCIMAL"
RUN
TAPEZ UN NOMBRE DÉCIMAL? 32
32 DÉCIMAL IS 20 HEXADÉCIMAL
10 CLS:P=0
20 FOR X= 32 TO
255
25 IF P=60 THEN P=0
30 PRINT TAB(P)X;"HEX= "HEX$(X);
35 P=P+15
40 NEXT X
OCT$
Pour convertir une valeur décimale en une valeur octale.
OCT$(x)
x est arrondi à un nombre
entier avant l'évaluation de OCT$(x).
Cette instruction convertit une
valeur décimale comprise entre -32768 et +65535 en une expression de chaîne
octale.
Les nombres octaux sont des nombres en base 8 plutôt qu'en base
10 (nombres décimaux).
10 PRINT OCT$(18)
RUN
22
Le décimal 18 est égal à l'octal 22.