Pascal/Librerie e funzioni predefinite

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Una libreria non è altro che un file contenente varie procedure, funzioni e/o costanti che possono essere utilizzate una volta che il file è stato incluso all'interno del programma. Questo da un punto di vista teorico è molto utile perché permette di avere programmi molto brevi, ma da un punto di vista di sviluppo è piuttosto negativo, poiché una volta compilati anche programmi molto semplici possono essere estremamente "grandi" in dimensioni fisiche (ovvero in kByte).

Il Turbo Pascal utilizza come libreria standard Turbo.tpl. Questa contiene tutte le funzioni di base. Non viene mai invocata, perché lo fa in automatico il compilatore durante la compilazione. Tuttavia, come abbiamo già visto, esistono molte altre librerie.

Dall'ultimo programma osservato si nota come deve essere fatta la dichiarazione delle librerie:

uses nomelibreria1, nomelibreria2, ...; 

uses è una parola riservata, quindi non può essere usata come nome di variabile o funzione. La dichiarazione delle librerie deve precedere quella delle variabili.

Le librerie e le rispettive funzioni analizzate in questa pagina sono chiamate "librerie predefinite" in quanto sono di norma distribuite di default dal compliatore in uso. È infatti possibile anche creare librerie personalizzate per poter agevolare il proprio lavoro in più programmi differenti.

Crt[modifica]

La libreria di gran lunga più usata è sicuramente crt, con tutte le funzioni relative all'estetica in ambito DOS. Ma non abbiamo ancora affrontato il problema dell'utilizzo di librerie all'interno dei nostri programmi.

Probabilmente avrete notato che eseguendo i programmi implementati finora l'esecuzione terminava istantaneamente senza l'aggiunga del readln finale, non appena il risultato veniva mostrato sullo schermo. Questo può essere abbastanza scomodo. Ma anche per questi problemi aiuta la libreria CRT, con la funzione readkey() che, come abbiamo già visto, permette di leggere il primo carattere che viene immesso da tastiera.

Funzioni di crt[modifica]

clrscr;

Questa funzione permette di pulire lo schermo e di posizionare il cursore in alto a sinistra in posizione (1,1)

cursoroff; 
cursoron;

Queste due funzioni permettono di spegnere o accendere il cursore.

gotoXY(posX, posY);

Questa procedura permette di posizionare il cursore in una posizione precisa sullo schermo.

sound(hz);
nosound;

La funzione sound fa emettere alla macchina un suono alla frequenza hz. Per fermare questo suono bisogna assolutamente utilizzare la procedura nosound

delay(time);

Questa funzione fa sì che il sistema si fermi in pausa per un certo numero di millisecondi definito da time. L'uso della procedura delay è tipicamente usata quando si fa uso di suoni. La struttura d'uso generalmente è la seguente:

sound(440);
delay(1000);
nosound;

Il risultato è un LA di durata un secondo. La funzione delay() è però basata sul clock del processore per calcolare il tempo, quando è stato creato il Pascal ovviamente i processori non avevano la potenza di oggi. La funzione delay() è quindi difficile da controllare ma se si vogliono ottenere ritardi definiti con bassa precisione cronometrica si possono inserire più delay() di seguito o sfruttare i cicli.

keypressed

Questa funzione è di tipo boolean, inizialmente è false e restituisce true appena l'utente preme un tasto. Viene spesso usata con il ciclo di tipo repeat... until:

 repeat
   ...
   ...
 until keypressed;

in questo modo le istruzioni vengono ripetute fino a quando l'utente non preme un tasto.

readkey

Funzione che permette di leggere un carattere inserito da tastiera senza visualizzarlo. Restituisce un valore di tipo char. Per recuperare il valore letto si utilizza la notazione:

 x:=readkey;

Se si utilizza dopo "keypressed", si legge direttamente il carattere premuto per fare diventare "keypressed" false. Esempio:

 repeat
   ...
   ...
 until keypressed;
 x:=readkey;

a questo punto l'utente ha premuto un tasto, con il quale è uscito dal ciclo e ha assegnato il carattere char alla variabile X.

textcolor(numero);
textbackground(numero);

Permettono di cambiare colore al testo e allo sfondo rispettivamente. Il codice di colore può anche essere il nome in inglese del colore. Questo perché nella libreria crt sono definite anche alcune costanti fra cui proprio quelle relative ai colori. Fra l'altro si può utilizzare anche la costante blink, per creare testo intermittente. Questo uso deve essere fatto così:

textcolor(white+blink);

Tuttavia, se per compilare il programma si usa Turbo Pascal, usando la unit crt quando viene compilato il programma, potrebbe comparire l'errore Runtime Error 200: divide by 0 pur senza che vi sia alcuna divisione per 0 all'interno del programma. Questo è dovuto a un problema d'incompatibilità, che non si verifica però se si usa un altro compilatore.

Tabella: le frequenze delle note[modifica]

Le frequenze delle note
Nota Frequenza (Hz) Formula (Hz)
Do 262
Do#/Reb 277
Re 294
Re#/Mib 311
Mi 330
Fa 349
Fa#/Solb 370
Sol 392
Sol#/Lab 415
La 440
La#/Sib 466
Si 494

