# Pascal/Librerie e funzioni predefinite

Pascal
Copertina Tutti i moduli · Sviluppo
    Copertina
* IntroduzionePascal/Introduzione
* AlgoritmiPascal/Algoritmi
* VariabiliPascal/Variabili
* Input e outputPascal/Input e Output
* Tipi di dati e operatoriPascal/Tipi di dati
* Gestione avanzata dei datiPascal/Gestione avanzata dei dati
* CommentiPascal/Commenti
* Librerie e funzioni predefinitePascal/Librerie e funzioni predefinite
* Istruzioni di controlloPascal/Istruzioni di controllo
* ArrayPascal/Array
* Metodo top-down, procedure e funzioniPascal/Metodo top-down, procedure e funzioni
* Programmazione ad oggettiPascal/Programmazione ad oggetti
** Concetti fondamentaliPascal/Concetti fondamentali
** I modificatori public, private e protectedPascal/I modificatori public, private e protected
** Costruttori e distruttoriPascal/Costruttori e distruttori
** Override, metodi virtuali e classi astrattePascal/Override, metodi virtuali e classi astratte
** Il Turbo VisionPascal/Il Turbo Vision
* StrumentiPascal/Strumenti
* EserciziPascal/Esercizi
Modifica il sommario
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 è 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

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

Questa funzione permette di pulire lo schermo e di posizionare il cursore in alto a sinistra in posizione (1,1)
Queste due funzioni permettono di spegnere o accendere il cursore.
Questa procedura permette di posizionare il cursore in una posizione precisa sullo schermo.
La funzione sound fa emettere alla macchina un suono alla frequenza hz. Per fermare questo suono bisogna assolutamente utilizzare la procedura nosound
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:
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.
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:
in questo modo le istruzioni vengono ripetute fino a quando l'utente non preme un tasto.
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:
Se si utilizza dopo "keypressed", si legge direttamente il carattere premuto per fare diventare "keypressed" false. Esempio:
a questo punto l'utente ha premuto un tasto, con il quale è uscito dal ciclo e ha assegnato il carattere char alla variabile X.
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ì:
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

Le frequenze delle note :
| Nota | Frequenza (Hz) | Formula (Hz) |
| Do | 262 | $440\cdot (2^{\frac {1}{12}})^{-9}$ |
| Do#/Reb | 277 | $440\cdot (2^{\frac {1}{12}})^{-8}$ |
| Re | 294 | $440\cdot (2^{\frac {1}{12}})^{-7}$ |
| Re#/Mib | 311 | $440\cdot (2^{\frac {1}{12}})^{-6}$ |
| Mi | 330 | $440\cdot (2^{\frac {1}{12}})^{-5}$ |
| Fa | 349 | $440\cdot (2^{\frac {1}{12}})^{-4}$ |
| Fa#/Solb | 370 | $440\cdot (2^{\frac {1}{12}})^{-3}$ |
| Sol | 392 | $440\cdot (2^{\frac {1}{12}})^{-2}$ |
| Sol#/Lab | 415 | $440\cdot (2^{\frac {1}{12}})^{-1}$ |
| La | 440 | $440\cdot (2^{\frac {1}{12}})^{0}$ |
| La#/Sib | 466 | $440\cdot (2^{\frac {1}{12}})^{1}$ |
| Si | 494 | $440\cdot (2^{\frac {1}{12}})^{2}$ |
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

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

### Funzioni di graph

Prima di iniziare a disegnare, è necessario entrare in modalità grafica tramite le funzioni:
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
Per usare i colori abbiamo a disposizione le funzioni:
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:
Traccia un punto di coordinate x, y e del colore scelto e sposta in x, y il puntatore attivo.
Restituisce il colore del pixel in posizione x, y.
Sposta il puntatore attivo nella posizione x,y.
Restituiscono le coordinate del puntatore attivo.
restituiscono i valori massimi della x e della y (ovvero le dimensioni in pixel della finestra di output).
Traccia una linea dal punto x1, y1 al punto x2, y2. Sposta il puntatore attivo su x2, y2.
Traccia una linea partendo dal puntatore attivo fino alla posizione x+dx e y+dy (dove x e y sono le coordinate del puntatore).
Traccia una linea dal puntatore attivo al punto di coordinate x,y.
Disegna una circonferenza di centro x, y e di raggio r. Sposta il puntatore attivo su x, y.
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.
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

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

Per attivare la modalità grafica è possibile usare due funzioni:
permette di passare in modalità grafica in bianco e nero;
è invece a colori. Dopo aver selezionato la modalità grafica a colori, è possibile scegliere una delle tavolozze di colori disponibili tramite la procedura
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 | Numero colore | Numero colore |
| Tavolozza | Sfondo | 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 |
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).
Questa funzione permette di disegnare una linea dal punto x1, y1 al punto x2, y2 di colore c