DATI(1)
FONDAM ENTI
INFORMAZIONE – DATO – TIPO DI DATO
Col termine INFORMAZIONE si intende l’espressione, in forma
COMPRENSIBILE e SIGNIFICATIVA, di una notizia o messaggio che, in un
certo contesto o ambiente, apporta maggiori CONOSCENZE circa una
realtà o fenomeno.
In altri termini, l’informazione è ciò che riduce la INCERTEZZA
delle conoscenze in relazione ad un certo argomento o al
verificarsi di un certo evento.
Il concetto di informazione è strettamente legato a quello di
COMUNICAZIONE: l’informazione è ciò che un soggetto sorgente S
intende comunicare ad un soggetto destinatario D quando S e D
convergono verso uno stesso RAPPORTO SEMIOTICO (in altri termini,
quando S e D stabiliscono un accordo univoco circa i significati,
cioè la semantica, di ciò che viene comunicato).
L’informazione può essere acquisita in diverse forme da diverse
fonti (suoni, immagini, gesti, alfabeto, simboli, cifre), secondo
diverse modalità (in tempo reale o differito, in modo diretto o
indiretto se trasformata) e secondo vari GRADI DI ATTENDIBILITÀ,
infatti, siccome in qualche modo l’informazione implica la
comunicazione, si pone almeno il problema della UNIVOCITÀ DI
INTERPRETAZIONE dell’informazione.
La trasmissione dell’informazione, quale fase di un processo di
comunicazione,
implica
che
l’informazione
sia
rappresentata
tramite un modello, fondamentalmente basato su di un LINGUAGGIO (in
senso lato); una entità minima di senso compiuto di tale modello
viene a costituire ciò che si chiama DATO.
Stabilire una entità minima di informazione consente di poter
parlare di quantità di informazione, cioè di poter definire una
MISURA DELLA INFORMAZIONE (vedi seguito).
Per ora e per il seguito si farà riferimento anche alle slide
DATI01 e DATI02.
Col termine DATO si intende una RAPPRESENTAZIONE FORMALIZZATA o
codificata di una informazione, tale da poter essere interpretata,
comunicata ed elaborata da esseri umani o sistemi automatici.
prof. Felice Zampini
Dati(1)
1/47
La parola Dato deriva dal latino Datum, traducibile col termine
fatto: i dati sono fatti, anche ipotetici, che diventano
informazioni quando trasmettono un significato, ciò che è come
dire che l’informazione è il significato dei dati, i quali
codificano fatti.
Un dato è dunque una rappresentazione formale di eventi,
concetti, istruzioni, comandi (espressi in forme opportune, p.es.
simboli o caratteri di un alfabeto, simboli grafici o icone, ecc.)
cui può essere assegnato e/o riconosciuto un significato e
rispetto al quale sia possibile compiere delle OPERAZIONI (in senso
lato) ed instaurare una comunicazione.
Un dato costituisce pertanto (o contiene) un’informazione per
un soggetto se, fornendone una chiave interpretativa (significato
o SEMANTICA del dato), ciò comporta un reale aumento delle
conoscenze del soggetto circa la realtà che il dato rappresenta.
Come già accennato, il concetto di dato, in quanto derivato da
un processo di formalizzazione, implica l’esistenza di un MODELLO DI
RAPPRESENTAZIONE, fondamentalmente basato su di un LINGUAGGIO, in cui il
dato stesso gioca il ruolo di entità minima dotata di senso
compiuto.
Tramite i dati, espressi in forma opportuna (simboli,
caratteri, icone, ecc.), è dunque possibile MODELLARE LA REALTÀ
(eventi, concetti, comandi, ecc.) dandone una rappresentazione
formale cui sia assegnato e/o riconosciuto un significato certo ed
in cui sia possibile effettuare delle OPERAZIONI e la comunicazione.
Distinguendo i dati in base alla loro natura (o al loro dominio
di definizione) ed alle operazioni su di essi definibili si
perviene al concetto di TIPO DI DATO.
Col termine TIPO DI DATO si intende un insieme di dati cui sia
associato un insieme di operazioni.
In altri termini, un tipo di dato è un insieme di dati dotato
di una struttura di tipo algebrico.
Oppure, un tipo di dato è definito quando è dato un insieme di
“oggetti” o “valori” (elementi costituenti l’insieme di supporto
del tipo di dato) ed un insieme di operazioni eseguibili su di
essi (algebra associata).
Distinguendo i dati in base alla loro natura (ciò che si
rappresenta) e le operazioni in base alle loro proprietà (ciò che
si può fare) si possono ottenere per astrazione diversi tipi di
dati.
I Tipi di Dati sono trattati più avanti in questa dispensa e
nella Dispensa DATI(2).
prof. Felice Zampini
Dati(1)
2/47
MISURA DELLA INFORMAZIONE
Come già accennato, almeno da un punto di vista intuitivo si
può dire che la INFORMAZIONE è ciò che riduce la incertezza delle
conoscenze su di un certo argomento o, in altri termini, il grado
di incertezza del verificarsi di un certo evento E.
Viene dunque spontaneo esprimere una misura H della quantità di
informazione associata ad E in base alla probabilità P(E) del
verificarsi di E, ovvero esprimere H come una funzione di P(E):
H=f(P(E))
In tal senso, informazione non va confusa con significato; in
particolare, per quanto concerne la teoria delle comunicazioni, il
termine informazione riguarda non tanto ciò che si dice
effettivamente quanto piuttosto ciò che si potrebbe dire:
l'informazione esprime una misura del grado di libertà di scelta
nella scelta di un messaggio fra un insieme di messaggi possibili.
Quale UNITÀ DI MISURA DELL'INFORMAZIONE si può fare riferimento alla
informazione minima per prendere una decisione tra due eventi
equiprobabili, in altri termini, una situazione a due alternative
(del tipo "tutto o nulla") possiede una unità elementare di
informazione, alla quale viene naturale associare la cifra
binaria, cioè il BIT.
In tale ottica, H cresce al diminuire di P(E) (da 1 a 0) e
dovrà risultare nulla per P(E)=1 ed infinita per P(E)=0, in
conformità con la constatazione, ovvia, che l'evento certo non
fornisce informazione ed il verificarsi dell'evento impossibile
implica un contenuto informativo teoricamente infinito (casi
limite).
P(E)
0 (evento impossibile)
H
 (informazione "infinita")


1 (evento certo)
0 (informazione nulla)
Rimane da determinare le caratteristiche della funzione:
f:P(E)H
Una funzione che può descrivere H, in base alle considerazioni
svolte, può essere la funzione logaritmica (in base 2).
Siccome H è proporzionale ad 1/P(E) allora può porsi:
H=log2(1/P(E))=-log2P(E)
prof. Felice Zampini
Dati(1)
3/47
La quantità di informazione è quindi esprimibile tramite la
formula:
H = -log2P(E)
Tale relazione, nei casi più elementari, definisce la quantità
di informazione come logaritmo del numero di scelte possibili
(vedi esempio seguente, ove la formula va presa col segno
positivo) e, più in generale, stabilisce uno stretto legame col
concetto di entropia, ricorrente in termodinamica.
Si noti che il segno meno davanti al logaritmo sarebbe comunque
necessario per rendere positiva H, in quanto P(E) varia tra 0 e 1.
La formula dell'informazione è generalizzabile ad insiemi di n
simboli
(o
messaggi
completi)
indipendenti
con
associate
probabilità di scelta P1,P2,...,Pn (formula dell’informazione media
pesata):
n
H = -Pilog2Pi
i=1
L’analisi del caso discreto non è restrittiva in quanto lo
studio di un segnale analogico può essere ricondotto a quello di
un corrispondente segnale discreto (teoria di campionamento).
Esempio
Un dispositivo bistabile - p.es. un relè - può trattare una situazione di unità
di informazione a 2 alternative di messaggi (chiuso=0, aperto=1), percui esso
fornisce una quantità di informazione pari a:
H=Log22=1 bit
Com'è noto, dati n relè - p.es. 4 - si hanno:
24=16
scelte (configurazioni, messaggi o alternative) possibili (da 0000 a 1111), cioè
il quadruplo che nel caso singolo (2x2x2x2), sensatamente con il risultato:
H=Log216=4 bit
prof. Felice Zampini
Dati(1)
4/47
DATI ASTRATTI E CONCRETI
Definito un insieme minimo di Dati Elementari si possono
introdurre MECCANISMI ASTRATTI DI STRUTTURAZIONE DEI DATI che consentono di
costruire Dati Derivati, a partire da quelli semplici, e nuove
operazioni, pervenendo così al concetto di Struttura Astratta o
Logica di Dati.
Traducendo
le
rappresentazioni
logiche
dei
dati
in
rappresentazioni interne ad un elaboratore elettronico si perviene
al concetto di Struttura Concreta o Fisica di Dati, la cui
implementazione dipende dai meccanismi di strutturazione dei dati
offerti dai linguaggi di programmazione e dalle caratteristiche
hardware dei sistemi di elaborazione dati.
Si noti che in tale passaggio la rappresentazione logica del
dato, la cui semantica è attibuita dall’uomo, viene a sua volta
rappresentata nella macchina, traducendosi nella semantica interna
dei tipi di dati.
Vediamo di cogliere le differenze tra strutture logiche e fisiche di dati
da un punto di vista un pò più generale di quello dell’EDP. A tale scopo,
esaminiamo come possono essere considerati gli elementi che caratterizzano un
dato (nome, indirizzo, tipo, valore, significato) da parte dell’uomo (U) e della
macchina (M).
Nome
M)
Determina l’identificazione del dato e consente di referenziarlo (il
nome è collegato all’indirizzo);
U.
Determina l’identificazione del dato e consente di referenziarlo.
Indirizzo
M)
Determina l’ubicazione del dato e consente di accederlo;
U.
Nessun significato in generale.
Tipo
M)
Determina la semantica del dato in termini di spazio allocato,
codifica, operazioni ammesse, valori ammessi (limitati dalla natura
discreta e finita delle rappresentazioni macchina);
U.
Determina la proprietà di appartenenza del dato ad un certo insieme di
“oggetti” I.
Valore
M)
Determina il contenuto del dato, variabile nell’ambito del range di
valori ammessi dal suo tipo (insieme di definizione o dominio del dato)
secondo la codifica adottata;
U.
Determina un elemento dell’insieme I di appartenenza del dato.
Significato
M)
Nella semantica della macchina il significato del dato non può che
essere quello stabilito dal suo TIPO;
U.
Nella semantica dell’uomo il dato rappresenta un MODELLO di una certa
realtà (eventualmente da trasferire ad un elaboratore, il cui modello
coincide col Tipo).
prof. Felice Zampini
Dati(1)
5/47
Conclusione: la semantica dei modelli logici di dati è vista
dall’elaboratore solo in termini di tipi di dati, insufficienti da
soli per modellare le realtà che i modelli logici possono
descrivere.
La possibilità di trasferire all’elaboratore la semantica
dell’uomo è una funzione che deve essere svolta dal software,
attraverso la definizione di strutture di dati, relazioni e
vincoli tra dati, procedure.
Dal punto di vista logico il contenuto informativo dei dati (in
quanto rappresentazioni di realtà) è palesato quando è noto:
 Il Significato Intensionale dei Dati, cioè la chiave di
