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.