La frequenza di riferimento è quella del La, ovvero 440 Hz. Per ottenere le altre ottave basta raddoppiare o dimezzare le frequenze della nota corrispondente di questa ottava centrale.

Graph[modifica]

graph è una libreria che fornisce la possibilità di integrare la grafica nelle applicazioni Pascal.

Funzioni di graph[modifica]

Prima di iniziare a disegnare, è necessario entrare in modalità grafica tramite le funzioni:

scheda := detect;
initgraph(scheda, modo, percorso); es: initgraph(scheda,triangolo,'c:\FPC');

dove scheda e modo sono due variabili da dichiarare come integer nell'intestazione del programma. La funzione detect ricerca la scheda grafica in uso e restituisce il valore numerico ad essa associato; initgraph avvia la modalità grafica utilizzando la scheda identificata dal valore numerico di scheda e attribuisce alla variabile modo la modalità grafica selezionata automaticamente da Pascal; percorso è una stringa che identifica il percorso nel quale sono presenti i driver della scheda grafica: normalmente è sufficiente indicare il percorso di installazione del compilatore, ad esempio C:\TP per Turbo Pascal e C:\FPC per Free Pascal.

Quando la modalità grafica viene attivata, viene aperta una finestra aggiuntiva che sarà la schermata di output delle funzioni grafiche. Per chiuderla, usiamo la funzione

closegraph;

Per usare i colori abbiamo a disposizione le funzioni:

setcolor(colore) {imposta il colore di primo piano}

Per identificare un colore possiamo usare un numero da 0 a getmaxcolor (è una funzione che restituisce il numero massimo di colore disponibile ) oppure le costanti red, white, black, ecc...

Un altro concetto importante è quello di puntatore attivo, cioè la posizione nel quale si trova il puntatore grafico. Quando vengono effettuati dei disegni di punti e linee, viene spostato il puntatore attivo in una posizione particolare.

Vediamo ora una serie di funzioni di disegno:

putpixel(x, y, colore)

Traccia un punto di coordinate x, y e del colore scelto e sposta in x, y il puntatore attivo.

getpixel(x,y)

Restituisce il colore del pixel in posizione x, y.

moveto(x,y)

Sposta il puntatore attivo nella posizione x,y.

GetX
GetY

Restituiscono le coordinate del puntatore attivo.

GetMaxX
GetMaxY

restituiscono i valori massimi della x e della y (ovvero le dimensioni in pixel della finestra di output).

line(x1, y1, x2, y2)

Traccia una linea dal punto x1, y1 al punto x2, y2. Sposta il puntatore attivo su x2, y2.

linerel(dx, dy)

Traccia una linea partendo dal puntatore attivo fino alla posizione x+dx e y+dy (dove x e y sono le coordinate del puntatore).

lineto(x, y)

Traccia una linea dal puntatore attivo al punto di coordinate x,y.

circle(x, y, r)

Disegna una circonferenza di centro x, y e di raggio r. Sposta il puntatore attivo su x, y.

 arc(x,y, ang1, ang2, r)

Disegna un arco di circonferenza di centro x, y e di raggio r a partire dall'angolo di gradi ang1 fino ad ang2. I gradi sono contati in senso antiorario a partire dalle ore 3. Sposta il puntatore attivo su x, y.

ellipse(x,y,ang1, ang2, rx, ry)

Disegna un arco di ellisse di centro x, y tra gli angoli ang1 e ang2 (per una ellisse completa usare i valori 0 e 359) con il raggio orizzontale rx e raggio verticale ry. Sposta il puntatore attivo su x, y.


Graph3[modifica]

Un'altra libreria molto usata è graph3 che permette l'utilizzo della grafica delle versioni di Turbo Pascal 3.xx, e tramite semplici comandi si riesce a disegnare facilmente punti, linee e altre forme geometriche. Questa libreria fornisce ovviamente meno funzionalità della sua pronipote graph, ma non richiede l'uso di una scheda grafica. L'utilizzo di questa libreria sostituisce alcune funzioni della libreria crt come clrscr, che viene sotituito da clearscreen. Dal momento in cui si entra nella modalità grafica con il comando graphcolormode la grandezza dei caratteri aumenta e la risoluzione diminuisce.

Funzioni di graph3[modifica]

Per attivare la modalità grafica è possibile usare due funzioni:

graphmode

permette di passare in modalità grafica in bianco e nero;

graphcolormode

è invece a colori. Dopo aver selezionato la modalità grafica a colori, è possibile scegliere una delle tavolozze di colori disponibili tramite la procedura

palette(n)

dove n è un intero compreso tra 0 e 3. A seconda del valore di n, il colore rappresentato dai diversi numeri cambia:

Tavolozza Sfondo Numero colore
1 2 3
0 nero verde rosso marrone
1 nero turchese magenta grigio chiaro
2 nero verde chiaro rosso chiaro giallo
3 nero turchese chiaro magenta chiaro bianco
plot(x,y,c)

Questa funzione permette di disegnare un punto di coordinate x, y di colore c che può che rappresenta un colore diverso a seconda della palette usata (vedi la tabella).

draw(x1,y1,x2,y2,c)

Questa funzione permette di disegnare una linea dal punto x1, y1 al punto x2, y2 di colore c