LE FUNZIONI
In matematica una
funzione è una legge che associa ad ogni valore di un insieme, detto
dominio, un solo valore preso da un altro insieme, detto codominio.
Un
esempio di funzione è la legge che associa ad ogni numero intero il
numero stesso se il numero è positivo, il numero cambiato di segno se il
numero è negativo. Questa funzione viene chiamata valore
assoluto.
Il Basic offre un certo numero di funzioni predefinite (chiamate
anche funzioni incorporate o intrinseche) che possono essere richiamate per
ottenere i valori calcolati dalle funzioni stesse e che semplificano la stesura
dei programmi.
Le funzioni predefinite sono di vario tipo; le potremmo
suddividere in funzioni aritmetiche e trigonometriche, funzioni di conversione
di tipo, funzioni che operano sulle stringhe, più alcune altre, come per
esempio la TAB e la SPC di cui abbiamo parlato a proposito della stampa dei
dati.
LE FUNZIONI NUMERICHE
ABS(espressioneNumerica)
dà il valore
assoluto dell'espressione, cioè il valore stesso se positivo, il valore
cambiato di segno se negativo.
SQR(espressioneNumerica)
dà la radice quadrata del valore dell'espressione; la radice
quadrata è definita solo per i numeri positivi quindi l'espressione deve
avere valore maggiore di 0.
SGN(espressioneNumerica)
dà
il segno dell'espressione, restituisce:
1 se il valore è positivo,
0 se è proprio 0,
-1 se è negativo.
LOG
(espressioneNumerica)
dà il logaritmo naturale (cioè in base
e) del valore dell'espressione; l'espressione deve avere sempre un valore
positivo.
EXP (espressioneNumerica) è la funzione
esponenziale, reciproca del logaritmo; dà il risultato della potenza che
ha come base e, e come esponente il valore dell'espressione; il valore massimo
consentito dell'espressione è 88,02969; per valori più grandi si
verifica un overflow del risultato.
ESEMPI
Uso di funzioni
numeriche.
Le istruzioni:
PRINT ABS(-78)
PRINT
SQR(36)
producono i risultati:
78
6
Le
istruzioni:
PRINT SGN(42)
PRINT SGN(-15)
producono i
risultati:
1
-1
I LOGARITMI
Il logaritmo di un numero in una data base
è l'esponente a cui bisogna elevare la base per ottenere il numero
stesso; per esempio in base 10:
Y=logdep.10X se
10esp.Y=X
In molte formule per esempio di fisica o chimica compare
spesso il logaritmo naturale o in base e.
e è un numero trascendente
(non finito) le cui prime cifre sono 2.71827183
In questo
caso:
Y=logdep.eX se eesp.Y=X
La funzione logaritmo
offerta dal Basic calcola il logaritmo naturale. I logaritmi in base 10 vanno
calcolati in base alla relazione:
logdep.10X = logdep.eX /
logdep.e10
l'argomento del logaritmo deve essere sempre un valore maggiore
di 0.
L'esponenziale è l'operazione inversa del logaritmo;
dà il valore di e elevato ad un certo numero.
LE FUNZIONI TRIGONOMETRICHE
Le funzioni trigonometriche disponibili in Basic
sono:
SIN(angolo)
COS(angolo)
TAN(angolo)
che
danno rispettivamente il seno, il coseno e la tangente di un angolo espresso in
radianti.
E' inoltre disponibile la
funzione:
ATN(espressioneNumerica)
che dà
l'arcotangente, cioè l'angolo, in radianti, di cui il valore
dell'espressione è la tangente.
LA TRIGONOMETRIA
Un punto in un piano cartesiano è
individuato dai valori dell'ascissa X e dell'ordinata Y, chiamate coordinate
cartesiane.
E' possibile invece delle coordinate cartesiane utilizzare le
coordinate polari.
Dato un punto P nel piano cartesiano, si tracci un
cerchio con centro nell'origine degli assi cartesiani, passante per il punto
dato, e una retta passante per l'origine degli assi e per il punto dato. La
retta tracciata forma un angolo con l'asse delle X; chiamiamolo a
Il punto
P può allora essere individuato dal raggio R del cerchio e dall'angolo a;
questi due valori sono detti coordinate polari.
E' possibile passare da un
sistema di riferimento all'altro attraverso le funzioni goniometriche.
Si
dice seno di a quel numero che moltiplicato per il raggio dà l'ordinata
del punto; si dice coseno di a quel numero che moltiplicato per il raggio
dà l'ascissa del punto; cioè
X = R cosa
Y = R
sena
La tangente è il rapporto fra seno e coseno dello stesso
angolo
tga = sena / cosa
Gli angoli si possono misurare in
gradi e in radianti.
La misurazione in gradi è quella abituale:
l'angolo giro vale 360 gradi, l'angolo retto 90 gradi e così via per le
varie frazioni dell'angolo.
In radianti l'angolo giro vale 2 p. L'angolo
retto vale quindi p/2.
p è un numero trascendente (cioè con
infinite cifre decimali) definito come il rapporto tra la circonferenza di un
cerchio e il suo diametro, le cui prime cifre sono 3.14.
Nelle funzioni del
Basic l'angolo è sempre espresso in radianti; conoscendo la misura in
gradi dell'angolo si può avere il valore in radianti usando la formula di
conversione
radianti = gradi * (p/180)
viceversa,
conoscendo la misura in radianti dell'angolo si ottiene il valore in gradi con
la formula di conversione
gradi = radianti * (180/p)
Esempio di funzione trigonometrica
LE FUNZIONI DI CONVERSIONE
Nei capitoli precedenti si è visto che
ogni variabile permette di memorizzare solo valori di un certo tipo; più
in generale si può dire che ogni variabile permette di memorizzare solo
valori compatibili, che in certi casi vengono convertiti automaticamente al tipo
della variabile ricevente.
Si ha sicuramente un errore se si tenta di
assegnare una stringa ad una variabile numerica o un numero ad una variabile
alfanumerica; ma se una variabile numerica viene assegnata ad un'altra di tipo
diverso si ha una conversione da un tipo all'altro; quando un numero viene
convertito da un tipo ad un altro con precisione più bassa si ha un
arrotondamento del numero.
ESEMPI
Se un numero reale viene
assegnato ad una variabile numerica intera, il numero reale viene arrotondato
all'intero più vicino.
Dall'assegnazione A%= 76.23 si ottiene
in A% il valore 76
Dall'assegnazione A%= 76.52 si ottiene in A% il
valore 77
_FIX(espressioneNumerica)
tronca il valore
dell'espressione alla parte intera, cioè mantiene le cifre alla sinistra
del punto decimale ignorando quelle alla
destra.
_INT(espressioneNumerica)
dà il più
grande numero intero che sia minore o uguale del valore
dell'espressione.
_CINT(espressioneNumerica)
arrotonda il
valore dell'espressione ad un numero intero; cioè se la parte frazionaria
è minore o uguale a 5 si ottiene il numero alla sinistra del punto
decimale, altrimenti se la parte frazionaria è maggiore di 5 si ottiene
il numero alla sinistra del punto decimale aumentato di 1; il valore risultante
deve essere compreso tra -32768 e 32767 altrimenti si verifica un errore di
overflow.
_CLNG(espressioneNumerica) arrotonda il valore
dell'espressione ad un numero intero LONG; il valore risultante deve essere
compreso tra -2.147.483.648 e
2.147.483.647.
_CDBL(espressioneNumerica)
converte il valore
dell'espressione in doppia precisione.
_CSNG(espressioneNumerica)
converte il valore dell'espressione in precisione
semplice.
ESEMPI
Funzioni di conversione.
Le
istruzioni:
PRINT FIX(85.91)
PRINT FIX(-85.91)
producono i
risultati:
85
-85
Le istruzioni:
PRINT
INT(12.54)
PRINT INT(-99.4)
producono i
risultati:
12
-100
Le istruzioni:
PRINT
CINT(43.32)
PRINT CINT(43.74)
producono i
risultati:
43
44
_HEX$ (espressioneNumerica)
restituisce una stringa con la rappresentazione esadecimale del valore
del'espressione.
L'espressione può avere un valore qualsiasi; prima
della conversione in esadecimale il valore viene arrotondato ad un intero
LONG.
_OCT$ (espressioneNumerica$)
restituisce una stringa con
la rappresentazione ottale del valore dell'espressione.
Come per la
conversione in esadecimale il valore dell'espressione viene arrotondato ad un
intero LONG.
ESEMPI
Programmino di conversione di un numero da
decimale in esadecimale usando la funzione HEX$.
PRINT "Inserire il
numero da convertire"
INPUT NUMERO
ESADECIMALE$ =
HEX$(NUMERO)
PRINT NUMERO "decimale è " ESADECIMALE$
"esadecimale"
END
Inserire il numero da convertire
?2565
2565 decimale è A05
esadecimale
_STR$(espressioneNumerica)
dà una
rappresentazione in forma di stringa del valore dell'espressione. Se il valore
è positivo nella stringa viene preceduto da uno
spazio.
_VAL(espressioneStringa$)
dà il valore numerico
della rappresentazione in forma di stringa di un numero eliminando eventuali
spazi presenti nella stringa.
_ASC(espressioneStringa$)
dà il codice ASCII del primo carattere della
stringa.
_CHR$(codiceAscii%)
dà il carattere
corrispondente al valore del codice ASCII indicato.
La funzione CHR$ viene
usata di solito per inviare caratteri speciali al video o alla
stampante.
LE FUNZIONI DI MANIPOLAZIONE DI STRINGHE
_LEN (espressioneStringa$)
dà la
lunghezza della stringa, cioè il numero di caratteri che la compongono,
compresi gli spazi.
_LCASE$ (espressioneStringa$)
converte in
minuscolo tutti i caratteri della stringa.
_UCASE$
(espressioneStringa$)
converte in maiuscolo tutti i caratteri della
stringa.
_LTRIM$ (espressioneStringa$)
toglie da una stringa
gli spazi iniziali.
_RTRIM$ (espressioneStringa$)
toglie da una
stringa gli spazi finali.
_INSTR (espressioneStringa$,
stringaRicerca$)
cerca nella prima stringa indicata se compare la seconda
stringa e ne restituisce la posizione.
_LEFT$ (espressioneStringa$,
n%)
restituisce gli n caratteri più a sinistra di una
stringa.
_RIGHT$ (espressioneStringa$, n%)
restituisce gli n
caratteri più a destra di una stringa.
_MID$
(espressioneStringa$, inizio% [,lunghezza%])
restituisce parte di una
stringa (lunghezza% caratteri a partire dal carattere con posizione
inizio%).
_SPACE$ (n%) dà una stringa di spazi di lunghezza
n.
_STRING$ (lunghezza%,
{codiceascii%|espressionestringa$})
dà una stringa che ripete per il
numero di volte indicato in lunghezza% il primo carattere della stringa
indicata, o il carattere individuato dal codice
ASCII.
ESEMPI
Uso di funzioni per la manipolazione di
stringhe.
Le istruzioni:
FRASE$ = "ciao a tutti"
PRINT
LEN(FRASE$)
PRINT LEFT$(FRASE$, 4)
PRINT MID(FRASE$, 6,
7)
producono:
12
ciao
a tutti
LA GENERAZIONE DI NUMERI CASUALI
RND(n#)
genera un numero casuale (o
aleatorio); fornisce un numero in precisione semplice compreso tra 0 e
1.
Se n è maggiore di 0 o si scrive solamente RND, senza argomento,
la funzione fornisce il numero casuale successivo.
Se n è minore di
0 la funzione restituisce lo stesso numero per qualsiasi n.
Se n è 0
la funzione restituisce l'ultimo numero generato (quindi ripete il numero
già fornito).
In realtà i numeri non sono veramente casuali
ma sono il risultato dei calcoli effettuati da un algoritmo.
Si otterrebbe
sempre la stessa sequenza di numeri se non fosse possibile inizializzare il
generatore di numeri casuali con l'istruzione RANDOMIZE.
RANDOMIZE [N%]
Il numero n è un numero intero (quindi
compreso tra -32768 e 32767) utilizzato dall'algoritmo di generazione dei numeri
casuali. Ogni volta che si inizializza il generatore con lo stesso valore di n
si ottiene la stessa sequenza di numeri "casuali". Per ottenere una nuova serie
di numeri bisogna modificare il valore di n.
Il valore di n può
essere inserito dall'utente; se il numero n non viene specificato
nell'istruzione, al momento dell'esecuzione il programma si interrompe e
richiede un valore.
USI DELLA FUNZIONE RND
La funzione RND permette di ottenere dei valori
in una successione pseudocasuale; risulta quindi molto utile per una vasta serie
di problemi, dalla statistica alla ricerca scientifica, dai giochi (viene
presentato un esempio nel prossimo capitolo) alla simulazione.
Nei problemi
di simulazione il programma costituisce un modello del sistema di cui si vuole
analizzare il comportamento; si suppone che gli eventi che avvengono in modo
casuale o con una certa probabilità si verifichino dopo un intervallo di
tempo di un certo valore T, risultato della funzione di generazione dei numeri
casuali.
E' possibile in questo modo esaminare sistemi complessi ed
analizzare situazioni particolari senza che queste si verifichino realmente.
Ciò risulta di grande importanza; si pensi per esempio al problema di
simulare la partenza di un missile e quanti costi e danni comporterebbe
realizzare in pratica la prova.
GENERAZIONE DI NUMERI CASUALI IN UN INTERVALLO
La funzione RND genera numeri compresi tra 0 e 1;
per ottenere numeri compresi tra due valori A e B bisogna procedere in questo
modo;
T = B - A + 1
K = INT(RND * T) + A
Per esempio per
avere numeri compresi tra 1 e 6 si deve scrivere:
K = INT(RND * 6) +
1
INIZIALIZZAZIONE DEL GENERATORE DI NUMERI CASUALI
Può non essere conveniente lasciare
all'utente il compito di inserire il valore di inizializzazione del generatore
di numeri casuali; questo valore può allora essere derivato dal TIMER,
cioè dall'orologio interno del computer.
Il valore dell'orologio
viene fornito dalla funzione TIME$ che può essere utilizzata per esempio
in questo modo:
n = VAL(RIGHT$(TIME$,2))
LE FUNZIONI DI GESTIONE DELLA MEMORIA E DELL'ESECUZIONE
La funzione FRE restituisce la quantità di
memoria disponibile.
Le funzioni PEEK e POKE permettono di agire sulla
memoria:
la funzione PEEK restituisce il valore contenuto nel byte
all'indirizzo specificato;
la funzione POKE permette di scrivere un byte
nella locazione desiderata.
La funzione POKE è molto pericolosa se
non usata correttamente perché può danneggiare il funzionamento
del sistema, andando a scrivere qualcosa nell'area riservata al sistema
operativo (comunque soltanto fino al successivo bootstrap del sistema, non certo
in modo permanente).
La funzione SLEEP(secondi&) permette di sospendere
l'esecuzione del programma per il tempo indicato; può essere utile per
esempio per far comparire una scritta sul video per un certo tempo e poi
cancellare il video e proseguire nell'esecuzione del
programma.