Per registrare ("salvare") un programma
1 O PRINT "PREMI UN TASTO"
20 X=RND:IF INKEYS=""THEN GOTO 20 30PRINTRND
40END
La riga 20 permette di prolungare l'effetto della pressione di tasti anche
quando
questi non sono stati effettivamente premuti. Alla variabile X viene assegnato ogni volta un numero aleatorio. Dato che il tempo di attesa varia necessariamente
aa
ogni uso, si ottiene ad ogni svolgimento del programma una inizializzazione d~
versa dalla sequenza utilizzata.
A partire da questo programma, lanciare il programma più volte (istruzione RUl'l) e confrontare i risultati.
132
Verifica di diversi caratteri da tastiera: INPUT$
Nel dialogo con il programma, può essere interessante avere un oontrollo automa-tioosul numero dei caratteri introdotti dall'utente, indipendentemente dai tasti pre-muti.
!.:istruzione INPUT$ è stata prevista a questo soopo.
Attenzione: non si tratta di un'istruzione come INPUT ma di una funzione oome RIGHT$ quindi dà un risultato che deve essere assegnato ad una variabile oppure elaborato direttamente. Nella funzione INPUT$ si indica il numero di caratteri at-lesi e la funzione dà i caratteri inseriti da tastiera. Il test So N può allora essere ri-scritto usando la funzione INPUT$(1 ). La possibilità di verificare una risposta di più caratteri può servire per inserire delle parole chiave per proteggere il software.
Esempio:
10REM DIMOSTRAZIONE 20PRINT"PAROLA CHIAVE"
30REP$=1NPUTS(5)
'10!= REP$<>"MARCO" THEN NEW EcSE PRINT BENVENUTO
SOREM INIZIO PROGRAMMA 999 =1NE
Commenti
Naia
rtga
30, l'interprete non passa alle altre istruzioni fino a quando l'utente ha in-seri lo cinque caratteri. Per verificare la differenza delle due stringhe, si utilizza Ilse-~<>, come per i numeri. Nella riga 40, l'istruzione NEW annutta tutto quello che era presente in memoria. Questa istruzione deve quindi essere usata oon molta
at-tenzione.
Altenzlone:
Si potrebbe affermare che questo metodo non è molto sicuro. Infatti basta che
l'u-tente
dia il oomando LIST ed ecco che le prime righe del programma appaiono su I video rivelando la parola chiave.Capitolo 30
La penna ottica
La penna ottica è uno strumento di interattività molto potente usato da numerosi programmi. I comandi che oontrotlano te funzioni della penna ottica sono motto ta-citi, lo stato della penna è detenminatoda due parametri; lo stato di un interruttore mec:canico e lo stato di una cellula fotosensiblte.
oeuula totosensibde
--- ---~
·-·-·-·-·-·-·-·-·-·-·-·-·-·-~~·-·-·---·-·-·--·-1
inlerrutlore meccanico
ESiStono quindi delle istruzioni che informano sulto stato della penna in quel mo-merto.
I. L'interruttore da solo. PTRIG vale -1 se l'interruttore è premuto. PTRIG vale O
se
l'inte<ruttore è rilasciato.2.Lacet/ula da sola. INPEN X,Y carica un numero di oolonna grafica in X e un
nu-mero
di riga in Y. La penna deve essere ben orientata e a meno di 10 cm dallo sdlenno. Ilrosso
e il nero non vengono rilevati. Quando la cellula non è attivata, carica-1 inXeinY.a.
L'interruttore e la cellula. INPUTPEN X,Y funziona oome INPEN dopo lachiu-sura
dell'interruttore, in genere appoggiando ta penna stessa sul video.Programma
Visualizza le coordinate di un punto letto oon la penna ottica.
10'PUNTOLETIO 3VOO
'101NPEN C,L
&lLOCATE O,O:PAINT "COLONNA .. :C."RIGA":L OOLOOP
Commenti
Dopo aver lancialo l'esecuzione del programma, vengono visualizzate le coorm·
nate-1 e-1. Poi, awicinandola penna ottica allo schermo, i numeri scorrono rapi·
damente. Verificare che il numero della colonna vari da O a sinistra a 319 a destra (non è facile leggere i punti sul bordo dello schermo) e che il numero della riga vari da O a 199 verso il basso.
Se le coordinate continuano a mantenere i valori -1, significa che si è verilicata una delle condizioni seguenti:
- si stanno leggendo punti al di fuori della zona utile, - il colore dello sfondo è troppo scuro (rosso o nero),
- il televisore non invia luce sufficiente alla penna ottica; bisogna aumentare la lu-minosità del televisore.
Variazioni
Si può visualizzare il punto mirato aggiungendo un'istruzione PSET. Lo schermo si riempie allora di piccoli puntini che corrispondono ad ogni punto letto. Per visua·
lizzare unicamente i punti di coordinate determinate, e non dei punti letti, si puòuti·
lizzare l'istruzione PTRIG che funziona con l'interruttore della penna ottica. Per esempio, l'istruzione tF PTAtG THEN PSET (C,L) significa. se è stata piemutala penna ottica, visualizzare il punto C,L. Per capire meglio il funzionamento di que-sto test, vedere il capitolo 35.
Applicazioni
Le applicazioni della penna ottica sono numerosissime dal momento che questa permette all'utente di liberarsi dai vincoli della tastiera. Con la penna ottica si può scegliere un menu, designare con precisione il punto dello scher1110 senza do\ier spostare il cursore e senza danneggiare l'immagine.
Si pensi soltanto al modo in cui si sceglie una cella in una griglia di un
carattere.
Con la sola lastiera bisogna psssare da un sistema di coordinate, con tutti i pro-blemi che questa operazione comporta.
L'aspetto più spettacolare della penna ottica è costituito dalla possibHitàdi poter di·
segnare sul video. Anche un utente che non ha ancora familiarizzato molto con~
BASIC. dovrà ammettere che le tre istruzioni descritte preoedentemente semp!f~
cano estremamente la realizzazione di questo progetto.
Per lraociare il disegno. si usa l'istruzione PSET (X. Y) e le istruzioni della
tartaruga.
5CLS
10TUATLEO 2000
3000
40 INPEN X,Y
50 IF X<>-1 THEN EXIT 70LOOP
80 TRACE PTAIG:TUATLE 0,X.Y:SHOW 1 90LOOP
136
Commenti
40. Registra una posizione.
80. A seconda che !"interruttore sia premuto o meno, la tartaruga segna o menoto spostamento.
Ecco un altro programma che simula un elastico. Inserire il programma e poi len-ciarlo
con
RUN. Iniziare a mirare un qualsiasi punto dello schermo. Allontanare la penna ottlca. Si vedrà un tratto elastico seguire il gesto della mano. Questo pro-gramma utilizza nstruzione INPEN che funziona come INPUTPEN ma senza che la penna ottica sia appoggiata sullo schermo. E' possibile allontanare la punta della penna fino a 1 O cm dal video. Oltre i 1 O cm. la luminosità risulta troppo debo-le.1001 "SPOSTAMENTO ELASTICO
'
1010 INPEN X2.Y2:1F X2<0 OR Y2<0 THEN 1010 1020 LINE (XO,YO)-(X1-Y1 ).-8
1030 UNE (XO-YOHX2-Y2),0 1040X1 =X2:Y1 =Y2
1050 IF PTRIG=O THEN 1010 1999RETURN
Commenti
Il programma utilizza tre coppie di coordinate:
-XO e YO: estremità lissa dell"elastico -X1 e Y1: estremità mobile precedente -X2 e Y2: nuova estremità mobile
li sottoprogramma 1000 controlla la posizione della penna ottica (1010), cancella il tratto elastico precedente (1020) attivando il colore dello sfondo (--8), traccia il nuovo elastico (1030) in nero, sostituisce il tratto precedente con quello nuovo (1040). Quando !"interruttore è premuto (1050), escedat sottoprogramnna. La riga 40 del programma principale ridefinisce le coordinate della nuova estremità fissa dell'elsstico.
Per coloro che possiedono un mouse.
Esistono tre istruzioni di programmazione del mouse che si rifanno a quelle della penna ottica e in cui PEN è sostituito da MOUSE.
INPEN...., INMOUSE
INPUTPEN .... INPUTMOUSE PTRIG-. MTRtG
Capitolo 31
vettori e matrici
Le matrici permettono di memorizzare sotto uno stesso nome dati detto stesso tipo destinati per lo più allo stesso uso; il singolo dato è selezionabile per mezzo di uno o più numeri interi detti indici.
Vettori
Le matrici ad una dimensione (vettori) sorlo le più semplici: si indica il nome della variabile segu~o tra parentesi da un indice che serve a identificare Il singolo ele·
mento. La dimensione del vettore rappresenta anche l'indice massimo. In un vet·
tore
A di tipo numerioo di dimensione 1 O, si possono registrare dieci numeri chia-mati rispettivamente A(1 ), A(2), A(3), fino ad A(t O).Il programmatore dovrà prevedere lin dall"inizio la dimensione massima del vet·
tore e dovrà dichiararla nell"istruzione DIM, per esempio DIM A(1 O). E' indispensa-bile di niet 1sionare il vettore in modo adeguato e sufficiente111ente ampio poichè l"i·
struzione DIM riserva dello spazio in memoria e una volta dimensionato non è più modificabile.
e· vietato dimensionare più volte IO stesso vettore
I
E" possibile definire vettori numerici o di stringhe attanumeriche.
Nota: E" possibile utilizzare vettori senza dichiararti. In questo caso il valore mas-simo degli indici è 1 O. Questo significa che ad un vettore non dimensionato da DIM vengono riservati per default undici spazi (da O a 10). Si consiglia. per una mag-giore chiarezza del programma, di dimensionare sempre i vettori utilizzati. Di
se-guito viene riportato un programma che genera un vettore di numeri interi casuali compresi Ira O e 100, e un vettore di caratteri alfanumerici casuali compresi fra A e Z. Per seguire lo svolgimento del lavoro, viene effettuata la stalTipa degli elementi del vettore.
1 O REM VETIORI ALEA TORI 20 DIM A(10).B$(10)
30FOAl=1TO10 40 A(l)=INT(RND.100)
50 8$(1)=CHR$(65+1NT(RND"26)) 60NEXT I
RUN OK
PRINT A(4),B$(7)
4
e
Attenzione: il nome di un vettore stringa deve terminare con $, e la sua dimer>
s.ione deve essere dichiarata.
Dimensioni varie
Le matrici possono avere- varie dimensioni, ma praticamente vengono utilizzate solo matrici unidimensionali (vettori) e bidimensionali. Queste ultime sono interes·
santi per i giochi su scacchiera, motto praticati in microinlormatica a causa della bi-dimensionalità del video.
Di seguito viene riportato un breve programma che calcola il prodotto di due ma·
trici i cui elementi sono numeri interi casuali. Utilizzando le istruzioni di inserimento (INPUT) lo si può rendere un oomodo programma di utilità (veoere capitolo 28).
Programma
IO REM PRODOTTO DI MATRICI 20 N=3:P=4:0=5
30 DIM A(N,P),B(P.0).C(N,0) 40 PRINT"MATRICE A"
50FOR 1=1 TON:FORJ=1 TOP
60 A(l,J)=5-INT(RND'I O):PRINT A(l,J);
70 NEXT J:PRINT:NEXT I 80 PRINT"MATRICE B"
90 FOR 1=1 TO P:FOR J= 1 TO O
100 B(l.J)=5-INT(RND'10):PRINT B(l,J):
110 NEXT J:PRINT:NEXT I 120 REM PRODOTTO 130 PRINT"MATRICE AXB"
140FORl=1TON:FORJ=1 TOO 150FOR K=1 TOP
160 C(l,J)=C(l,J)+A(l.K)"B(K.J) 170 NEXT K:PRINT C(l.J);
180 NEXT J:PRINT:NEXT I 200END
Commenti
I cicli nidHicati 50-70 deliniscono e stampano la matfice A. I cicli nidificati 90-100 definiscono e stampano la matrice B. Fra le righe 140 e 180 sono presenti almeno tre cicli nidificati. Quelli in I e J generano la matrice prodotto. Il ciclo in K contiene il calcolo dei termini del prodotto. La lormula è rintracciabile alla riga 160. Le matrici sono molto usate in inlormatica. In effetti permettono di operare sotto un unico nome su una quantità rilevante di variabili. Si noterà che tutte le variabili inserite in una matrice sono dello stesso tipo. Non è possibile all'interno della stessa matrice avere delle variabili a singola precisione e a doppia precisione, e tantomeno delle variabm stringa. Questa limilazione cipende dal metodo ci memorizzazione usato dal calcolatore che esige che tutti gli elementi della matrice occupino lo stesso nu-La particolarità di una matrice
sta
anche nel metodo di accesso ai suoi elementi.Nel caso del PC 128, non esiste dillerenza nei tempi di accesso al primo elemento della matrice o all'ultimo (sia esso anche il ventottesimo). Diverso peso avrà la cosa nel momento in cui si affronterà il metodo di accesso alle informazioni conte-nute in un file sequenziale (vedere capitoli 46-4 7). Le matrici sono residenti in me-moria centrale. ecco perchè sono cosi agevolmente accessibili, ma tendono ad occupare ampi spazi di memoria. Inserire molte informazioni in una matrice può portaie al blocco di un prograinma pe1 mancanza di spazio disponibile.
Da quanto sopra emerge uno dei problemi londamentati presenti in informatica: se è meglio privilegiare i tempi di accesso alle informazioni (e di conseguenza i tempi di lavoro) o gli spazi di memoria occupati, dato che le due cose non possono es-sere ottenute contemporaneamente.
Capitolo 32
I dati
Esistono tre differenti modi per memorizzare il numero 1917 sotto il nome di varia·
bile CAPORETTO. Due sono già stati presentali nei capitoli precedenti. Il terzo (DA T A-READ) viene introdotto in questo capttolo.
10 CAPORETTO= 1917 30 PRINT CAPORETTO RUN