interpretazione, la semantica, ciò che essi rappresentano in
quanto attributi, forme o modelli, ovvero il modello di
rappresentazione o SCHEMA dei dati (che nell’ambito dei
linguaggi di programmazione coincide col modello fornito dai
tipi di dati);
 Il Significato Estensionale dei Dati, cioè i loro valori
specifici o ISTANZE (estensioni, esemplari) dello schema,
ovvero ciò che essi sono contestualmente in quanto valori di
attributi, esemplari di forme o modelli.
Si può dunque definire uno Schema o Modello di Dati come una
rappresentazione
del
significato
intensionale
dei
dati,
a
prescindere dalle particolari istanziazioni di essi; un modello
fornisce una descrizione degli oggetti reali da rappresentare
attraverso i dati in termini di talune proprietà formali tramite
le quali essi sono individuati.
Giova richiamare ancora l’attenzione sulla differenza tra il concetto di
Schema o Modello di Dati e Istanza dello schema: lo schema descrive gli aspetti
formali di una certa realtà (indipendentemente dagli aspetti “concreti” che
potrebbero riguardarla), fornendone la chiave interpretativa, una istanza è
invece uno dei possibili reali stati di tale realtà (uno dei possibili “valori”
assumibili dagli attributi nel loro dominio di definizione), cioè una estensione
o esemplare dello schema (ovvero uno dei possibili “riempimenti” dello schema).
Nota
I modelli di dati sono trattati nella dispensa Data Base Management System
(1); vengono qui fornite alcune definizioni come premessa didattica.
Un Modello di Dati identifica:

Le CATEGORIE che individuano e suddividono i dati (classi di oggetti
della realtà da rappresentare);

Gli ATTRIBUTI di ciascuna categoria (proprietà interessanti tramite le
quali si individuano e caratterizzano gli oggetti di una data classe);

Le eventuali ASSOCIAZIONI definite tra categorie (relazioni tra classi di
oggetti) e gli eventuali attibuti di ciascuna associazione (proprietà
informative interessanti relative alle relazioni);

I VINCOLI DI INTEGRITÀ cui sono soggetti i dati (restrizioni cui sono
soggetti i dati). Tali vincoli possono essere:
-
IMPLICITI: in quanto imposti dalla categoria cui i dati appartengono;
-
ESPLICITI:
in
dichiarazioni.
prof. Felice Zampini
quanto
imposti
Dati(1)
dall’esterno
tramite
esplicite
6/47
STRUTTURE INFORMATIVE
La Rappresentazione della Informazione tramite i dati è un
processo di rappresentazione e modellizzazione della realtà che
coinvolge il Significato dei dati e si basa sul concetto di
STRUTTURA INFORMATIVA.
Una Struttura Informativa implica la considerazione
aspetti concernenti i dati ed è costituita da:
di
2
-
un INSIEME DI DATI, dato in senso estensionale, quale insieme
di valori che costituiscono l’informazione, o in senso
intensionale, quale insieme di attributi;
-
una STRUTTURA DEI DATI, data dalle relazioni logiche secondo le
quali i dati sono tra loro correlati.
Esempio
L’informazione “distanza tra 2 città” è acquisibile da
una tabella (struttura informativa di tipo
bidimensionale) scandendone righe e colonne
Tabella Distanze Stradali (Km)
CITTÀ
Milano
Bologna
Roma
Napoli
Milano
*
220
640
860
Bologna
220
*
410
640
Roma
640
410
*
235
Napoli
860
640
235
*
La struttura (forma della tabella) non varia al
variare dei suoi valori (p.es. per la realizzazione di
nuove strade) ma potrebbe essere modificata p. es. a
scopi di ottimizzazione (minor spazio, eliminazione di
ridondanze)
Milano
Bologna
220
Bologna
Roma
640
410
Roma
Napoli
860
640
235
Da un punto di vista
concerne i sistemi EDP
considerare che:
prof. Felice Zampini
concreto, in
(elaboratori
Dati(1)
particolare per quanto
elettronici) occorrerà
7/47
-
UN TIPO DI DATO AVRÀ UNA RAPPRESENTAZIONE IN MEMORIA cioè andrà ad
occupare uno spazio fisico (in memoria centrale e/o di
massa), percui, per la natura stessa dei sistemi, potranno
perdere di validità talune proprietà generali delle algebre,
intese in senso matematico, qualora queste siano applicate
in tali contesti, dovendosi in essi considerare, di
necessità, ALGEBRE DISCRETE SU ELEMENTI A RAPPRESENTAZIONE FINITA;
-
la RAPPRESENTAZIONE LOGICA di un dato o
informativa costruita per via astratta
(per essere poi trasferita alla macchina)
RAPPRESENTAZIONE FISICA
del dato o della
macchina si costruirà al suo interno.
di una struttura
dall’essere umano
sarà diversa dalla
struttura che la
Nel parlare di Tipi di Dati, quindi di Strutture Dati,
occorrerà dunque tenere sempre presente due distinti livelli
concettuali:
-
la Rappresentazione Logica dei dati;
-
la Rappresentazione Macchina dei dati.
RAPPRESENTAZIONE LOGICA DEI DATI
La rappresentazione logica dei dati, in quanto attività di
idealizzazione e schematizzazione compiuta dal programmatore allo
scopo di modellare la realtà, corrisponde alla visione logica dei
dati, “esterna” all'elaboratore e tendente a prescindere dagli
aspetti fisici riguardanti i dati e la loro manipolazione.
L’attività di modellizzazione consiste in un processo di
ASTRAZIONE DEI DATI
(DATA ABSTRACTION)
che consente di definire le
STRUTTURE ASTRATTE
O
LOGICHE
DI
DATI
Le Strutture Logiche di Dati sono costruzioni mentali di
strutture dati che, partendo da dati semplici, per astrazioni
sempre più spinte possono divenire via via più ricche e complesse
(si pensi, ad esempio, al maggior livello di astrazione implicato
nella rappresentazione logica e macchina di un numero reale
rispetto ad un carattere, pur trattandosi di tipi elementari).
Nella pratica della programmazione i dati di tipo elementare e
le strutture logiche di dati realizzabili sono generalmente
dipendenti dal linguaggio utilizzato.
RAPPRESENTAZIONE MACCHINA DEI DATI
La rappresentazione macchina dei dati è la rappresentazione dei
dati nelle memorie dell’elaboratore, cioè la visione “interna”,
fisica, dei dati da parte della macchina.
prof. Felice Zampini
Dati(1)
8/47
Tali rappresentazioni riguardano principalmente
hardware della macchina e sono chiamate:
STRUTTURE CONCRETE
O
FISICHE
O
INTERNE
DI
il
livello
DATI
Nella pratica della programmazione le strutture fisiche di dati
sono generalmente dipendenti dal sistema EDP utilizzato.
PROBLEMATICHE DI IMPLEMENTAZIONE
In linea generale, a livello applicativo la natura di un certo
tipo di problema da risolvere determina il tipo di struttura
informativa cui ricorrere per la rappresentazione dei dati.
Una problematica che si pone a più basso livello è quella di
tradurre le strutture logiche di dati in corrispondenti strutture
fisiche o interne di dati.
In altri termini, le strutture logiche di dati, su cui opera il
programmatore
(software
applicativo),
dovranno
trovare
corrispondenti
rappresentazioni
interne
alla
macchina
(hardware/software
di
base),
tramite
Implementazioni
che
organizzino ed interconnettano gli elementi di memoria (sequenze
lineari di celle, o Word di memoria, con associati indirizzi) in
modo opportuno.
In altri termini ancora, occorrerà disporre
meccanismi che siano in grado di effettuare la:
ALLOCAZIONE
DI
STRUTTURE ASTRATTE
IN
STRUTTURE INTERNE
di
appositi
DI MEMORIA
Tali meccanismi sono di norma moduli del Sistema Operativo i
quali, tra i vari compiti, devono assolvere anche ai suddetti.
Questi moduli sono i seguenti:
Sistema di Gestione della Memoria
(Memory Management)
avente il compito di tradurre le strutture logiche di dati in
corrispondenti strutture fisiche di dati in Memoria Centrale.
Sistema di Gestione dei File
(File System o Information Management)
avente il compito di tradurre le strutture logiche di dati in
corrispondenti strutture fisiche di dati nelle Memorie Periferiche
(memorie di massa).
prof. Felice Zampini
Dati(1)
9/47
Dalle considerazioni sopra esposte emerge che il linguaggio di
definizione delle strutture interne, quindi in particolare il
sistema di gestione della memoria, dovrà disporre, in via
generale, dei seguenti meccanismi:
 Allocazione
Assegnazione di una zona di memoria ad una struttura dati.
Qualora gli elementi costituenti la zona siano adiacenti, la
generazione degli indirizzi sarà additiva altrimenti si
attuerà
una concatenazione, dotando ogni elemento di
un'informazione che consenta di rintracciare il successivo o
correlarlo con altri (puntatori).
 Rappresentazione
Codificazione dei dati e conversione tra i diversi sistemi di
rappresentazione di essi.
 Manipolazione
Lettura, scrittura, modifica della struttura dati in modo da
consentire la manipolazione a programma degli stessi.
 Recupero
