Sei sulla pagina 1di 2

Programmazione e Strutture Dati

Dati
I dati di un programma sono i valori assunti dalle sue variabili. Un tipo di dati è definito da un dominio di valori e un
insieme di operazioni previste su quei valori.
Ad esempio, gli interi sono definiti da un intervallo di valori interi compresi fra [ -2 m-1 , 2m-1 -1 ].

I dati possono essere:


- primitivi, definiti dal linguaggio di programmazione
- aggregati, come array, strutture e file
- puntatori

Specifica e implementazione
Per costruire nuovi tipi di dati, si distingue la specifica e l’implementazione:
Con la specifica si definisce il dominio dei valori, e l’insieme degli operatori, con l’implementazione si ha
la codifica di quanto definito nella specifica, usando primitive e costrutti di un linguaggio di programmazione.

Per definire un tipo di dato libro, dunque si procede con:


- Specifica: si definisce il dominio dei valori, in questo caso un insieme delle quadruple (autore, titolo, editore, anno)
dove i primi tre sono stringhe e anno è un intero.
Successivamente è definito l’insieme degli operatori, che comprende una funzione che riceve come parametro i
quattro valori in questione per creare un tipo di dato libro, e altre quattro funzioni, ognuna relativa ad ogni valore
del tipo, che restituisce il valore corrispondente, stringhe o interi.
- Implementazione: il programma scritto

Strutture dati
Le strutture dati sono gruppi di dati organizzati in maniera strutturata. Sono caratterizzati da un modo sistematico
di organizzare l’insieme di dati, e un insieme di operatori per operare sulla struttura.
Le strutture dati possono essere:
- lineari o non lineari, se è presente o meno una sequenza
- statiche o dinamiche, se c’è una variazione di dimensione
- omogenee o disomogenee, rispetto ai dati contenuti

Una struttura dati lineare, presenta dati organizzati in maniera lineare, ovvero in sequenza monodimensionale,
la loro dimensione è fissata oppure varia dinamicamente, ed è possibile accedere, aggiungere o rimuovere elementi
in determinate posizioni (inizio, fine, posizione intermedie). Un esempio sono pile, code e liste.

Una struttura dati non lineare, i dati non sono organizzati in maniera sequenziale.
Dunque si hanno insiemi di dati non ordinati (dizionari, tabelle hash), dati organizzati in maniera gerarchica (alberi), e
dati organizzati in reti di nodi (archi).
La loro dimensione spesso varia dinamicamente, ed è sempre possibile accedere, aggiungere o rimuovere elementi
in determinate posizioni.

Astrazione dati e programmazione modulare


A questo proposito, si realizzano programmi suddivisi in moduli, dove un modulo è una porzione di programma
(funzioni, dichiarazioni di tipi, variabili, macro, …) che svolge una parte dei compiti nel modo più indipendente
possibile rispetto agli altri.

Con l’astrazione ed information hiding si ha un’interfaccia separata dalla codifica, e per usare un modulo non è
necessario conoscere i dettagli della codifica.

Per ottenere l’indipendenza dei moduli, si deve avere un’organizzazione strutturata del programma, una
compilazione separata, e una manutenzione che deve essere possibile localmente.
Ricorsione
La ricorsione è una modalità di definizione di funzioni.
Con la ricorsione, i dati sono organizzati in strutture definite in termini di sé stesse (quindi ricorsivamente).
Una ricorsione si ha con la lista, che è una sequenza di elementi che o è vuota, o ha un primo elemento, e i rimanenti
formano una lista a loro volta.

Le operazioni stesse sono definite in maniera ricorsiva. Ad esempio il fattoriale n! è definito per tutti gli interi n>=1 ,
dunque n! è uguale a 1 se n è uguale a 1, e n! è uguale a n + (n-1)! se n è maggiore di 1.

I tipi di dati e i loro operatori, inoltre, sono implementati con strutture o sottoprogrammi ricorsivi.

Un esempio di ricorsione è:

int fattoriale (int n)


{
if (n<=1)
return 1;
else
return n * fattoriale (n-1);
}

Potrebbero piacerti anche