Post on 17-Feb-2019
AlgoritmiStrutture Dati
Linguaggi e Programmi
Universita degli Studi di UdineFacolta di Ingegneria
CORSO DI LAUREA IN SCIENZE dell’ARCHITETTURA
Elementi di Informatica– Algoritmi, Strutture Dati e Programmi –
D. Gubiani
21 marzo 2011
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 1
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Problema: Prendere un Caffe al Distributore
1 introdurre le monete per l’importo necessario
2 selezionare la quantita di zucchero
3 selezionare la bevanda desiderata
4 attendere che il distributore eroghi la bevanda
5 ritirare il resto
6 ritirare la bevanda
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 2
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Algoritmo
Un algoritmo e la descrizione della soluzione di un problemaespressa come un insieme di istruzioni che operando sui datiiniziali permette di ottenere il risultato che costituisce lasoluzione del problema
Piu precisamente: un insieme ordinato di istruzioni non
ambigue ed effettivamente computabili che, quando eseguito,
produce un risultato e si arresta in un tempo finito
Se il problema e complesso puo essere scomposto insottoproblemi, detti step
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 3
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
dal Problema all’Algoritmo
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 4
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Classe di Problemi e Variabili
Un algoritmo non risolve un unico problema ma una classe diproblemi strutturalmente equivalenti, in cui cambiano solo idati di partenza
Per questo motivo le istruzioni di un algoritmo fannoriferimento non direttamente ai valori ma a delle variabili, ilcui valore puo variare a seconda della situazione
Una variabile puo essere intesa come un contenitore con unnome, che la identifica univocamente, e un valore, checorrisponde in ogni istante al dato contenuto
In alcune situazione, ad ogni valore e associato anche un tipo
- permette di definire l’insieme dei valori che la variabile puoassumere valori
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 5
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Operazioni su Variabili
Assegnamento: corrisponde a introdurre un valore nelcontenitore della variabile identificata dal nome, tale valoresostituisce il valore precedente
- nomevariavile ← valore
Espressioni su variabili: il valore contenuto nelle variabiliviene utilizzato per calcolare il risultato dell’espressione
Esempi:
- x ← 3- y ← x + 1- y ← y ∗ x
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 6
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Maggiore fra 2 Numeri, x e y
Soluzione possibile basata sull’osservazione chex e maggiore di y se x − y e maggiore di 0
1 leggere il primo valore dall’esterno e assegnarlo alla variabile x
2 leggere il secondo valore dall’esterno e assegnarlo alla variabile y
3 calcolare la differenza fra x e y e assegnarla alla variabile d (d ← x − y)
4 valutare se d e maggiore di 0: se e vero passare al passo 6, se e falsopassare al passo 5
5 restituire “il numero maggiore e ” seguito dal contenuto di y e passare alpasso 7
6 restituire “il numero maggiore e ” seguito dal contenuto di x
7 terminare l’esecuzione
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 7
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Fattoriale di un Numero (Soluzione Iterativa)
n! = n ∗ (n − 1) ∗ ... ∗ 2 ∗ 1
1 leggere il valore dall’esterno e assegnarlo alla variabile n
2 assegnare alla variabile fatt il valore 1 (fatt ← 1)
3 se n = 1, passare al passo 7
4 assegnare alla variabile fatt il valore della variabile stessa moltiplicato pern (fatt ← fatt ∗ n)
5 decrementare di 1 la variabile n (n← n − 1)
6 passare al passo 3
7 restituire il contenuto di fatt
8 terminare l’esecuzione
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 8
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Fattoriale di un Numero (Soluzione Ricorsiva)
n! =
{
1 se n ≤ 1n ∗ (n − 1)! se n > 1
(1)
1 leggere il valore dall’esterno e assegnarlo alla variabile n
2 se n = 1, vai al passo 4
3 restituire n ∗ FATTORIALE(n − 1) e passare al passo 5
4 restituire 1
5 terminare l’esecuzione
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 9
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Rappresentazione mediante PseudoCodice
Una metodologia comunemente utilizzata per descriverealgoritmi e la pseudocodifica: un linguaggio piu vicinopossibile a quello naturale
- codifica di un insieme di istruzioni elementari- indentazione
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 10
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
PseudoCodice: Assegnamento e Condizionale
Assegnamento:
- assegna alla variabile n il valore v
- n← v
Condizionale:
- se la condizione A e vera allora esegui B (altrimenti esegui C )- if A then B [else C ]
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 11
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
PseudoCodice: Cicli
Ciclo while:
- mentre A e vera esegui B- while (A) do {B}
Ciclo for:
- ripeti j − i + 1 volte B
- for cont ← i to j do {B}
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 12
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Rappresentazione mediante Diagrammi diFlusso
Un linguaggio formale grafico spesso utilizzato per la codificadegli algoritmi e costituito dai diagrammi di flusso
- insieme di blocchi che rappresentano le strutture comunementeutilizzate legate fra di loro da frecce che ne indicano l’ordine diesecuzione
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 13
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Maggiore fra 2 Numeri, x e y - 1
MAGGIORE
read x
read y
d ← x − y
if (d > 0) then {return x
} else {return y
}
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 14
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Maggiore fra 2 Numeri, x e y - 2
MAGGIORE (x , y)d ← x − y
if (d > 0) then {return x
} else {return y
}
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 15
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Fattoriale di un Numero (Sol. Iterativa) - 1
FATTORIALE(n)fatt ← 1while (n > 1) do {
fatt ← fatt ∗ nn ← n − 1
}return fatt
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 16
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Fattoriale di un Numero (Sol. Iterativa) - 2
FATTORIALE(n)fatt ← 1i ← 2while (i ≤ n) do {
fatt ← fatt ∗ ii ← i + 1
}return fatt
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 17
AlgoritmiStrutture Dati
Linguaggi e Programmi
VariabiliEsempi di AlgoritmiFormalismi per la Codifica
Fattoriale di un Numero (Sol. Ricorsiva)
FATTORIALE(n)if (n > 1) then {
return n ∗ FATTORIALE(n − 1)} else{
return 1}
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 18
AlgoritmiStrutture Dati
Linguaggi e ProgrammiVettori
Strutture Dati
Al crescere della complessita degli algoritmi l’impiego dellesingole variabili diventa inefficiente
Esempio: determinare il valore massimo fra 100 numeri
- bisognerebbe definire 100 variabili distinteda confrontare due a due
Strutture dati: aggregati organizzati di piu variabili
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 19
AlgoritmiStrutture Dati
Linguaggi e ProgrammiVettori
Diverse Strutture Dati
Strutture dati statiche:
- vettori e matrici- record
Strutture dati dinamiche:
- liste- code e pile- alberi e grafi
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 20
AlgoritmiStrutture Dati
Linguaggi e ProgrammiVettori
Vettori (array)
Un vettore (array) e un insieme ordinato di n elementi dellostesso tipo
Una vettore e identificato da un nome v e ogni elemento eindividuato univocamente da un indice i che indica la suaposizione
- v [i ] con i ∈ {1..n}
v [1] v [2] ... v [n− 1] v [n]
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 21
AlgoritmiStrutture Dati
Linguaggi e ProgrammiVettori
Ordinamento di n numeri
INPUT: sequenza di n numeri (a1, a2...an)
9 5 1 2 7
OUTPUT: permutazione degli elementi a′1, a′
2...a′
n
tali che a′1 ≤ a′2 ≤ ... ≤ a′n
1 2 5 7 9
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 22
AlgoritmiStrutture Dati
Linguaggi e ProgrammiVettori
Insertion Sort
INSERTION SORT (A)for j ← 2 to length(A) {
key ← A[j ]i ← j − 1while ((i > 0) and (A[i ] > key)) do {
A[i + 1]← A[i ]i ← i + 1
}A[i + 1]← key
}
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 23
AlgoritmiStrutture Dati
Linguaggi e ProgrammiVettori
Merge Sort
MERGE SORT (A, p, r)if (p < r) then {
q ← int((p + r)/2)MERGE SORT (A, p, q)MERGE SORT (A, q + 1, r)MERGE(A, p, q, r)
}
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 24
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Linguaggi e Programmi
Per eseguire un algoritmo su un calcolatore e necessariodescriverlo in un linguaggio formale, chiamato linguaggio di
programmazione, interpretabile dal calcolatore stesso
L’algoritmo e cosı tradotto in un programma
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 25
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Processo per la Creazione dei Programmi
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 26
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Diversi Linguaggi di Programmazione - 1
linguaggi interpretati: il testo di un programma scritto eelaborato da un interprete durante l’esecuzione del programmastesso: l’interprete legge un’istruzione, la traduce in uninsieme di istruzioni macchina (il linguaggio macchina)direttamente eseguibili dalla CPU del calcolatore, poi passa aleggere l’istruzione successiva, la traduce, e cosı via.
- perl, php, ...
linguaggi compilati: prevedono la compilazione, ossia latraduzione dell’intero programma in linguaggio macchina,prima dell’esecuzione del programma stesso
- C, C++, Visual Basic, Pascal...
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 27
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Diversi Linguaggi di Programmazione - 2
Un linguaggio a meta strada tra queste metodologie e Java
- il codice sorgente viene compilato in un formato intermedio(chiamato bytecode), il quale a sua volta viene interpretatodalla Java Virtual Machine (JVM)
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 28
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Pascal
Pascal e un linguaggio di programmazione compilativo
Alcune caratteristiche:
- creato da Niklaus Wirth per scopi didattici- chiamato Pascal in onore del matematico e filosofo franceseBlaise Pascal, inventore della prima macchina calcolatriceautomatica
- prima implementazione del linguaggio divenne operativa nel1970, ma raggiunse una discreta diffusione nel campoindustriale nel 1973
- la sua evoluzione orientata ad oggetti e il Delphi- sintassi chiara e rigida- diversi compilatori gratuiti: Free Pascal, Lazarus, Dev-Pascal
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 29
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Struttura generale di un Programma Pascal
Sezione dell’Intestazione: specifica il nome del programma
Sezione delle Dichiarazioni: indicazione delle variabili con laspecifica del relativo tipo di dato (insieme dei valori che lavariabile puo assumere)
Sezione Esecutiva: programma vero e proprio
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 30
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Tipi di Dato
I tipi di dato determinano l’insieme dei valori che una variabilepuo assumere:
- byte: numeri interi positivi su 1 byte- word: numeri interi positivi su 2 byte- shortint: numeri interi su 1 byte- integer: numeri interi su 2 byte- longint: numeri interi su 4 byte- real: numeri reali su 6 byte- boolean: valori booleani (1 bit)- char: caratteri (1 byte)- string: sequenza di caratteri(dimensione variabile a partire da 10 byte)
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 31
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Dichiarazione delle Variabili e Assegnamento
I programmi Pascal richiedono la dichiarazione delle variabilicon la specifica del relativo tipo di dato nella sezione var
Esempi di dichiarazioni:x : real ; # dichiarazione di una variabile di tipo realey1, y2 : integer ; # dichiarazione di due variabili di tipo interoc : char ; # dichiarazione di una variabili di tipo carattere
Esempi di assegnamento:x := 10, 5;y1 := y2− 10;
c := ′c ′;
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 32
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Operatori Aritmetici e Logici
Operatori aritmetici:
- + addizione- - sottrazione- ∗ moltiplicazione- / divisione- DIV quoziente della divisione tra interi- MOD resto della divisione tra interi
Operatori logici
- OR disgiunzione logico- AND congiunzione logico- NOT negazione logica
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 33
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Operatori di Confronto
= uguale a
<> diverso da
> maggiore di
>= maggiore o uguale a
< minore
<= minore o uguale a
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 34
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Alcuni Controlli di Flusso: Condizionale
Sintassi:IF condizione THEN
istruzione1ELSE
istruzione2;
Esempio: incrementa di 1 il valore di a se b e maggiore di 0,altrimenti lo decrementa di 1
if b > 0 then
a := a+ 1else
a := a− 1;
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 35
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Alcuni Controlli di Flusso: Ciclo WHILE
Sintassi:WHILE condizione DO
istruzione;
Esempio: calcola la potenza n-esima di 2 (n≥0)x := 1;while n > 0 do
BEGIN
x := x ∗ 2;n := n − 1
END;
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 36
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Alcuni Controlli di Flusso: Ciclo REPEAT
Sintassi:REPEAT
istruzione
UNTIL condizione;
Esempio: calcola la potenza n-esima di 2 (n≥1)x := 1;repeat
x := x ∗ 2;n := n − 1
UNTIL n < 1;
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 37
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Alcuni Controlli di Flusso: Ciclo FOR
Sintassi:FOR a := ni TO nf DO
istruzione
Esempio: calcola la potenza n-esima di 2 (n≥0)x := 1;FOR i := 1 TO n DO
x := x ∗ 2;
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 38
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Input e Output
READ/READLN (abbreviazione Read Line):legge i dati di input da tastiera
READLN (variabile)
WRITE/WRITELN (abbreviazione Write Line):stampa i dati di output sullo schermo
WRITELN(output)
Esempio: lettura di un carattere da tastierae scrittura dello stesso a video
WRITE (′Inserisci un carattere : ′);READLN (c);WRITELN (′Carattere inserito : ′, c);
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 39
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Vettori
Sintassi:dichiarazione di un vettorenome vettore : array [1..n] of tipo dato;
accesso ad uno specifico valore del vettorenome array [indice]
Esempio: incremento di 1 dei primi 3 valori di un vettorefor i := 1 to 3 do
vettore[i ] := vettore[i ] + 1;
Esempio: stampa di un vettore di lunghezza nfor i := 1 to n do
writeln(vettore[i ]);
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 40
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Procedure e Funzioni
Una procedura/funzione e una porzione di codice riutilizzabile
Entrambi possono prevedere parametri in ingresso:
- passaggio parametro per valore- passaggio parametro per riferimento
Le funzioni restituiscono un valore in uscita
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 41
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Procedure
Definizione di una procedura:
procedure nome procedura(parametri);var
...
begin
...
end ;
Invocazione di una procedura:
nome procedura(variabili);
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 42
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Funzione
Definizione di una funzione:
function nome funzione(parametri) : tipo restituito;var
...
begin
...
nome funzione := ...
...
end ;
Invocazione di una funzione:
x := nome funzione(variabili);
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 43
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Variabili e Procedure/Funzioni
Locali: definite all’interno di una procedure/funzioni, possonoessere richiamate solo all’interno della specificaprocedure/funzioni
Globali: definite nel programma principale, possono essereutilizzate in tutto il programma, anche all’interno delleprocedure/funzioni
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 44
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Maggiore fra 2 Numeri
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 45
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Fattoriale Iterativo
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 46
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Fattoriale Ricorsivo
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 47
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Insertion sort
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 48
AlgoritmiStrutture Dati
Linguaggi e Programmi
PascalEsempi di Programmi
Merge sort
D. Gubiani – Algoritmi, Strutture Dati e Programmi – 49