Riconoscimento, compattamento e riallocazione delle aree di
memoria
resesi
disponibili
durante
l'esecuzione
del
programma.
prof. Felice Zampini
Dati(1)
10/47
TIPI DI DATI
Date le informazioni, o, meglio, i Dati:
DATI = INFORMAZIONI CODIFICATE
si possono individuare Tipi di Dati definendo delle Operazioni su
ben determinati insiemi di dati, cioè delle Algebre sugli insiemi
sostegno di dati:
TIPI
DI
DATI = DATI + OPERAZIONI
Si porranno allora questioni quali le seguenti:
1. Come rappresentare (ed organizzare) i Tipi di Dati?
2. Come realizzare gli algoritmi per definire le operazioni?
3. Come rappresentare (ed implementare) i Tipi di Dati ammessi
nei linguaggi di programmazione?
4. Come classificare i Tipi di Dati?
Anche se non c'è un vero e proprio standard nella definizione e
classificazione dei Tipi di Dati - essendo il problema non
facilmente svincolabile dai sistemi EDP e dai linguaggi di
programmazione specifici, soprattutto per quanto concerne i dati
primitivi - di fatto si riscontra una certa concordanza di
opinioni per poter dare una prima classificazione, relativa e
sufficientemente generale, dei Tipi di Dati.
Possiamo pertanto pensare di suddividere logicamente i dati in
tre categorie primarie:
1. Dati elementari (semplici, primitivi o fondamentali);
2. Dati strutturati di tipo statico (dati derivati);
3. Dati strutturati di tipo dinamico (dati derivati).
DATI ELEMENTARI
Un Tipo di Dato si dice elementare se esso è direttamente
fruibile tramite un linguaggio di programmazione e non è
ulteriormente scomponibile; vista la differente natura dei
linguaggi di programmazione e dei sistemi EDP si potranno
considerare alcuni tipi principali come dati di tipo elementare,
cioè quei tipi primitivi generalmente presenti in quasi tutti i
contesti implementativi; in pratica, questi Tipi di Dati vengono
dichiarati a programma con dichiarazioni semplici e l'allocazione
di memoria è per essi fissa e predeterminata.
Possiamo considerare come dati elementari i seguenti tipi:
 Carattere;
 Intero;
 Reale;
 Booleano;
 Tipi definiti per Enumerazione.
prof. Felice Zampini
Dati(1)
11/47
Nelle varie implementazioni per i tipi elementari sono previste
delle varianti (con/senza segno, corti/lunghi, con
maggiore o
minore precisione ed intervallo di rappresentazione).
DATI STRUTTURATI
Un Tipo di Dato si dice Strutturato, o Derivato, se esso è
definito a partire dai dati semplici. Per costruire un dato
derivato
si
possono
utilizzare
appositi
strumenti
logicolinguistici (costruttori e generatori di tipo) e procedimenti di
tipo creativo (in un certo senso) che, a seconda delle possibilità
offerte dal linguaggio di programmazione, consentono di definire
strutture di dati, sia astratte che concrete, di tipo Statico e
Dinamico.
STRUTTURE STATICHE DI DATI
I dati strutturati di tipo statico sono quei tipi di dati
(costruibili a partire dai tipi semplici) le cui dimensioni non
possono essere modificate durante l'esecuzione del programma (gli
elementi sono in numero costante); in pratica, questi dati vengono
dichiarati a programma unitamente alle loro dimensioni, sicchè
l'allocazione di memoria per essi è staticamente determinata.
Possiamo considerare le seguenti strutture statiche di dati:

Array (vettori e matrici);

Stringa;

Record;

Tabella;

Insieme.
Nota
Il tipo di dato Stringa costituisce un caso particolare, essendo
considerato di tipo elementare o no a seconda della sua disponibilità in
modo diretto o meno nel linguaggio di programmazione. Il tipo di dato
Record in alcuni casi (eccezioni) potrebbe essere considerato come non
propriamente statico (record a lunghezza variabile non omogenei). Anche per
il tipo Array in alcuni contesti sono possibili particolari operazioni di
allocazione dinamica.
STRUTTURE DINAMICHE DI DATI
I dati strutturati di tipo dinamico sono quei tipi di dati le
cui dimensioni possono essere modificate durante l'esecuzione del
programma (gli elementi possono essere in numero variabile); in
pratica, questi dati vengono solo dichiarati a programma (in modo
adimensionale), sicchè per essi si ha una ALLOCAZIONE DINAMICA di
memoria (memoria heap).
prof. Felice Zampini
Dati(1)
12/47
Possiamo considerare le seguenti strutture dinamiche di dati:

Puntatore (pointer);

Lista;

Coda (queue);

Pila (stack);

File;

Albero (tree);

Grafo.
Nota
Il tipo di dato File, in particolare il tipo File Dati, data la sua
importanza in informatica e la varietà delle strutture con esso definibili,
meriterà un discorso a parte. I tipi di dati Albero e Grafo (nelle loro
diverse varianti) rientrano in una categoria di strutture chiamate STRUTTURE
NON LINEARI
(gli elementi o nodi di informazione possono avere più
predecessori e più successori).
Altri tipi di oggetti complessi e particolari, da
parte, sono i seguenti:

Funzioni (functions);

Unioni;

Strutture;

Classi.
prof. Felice Zampini
Dati(1)
esaminare a
13/47
TIPO INTERO
Il tipo di dato intero è un tipo elementare definito
sull'insieme I dei numeri interi con associata algebra basata
sulle ordinarie regole ed operazioni aritmetiche (+ - * /).
La Rappresentazione Macchina (rappresentazione interna in
memoria centrale o struttura fisica del dato) del tipo intero si
effettua in 2 modi:
- Rappresentazione in Segno/Modulo;
- Rappresentazione in Complemento a 2.
Tali rappresentazioni macchina sono limitate dal numero di bit
prefissati per codificare un intero (word di memoria); detto n
tale numero ed i un generico intero dell'insieme I si ha infatti:
i  2n-1
(i  0)
Riservando un bit per la codifica del segno, al fine
rappresentare interi positivi e negativi, riesce pertanto:
di
-2n-1  i  2n-1-1
Nei piccoli sistemi (p.es. PC) è tipico il valore n=16, percui
gli interi rappresentabili cadono nell'intervallo:

-215
-32728
215-1
32727
Situazioni determinanti interi non rappresentabili, cioè non
compresi nel range dei valori codificabili, andranno a causare
condizioni di OVERFLOW o di UNDERFLOW oppure approssimazioni per
ARROTONDAMENTO o TRONCAMENTO (mod 2n), a seconda del sistema Hw/Sw
utilizzato.
RAPPRESENTAZIONE IN SEGNO/MODULO
Il bit più significativo (MSB - Most Significant Bit) della word di memoria
viene riservato per la rappresentazione del segno (0=+, 1=-) ed i restanti n-1
bit per la rappresentazione del modulo del numero.
Rappresentazione Segno/Modulo
Bit
Word
(16 bit)
prof. Felice Zampini
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
-----------------------------------------------| 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 | = -9
-----------------------------------------------MSB
M o d u l o
Segno
Dati(1)
14/47
La rappresentazione Segno/Modulo, abbastanza utilizzata nelle precedenti
generazioni di elaboratori elettronici, è ora in fase di abbandono causa alcuni
inconvenienti riscontrabili nella implementazione per la realizzazione delle
operazioni aritmetiche elementari (oltre la doppia rappresentazione, positiva e
negativa,
dello
zero),
inconvenienti
decisamente
non
compensati
dalla
immediatezza interpretativa di tale rappresentazione.
RAPPRESENTAZIONE IN COMPLEMENTO A DUE
Questa rappresentazione è identica a quella in Segno/Modulo per numeri
interi i0 (con MSB=0), mentre se i0 si pone MSB=1 e si codifica un modulo dato
da:
2n-1-|i|
(complemento a 2n-1 di i).
Rimandando all'aritmetica dei calcolatori, per quanto concerne le regole di
complementazione e le operazioni su numeri rappresentati in complemento a 2,
facciamo alcune osservazioni su tale rappresentazione ricorrendo ad un esempio,
basato per semplicità su 4 bit.
Rappresentazione in complemento a 2
Codifica dell'intero positivo
5: 0101 = 1*22+0*21+1*20 = 5
Codifica dell'intero negativo -5: 24-1-5 = 3 => 1011
Da notare che nella rappresentazione:
 Il decimale codificato è ottenibile attribuendo a MSB peso:
-2n-1; p.es. 1011=1*(-23)+0*22+1*21+1*20=-8+2+1=-5
tale peso è ininfluente per i positivi in quanto ad essi è associato
MSB=0;
 Lo zero ha un'unica codifica (0000);
 Si evidenziano alcune "simmetrie", come in tabella:
Codifica | Decimale
a
|-----------4 bit
|MSB=0 MSB=1
---------|-----------0 0 0
| 0
-8
0 0 1
| 1
-7
0 1 0
| 2
-6
0 1 1
| 3
-5
1 0 0
| 4
-4
1 0 1
| 5
-3
1 1 0
| 6
-2
1 1 1
| 7
-1
Si noti ancora che:
 Invertendo i bit di un numero negativo (complementazione ad uno) si
ottiene il suo modulo diminuito di 1 (per esempio, da: -3 = 1101 si
ottiene 0010 = 2);
 Aggiungendo 1 al max positivo si ottiene il min negativo (max in modulo).
La rappresentazione in complemento a due si rivela particolarmente
conveniente per gli elaboratori elettronici, apportando diversi vantaggi nella
realizzazione dei circuiti aritmetici (aritmetica dei calcolatori).
prof. Felice Zampini
Dati(1)
15/47
TIPO CARATTERE
Il tipo di dato carattere è un tipo elementare definito sulla
base
dei
simboli
costituenti
l'usuale
alfabeto
umano
(occidentale), classificabili in caratteri:
 ALFABETICI
ABCDEFGHIJKLMNOPQRSTUVWXYZ
(upper-case)
abcdefghijklmnopqrstuvwxyz
(lower-case)
à á è é ì í ò ó ù ú
(accentati)
ç ö â ¢
(ed altri)
(anche lo SPAZIO o BLANK è da considerarsi un carattere)
 CIFRE DECIMALI
0123456789
 SPECIALI
- Interpunzione:
, ; : ! ? ' " ÷ 
(ed altri)
- Matematici:
+ - * / ( ) < = >     
(ed altri)
- Commerciali:
& $ £ %
(ed altri)
- Vari:
\ | @ # ^ « » §
(ed altri)
 GRAFICI







®

(ed altri)
 CARATTERI DI CONTROLLO
Consistono in
caratteri
(in quanto corrispondenti ad una
codifica) non riproducibili impiegati per attivare funzioni
macchina (hardware/firmware).
Si possono definire le seguenti operazioni di base:
 Lettura (Read)
da un dispositivo di input o memoria;
 Scrittura (Write)
su un dispositivo di output o memoria;
considerarsi "distruttiva";
prof. Felice Zampini
Dati(1)
tale operazione è da
16/47
 Codifica, COD(car)
è la funzione (biunivoca) che associa ad ogni carattere un
codice (numero naturale o intero):
f:CN
(C=insieme di caratteri, N=sottoinsieme dei numeri naturali);
 Decodifica, CAR(cod)
