LE COSTANTI
Le costanti sono dati
che non variano durante l'elaborazione e mantengono sempre il valore che
rappresentano.
Si possono utilizzare costanti numeriche ed
alfanumeriche.
Le costanti alfanumeriche, o stringhe, possono comprendere
qualsiasi carattere e vengono racchiuse tra virgolette.
Se si definisce un
numero tra virgolette ("1.500") viene considerato una stringa e non può
essere utilizzato in operazioni aritmetiche.
Le costanti numeriche sono di
vari tipi, come le variabili: numeri interi, numeri reali espressi con la
notazione decimale e numeri in formato esponenziale (una mantissa, anche col
punto decimale e una parte frazionaria, la lettera E e un esponente con
segno).
E' possibile definire costanti in virgola mobile in doppia
precisione sostituendo la lettera D alla lettera E.
Ci sono poi le costanti
esadecimali, cioè numeri nel sistema di numerazione a base 16; queste
costanti iniziano con il simbolo &H.
LA DEFINIZIONE DI COSTANTI SIMBOLICHE
E' possibile associare un nome a una costante in
modo che nel corso del programma si possa far riferimento alla costante mediante
il nome anziché mediante il suo valore, numero o
stringa.
CONSTnome = espressione
La definizione di
costanti simboliche risulta utile soprattutto nel caso in cui si debba
successivamente variare il valore della costante nel programma. Basterà
variare il valore nell'istruzione di definizione perché risulti
modificato in tutte le istruzioni che la utilizzano.
LE COSTANTI NUMERICHE: I NUMERI REALI
Per le costanti numeriche in singola precisione
vengono prese in considerazione al massimo 6 cifre; in doppia precisione vengono
considerate al massimo 16 cifre.
Una costante numerica di 8 cifre viene
interpretata come una costante in doppia precisione; per definire una costante
in doppia precisione si può anche utilizzare il formato esponenziale con
la lettera D o far terminare il numero con il simbolo #.
Le costanti in
singola precisione invece hanno meno di 7 cifre, il formato esponenziale con la
E, o terminano con un !.
LA DEFINIZIONE DELLE VARIABILI
Una variabile è un'area di memoria. In
essa vengono memorizzati i valori che via via vengono assegnati alla variabile;
ogni variabile è definita di un particolare tipo, cioè può
contenere solo valori di quel tipo.
I nomi delle variabili devono
cominciare con una lettera e possono essere al massimo di 40 caratteri;
ciò significa che, se due nomi sono lunghi 41 caratteri e differiscono
solo per l'ultimo, vengono considerati come se si riferissero alla stessa
variabile; 40 caratteri sono comunque molti e in genere non sorgono
problemi.
Conviene usare nomi non troppo lunghi per facilitare la scrittura
del programma, ma neanche troppo corti, in modo che possano essere
significativi. (L'abitudine, ancora oggi diffusa, di usare nomi molto brevi, di
uno o due caratteri, deriva dal fatto che i primi interpreti distinguevano
soltanto i primi due caratteri).
Il tipo della variabile viene definito da
un suffisso, cioè un carattere posto in fondo al nome della
variabile.
I suffissi possibili sono:
! o niente: variabile numerica
reale in precisione semplice;
% : variabile numerica intera;
$ :
variabile alfanumerica, detta anche stringa;
# : variabile numerica reale
in precisione doppia;
& : variabile numerica intera
long.
VALORI AMMESSI PER I DIVERSI TIPI DI VARIABILI
I numeri interi validi sono quelli contenuti
nell'intervallo -32768/32767.
Per la rappresentazione vengono utilizzati 2
byte.
Gli interi LONG possono variare tra -2.147.483.648 e 2.147.483.647.
Per la rappresentazione vengono utilizzati 4 byte.
I numeri reali in
precisione semplice possono variare tra -3.402823E+38 e 3.402823E+38; esiste
comunque un intervallo dello 0 in cui non sono definiti valori; il più
grande numero negativo valido è -2.802597E-45; il più piccolo
numero positivo valido è 2.802597E-45.
I numeri rappresentabili sono
soltanto quelli con 7 cifre di precisione, perciò ci sono molti valori
che non sono rappresentabili anche nell'intervallo di definizione dei
valori.
Per la rappresentazione vengono utilizzati 4 byte.
I numeri
reali in doppia precisione possono variare tra -1.79769313486231D+308 e
1.79769313486231D+308; esiste anche in questo caso un intervallo dello 0 in cui
non sono definiti valori; il più grande numero negativo valido è
-4.940656458412465D-324; il più piccolo numero positivo valido è
4.940656458412465D-324; i numeri possono avere al massimo 16 cifre di
precisione.
Per la rappresentazione vengono utilizzati 8 byte.
Le
stringhe possono contenere da 0 a 32.767 caratteri.
Una stringa occupa
tanti byte quanti sono i caratteri della stringa più altri tre byte in
ogni caso.
LE ISTRUZIONI DEF
Per semplificare la definizione dei tipi di
variabili è possibile stabilire che tutti i nomi che iniziano con una
certa lettera (o certe lettere) siano di uno stesso tipo.
Le istruzioni che
impostano il tipo di dati predefinito per le variabili sono:
DEFINT per le
variabili numeriche intere;
DEFLNG per le variabili numeriche intere
LONG;
DEFSNG per le variabili numeriche reali in singola
precisione;
DEFDBL per le variabili numeriche reali in doppia
precisione;
DEFSTR per le variabili alfanumeriche o stringhe.
E'
consigliabile riunire le istruzioni di definizione di tipo all'inizio del
programma.
Una variabile per cui non sia precisato in nessun modo il tipo,
né con le istruzioni di definizione di tipo né con un suffisso,
viene considerata numerica reale in singola
precisione.
ESEMPI
Con le istruzioni DEF è possibile
stabilire che tutte le variabili che cominciano con le lettere indicate siano di
un certo tipo.
L'istruzione
DEFINT N
stabilisce che tutti i nomi
che iniziano con la lettera N definiscono variabili numeriche
intere.
Però, nonostante questa definizione, NUMERO! è una
variabile numerica reale in singola precisione; il suffisso infatti ha sempre la
priorità sulle altre definizioni.
L'istruzione
DEFSTR
A-C,H-L
stabilisce che tutti i nomi che iniziano con letter A, B, C, H, I,
L definiscono variabili alfanumeriche.
IL COMANDO CLEAR
CLEAR di solito viene utilizzato come comando in
modo diretto, ma può comparire anche come istruzione all'interno del
programma; il suo compito è di pulire l'area di memoria usata per le
variabili, impostando a 0 le variabili numeriche e a spazi le variabili
alfanumeriche.
PROGRAMMA 1
Questo programma serve a dimostrare
quali sono i valori ammessi per le variabili numeriche
intere.
Descrizione delle variabili
+----------------------------------------------------------------+
¦ NOME ¦ TIPO ¦ I/O ¦ SIGNIFICATO ¦
+-----------+-------------+------------------+-------------------¦
¦ NUMERO ¦numero intero¦ input/output ¦numero da stampare ¦
+----------------------------------------------------------------+
Flow chart Programma 1Pseudocodifica (vedi
Figura)
1 inizio
2 emissione richiesta numero
3 lettura NUMERO
4 emissione NUMERO
5 fine
2 Messaggio di richiesta del dato
3 Istruzione di lettura del dato; il programma si arresta e l'utente deve inserire un numero intero.
4 Stampa del numero inserito dall'utente.
Programma in Basic
10 REM Dimostrazione dell'uso di variabili numeriche intere
20 PRINT "Inserire un numero intero"
30 INPUT NUMERO%
40 PRINT "Il numero inserito è: "; NUMERO%
50 END
30 Istruzione per la lettura del numero; la variabile
è numerica intera poiché termina con il simbolo %. I numeri validi
sono quelli compresi tra -32768 e 32767.
40 La stampa del numero inserito
è preceduta da un messaggio esplicativo.
+----------------------------------------------------------------+
¦ Esempi di esecuzione ¦
¦ ¦
¦ Inserire un numero intero ¦
¦ ? 1524 ¦
¦ Il numero inserito è: 1524 ¦
¦ ¦
¦ Inserire un numero intero ¦
¦ ? 56780 ¦
¦ ¦
¦ Overflow ¦
¦ Ricominciare da capo ¦
¦ ? ¦
¦ ¦
¦ Inserire un numero intero ¦
¦ ? 3.7 ¦
¦ Il numero inserito è: 4 ¦
¦ ¦
¦ Inserire un numero intero ¦
¦ ? q ¦
¦ ¦
¦ Ricominciare da capo ¦
+----------------------------------------------------------------+
Commenti
Se
la variabile è definita di tipo numerico intero vengono accettati tutti i
numeri interi compresi nell'intervallo di definizione.
Se il numero intero
non è compreso tra i limiti (-32768 e 32767) si verifica un errore di
esecuzione.
Se il numero non è intero viene arrotondato.
Se il
dato inserito non è numerico si verifica un errore di
esecuzione.
PROGRAMMA 2
Questo programma serve a dimostrare
quali sono i valori ammessi per le variabili numeriche
reali.
Descrizione delle variabili
+----------------------------------------------------------------+
¦ NOME ¦ TIPO ¦ I/O ¦ SIGNIFICATO ¦
+-----------+-------------+------------------+-------------------¦
¦ NUMERO ¦numero reale ¦ input/output ¦numero da stampare ¦
+----------------------------------------------------------------+
Flow chart Programma 2Pseudocodifica (vedi
Figura)
1 inizio
2 emissione richiesta numero
3 lettura NUMERO
4 emissione NUMERO
5 fine
3 Istruzione di lettura del dato; il programma si
arresta e l'utente deve inserire un numero reale.
Programma in
Basic
10 REM Dimostrazione dell'uso di variabili numeriche reali
20 PRINT "Inserire un numero"
30 INPUT NUMERO
40 PRINT "Il numero inserito è: "; NUMERO
50 END
30 Istruzione per la lettura del numero; la variabile
è numerica reale poiché non ha suffisso. I valori possono essee
inseriti in notazione decimale o esponenziale.
+----------------------------------------------------------------+
¦ Esempi di esecuzione ¦
¦ ¦
¦ Inserire il numero ¦
¦ ? 5670.34 ¦
¦ Il numero inserito è: 5670.34 ¦
¦ ¦
¦ Inserire il numero ¦
¦ ? 123E15 ¦
¦ Il numero inserito è: 1.23E+17 ¦
¦ ¦
¦ Inserire il numero ¦
¦ ? 10E38 ¦
¦ Overflow ¦
¦ Ricominciare da capo ¦
¦ ? ¦
¦ ¦
¦ Inserire il numero ¦
¦ ? 0.123456789 ¦
¦ Il numero inserito è: 0.1234568 ¦
¦ ¦
¦ Inserire il numero ¦
¦ ? f ¦
¦ ¦
¦ Ricominciare da capo ¦
+----------------------------------------------------------------+
Commenti
Il
numero reale può essere espresso nella notazione con il punto decimale o
nella notazione esponenziale.
Se il numero non è compreso tra i
limiti di grandezza (10-38 e 1037) si verifica un errore di esecuzione.
Se
il numero ha più cifre significative di quelle ammesse dalla precisione
disponibile, le cifre in eccesso vengono troncate o arrotondate.
Se il dato
inserito non è numerico si verifica un errore di
esecuzione.
PROGRAMMA 3
Questo programma serve a dimostrare
quali sono i valori ammessi per le variabili
alfanumeriche.
Descrizione delle variabili
+----------------------------------------------------------------+
¦ NOME ¦ TIPO ¦ I/O ¦ SIGNIFICATO ¦
+-----------+-------------+------------------+-------------------¦
¦ FRASE $ ¦ alfanumerico¦ input/output ¦ frase da stampare ¦
+----------------------------------------------------------------+
Flow chart Programma 3Pseudocodifica (vedi
Figura)
1 inizio
2 emissione richiesta frase
3 lettura FRASE
4 emissione FRASE
5 fine
3 Istruzione di lettura del dato; il programma si
arresta e l'utente deve inserire una frase.
Programma in
Basic
10 REM Dimostrazione dell'uso di variabili stringa
20 PRINT "Inserire una frase"
30 INPUT FRASE$
40 PRINT "La frase inserita è: "; FRASE$
50 END
30 Istruzione per la lettura del numero; la variabile
è alfanumerica poiché termina con il simbolo $.
+----------------------------------------------------------------+
¦ Esempi di esecuzione ¦
¦ ¦
¦ Inserire una frase ¦
¦ ? ciao a tutti ¦
¦ La frase inserita è: ciao a tutti ¦
¦ Inserire la frase ¦
¦ ? 789.1002 ¦
¦ La frase inserita è: 789.1002 ¦
+----------------------------------------------------------------+
Commenti
Qualsiasi
stringa di caratteri viene riportata come inserita.
Anche un numero viene
interpretato come una stringa di caratteri.
GLI OPERATORI ARITMETICI
Gli operatori permettono di combinare insieme
costanti e variabili per formare espressioni che, una volta valutate, danno come
risultato un valore singolo.
Gli operatori aritmetici sono quelli che
permettono di definire le comuni operazioni aritmetiche:
+
addizione
- sottrazione
* moltiplicazione
/ divisione tra numeri
reali
\ divisione tra numeri interi
^ elevamento a
potenza
L'ordine con cui questi operatori vengono valutati in una
espressione è:
- elevamento a potenza;
- moltiplicazione e
divisione;
- addizione e sottrazione.
L'ordine di valutazione
può essere modificato con l'uso delle parentesi tonde.
Un
altro operatore disponibile è MOD che dà il resto della divisione
tra due numeri interi; se i numeri che vengono specificati non sono interi
vengono arrotondati prima di applicare
l'operatore.
ESEMPI
L'operatore MOD fornisce il resto della
divisione tra due numeri (se i numeri non sono interi vengono
arrotondati.
L'OPERATORE DI CONCATENAZIONE DI STRINGHE
L'operatore + può essere utilizzato tra
operandi di tipo stringa; in questo caso assume il significato di concatenare le
stringhe, cioè di unire la seconda stringa alla
prima.
ESEMPI
L'operatore + è l'operatore di
concatenazione di stringhe.
Date le variabili NOME$ e COGNOME$,
l'espressione NOME$ + " " = COGNOME$ dà una stringa contenente il nome e
il cognome separati da uno spazio.
Se NOME$ = "MARIO" e COGNOME$ =
"ROSSI"
NOME$ + " " COGNOME$ dà "MARIO ROSSI"
OVERFLOW E UNDERFLOW
Se il risultato di un'espressione produce un
valore troppo grande, esterno all'intervallo di definizione, si verifica una
eccedenza o "overflow" che causa l'arresto dell'esecuzione con una segnalazione
di errore; la stessa cosa si verifica se il valore diventa troppo piccolo
(underflow).
LE ISTRUZIONI
Le istruzioni del Basic di solito vengono
numerate progressivamente e alcune istruzioni fanno riferimento al numero di
altre; i numeri in genere sono progressivi ma l'incremento non è di 1 in
1 ma di 10 in 10 in modo da lasciare dei numeri inutilizzati per eventuali
inserimenti di altre istruzioni tra quelle già presenti.
La
numerazione delle istruzioni serviva soprattutto per istruzioni come GOTO (il
salto ad un'altra istruzione) e GOSUB (il salto all'inizio di un sottoprogramma)
che fanno riferimento a un numero di riga.
Nella versione del Basic che
stiamo esaminando ci sono delle istruzioni che possono sostituire la GOTO e la
GOSUB e che conviene sicuramente usare al loro posto; queste istruzioni, come si
vedrà, non fanno riferimento a numeri di riga. Diventa così
inutile numerare le istruzioni del programma. La numerazione delle righe in
questa versione di Basic è quindi facoltativa.
Per la scrittura
delle istruzioni è possibile scrivere una istruzione per riga o anche
più istruzioni sulla stessa riga, separate dal simbolo ":" per rendere
più compatto il programma. Conviene comunque non perdere mai di vista un
obiettivo importante: la leggibilità del programma.
Le istruzioni
vanno quindi scritte in modo che il programma sia facilmente leggibile, curando
anche l'indentazione delle istruzioni di controllo, in modo che la struttura del
programma risulti evidente e facile da capire.
LE ISTRUZIONI DI COMMENTO
Perché il programma risulti facile da
rivedere è opportuno inserire molti commenti per spiegare il significato
delle variabili e delle istruzioni.
L'istruzione per inserire un commento
è REM (da remark che significa nota, appunto); invece di REM si
può usare l'apice ('); tutto quello che viene scritto dopo viene ignorato
dall'interprete; quindi si può scrivere qualsiasi cosa e serve soltanto
al programmatore per annotare le informazioni necessarie a comprendere meglio il
programma.
Si può inserire un commento anche su una riga che
contiene già altre istruzioni facendolo precedere dall'apice o da
:REM.
L'USO DELLE ISTRUZIONI DI COMMENTO
Si consiglia di usare sempre molti commenti nel
programma. Conviene però non inserirne all'interno dei cicli: anche se
l'interprete appena riconosce che si tratta di un'istruzione REM prosegue senza
processarla, impiega comunque un pò di tempo a riconoscerla. Se si
ricorda il funzionamento di un interprete (esamina ogni istruzione che incontra,
la traduce e la esegue, ma senza conservare nulla del lavoro fatto su ciascuna
istruzione) si capisce che le istruzioni di un ciclo vengono esaminate da capo
ogni volta che il ciclo viene percorso.
L'ISTRUZIONE END
Ogni programma termina con l'istruzione END che
fa ritornare il controllo all'ambiente di sviluppo
dell'interprete.
LE ISTRUZIONI PER L'OUTPUT DEL PROGRAMMA
Perché il programma comunichi qualcosa
all'utente bisogna utilizzare delle istruzioni di stampa.
La stampa
può avvenire a video o su stampante
Le istruzioni per la stampa
sono:
PRINT per la stampa sul video;
LPRINT per la stampa su
stampante.
PRINT [elencoespressioni] [{;|,}]
LPRINT
[elencoespressioni] [{;|,}]
Le istruzioni PRINT e LPRINT non seguite
da nessuna espressione producono una riga vuota; servono quindi per saltare
delle righe.
La lista di espressioni può contenere variabili o
costanti sia di tipo numerico che alfanumerico; le costanti alfanumeriche vanno
sempre racchiuse tra virgolette.
Le espressioni nella lista possono essere
separate da virgole o punti e virgola.
La posizione di stampa di ogni
valore dipende dalla punteggiatura specificata.
Se non c'è
punteggiatura i valori vengono stampati uno dopo l'altro e poi si va a
capo.
Se c'è un punto e virgola il valore successivo viene stampato
immediatamente dopo l'ultimo; se il punto e virgola viene messo al termine
dell'istruzione, l'istruzione PRINT successiva inizia la stampa sulla stessa
riga, dopo l'ultimo valore stampato.
Se c'è una virgola il valore
successivo viene stampato all'inizio di una nuova zona; ogni riga è
divisa in zone di 14 spazi ciascuna. Se l'istruzione termina con una virgola la
successiva istruzione PRINT riparte sulla stessa riga, da una nuova
zona.
Se i dati da visualizzare occupano più dell'ampiezza di una
riga la stampa prosegue sulla riga successiva.
Si può quindi
predisporre una stampa curata a piacere, scegliendo opportunamente la
punteggiatura nelle istruzioni PRINT.
ESEMPI
L'uso della
punteggiatura nelle istruzioni PRINT permette di ottenere l'output nella forma
voluta.
Dati i valori:
A = 1500
B = -123.54
C$ =
"FINE"
Le istruzioni:
PRINT A
PRINT B
PRINT
C
producono:
1500
-123.54
FINE
Ogni istruzione
causa un ritorno a capo.
Le istruzioni:
PRINT A B;
PRINT
C
producono:
1500 -123.54 FINE
B viene stampato immediatamente
dopo A (ma dopo ogni numero viene sempre saltato uno spazio); il punto e virgola
dopo l'istruzione fa rimanere il cursore subito dopo il valore di B, e qui
l'istruzione successiva stampa C.
L'istruzione:
PRINT A, B,
C
produce:
1500 -123.54 FINE
Ogni valore occupa una zona di 14
spazi.
L'istruzione LPRINT manda l'output alla stampante; se la
stampante non è pronta per la stampa (se è spenta, o non attiva o
manca la carta ecc.) si verifica un errore segnalato con un
messaggio.
L'istruzione LPRINT serve anche per inviare comandi alla
stampante, come la selezione del set di caratteri o l'avanzamento di pagina.
Queste funzioni sono controllate da codici specifici per ogni stampante e
bisogna quindi consultare la documentazione della stampante che si usa per
reperirli.
La forma è comunque del tipo:
LPRINT CHR$(n) dove n
è il numero di codice.
Il formato di stampa può essere
perfezionato ancora meglio con le istruzioni PRINT USING e LPRINT
USING.
PRINT USING stringaformato$; elencoespressioni
[{;|,}]
LPRINT USING stringaformato$; elencoespressioni
[{;|,}]
La stringa rappresentata da stringaformato$ è una
costante o una variabile di tipo stringa che contiene dei caratteri speciali che
permettono di definire il formato voluto per la stampa dei valori.
I
caratteri di formattazione si utilizzano in genere per ottenere formati
particolari per la stampa dei numeri.
I caratteri per i campi numerici che
possono servire di più sono:
# si utilizza questo simbolo per
rappresentare la posizione di ciascuna cifra; se il numero è formato da
meno cifre viene allineato a destra e preceduto da tanti spazi quanti ne sono
necessari per completare il numero di posizioni specificato.
. indica
la posizione del punto decimale; si può utilizzare, per esempio, per
forzare la stampa dello zero prima del punto decimale che normalmente non viene
stampato.
+ fa stampare il segno + per i numeri positivi che
normalmente non viene stampato.
¦ una sottolineatura fa stampare
come costante il carattere seguente.
Se il numero da stampare
è più grande del formato definito viene stampato preceduto da un
simbolo di percentuale.
ESEMPI
L'istruzione PRINT USING permette
di definire il formato di stampa desiderato.
Le
istruzioni:
PRINT USING "
#.
"; 15.3
PRINT USING
"
#.
"; .42
PRINT USING "
#.
"; 324.9
PRINT USING
"
#.
";
1.4567
producono:
15.3
0.42
324.9
1.45
I
numeri risultano incolonnati al punto decimale.
Le istruzioni:
PRINT
USING "+
#"; -25
PRINT USING "+
#";
91
producono:
-25
+91
Si ottiene la stampa del segno
anche per i numeri positivi.
L'istruzione:
PRINT USING
"_L_.
#"; 15000
produce:
L.15000
Con il simbolo di
sottolineatura si possono specificare caratteri costanti.
LA STAMPA DEI NUMERI
I numeri stampati sono sempre seguiti da uno
spazio, e preceduti da uno spazio se positivi o dal segno meno se negativi. I
numeri reali vengono stampati nel formato esponenziale; vengono però
stampati come numeri interi o con la notazione decimale se possono essere
stampati con meno di 6 cifre per i numeri in singola precisione e con meno di 16
cifre per i numeri in doppia precisione.
Per esempio 1E-6 viene stampato
come .000001 ma 1E-7 rimane invariato.
LE FUNZIONI PER IL POSIZIONAMENTO DELL'OUTPUT
Per la preparazione del formato di stampa possono
essere utili anche le funzioni TAB e SPC. (Delle funzioni si parlerà
estesamente nel prossimo capitolo).
TAB(colonna%) sposta il cursore
alla colonna indicata. Se il cursore si trova già oltre la colonna
indicata il posizionamento viene fatto sulla riga successiva.
SPC(n%) salta n spazi dall'ultima posizione di stampa. Il numero di
spazi deve essere un valore compreso tra 0 e 32767.
Se TAB o SPC sono
specificate alla fine di una istruzione PRINT sopprimono il ritorno a capo, come
se l'istruzione terminasse con un punto e
virgola.
ESEMPI
Posizionamenti dell'output ottenuti con le
funzioni TAB e SPC.
L'istruzione:
PRINT 24 TAB(6)
35
produce:
24 35
Dopo la stampa del primo numero si ha un
posizionamento alla sesta colonna.
L'istruzione:
PRINT "INIZIO"
SPC(10) "FINE"
produce:
INIZIO FINE
Dopo la stampa della
prima stringa vengono saltati dieci spazi.
L'ISTRUZIONE WIDTH
L'istruzione WIDTH permette di impostare
l'ampiezza della riga di stampa.
WIDTH dimensione
Per il
video
WIDTH "SCRN:" dimensione
definisce il numero di caratteri che si
possono visualizzare su una riga dello schermo; la dimensione può essere
di 40 o 80 caratteri.
L'istruzione LPRINT normalmente considera la
riga di stampa di 80 caratteri (come per le stampanti standard) e inserisce
quindi in modo automatico un ritorno a capo dopo 80
caratteri.
L'istruzione
WIDTH LPRINT colonne%
permette di
definire il numero di caratteri che si possono stampare su una
riga.
LA PULIZIA DEL VIDEO
L'output del programma a video viene mandato
sullo schermo dei comandi DOS; su questo schermo vengono occupate le righe che
occorrono e quando lo schermo risulta pieno si ha uno scorrimento verso l'alto
delle righe. Quindi se sullo schermo è già presente qualcosa,
l'output del programma comicia dalla prima riga libera, dopo il prompt del
DOS.
L'istruzione CLS, usata in modo diretto o inserita all'inizio di un
programma permette di ripulire lo schermo dal contenuto
precedente.
LE ISTRUZIONI DI INPUT
Per la lettura di un dato si usa l'istruzione
INPUT.
INPUT [;] ["prompt" {;|,}] elencovariabili
Quando
incontra questa istruzione il programma si arresta e compare un punto di domanda
(?). L'interprete resta in attesa dell'inserimento del dato e riprende
l'esecuzione soltanto dopo che l'utente ha confermato il dato inserito con il
tasto di invio.
Dopo un'istruzione INPUT normalmente si ha un ritorno a
capo; il punto e virgola dopo INPUT mantiene il cursore sulla riga dopo che i
dati sono stati accettati, alla pressione del tasto di invio.
"prompt"
è una scritta che si può far comparire prima che il programma
rimanga in attesa dei dati; se si usa il punto e virgola viene seguita dal punto
interrogativo, mentre se si usa la virgola il punto interrogativo non viene
mostrato.
L'INSERIMENTO DEI DATI
I dati inseriti alla richiesta, se sono
più di uno, devono essere separati da virgole e vengono assegnati
ordinatamente alle variabili specificate nell'elenco.
Le variabili
dell'elenco possono essere numeriche o alfanumeriche; i dati inseriti devono
corrispondere per numero e tipo alle variabili specificate; se il numero di dati
è maggiore o minore del necessario, o il valore inserito non è
accettabile per il tipo di variabile, il programma si blocca e l'interprete
chiede di ricominciare da capo.
I dati alfanumerici possono essere scritti
senza virgolette; queste sono necessarie se il messaggio deve contenere delle
virgole o degli spazi iniziali o finali che altrimenti sono in generale
eliminati; restano invece gli spazi intermedi.
I dati digitati compaiono
sullo schermo e possono essere modificati finché non si preme il tasto di
invio.
ESEMPI
L'istruzione INPUT richiede l'inserimento di dati
da parte dell'utente.
Se il programma contiene
l'istruzione:
INPUT A, B, C
si devono inserire tre numeri separati da
virgole come:
25,76.2,8.165
Se il programma contiene
l'istruzione:
INPUT NOME$, COGNOME$
il nome e il cognome vanno
inseriti ancora separati da virgole, come:
MARIO,ROSSI
Invece si
potrebbe inserire
MARIO ROSSI
senza virgole, se l'istruzione
fosse:
INPUT NOMINATIVO$
Se si vuole inserire l'indirizzo VIA
ROMA, 27
quando il programma incontra l'istruzione:
INPUT
INDIRIZZO$
si deve scrivere:
"VIA ROMA, 27"
ALTRE ISTRUZIONI DI INPUT
Per l'input di dati si possono utilizzare anche
le istruzioni LINE INPUT e INKEY$.
LINE INPUT [:] ["prompt" {;|,}]
variabile$
L'istruzione LINE INPUT legge una stringa dalla tastiera e
la assegna alla variabile specificata; i caratteri possono essere al massimo 255
e vengono considerati finché si incontra un carattere di ritorno a
capo.
La funzione INKEY$ legge un carattere dalla tastiera, o meglio dal
buffer della tastiera.
Il suo funzionamento è particolare rispetto
a INPUT; infatti non rimane in attesa che venga premuto un tasto, ma prende un
carattere dal buffer; se non c'è nessun carattere restituisce una stringa
nulla, altrimenti prende un carattere dal buffer.
Per i tasti standard
dà una stringa di 1 byte col carattere; per i tasti estesi, cioè
quelli relativi al movimento del cursore o alle combinazioni con Shift, Ctrl e
Alt, dà 2 byte : un carattere nullo (ASCII 0) più il codice di
espansione della tastiera.
INKEY$, a differenza di INPUT non visualizza
sullo schermo il carattere inserito da tastiera.
L'ISTRUZIONE DI ASSEGNAZIONE
L'istruzione per eseguire un'assegnazione
è LET.
LETvariabile = espressione
La parola LET non
è indispensabile e si può sempre scrivere una assegnazione
come:
variabile = espressione
dove espressione può
essere una costante, una variabile o un'espressione composta da variabili,
costanti e operatori, ma comunque dello stesso tipo della variabile ricevente e
che, al momento dell'assegnazione, deve avere un valore preciso; dopo
l'assegnazione la variabile indicata alla sinistra del simbolo uguale viene
posta uguale a questo valore.
Per esempio si può fare in modo
che:
- una variabile numerica sia posta uguale a un numero dato;
- una
variabile numerica sia posta uguale ad un'altra variabile numerica oppure al
risultato di un'operazione aritmetica o algebrica fra due o più variabili
o costanti;
- una variabile numerica sia posta uguale al suo valore
aumentato o diminuito di una certa quantità (o di un'altra variabile)
oppure al suo valore iniziale moltiplicato, diviso, sommato ecc. a numeri o ad
altre variabili;
- una variabile alfanumerica sia posta uguale ad un
insieme di lettere, cifre e simboli;
- una variabile alfanumerica sia posta
uguale ad un'altra variabile alfanumerica, oppure a più variabili
alfanumeriche scritte una dopo l'altra, oppure a se stessa con aggiunta di altre
variabili o costanti alfanumeriche.
ESEMPI
Assegnazioni; la
parola LET può essere omessa.
LET A% = 15
LET B! = C! +
D!
LET B% = B% + 1
LET NOME$ = MARIANGELA
LET NOMES$ = NOME$ +
COGNOME$
L'ISTRUZIONE SWAP
L'istruzione SWAP permette di scambiare il valore
di due variabili senza usarne una di comodo.
SWAP var1,
var2
Le variabili possono essere di qualsiasi tipo, purché
entrambe siano dello stesso.
PROGRAMMA 4 - LETTERA DI
INVITO
Questo programma permette di scrivere agli amici una lettera di
invito ad una festa, specificando il giorno e l'ora di inizio della
festa.
Il testo della lettera è fisso mentre è possibile
specificare al momento dell'esecuzione del programma il nome di chi dà la
festa e il giorno con l'ora di inizio, e il nome dell'invitato a cui è
diretta la lettera. Questi dati devono perciò essere inseriti in
variabili.
Per cambiare il testo della lettera bisogna scrivere un nuovo
programma.
Descrizione delle variabili
+----------------------------------------------------------------+
¦ NOME ¦ TIPO ¦ I/O ¦ SIGNIFICATO ¦
+-----------+-------------+------------------+-------------------¦
¦ NOMEAMICO ¦alfanumerico ¦ input/output ¦nome dell'invitato ¦
¦ NOME ¦alfanumerico ¦ input/output ¦nome di chi dà la ¦
¦ ¦ ¦ ¦festa ¦
¦ COGNOME ¦alfanumerico ¦ input/output ¦cognome di chi dà ¦
¦ ¦ ¦ ¦la festa ¦
¦ DATA ¦alfanumerico ¦ input/output ¦data della festa ¦
¦ ORA ¦alfanumerico ¦ input/output ¦ora di inizio della¦
¦ ¦ ¦ ¦festa ¦
+----------------------------------------------------------------+
Flow chart Programma 4Pseudocodifica (vedi
Figura)
1 inizio
2 emissione richiesta nome dell'invitato
3 lettura NOMEAMICO
4 emissione richiesta nome del festeggiato
5 lettura NOME
6 emissione richiesta cognome del festeggiato
7 lettura COGNOME
8 emissione richiesta data della festa
9 lettura DATA
10 emissione richiesta ora di inizio della festa
11 lettura ORA
12 emissione "Caro, " NOMEAMICO
13 emissione "sei invitato alla mia festa che si terrà"
14 emissione "il giorno " DATA " alle ore " ORA
15 emissione "Ti aspetto!"
16 emissione "Il tuo amico " NOME " "COGNOME
17 fine
2 Viene stampato il messaggio di richiesta del nome
da inserire ...
3 ... e poi letto il nome;
4-5 6-7 e così via
per gli altri dati: nome e cognome di chi dà la festa e ...
8-9
10-11 ... data e ora della festa.
La data e l'ora non devono essere
inseriti in un formato particolare, ma come si vuole, dato che verranno inseriti
in variabili alfanumeriche e poi soltanto stampati.
Per esempio per la data
si potrebbe scrivere:
18-4 oppure 18 Aprile oppure 18 c.m.
e per
l'ora:
16.30 o 4.30 o 4 e 30 o 4 e mezza
scegliendo in modo
assolutamente libero.
da 12 a 17 Stampa del testo della lettera; le scritte
tra virgolette sono costanti, gli altri dati sono
variabili.
Programma in Basic
10 REM Stampa di una lettera di invito
20 PRINT "LETTERA DI INVITO ALLA FESTA"
30 PRINT
40 PRINT "Inserisci il nome dell'amico"
50 INPUT NOMEAMICO$
60 PRINT "Inserisci il tuo nome"
70 INPUT NOME$
80 PRINT "Inserisci il cognome"
90 INPUT COGNOME$
100 PRINT "Inserisci la data della festa"
110 INPUT DATA$
120 PRINT "Inserisci l'ora di inizio"
130 INPUT ORA$
140 LPRINT "Caro "; NOMEAMICO$; " ,"
150 LPRINT "sei invitato alla mia festa che si terrà ";
160 LPRINT "il giorno "; DATA$; " alle ore "; ORA$
170 LPRINT "Ti aspetto!"
180 LPRINT TAB(20); "Il tuo amico "; NOME$; " ";
COGNOME$
190 END
10 Questa riga è un commento con il titolo del
programma per ricordarsi a cosa serve il programma scritto; questa istruzione
non viene eseguita e quindi non si vede quando si adopera il programma per
scrivere una lettera; serve quando si va a rivedere il programma, per esempio
per fare qualche modifica.
Si potrebbero aggiungere molte altre righe di
commento con una spiegazione dettagliata del funzionamento del programma e del
significato delle variabili.
20 Questa intestazione invece viene stampata a
video e ricorda all'utene che cosa fa il programma. Anche in questo caso si
potrebbero aggiungere molte righe dello stesso tipo con le istruzioni da seguire
per utilizzare il programma.
30 L'istruzione PRINT senza nessun dato fa
saltare una riga.
40-60-80-100-120 Questi sono i messaggi di richiesta dei
dati. Provocano soltanto la stampa della scritta tra
virgolette.
50-70-90-110-130 Ogni messaggio è seguito
dall'istruzione di lettura del dato; compare il punto interrogativo e il
programma rimane in attesa del dato; l'utente deve scrivere il dato e premere il
tasto di invio perché il programma lo accetti e possa
proseguire.
140-180 Questa è la stampa della lettera vera e propria.
La stampa viene mandata alla stampante e non su video, poiché si usa
l'istruzione LPRINT.
Le scritte tra virgolette vengono stampate così
come sono poiché sono costanti; dove compare il nome di una variabile
viene scritto il contenuto della variabile (inserito dall'utente all'inizio del
programma).
I punti e virgola dopo ogni scritta e ogni variabile servono
per continuare a stampare subito dopo l'ultimo l'ultimo carattere già
stampato. Gli spazi bianchi dove servono devono essere previsti, come le
scritte, tra virgolette.
190 Istruzione di fine
programma.
+----------------------------------------------------------------+
¦ Esempi di esecuzione ¦
¦ ¦
¦ A video compaiono le richieste di inserimento dei dati: ¦
¦ ¦
¦ LETTERA DI INVITO ALLA FESTA ¦
¦ Inserisci il nome dell'amico ¦
¦ ? Giulio ¦
¦ Inserisci il tuo nome ¦
¦ ? Marco ¦
¦ Inserisci il tuo cognome ¦
¦ ? Nerini ¦
¦ Inserisci la data della festa ¦
¦ ? 12 Dicembre ¦
¦ Inserisci l'ora di inizio ¦
¦ ? 16.30 ¦
+----------------------------------------------------------------+
Commenti
Il
testo della lettera è scritto nelle istruzioni del programma e quindi per
modificarlo bisogna modificare il programma stesso. Perciò può
cambiare il testo soltanto qualcuno che sa programmare in Basic.
Se il
testo della lettera non contiene variabili e si intende modificare soltanto il
nome della persona a cui inviarla, il problema si può risolvere
facilmente con l'uso di un file.
Si scrive un programma che richiede di
inserire il testo della lettera e lo memorizza in un file.
Si scrive poi un
altro programma che richieda i dati del destinatario (o anche del mittente) e li
stampi insieme al testo della lettera recuperato dal file che lo
contiene.
In realtà non è conveniente scrivere un programma
del genere; è molto più semplice usare un pacchetto integrato con
un word processor per scrivere la lettera e un data base per conservare i nomi
di tutte le persone a cui inviare la lettera.
Con semplici comandi si
può così ottenere la stampa di tutte le lettere che servono,
indirizzandole alle persone volute.