UD 3.3a: Strutture
Dati Statiche – Array
LE STRUTTURE DATI
Dispense, cap. 3.1
Strutture dati
 Un algoritmo è un metodo per la manipolazione
dei dati.
 Fino ad ora, abbiamo utilizzato variabili
contenenti un unico dato (in particolare, un
numero intero oppure un carattere)
 Nella pratica, i dati raramente si presentano in
formato elementare (un singolo numero intero
oppure un unico carattere)
Strutture dati
 Quasi sempre un algoritmo utilizza
“aggregazioni” di dati a cui si riferisce come ad
una singola entità
 Entità Data di calendario. Esso rappresenta
un’unica entità (un giorno) che è composta da
più elementi:
 giorno,
 mese,
 anno
Strutture dati
 Entità Scheda bibliografica: . Esso rappresenta
un’unica entità (un libro) che è composta da
più elementi:
 Titolo
 Autore
 Casa Editrice
 Numero di pagine
…
 Intero Schedario bibliografico, composto da un
insieme di tante schede singole riunite in un
unico “contenitore”, lo schedario
Strutture dati
 Per gestire efficientemente un raggruppamento
di variabili è indispensabile definirne
 le strutture di aggregazione e
 le “operazioni” che su di esse è possibile
effettuare.
 Tutti i linguaggi ad alto livello permettono di
definire, in modo semplice e diretto,
aggregazioni di variabili (o strutture dati)
 Descriveremo solo le strutture dati essenziali
essenziali per poter comprendere i principi della
programmazione dei computer
Strutture dati
 Una struttura dati è costituita da un insieme di
variabili e di operazioni definite su di esse.
 Nozione astratta svincolata dalla concreta
rappresentazione della struttura sul modello di
calcolo.
 L’implementazione di una struttura descrive il
modo con il quale essa è memorizzata e viene
“trattata” dal computer.
 Ogni struttura dati ammette più
implementazioni a ciascuna delle quali
corrisponde un costo
 in termini di spazio di memorizzazione e
 in termini di tempo per l’esecuzione delle cosiddette “primitive”
per il trattamento dei dati della struttura.
Strutture dati
 Strutture Dati “di base”:
 Array: insieme statico di variabili dello stesso tipo
 Record: insieme statico di variabili di tipo diverso
 Strutture Dati “composte”:
 Lista: struttura monodimensionale dinamica di
valori
 Albero: struttura bidimensionale dinamica di
valori
GLI ARRAY
Dispense, cap. 3.2.1
Array
 Celle consecutive di memoria contenenti dati
omogenei
 La struttura di un array la si definisce indicando il
 tipo di dato di base
 l’ampiezza di ogni dimensione (cioè quanti
elementi costituiscono la singola dimensione e
qual è la regola per la loro enumerazione)
 Noi utilizzeremo solo array monodimensionali e
bidimensionali, ma quanto riportato per gli
array bidimensionali lo si può estendere ad
array con più di due dimensioni.
Implementazione di un Array
Monodimens.
 Sintassi:
Nome: array [1..N] of TipoBase;
 In sottolineato sono le parti della definizione che
sono scelte dal programmatore
 Es.: Array monodimensionale contenente 4
numeri interi Var x : array [1..4] of integer;
ARRAY X (composto da 4 variabili singole
SINGOLA VARIABILE DI TIPO
INTEGER, NELLA QUALE ANDRA’
POI INSERITO UN NUMERO
Uso di un Array
Monodimensionale
 Per accedere alla singola variabile di un array si
specificano
 il nome e
 la coordinata della variabile desiderata:
 Es.: Per memorizzare il numero 4 nel secondo
elemento dell’array, all’interno di un
posizione
programma Pascal si scriverà:
 X[2] := 4;
1
2
3
4
x[2]
valore
4
Uso di un Array
Monodimensionale
 X è il nome dell’array di 4 caselle individuate
ciascuna dalla posizione nella struttura
 Le possibili posizioni (indici) sono: 1, 2, 3, 4
 X[2] denota il contenuto della casella con
indice 2
 Es: si inseriscano i numeri 3, 10 e 12 nelle posizioni
1, 3 e 4
1
2
3
4
 X[1] := 3;
3
4
10 12
 X[3] := 10;
 X[4] := 12;
x[1]
x[3]
x[4]
Implementazione di un
Array Bidimensionale
 Sintassi:
Nome: array [1..N, 1..M] of TipoBase;
 In sottolineato sono le parti della definizione che sono
scelte dal programmatore
 Es.: Array bidimensionale di interi composto da 3 righe
e 4 colonne per memorizzare 12 numeri interi
 Var spese : array [1..3, 1..4] of integer;
 La prima dimensione può rappresentare il tipo di spesa
 La seconda dimensione può rappresentare il mese
1
2
3
4
1
145 128 222 190
2
150 140 190 210
3
200 180 220 300
Uso di un array Bidimensionale
 Per accedere alla singola variabile di un array
bidimensionale si specificano il nome e le due
coordinate della variabile desiderata
 Le spese personali del mese di febbraio sono
memorizzate nella cella spese[1,2]
1
spese[1,2]
2
3
4
1
145 128 222 190
2
150 140 190 210
3
200 180 220 300
Esempio
Legge 3 numeri interi e li memorizza
in un array
Program Array_3_int;
var A : array [1..3] of integer;
i : integer;
Begin
for i:=1 to 3 do
begin
write (‘Inserisci il prossimo numero:
‘);
read (A[i]);
end;
readln;
readln;
end.
Esempio
 Legge 3 numeri interi li memorizza in un array e li visualizza
sulla linea successiva
Program Array_3_int_b;
var A : array [1..3] of integer;
i : integer;
Begin
for i:=1 to 3 do
begin
write (‘Inserisci il prossimo numero: ‘);
read (A[i]);
end;
write (' Numeri memorizzati: ');
for i:=1 to 3 do write(A[i]);
writeln;
readln;
readln;
end.
Esempio
 Legge 3 numeri interi li memorizza in un array e li
visualizza sulla linea successiva, in ordine inverso
Program Array_3_int_b;
var A : array [1..3] of integer;
i : integer;
Begin
for i:=1 to 3 do
begin
write (‘Inserisci il prossimo numero: ‘);
read (A[i]);
end;
write (' Numeri memorizzati: ');
for i:=3 downto 1 do write(A[i]);
writeln;
readln;
readln;
end.
Esempio
 Legge 10 caratteri su una riga (senza spazi
separatori) e li visualizza in ordine inverso, sulla
riga successiva
 Note:
 Dobbiamo leggere V1,…,V10, memorizzarli e poi
stamparli nell’ordine V10,…,V1
 Usiamo un array A di N = 10 posizioni per
memorizzare i dati in input
 Dopo aver memorizzato i dati, li scriviamo
scorrendo l’array dall’indice 10 all’indice 1
Esempio
Program inverso;
var
A : array [1..10] of char;
i : integer;
begin
for i:=1 to 10 do
begin
read(A[i]);
end;
for i:=10 downto 1 do
begin
write(A[i]);
end;
readln;
readln;
end.