è la funzione (biunivoca), inversa della
COD(car),
associa ad ogni Codice-carattere un carattere:
che
f-1:NC
 Confronto
car1  car2
sse
COD(car1)  COD(car2).
La Rappresentazione Macchina del tipo carattere avviene sulla
base del codice testuale alfanumerico utilizzato per memorizzarne
i relativi bit.
Codici (alfanumerici) di vasto impiego nei contesti EDP sono il
codice ASCII (standardizzato CCITT, set di caratteri normale od
esteso), il codice EBCDIC ed il codice ISO (vedasi dispense
Sistemi di Codifica).
In genere, il tipo carattere viene allocato in 1 byte di
memoria e, nella codifica ASCII, uno dei bit viene utilizzato o
per estendere la codifica (a 256 caratteri) o per svolgere
funzioni di controllo (parity-check).
Esempio Visual Basic
Operazione Visual Basic
Risultato (nella var. ass.)
---------------------------------------------------------f:CN
X%=Asc("i")
Y%=Asc("l")
105
108
f-1:NC
X$=Chr(105)
Y$=Chr(108)
Z%=X$<Y$
i
l
-1 (Vero)
X$<Y$
Nota
Tra le operazioni definibili sui caratteri un’altra di particolare
interesse può essere quella che converte un carattere in una cifra (quindi
in un valore numerico).
prof. Felice Zampini
Dati(1)
17/47
TIPO BOOLEANO
Il tipo di dato booleano si identifica con l'Algebra Binaria di
Boole (calcolo proposizionale, algebra di commutazione dal punto
di vista elettronico) ed ammette 2 SOLI VALORI, tipicamente
rappresentati tramite cifre binarie, 0/1, o da simboli quali V/F,
Si/No, On/Off e similmente.
si comprenda bene il collegamento tra le nozioni di:
BIT
-
DISPOSITIVO BISTABILE
SISTEMA BINARIO
BYTE
-
-
-
STATO LOGICO DI UN DISPOSITIVO
ALGEBRA BOOLEANA
-
ALGEBRA DI COMMUTAZIONE
CODIFICA DIGITALE DELL'INFORMAZIONE
-
MEMORIA
L'interpretazione insiemistica del calcolo proposizionale
esplicita ed evidenzia l'isomorfismo tra le due algebre (vedi
dispense sulle Strutture Algebriche):
P R E D I C A T I
----------------Vero
I N S I E M I
------------I
(insieme "totale", di 1 elemento);
Falso
Negazione
NOT x

I-x
(insieme vuoto);
(differenza o complemento);
Disgiunzione
x OR y
xy
(unione);
Congiunzione
x AND y
xy
(intersezione).
Oltre alle operazioni NOT, OR, AND definibili sull'insieme di
supporto del tipo di dato booleano (predicati) se ne possono
definire altre (NOR, XOR, NAND), per le quali si rimanda al corso
di matematica e/o elettronica (Logica ed Algebra di Boole).
Varrà invece la pena ricordare che:
SI CHIAMA IN CAUSA UNA
VARIABILE
DI
TIPO
BOOLEANO
OGNI QUALVOLTA SI OPERI UN QUALCHE
CONFRONTO
ove si ammettono
confrontabile.
prof. Felice Zampini
TRA
coppie
COPPIE
dello
DI
DATI
DELLO
STESSO
stesso
tipo
o
Dati(1)
TIPO
comunque
di
tipo
18/47
Si ricordi inoltre che le Tavole di Verità consentono di
verificare in modo esaustivo (estensivamente) le operazioni
booleane
(ove
non
siano
implicate
relazioni
definite
intensivamente), al pari dei Diagrammi di Eulero-Venn nel versante
insiemistico.
La Rappresentazione Macchina di una variabile booleana può
effettuarsi allocando per essa anche semplicemente 1 bit (in tal
caso per la sua manipolazione diretta occorre che il linguaggio di
programmazione sia dotato di apposite funzioni per operare sui
singoli bit).
Sono esempi di variabili booleane le seguenti espressioni
(valutabili come proposizioni, cioè entità che ammettono i 2 soli
valori logici mutuamente esclusivi Vero o Falso):
x < y
(x, y grandezze confrontabili)
Oggi Rossi è assente.
Si noti che in Informatica l’espressione Delta=0 (ove Delta è
una grandezza numerica e = è l’operatore binario di assegnamento)
può assumere significati diversi, dipendenti dal contesto, mentre
l’espressione Delta==0 è non ambigua (ove == è l’operatore
relazionale di uguaglianza):
Delta=0
l’espressione è un’assegnazione
if (Delta=0) ...
l’espressione può avere il senso di
una variabile logica (p. es. in C)
Delta==0
prof. Felice Zampini
l’espressione è una variabile logica.
Dati(1)
19/47
TIPO REALE
I numeri reali, in quanto insieme infinito e continuo di
elementi, sono rappresentabili tramite un elaboratore (in quanto
sistema numerico discreto finito) solo in un (limitatissimo)
intervallo, tra l’altro con valori necessariamente approssimati.
L’ordine di grandezza dell’intervallo reale rappresentabile e
la precisione con cui possono essere rappresentati i valori
numerici dipendono dai sistemi e dalle implementazioni (metodi di
codifica, numero di bit impiegati, tecniche di realizzazione delle
operazioni); ad ogni modo, tramite i calcolatori si riescono a
codificare grandezze numeriche adatte per ogni applicazione, sia
per rappresentare parametri (lunghezze, pesi, tempi, ecc.) di tipo
astronomico (distanze interplanetarie, masse di corpi celesti) che
di tipo atomico (masse e cariche atomiche, vita media di
particelle subatomiche).
Nel seguito, per semplicità, si farà riferimento a numeri in
base decimale (anziché in base b generica), fermo restando che le
rappresentazioni dovranno comunque essere trasferite alla macchina
in binario.
Il tipo reale può essere rappresentato in 2 modi:
 rappresentazione in Virgola Fissa (FIXED POINT);
 rappresentazione in Virgola Mobile (FP-FLOATING POINT).
Fixed Point
La
rappresentazione
Fixed
Point
utilizza
una
quantità
predefinita di memoria, cioè un numero predeterminato di bit, per
rappresentare
un
reale,
secondo
un’adeguata
codifica
(segno/modulo, complemento a 2, complemento a 1), in modo che il
separatore decimale resti in una posizione prefissata (da cui il
nome della rappresentazione).
Una esemplificazione è data in figura (i bit sono numerati).
Rappresentazione Fixed Point

 |
Segno
6
5
4
3
2
Parte Intera
1
0
0


1
2
3
4
5
Parte Decimale
6
7
|
Separatore Decimale
Questa
rappresentazione,
causa
alcuni
inconvenienti
(limitatezza
delle
rappresentazioni,
problematiche
nelle
operazioni) si è rivelata poco idonea per i numeri reali e, di
fatto, ove impiegata lo è per i numeri interi.
prof. Felice Zampini
Dati(1)
20/47
FP-Floating Point
I numeri reali vengono rappresentati secondo una notazione
standard chiamata RAPPRESENTAZIONE SCIENTIFICA, in tale notazione un
reale è identificato dai seguenti elementi:
-
il Segno;
-
una Parte Frazionaria chiamata MANTISSA. La mantissa esprime
la precisione (numero di cifre decimali) del numero.
-
un Fattore di Scala, dato dalla base b del sistema di
numerazione (10 per semplicità) elevata ad un intero,
chiamato Esponente o CARATTERISTICA, tale che moltiplicando il
fattore di scala per la parte frazionaria si ottiene il
numero da rappresentare. Il fattore di scala esprime
l’ordine di grandezza del numero.
Numero Reale = Mantissa * 10Caratteristica
Esempio
Rappresentazioni del numero 80.52
Parte Frazionaria
Fattore di Scala
8052
10-2
805.2
10-1
80.52
100
8.052
10+1
0.8052
10+2
Si ha una RAPPRESENTAZIONE SCIENTIFICA NORMALIZZATA quando:
-
la mantissa è minore di 1;
-
la cifra più significativa è non nulla.
In altri termini, il separatore decimale deve posizionarsi
immediatamente a sinistra della prima cifra significativa della
mantissa (in base 10, la mantissa deve essere minore di 1 e non
inferiore ad 1/10).
La rappresentazione normalizzata
pertanto data da: 0.8052*102
prof. Felice Zampini
Dati(1)
nel
caso
dell’esempio
21/47
è
Da notare che la posizione del separatore decimale e la base di
numerazione possono non essere rappresentati, in quanto invarianti
(in alcuni casi si può pure evitare di rappresentare il bit di
segno della mantissa).
La rappresentazione FP consiste nel rappresentare i numeri
reali tramite la rappresentazione scientifica normalizzata facendo
riferimento ai numeri binari (base 2).
Associando agli elementi della rappresentazione scientifica
normalizzata (segno, mantissa, caratteristica) opportune codifiche
ed opportune sequenze di bit si possono ottenere diverse
implementazioni nella rappresentazione dei numeri reali.
Una esemplificazione è data in figura.
Rappresentazione Floating Point
Bit
S Caratteristica
0 1
7 8
prof. Felice Zampini
M a n t i s s a
31
Dati(1)
22/47
TIPO ARRAY
ARRAY UNIDIMENSIONALI
Si dice Array Unidimensionale, o anche Vettore, un insieme di n
dati dello stesso tipo in cui ciascun elemento è univocamente
individuato tramite un Indice (o subscritto).
Vettore di 4 elementi di nome V
V(1)
V(2)
V(3)
V(4)
ogni componente V(i) è individuata tramite un indice (intero) i
(0  i  n)
Un vettore consiste dunque
(omogenee) le quali hanno un:
in
una
collezione
di
variabili

NOME COLLETTIVO: nome del vettore, V;

