• Non ci sono risultati.

Pascal/Gestione avanzata dei dati

N/A
N/A
Protected

Academic year: 2021

Condividi "Pascal/Gestione avanzata dei dati"

Copied!
1
0
0

Testo completo

(1)

Pascal/Gestione avanzata dei dati

Wikibooks, manuali e libri di testo liberi.

In questo capitolo tratteremo tipi di dati più complessi e che utilizzeremo meno frequentemente

Tipi di dati definiti dall'utente

Abbiamo già visto prima che per dichiarare una variabile si deve specificare un tipo (ad esempio, integer o real) per indicare quali valori può assumere.

In alcuni casi può essere utile ricorrere a tipi di dati non predefiniti, ma creati dall'utente: si può ricorrere quindi ad una dichiarazione di tipo con la parola riservata type.

La sintassi è

type

nome: valori_possibili;

che definisce il tipo di dato nome.

Per indicare quindi che una variabile è del tipo nome si usa la sintassi:

var

variabile:nome;

Tipi enumerativi

Il più semplice tipo di dichiarazione type è quella dei tipi enumerativi, che consentono cioè un numero ristretto div valori, definiti singolarmente dall'utente:

type nome:(elemento_1, elemento_2,...,elemento_n);

dove elemento_1,elemento_2,...,elemento_n sono i possibile valori che possono assumere le variabili del tipo di dato nome elencati in ordine.

Per fare un esempio, possiamo definire un tipo:

type mesi: (gen, feb, mar, apr, mag, giu, lug, ago, set, ott, nov, dic);

e dichiarare due variabili

var mese_di_nascita_luigi, mese_di_nascita_gianni:mesi;

Se corso del programma poniamo

mese_di_nascita_luigi:= feb;

mese_di_nascita_gianni:= ago;

avremo che: l'istruzione writeln(mese_di_nascita_luigi); stampa sullo schermo feb;

l'espressione mese_di_nascita_luigi < mese_di_nascita_gianni restituisce TRUE, in quanto feb precede ago nella lista dei mesi indicata nella dichiarazione. Allo stesso modo giu > set

restituisce invece FALSE.

Subrange

(2)

I subrange sono tipi di dati che sono definiti come sottoinsiemi di altri tipi. Ad esempio:

type

cifra: 0..9

mese_primaverile: marzo..giugno;

lettera: 'a'..'z';

Abbiamo definito tre dati subrange: il primo tipo permette tutti i numeri dallo 0 al 9, il secondo tutti i mesi (da gennaio a dicembre) e il terzo tutti i caratteri da "a" a "z". Come si può intuire:

una definizione di un subrange è costituita da un limite inferiore e uno superiore

un subrange non è valido se il limite inferiore è maggiore o uguale a quello superiore (ad esempio non è valido il subrange 9..5)

i due limiti devono essere dello stesso tipo di dato (interi, char, o anche definiti dall'utente, come nel caso di mese_primaverile che è un subrange del tipo mesi definito in

precedenza)

Una volta definito, lo possiamo utilizzare:

var mese: mese_primaverile;

In questo caso ad esempio si possono effettuare dichiarazioni come mese := marzo; ma non mese:

ottobre;.

Insiemi

Vediamo ora un altro tipo di dato non molto utilizzato, ma che può risultare comodo in alcune occasioni: gli insiemi, che in Pascal sono molto simili al concetto di insieme in matematica; dato un insieme A di oggetti di un insieme di dati B, ogni oggetto di B appartiene o non appartiene ad A.

Vediamo come dichiarare gli insiemi con un esempio:

var giorni_liberi: SET OF integer;

Possiamo altrimenti scrivere:

type giorni_del_mese: SET OF integer;

var giorni_liberi : giorni_del_mese;

Ma il risultato è lo stesso. Per inizializzare un insieme usiamo la sintassi:

giorni_liberi := [1,3..7, 10..25, 29];

giorni_liberi := []; {insieme vuoto}

Si noti l'uso di un range nell'assegnazione. La sintassi generale è quindi per un insieme [el1, el2, el3..el7, ...].

Operazioni con gli insiemi

Le operazioni fattibili con gli insiemi sono le stesse in matematica: ad esempio, "+" corrisponde all'unione, "-" alla sottrazione e "*" all'intersezione.

(3)

[1, 3, 4] + [3, 9..11] = [1, 3, 4, 9..1]

[5, 7, 19, 22] - [22] = [5, 7, 19]

[5, 7, 19, 22] - [23] = [5, 7, 19]

[11..22] * [15..56] = [15..22]

[11..22] + [15..56] = [11..56]

[5, 7, 19, 22] * [22] = [22]

[5, 7, 19, 22] * [23] = []

Per verificare se un elemento è in un insieme, usiamo l'operatore IN:

if 1 in giorni_liberi then ...

È possibile anche confrontare gli insiemi:

=: restituisce true se i due insiemi sono uguali;

<>: restituisce true se i due insiemi sono diversi;

<=: restituisce true se il primo insieme è sottoinsieme del secondo (il secondo contiene il primo);

>=: contrario di <=

Riferimenti

Documenti correlati

28 obbliga i datori di lavo- ro a considerare, anche nella scel- ta delle attrezzature, delle sostan- ze o dei preparati chimici impie- gati e nella sistemazione dei luo- ghi di

Pertanto, l’inserimento dei dati in questione può essere effettuato all’interno dell' “Allegato 1F - Elenco prezzi unitari offerti - CORRETTO”, scrivendoli nello

• la costruzione di uno strumento dedicato per la comunicazione asincrona dei professionisti lungo il processo di cura (es. cartella clinica PDTA) e tra i diversi presidi della AO.

Per i procedimenti speciali, il patteggiamento allargato - con il limite di pena applicabile su richiesta delle parti portato ad otto anni di reclusione solo o congiunta a pena

 Per ottenere lo spazio occupato da una directory e tutte le sue sottodirectory è possibile utilizzare il commando du.

600 del 1973, (metodo di accertamento applicabile per estensione analogica anche in materia IVA, ai sensi dell'art. 3197 del 2013 in motivazione) qualora la contabilità stessa

Progresso – se nessun processo sta eseguendo la propria sezione critica e qualche processo vuole entrare nella sua, la selezione del prossimo processo che entrerà non può

Il sistema operativo, quando c’è bisogno di eseguire un nuovo servizio (e quindi di mandare in esecuzione un nuovo processo) decide di mandarlo in esecuzione sul processore che