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.