NOME INDIVIDUALE: nome di ciascun elemento V(i) (0  i  n)
dell'array (nome collettivo + subscritto).
Il nome individuale potrà, in generale, essere denotato da
un'espressione (intera), la quale dovrà essere valutata prima di
poter effettuare qualsiasi operazione sulle componenti del
vettore.
Associando (biunivocamente) all'insieme di elementi costituenti
il vettore l'insieme dei primi numeri naturali allora l'indice di
un componente ne fornirà il relativo posto nella struttura (al
primo componente si attribuisce indice 0 o 1 a seconda dei
linguaggi).
Un
vettore
è
un
caso
particolare
di
array
(array
unidimensionale, cioè ad un indice) e consiste in una struttura
sequenziale (ordinata) in cui l'accesso ad ogni elemento è diretto
(sulla base degli indici); la struttura è di tipo statico, nel
senso che ha una lunghezza fissa (o almeno con limite max
superiore - in alcuni casi sono ammessi array dinamici, ottenibili
tramite allocazione dinamica della memoria) ed il tempo di accesso
è costante per ogni elemento.
La Rappresentazione Macchina, cioè in memoria centrale, di un vettore è
data da una struttura sequenziale, ovvero gli elementi del vettore sono allocati
ad indirizzi contigui (vettore di memoria, struttura monodimensionale).
Posto:
 Ne = Numero di elementi o componenti del vettore;
 Le = Lunghezza degli elementi
(supposta costante ed espressa in byte, word o frazione di word);
 Ib = Indirizzo base (indirizzo del primo componente);
 Ii = Indirizzo dell’elemento di indice i;
 Sm = Spazio di memoria occupato dal vettore;
prof. Felice Zampini
Dati(1)
23/47
la posizione di un vettore in memoria sarà allora individuata dalla terna:
(Ib,Ne,Le)
terna che, caratterizzando il vettore, consente di rappresentarlo con la
scrittura:
V(Ib,Ne,Le)
L’elemento generico V(i) del vettore sarà dunque reperibile in RAM
all'indirizzo:
Ii = Ib + Le*(i-1)
Lo spazio di memoria occupato dal vettore sarà dato da:
Sm = Le*Ne
Anche se il ricorso ai vettori si rivela particolarmente utile, soprattutto
quando si ha a che fare con costrutti di tipo iterativo, le operazioni che ne
modificano
l'ordine
logico
dei
componenti
(inserimenti,
cancellazioni,
trasposizioni) non riescono sempre agevoli, nel senso che per far corrispondere
ordine logico e fisico delle relative strutture (logiche e fisiche, comunque
sequenziali) occorrerà spostare opportunamente gli elementi.
Nota
Con gli array si possono definire due tipi di operazioni:
 Operazioni tra elementi o componenti di array
Operazioni tra gli elementi di uno o più array, corrispondenti alle
operazioni effettuabili con i relativi tipi di dati costituenti gli
array.
 Operazioni tra array
Operazioni tra array in quanto tali, cioè in quanto entità distinte
(variabili scalari); tali operazioni (quali p. es. il prodotto matriciale
- righe per colonne), che sono oggetto di interesse dell’Algebra
Matriciale, sono in genere direttamente disponibili solo in alcuni
linguaggi special purpose di orientamento matematico (p. es. l’APL); nei
linguaggi in cui queste operazioni non sono ammesse, un array non è
manipolabile come una variabile scalare, percui sono illegali operazioni
di assegnazione, confronto, prodotto, ecc. tra array: per realizzare tali
operazioni, se necessario, il programmatore dovrà scrivere apposite
routine e/o ricorrere ad eventuali funzioni di libreria (basandosi sulle
operazioni tra i componenti).
ARRAY MULTIDIMENSIONALI
Si dice Array Multidimensionale, o anche Matrice, un array in
cui ciascun elemento è univocamente individuato tramite 2 o più
indici (o subscritti).
Array Bidimensionale di 3x4 elementi di nome M
M(1,1)
M(1,2)
M(1,3)
M(1,4)
M(2,1)
M(2,2)
M(2,3)
M(2,4)
M(3,1)
M(3,2)
M(3,3)
M(3,4)
ogni componente M(i,j) è individuata tramite una coppia di indici (i,j)
(0  i  3
prof. Felice Zampini
Dati(1)
-
0  j  4)
24/47
Per un array a più dimensioni, che può riguardarsi come un
array di array, il numero di elementi è dato dal prodotto dei suoi
indici; considerato p. es. l’array tridimensionale M(i,j,k)
valgono pertanto le formule:
Ne = i * j * k
Sm = Ne * Le
Si hanno diversi tipi di matrici: quadrate, simmetriche,
triangolari, ecc.; alcune esemplificazioni di array con relative
interpretazioni sono date nelle slide DATI02 e DATI03.
La Rappresentazione Macchina di una matrice, similmente che per i vettori,
avviene memorizzando i suoi elementi in un vettore di memoria (struttura
monodimensionale). Sia, per semplicità, M(r,c) una matrice bidimensionale,
M(i,j) l’elemento generico ed I(i,j) il suo indirizzo; si possono avere 2 metodi
di allocazione:
 Allocazione per righe (o lessicografica): la memorizzazione avviene per
locazioni consecutive di memoria, ordinatamente riga per riga (fissato il
primo indice - indice di riga - si fa variare il secondo indice - indice
di colonna - nel suo range, iterando il procedimento nel range
dell’indice di riga). Si ha:
I(i,j) = Ib + (i-1)*c*Le + (j-1)*Le
 Allocazione per colonne: la memorizzazione avviene ordinatamente per
colonne (fissato l’indice di colonna si fa variare nel suo range quello
di riga, iterando il procedimento). Si ha:
I(i,j) = Ib + (j-1)*r*Le + (i-1)*Le
Le regole di allocazione e le espressioni precedenti si possono
opportunamente generalizzare.
Per quanto detto, nelle applicazioni conviene quindi, quanto più
possibilmente, essere fedeli al tipo di allocazione effettuata (p.es. non
scandendo l’array per colonne se memorizzato per righe, qualora ciò non sia
necessario), al fine di ottimizzare i tempi di accesso e la gestione generale
degli array.
Altre considerazioni da fare circa l’impiego degli array sono
le seguenti:
 la possibilità di utilizzare variabili indicizzate consente
di fare riferimento ad un solo oggetto (l’array), operando
sui suoi elementi in modo iterativo tramite gli indici (in
alternativa all’uso di altrettante variabili singole);
 tramite gli array sono possibili classificazioni sempre più
spinte (in proporzione al numero degli indici) dei dati,
associando agli indici i significati o gli attributi
richiesti allo scopo.
Per una sintesi delle caratteristiche e delle problematiche
concernenti gli array si veda la slide DATI02.
prof. Felice Zampini
Dati(1)
25/47
TIPO STRINGA
Dato un alfabeto A (set di caratteri) sappiamo che si può
costruire una ALGEBRA DELLE PAROLE (calcolo proposizionale) definendo
in
A
delle
operazioni;
in
particolare,
ciò
è
possibile
introducendo la nozione di parola vuota (Pv="") e l'operazione di
CONCATENAZIONE (addizione tra stringhe) sugli elementi di A, definiti
come parole (l'operazione è "chiusa" rispetto all'insieme delle
parole di A, associativa, non commutativa).
Il tipo stringa può identificarsi, in Informatica, con
l'algebra delle parole; sebbene una stringa possa essere definita
a partire da tipi di dati primitivi, più precisamente come Array
di caratteri, spesso si considera tale tipo di dato, ove
direttamente dichiarabile nel linguaggio, come elementare.
Una stringa può dunque essere vista come una sequenza
(teoricamente infinita, in pratica limitata dai vincoli imposti
dall'hardware/software del sistema) di caratteri di un dato
alfabeto (o la stringa vuota Sv=""); su tale tipo di dato, oltre
alle operazioni suddette, se ne definiscono altre, di particolare
interesse sul piano della programmazione.
Alcune tra le operazioni stringa più comuni sono le seguenti
(S=stringa; m,n interi non negativi):
LUNGHEZZA della stringa
LENGTH(S)
SELEZIONE:
Sottostringa iniziale
LEFT(S,n)
Sottostringa finale
RIGHT(S,n)
Sottostringa generica
SUBSTR(S,m,n)
Un’altra operazione interessante è quella di COPIA.
Si
può
inoltre
definire
una
relazione
di
ordinamento
(lessicografico - sulla base del sistema di codifica dei
caratteri), quindi un CONFRONTO tra stringhe ponendo:
S1S2
sse
1°car.S11°car.S2 (iterativamente se vale =).
La Rappresentazione Interna di una stringa corrisponde alla
rappresentazione in codice testuale alfanumerico (ASCII) dei
caratteri che la compongono, con eventuali caratteri di controllo
aggiunti in dipendenza del linguaggio (di norma uno, del tipo:
fine-stringa, fine-testo).
prof. Felice Zampini
Dati(1)
26/47
Esempio Visual Basic
Sia: A$="Pippo"; B$="Pluto"
Operazione
Visual Basic
Risultato (nella var. ass.)
---------------------------------------------------------------Concatenazione
C$=A$+" e "+B$
Pippo e Pluto
LENGTH
L%=Len(C$)
13
LEFT
L$=Left(C$,5)
Pippo
RIGHT
R$=Right(C$,5)
Pluto
SUBSTR
S$=Mid(C$,4,6)
po e P
A$<B$
Z%=A$<B$
-1 (Vero)
ASC(i)=105<ASC(l)=108 => A$="Pippo" < B$="Pluto"
prof. Felice Zampini
Dati(1)
27/47
TIPO STRUTTURA O REC ORD
Si dice Struttura, o anche Record, un tipo di dato derivato
costituito da un aggregato di dati, omogenei o no, contraddistinti
ciascuno da un nome e chiamati Campi; anche alla struttura è
associato un nome (o comunque un identificatore) pertanto, per
accedere ad un campo, occorrerà specificare sia il nome della
struttura che quello del campo.
Un modo tipico per definire un record a livello non tecnico,
quindi al livello logico in cui concepisce i dati l’utente finale,
consiste nel fornire il cosiddetto TRACCIATO RECORD.
Un tracciato (o formato) record consiste nella descrizione di
una certa realtà (attraverso i dati) sulla base di taluni
attributi o proprietà formali che, in un dato contesto, si
ritengono interessanti per individuarla. Tali attributi li
chiameremo campi.
Per esempio, volendo modellare l’agendina annuale degli amici
(entità da rappresentare) si potrebbe avere il seguente tracciato
record.
RECORD: AGENDA
N.
NOME-CAMPO
TIPO
01
02
03
04
05
06
07
08
COGNOME
NOME
INDIRIZZO
SESSO
ETÀ
PROFESSIONE
TELEFONO
E-MAIL
Alfanum.
Alfanum.
Alfanum.
Alfab.
Numerico
Intero
Alfanum.
Alfanum.
LUNGHEZZA
25
15
50
1
2
5
16
30
FORMATO
Note
Casato
Codice
M/F
Abbrev.
Si noti che i nomi dei campi (autoesplicativi nell’esempio) non
vanno confusi coi loro possibili contenuti: i nomi rappresentano
gli attributi, le proprietà tramite le quali si vuole descrivere
una
certa
realtà,
indipendentemente
dai
“valori”
concreti
(istanze) da essa assumibili. Un tracciato record è dunque un
modello di dati, cioè ne esprime il loro significato intensionale.
Si noti altresì che il significato dei campi (se non
autoesplicativo) deve essere esplicitato, inoltre se un campo è
codificato (quale il campo SESSO) anche la sua codifica deve
essere esplicitata (M=Maschio, F=Femmina).
I campi di una struttura possono essere non solo semplici ed
eterogenei ma pure, a loro volta, strutturati (quali array o
strutture); in tal caso si parla di CAMPI COMPOSTI e SOTTOCAMPI. In
genere, i sottocampi vanno opportunamente distinti o qualificati,
a seconda del loro livello di annidamento.
prof. Felice Zampini
Dati(1)
28/47
Per esempio, la schematizzazione data nella figura seguente
(ove: S=Sesso, PR=Professione, SC=Stato Civile) potrebbe modellare
un semplice archivio anagrafico in cui sono presenti campi
composti e sottocampi.
Record: Anagrafico
COGNOME NOME
An
25
An
15
DATANASCITA
GG
MM
AA
I
2
I
2
I
2
S
LUOGONASCITA
IND CAP CITTÀ PROV
A
1
An
40
An
5
An
25
A
2
PR SC
I
2
A
1
Tale rappresentazione grafica, interpretabile con semplicità ed
immediatezza, costituisce un altro modo per definire un record a
livello non tecnico.
Una definizione un pò più tecnica della precedente (comunque
ancora orientata a fornire una visione logica del record anche
all’utente non specialista), in cui si qualificano i sottocampi e
si evidenziano le codifiche dei campi o i rimandi ad esse, è la
seguente:
RECORD: ANAGRAFICO
N.
NOME-CAMPO
TIPO
01
02
03
COGNOME
NOME
DATANASCITA
03.1 GG
03.2 MM
03.3 AA
SESSO
LUOGONASCITA
05.1 IND
05.2 CAP
05.3 CITTÀ
05.4 PROV
PROFESSIONE
STATOCIVILE
Alfanum.
Alfanum.
Composto
Intero
Intero
Intero
Alfab.
Composto
Alfanum.
Alfanum.
Alfanum.
Alfab.
Intero
Alfab.
04
05
06
07
LUNGHEZZA
FORMATO
25
15
Note
Casato
2
2
2
1
Codice
M/F
40
5
25
2
2
1
Codice
Codice
Codice
Sigle naz.
Cod. interno
Cod. interno
Si noti che in quest'ultima definizione è data la lunghezza
anche per i campi numerici; in effetti, per tali campi occorre
considerare che le lunghezze sono, in genere, fisse, a seconda del
loro tipo e del sistema (tipici i valori di 2, 4, 8 bytes
rispettivamente per interi, reali in singola precisione, reali in
doppia precisione), cosa di cui il programmatore dovrà ovviamente
tenere conto.
prof. Felice Zampini
Dati(1)
29/47
Volendo, p.es., prevedere al massimo 2 cifre per il campo
STATOCIVILE, che in quanto intero ammette un range di valori
rappresentabili con più di 2 cifre, occorrerà effettuare un
apposito controllo dell’input, acquisendo una stringa di max 2
caratteri e valutandola come un intero oppure limitando il valore
immesso a non oltre il numero 99.
Oltre a strutture del tipo suddetto è possibile pure definire
RECORDS CON VARIANTI, nei quali è consentita la presenza di gruppi di
campi associati ad un set di possibili valori di un campo, in modo
che ad ogni valore del campo possa corrispondere un gruppo (p.es.
si potrebbe associare al campo STATOCIVILE del record Anagrafico
il gruppo di dati caratterizzanti il coniuge, qualora il suo
valore corrisponda a "coniugato", e via dicendo); in tale
eventualità l'accesso ai campi delle parti varianti va in genere
opportunamente disciplinato.
Il concetto di struttura, in quanto aggregato logico di dati
teoricamente di natura e tipo qualunque, cioè un insieme di dati
correlati
trattabili
come
un
unico
oggetto,
può
essere
generalizzato e consente di definire strutture complesse di
strutture complesse, esso fornisce dunque un potente e flessibile
Meccanismo di Astrazione per definite nuovi tipi di dati, allo
scopo di poter modellare realtà anche complesse e diversificate.
I campi definibili in un record possono essere di vario tipo,
quali i seguenti:
-
Alfanumerico (carattere o stringa)
Numerico (intero o reale)
Logico
Data (vari formati)
Chiave (primaria/secondaria)
Indice
Puntatore
Array
Record
È inoltre possibile gestire campi del tipo:
- Testo o Memo (di norma è un riferimento a documento)
- A calcolo
- Oggetto (immagine, suono, video)
Giova notare che in alcuni linguaggi di programmazione (p.es.
il linguaggio C/C++) si hanno diverse possibilità di dichiarare la
lunghezza dei dati di tipo numerico (specificando attributi quali
short, long, double e simili).
Seguono alcuni esempi di dichiarazioni di record in diversi
linguaggi di programmazione (dichiarazioni strutturali di record
cui in genere seguiranno definizioni di variabili di tipo record).
prof. Felice Zampini
Dati(1)
30/47
Visual Basic - Dichiarazione del record Agenda
Public Type Agenda
Cognome As String * 25
Nome As String * 15
Indirizzo As String * 50
Sesso As String * 1
Età As Integer
Professione As Integer
Telefono As String * 16
E-Mail As String * 30
End Type
COBOL-Like - Definizione del record Anagrafico
Var ANAGRAFICO: Record
COGNOME: String,25;
NOME: String,15;
DATANASCITA: Record
GG: Integer;
MM: Integer;
AA: Integer;
end
SESSO: Char
LUOGONASCITA: Record
IND: String,40;
CAP: String,5;
CITTÀ: String,25;
PROV: String,2;
end
PROFESSIONE: Integer;
STATOCIVILE: Char;
end;
C++ - Definizione del record Anagrafico
struct Record {
char COGNOME[25];
char NOME[15];
struct Data DATANASCITA;
char SESSO;
struct Luogo LUOGONASCITA;
int PROFESSIONE;
char STATOCIVILE;
} Anagrafico;
// Struttura nidificata
// Struttura nidificata
struct Data {
int GG;
int MM;
int AA;
} DATANASCITA;
struct Luogo {
char IND[40];
char CAP[5];
char CITTÀ[25];
char PROV[2];
} LUOGONASCITA;
prof. Felice Zampini
Dati(1)
31/47
FILES
Tradizionalmente, il termine File denota un insieme di
“documenti” e corrisponde al termine italiano Archivio. Ma
l’interpretazione di un documento dipende almeno dalla struttura
organizzativa dei suoi dati, dal loro formato e dal loro
significato, quindi, già dalla semplice considerazione della
differenza intercorrente tra documenti di tipo Testuale (lettere,
appunti, annotazioni, dispense, ecc.) e documenti di tipo
Schedario (archivi anagrafici, agende telefoniche, inventari,
ecc.), tale definizione appare piuttosto vaga e restrittiva,
dovendosi per l'appunto precisare di quale TIPO DI FILE si tratti.
Una classificazione dei files nell’ambito informatico è dunque
quanto mai essenziale, al fine di consentirne una corretta
gestione ed amministrazione, sia da parte dell’utenza che del SO.
Riguardando un file, in via generale, come un insieme di
"oggetti" (dati che codificano informazioni), cui competerà un
nome (secondo le regole del SO utilizzato), si può pensare ad una
classificazione
dei
file
sulla
base
dei
seguenti
fattori
principali:

Organizzazione logica delle informazioni (struttura logica
dei dati);

Formato delle informazioni (codifica dei dati e relativa
struttura interpretativa);

Organizzazione fisica delle informazioni (struttura fisica
dei
dati
interna
all'elaboratore
o
al
supporto
di
registrazione);

Metodi di accesso alle informazioni
programmi possono operare sui dati);

Destinazione d'uso del file.
(modalità
con
cui
i
Il modulo del SO predisposto alla gestione dei files si chiama
FILE SYSTEM, esso prevede la gestione di diversi tipi di files, con
associate operazioni e rappresentazioni interne.
Il File System è spiegato nella dispensa File System.
Problematiche attuali circa i SO ed i File System tendono a
dotare questi ultimi di pochi tipi di file (al limite un unico
tipo elementare), rimandando l'implementazione di tipi complessi
ai linguaggi di programmazione.
Lo scopo di tali soluzioni tende ad essere quello di conseguire
una maggiore portabilità del software ed una semplificazione dei
File System, compensando adeguatamente taluni vantaggi cui si
dovrebbe rinunciare trascurando un File System "ricco" di
tipologie di files direttamente gestite.
prof. Felice Zampini
Dati(1)
32/47
CLASSIFICAZIONE DEI FILES
In prima istanza, i file possono essere memorizzati sui
supporti di registrazione, con riguardo alla loro occupazione di
spazio, in due modi principali:

File
Multivolume:
il
file
occupa
più
supporti
di
registrazione (di conseguenza la disponibilità on-line del
file sarà limitata solo ad una sua parte se il sistema
prevede meno unità di memorizzazione di quante ne occupa il
file).

Directory o VTOC: più file sono memorizzati sullo stesso
supporto; in tal caso le descrizioni dei file, utili per la
loro gestione (che è a carico del sistema, l'utente può
comunque agire sulle directory), sono raccolte in un file
speciale sul supporto, chiamato per l'appunto Directory o
VTOC (Volume Table Of Contents). Una Directory è pertanto un
file descrittore di file (l’argomento sarà approfondito nel
capitolo dedicato al File System).
Vediamo ora, in rassegna, i più comuni tipi di files
amministrati
dagli
odierni
File
System
(i
tipi
ammessi
dipenderanno dall'hardware/software di base del sistema).
File Utente
Possiamo identificare i file utente come quei file più
direttamente accessibili e gestibili da parte del programmatore
e dell'utente (finale); in tal senso si possono distinguere:

File di Testo (formattati e non formattati);

File di Comandi (file batch);

File di Programma (sorgente);

File Dati.
File di Testo
Un file di testo è un insieme di caratteri, in corrispondenza
ad una data codifica (in genere ASCII). Un file di testo viene
detto NON FORMATTATO se in esso compaiono esclusivamente
caratteri stampabili (file ASCII puro), se invece il file
comprende sia caratteri stampabili che caratteri di controllo o
gestionali (p.es. per definire lo stile e le dimensioni dei
caratteri, l'allineamento del testo, il formato dei paragrafi,
ecc.) allora il file testuale dicesi FORMATTATO. In genere,
tramite un text editor (di un linguaggio di programmazione o
del SO) si crea un file di testo non formattato mentre tramite
un word processor si crea un file di testo formattato (è però
possibile, coi moderni word processor, salvare il file come
ASCII-file cioè come testo non formattato).
prof. Felice Zampini
Dati(1)
33/47
File di Comandi
Sono file editabili (quindi testuali o ASCII) contenenti
comandi (di sistema operativo), detti comunemente FILE BATCH.
Questi file consentono di creare delle procedure batch e dei
macrocomandi e sono utili ai fini di facilitare e migliorare la
gestione del sistema e delle risorse tramite interventi
dell’utente (procedure
personalizzate, partenze automatiche,
autoconfigurazioni del sistema).
Nota: in ambiente
riservata: .BAT.
Windows
per
un
file
batch
è
tipica
l’estensione
File di Programma Sorgente
Sono file contenenti programmi in formato sorgente (source),
cioè originario (istruzioni espresse in un dato linguaggio di
programmazione di tipo simbolico). Questi file, che sono
editabili, si possono creare tramite un editor o con un word
processor (purchè siano salvati come ASCII-file) e a tutti gli
effetti sono file testuali.
File Dati (vedasi dispensa Archivi)
File Oggetto
Sono file in formato macchina rilocabile, cioè codificati in
linguaggio (binario) macchina. Essi consistono nell'output del
processo di traduzione (compilazione o assemblaggio), processo
che, a partire da un programma source (scritto in linguaggio
assembler o ad alto livello), produce un file in linguaggio
macchina chiamato File Oggetto o modulo object; di norma, tale
modulo non è direttamente eseguibile dall’elaboratore in quanto
privo dei "link" necessari per una corretta esecuzione.
Nota: in ambiente Windows per un file object è comune l'estensione: .OBJ.
File Eseguibili
Sono file in formato macchina il cui codice include i
riferimenti necessari per la loro eseguibilità. Un file
eseguibile consiste, in pratica, nel risultato del processo di
linkaggio che, a partire da un modulo object, produce il codice
eseguibile, fruibile dall'elaboratore in modo diretto e
completo per svolgere le attività previste dal programma.
L'unica operazione possibile su tali tipi di file è
l'esecuzione (oltre, ovviamente, alle operazioni globali quali
quelle di copia, cancellazione, ridenominazione e simili).
Nota: in ambiente Windows un file eseguibile deve avere come estensione
l'estensione riservata: .EXE o .COM.
prof. Felice Zampini
Dati(1)
34/47
Directory
Le directory (indirizzari) sono descrittori di files, che
associano ai nomi simbolici dei file rappresentati le relative
descrizioni.
Una directory, indicabile anche con la sigla VTOC (Volume Table
Of Contents), consiste in una struttura dati contenuta su aree
riservate del supporto di registrazione (p.es. apposite tracce
del disco) e utilizzata dal File System ove sono indicate le
descrizioni
dei
file
contenuti
sul
supporto
(nomi,
caratteristiche, indirizzi, ecc.).
Tipicamente, le directory consistono in strutture ad albero
(organizzazioni gerarchiche) nelle quali ogni nodo è un nomefile (foglia) o una (sub-)directory (sottindirizzario) e
possiede un nome locale ed un nome globale (dato dal percorso),
l'indirizzario principale (root directory o radice) è una
directory ed ha nome unico.
Le operazioni possibili su tali strutture sono quelle di
creazione, rimozione, modifica, ricerca, visualizzazione,
puntamento, ecc. (approfondimenti nel capitolo File System).
Spesso si indica una directory col nome di CARTELLA.
File Binari
Si dicono file binari quei file costituiti da sequenze di bit
per le quali non si ha una vera e propria struttura
interpretativa di tipo logico; file di questo tipo sono, p.es.,
i file generati da processi di digitalizzazione di immagini,
fotografie o suoni, in cui ogni singolo bit può intervenire
nella codifica.
Pseudo File
Sono dei file speciali, associabili anche a dispositivi
periferici o virtuali, utili per effettuare simulazioni, tests,
operazioni fittizie, ecc.
Altri tipi di files
Si
possono
distinguere,
in
base
all'utilizzazione, i seguenti tipi:
alla
funzione
ed
- File di Libreria;
- File di Configurazione;
- File Temporanei;
- File di Spool;
- File di Log;
- File di Backup;
- ecc.
prof. Felice Zampini
Dati(1)
35/47
La Rappresentazione Macchina di un file dipende da vari
fattori, quali quelli sopra menzionati per classificarli, fattori
che in alcuni casi sono deducibili dal contesto (p.es. codifica
ASCII per file testuali non formattati, codice macchina per file
eseguibili) ed in altri casi sono dipendenti da considerazioni
applicative, implementative e di efficienza (p.es. tipo di
applicazioni, tecniche di memorizzazione e metodi d’accesso ai
dati, metodi di ricerca e ordinamento utilizzzati nei programmi).
Anche
per
le
Operazioni
definibili
considerazioni analoghe a quanto ora esposto.
sui
file
valgono
Per il momento si elencano alcuni tipi comuni di operazioni che
possono essere generalmente svolte su tutti i file, considerati
nella loro interezza, operazioni che (non agendo su parti dei
file) si chiamano OPERAZIONI GLOBALI:
 Creazione (i file oggetto ed eseguibili sono
automaticamente risp. dal compilatore e dal linker);
creati
 Cancellazione;
 Copia;
 Ridenominazione.
Le operazioni globali sono effettuabili
dall’ambiente di sistema operativo.
da
programma
o
Data la varietà e complessità degli argomenti e delle
alternative possibili, si rimanda alle dispense Device Management,
File System, Archivi per altri studi ed approfondimenti.
Seguono
Windows.
prof. Felice Zampini
alcune
liste
dei
più
Dati(1)
diffusi
formati
di
file
in
36/47
FORMATI DEI FILE
Formati Generali
.cgi
Common Gateway Interface
.class file interpretabile da Java
prof. Felice Zampini
.com
eseguibile di ridotte dimensioni
.diz
file di informazioni
.dll
Dynamic Link Library
.doc
documento Word
.dot
modello Word
.drv
drive
.emi
messaggi e-mail Outlook
.exe
file eseguibile (o autoscompattante)
.fon
font di caratteri
.frm
form visual basic
.htm
HyperText Markup Language (.html)
.ini
file di configurazione
.java
source Java
.js
javascript
.pdf
Portable Document Format (Acrobat Reader)
.pl
script Perl
.ppt
file PowerPoint
.ps
PostScript
.reg
file di registro
.rtf
Rich Text Format
.sys
file di sistema
.ttf
True Type Font
.txt
text file
.vbp
Visual Basic Project
.vcf
Vcard (bigl. visita, Rubrica Windows)
.wri
Write for Windows
.xls
file Excel
Dati(1)
37/47
File Compattati
.arc PkArc o PkPak
.arj ARJ
.b64 Base 64 (MIME) encoding
.rar WinRAR
.uue Codifica UUEncode, WinZip
.xx_ EXPAND (fornito con Windows)
.zip WinZip
File Audio
.mid MIDI
.mod MIDI evoluto
.mpg compressione tracce audio CD
.pcm file audio “grezzo”
.ra
RealAudio (.ram)
.raw suono campionato in formato nativo
.voc suono campionato in formato SoundBlaster
.wav suoni digitalizzati
File Video
.avi Video for Windows
.fli Animazioni
.mov QuickTime Movie
prof. Felice Zampini
Dati(1)
38/47
File Grafici
AI
Adobe Illustrator
BMP
Bitmap Windows
CDR
CorelDraw
CGM
Computer Graphics Metafile (Freelance/Pagemaker/Harv.Graph./…)
CLP
Windows Clipboard
DXF
AutoCAD
EPS
Encapsulated PostScript
GEM
Graphics Environment Manager (formato a oggetti di GEM)
GIF
Graphics Interchange Format (CompuServe)
HPGL HP Graphics Language (Plotter HP)
JPEG Joint Photographers Experts Group (fotografia)
PCD
Kodak Photo CD (fotografia)
PCL
Printer Control Language (HP Laser Print)
PCX
Zsoft PaintBrush
PICT MacDraw/Sw MAC
PNG
Portable Network Graphics (nuovo formato)
PSD
Adobe Photoshop
RLE
Run Lenght Encoded (CompuServe)
TGA
Truevision-AT&T(Targa/Vista/…)
TIFF Tagged Image File Format (Aldus&Microsoft per MAC e PC)
WMF
Windows Metafile
prof. Felice Zampini
Dati(1)
39/47
TIPO PUNTATORE
Un Puntatore (Link, Reference o Pointer) è un tipo di dato il
cui
contenuto
è
l'indirizzo
di
una
cella
di
memoria:
l'informazione associata ad un pointer è l'indirizzo di una zona
di memoria centrale, contenente le informazioni di interesse (dati
o ancora puntatori ad essi).
Un pointer è una variabile che consente di fare riferimento,
”puntare”, accedere in modo indiretto ad un oggetto della memoria
(variabile modificabile), in modo da poterlo manipolare, anzichè
tramite
il
relativo
nome
o
identificatore,
tramite
il
corrispondente indirizzo (indirizzamento indiretto).
I puntatori, in quanto variabili, cioè aree di memoria, sono
caratterizzati da un identificatore e da un tipo e devono poter
essere dichiarati ed assegnati.
Ciò che caratterizza questo tipo di dato, che occuperà una
determinata
area
di
memoria
di
lunghezza
prefissata
indipendentemente dall’oggetto puntato, è il modo di interpretare
il contenuto e la dimensione dell’oggetto da esso puntato:
il tipo associato ad un puntatore deve corrispondere
al tipo dell’oggetto puntato
Si potranno pertanto definire puntatori ad interi, a carattere,
a reale, a stringa, a file, ad altri puntatori, ecc.
Le variabili di tipo puntatore, rappresentando l’oggetto
puntato, possono comparire in qualsiasi espressione ammessa in cui
può comparire l’oggetto puntato, è dunque possibile definire una
ARITMETICA DEI PUNTATORI, purchè si prendano in considerazione pointers
allo stesso tipo-base di dati.
Per una illustrazione vedasi la slide DATI05.
Le variabili di tipo puntatore consentono di definire strutture
di dati dinamiche, cioè modificabili durante l'esecuzione del
programma, tramite l’impiego di catene di puntatori (strutture
concatenate di pointers cui corrispondono strutture logicamente
ordinate di dati, indirizzati dai pointers); il caso più semplice
è dato dalla Lista Semplice o lineare (vedi seguito).
prof. Felice Zampini
Dati(1)
40/47
OPERAZIONI
Creazione
Assegnazione, a tempo di esecuzione, di una zona di memoria non
utilizzata ad una variabile tipo pointer.
Lettura/Modifica/Cancellazione
Dei dati contenuti nella zona di memoria puntata tramite una
variabile tipo pointer.
Assegnazione/Confronto
Di variabili di tipo puntatore (in relazione allo stesso tipobase di dati).
Le celle di memoria heap (su cui agiranno i pointer) durante
l'esecuzione del programma potranno trovarsi in una delle seguenti
situazioni:
Libere
Non allocate dinamicamente.
Accessibili
Direttamente o indirettamente, dalle variabili di programma,
cioè puntate da tali variabili in modo diretto o indiretto
tramite una catena di accessi.
Non accessibili
Non libere, cioè già allocate e resesi inaccessibili causa
assegnamenti sui pointer o su campi di strutture dati dinamiche
(tali celle dovranno essere oggetto di recupero, ed a ciò si
usano diverse tecniche, al fine di ottimizzare e, in taluni
casi, non congestionare la memoria heap disponibile).
prof. Felice Zampini
Dati(1)
41/47
TABELLA
Si dice Tabella, o Tavola, un insieme finito di elementi
ciascuno dei quali è individuato da due informazioni distinte:
Chiave: informazione per individuare univocamente l'elemento;
Valore: effettivo contenuto informativo dell'elemento.
Una
tabella
consente
di
strutturare
logicamente
le
informazioni, ai fini di individuare determinati ”oggetti” (libri,
strumenti, persone, macchine, ecc.), sulla base di appositi
attributi: ogni riga individua, tramite i valori di quegli
attributi, un oggetto mentre ogni colonna rappresenta una sequenza
di valori di uno stesso attributo di tutti gli elementi della
tabella.
Normalmente,
la
chiave
è
quell’informazione
(aggiunta
appositamente
o
direttamente
appartenente
all’insieme
degli
attributi) che consente di reperire univocamente un elemento della
tabella (riga) mentre il valore è da intendersi come l’insieme dei
valori di tutti gli attributi caratterizzanti l’elemento.
La scelta della chiave e del criterio di ordinamento
dell’insieme
dei
suoi
valori
riveste
dunque
fondamentale
importanza ai fini della definizione di una tabella.
Tabella ordinata per Chiave (codice-nome)
CHIAVE VALORE
005
Rossi Giulio
010
Bianchi Pino
015
Verdi Paola
020
Crispi Ivo
Tabella ordinata per Valore (nome)
CHIAVE VALORE
prof. Felice Zampini
010
Bianchi Pino
020
Crispi Ivo
005
Rossi Giulio
015
Verdi Paola
Dati(1)
42/47
Tabella ordinata per Chiave (nome)
CHIAVE
V A L O R E
Telefono
Età
Città
Bianchi Pino
4655712
17
RM
Crispi Ivo
4892100
19
MI
Rossi Giulio
542231
18
RM
Verdi Paola
4890234
16
NA
Il criterio di ordinamento degli elementi di una tabella (senza
il quale la ricerca dovrebbe avvenire in modo sequenziale) assume,
come già detto, notevole importanza ai fini della consultazione
della stessa.
In particolare, un metodo abbastanza rapido ed efficiente
(soprattutto per grandi tabelle) consiste nell’associare alla
Tabella dei Dati un'altra tabella di dimensioni ridotte, chiamata
Tabella degli Indici, contenente le chiavi organizzate in modo
ordinato (o un loro sottoinsieme opportunamente scelto) ed i
relativi indirizzi, che puntano alla zona del supporto di
registrazione della Tabella Dati in cui le informazioni relative
alla chiave cercata sono reperibili.
L'indirizzo che punta all’informazione è in pratica un PUNTATORE
(pointer) ed il tipo di accesso così definito prende il nome di
Accesso per Indici.
Per una illustrazione vedasi la slide DATI05.
L’accesso indicizzato prevede che la ricerca sia svolta sulla
tabella degli indici (ridotta ed ordinata per chiave) sulla base
della
chiave,
in
modo
da
consentire
un
accesso
diretto
all’elemento della tabella dati (o alla zona in cui esso è
registrato) tramite l'indirizzo associato alla chiave cercata.
La ricerca delle informazioni relative alla chiave cercata
avviene dunque in modo diretto, o al massimo sequenziale ma non su
tutta la tabella dati bensì solo all'interno della zona
individuata (sono possibili altre tecniche più efficienti, p.es.
la ricerca dicotomica).
Va da se la considerazione che le operazioni condotte sulle due
tabelle (aggiunte, cancellazioni, modifiche) suddette devono in
generale procedere in parallelo, infatti, poichè l'accesso alla
tabella dati è regolato tramite la tabella degli indici, un
disallineamento fra le due tabelle si rifletterebbe in un
disallineamento tra la visione logica dei dati e la effettiva
realtà fisica.
prof. Felice Zampini
Dati(1)
43/47
LISTA LINEARE
Si dice Lista Lineare (Sequenza) un insieme finito di n Dati
(dello stesso tipo, detti pure Nodi) ordinati tali che ciascuno
abbia un predecessore ed un successore, ad eccezione del primo
(nessun predecessore) e dell'ultimo (nessun successore).
Lista Lineare
D(1) D(2) ..... D(i-1) D(i) D(i+1) ..... D(n-1) D(n)
NODO
INIZIALE
NODO
NODO
PREDECESSORE SUCCESSORE
NODO
FINALE
A seconda che il numero di nodi della struttura sia costante o
variabile (nel tempo) si parlerà di lista lineare a lunghezza
fissa o variabile.
L'accesso alla lista lineare (reperimento di un elemento
all'interno di essa) è di tipo Sequenziale: il dato D(i) è
selezionabile
a
partire
da
D(1)
scorrendo
in
sequenza
ordinatamente; la stessa logica sequenziale si ripercuote nei
processi di elaborazione applicabili alla lista (il dato arriva,
si accoda, aspetta il suo turno, viene elaborato).
OPERAZIONI
Inserimento
Di un elemento, anche in testa o coda (append).
Estrazione
Di un elemento, cioè prelievo e cancellazione.
Fusione
Di 2 o più liste in una nuova lista.
Frazionamento
Della lista in 2 o più parti.
Ricerca
Di un elemento, cioè lettura (selettiva).
prof. Felice Zampini
Dati(1)
44/47
Lista vuota, Test lista vuota, Lunghezza (N. nodi attuali)
I criteri di Ordinamento e di Inserimento/Estrazione saranno da
individuarsi in base ai contesti applicativi (priorità da gestire,
data-flows, ecc.).
In ambiente EDP rivestono particolare importanza, visto il loro
impatto nelle applicazioni, quelle liste in cui inserimenti ed
estrazioni avvengono sui nodi agli estremi, liste cui si è
attribuito il nome di PILA e CODA (vedi seguito).
Il modo più semplice per allocare una lista lineare, in quanto
struttura
sequenziale
dinamica,
è
tramite
una
struttura
sequenziale.
Si hanno varie strutture a lista, in particolare, considerando
liste i cui elementi siano a loro volta liste, si ottiene una
generalizzazione della nozione di lista lineare (liste multiple).
Le varie strutture a lista sono illustrate nelle slide DATI06,
DATI07, DATI08.
prof. Felice Zampini
Dati(1)
45/47
CODA
Si dice Coda (Queue) una struttura unidimensionale ordinata,
dinamicamente variabile, in cui Inserimenti ed Estrazioni (e
letture) avvengono agli estremi opposti (p.es., inserimenti in
fondo ed estrazioni in cima o testa alla coda).
Coda
TESTA
FONDO
D(1) D(2) ..... D(i-1) D(i) D(i+1) ..... D(n-1) D(n)


ESTRAZIONE
INSERIMENTO
In una Coda (riflettendo così la nozione comune di lista o coda
di attesa: coda di attesa ad un sportello bancario, lista di
attesa prenotazione volo, ecc.) si segue una logica di accesso
percui il primo elemento inserito (temporalmente) è pure il primo
ad essere estratto.
In altri termini, gli elementi sono elaborati conservando il
loro ordine di arrivo nella coda; tale criterio, o disciplina di
accesso alla struttura, suole abbreviarsi con la sigla FIFO (First
In First Out).
Si noti che l'estrazione del dato D(i) dalla coda implica
l'estrazione di tutti i predecessori; se, inoltre, una coda con
numero limitato di posti è piena allora un inserimento (se ammesso
in tale situazione) causa lo "scivolamento" degli elementi verso
la testa (shift a sinistra nel nostro caso), con l'inevitabile
risultato di perdere il primo elemento della coda.
prof. Felice Zampini
Dati(1)
46/47
PILA
Si dice Pila (Stack) una struttura ordinata, a dimensione
variabile, in cui Inserimenti ed Estrazioni avvengono solo ad un
estremo (p.es., in fondo).
Pila
INSERIMENTO

TESTA
FONDO
D(1) D(2) ..... D(i-1) D(i) D(i+1) ..... D(n-1) D(n)

ESTRAZIONE
In una Pila, pertanto, gli elementi vengono
opposto a quello di arrivo, cioè il meccanismo
criterio percui l'ultimo arrivato è il primo
essere servito); tale disciplina di servizio
(Last In First Out).
elaborati in ordine
di accesso segue il
ad uscire (cioè ad
dicesi perciò LIFO
La Pila rispecchia la nozione comune di pila di oggetti
(pacchi, libri, ecc., accatastati su di un piano) per i quali
conviene che il primo da prelevarsi sia l'ultimo aggiunto.
Pure un problema che generi a cascata altri problemi
(sottoproblemi) genera una struttura a pila, nel senso che
l'ultimo problema affiorato sarebbe in testa alla pila di problemi
da risolvere.
Si noti che l'estrazione del dato D(i) dalla Pila implica
l'estrazione di tutti i successori.
Anche in questo caso, similmente che in quello della coda,
inserimenti
incontrollati
oltre
il
limite
(necessariamente
esistente in pratica) di capienza dello stack comportano la
perdita di dati nella struttura o errori di programmazione
piuttosto seri (spesso l'impossibilità di prosecuzione del
programma, causa la perdita di indirizzi nella Stack Area e il
malfunzionamento conseguente dello Stack Pointer).
prof. Felice Zampini
Dati(1)
47/47