Problema Algoritmo Programma

annuncio pubblicitario
INFORMATICA
ALGORITMI, PROGRAMMI, E
LINGUAGGI DI
PROGRAMMAZIONE
PROGRAMMI


Un computer e’ una macchina per eseguire
PROGRAMMI
Un programma e’ un ALGORITMO per
risolvere un certo PROBLEMA scritto
secondo le regole di un LINGUAGGIO DI
PROGRAMMAZIONE
ALGORITMO



Un PROGRAMMA e’ un ALGORITMO posto
in forma comprensibile al computer
Definizione informale di ALGORITMO: una
sequenza FINITA di passi NON AMBIGUI
che porta alla soluzione di un problema
Questa definizione si puo’ applicare al di fuori
dell’Informatica: nella matematica (da cui ha
origine) ma anche nella cucina
UN QUASI-ALGORITMO:
LA RICETTA PER LA BAGNA CAUDA
1.
2.
3.
4.
5.
6.
Cuocere gli spicchi di aglio, coperti con il
latte, fino a quando non diventino teneri.
Tritare l'aglio
Unirlo all'olio, alle acciughe tagliate molto
finemente
Cuocere a fiamma moderata e mescolare
fino a far ridurre il contenuto in un composto
omogeneo.
Dopo circa venti minuti aggiungere qualche
fiocco di burro
Servire in tavola con le verdure.
PERCHE’ QUASIALGORITMO?


Numero di passi e’ finito
Ma molti passi sono ambigui:


‘teneri’?
`fiamma moderata’?
UN PROBLEMA, DUE ALGORITMI:
IL MASSIMO COMUN DIVISORE
MCD: UN ALGORITMO
ELEMENTARE
A scuola si impara un algoritmo molto semplice per
calcolare MCD: la SCOMPOSIZIONE IN FATTORI
PRIMI

42 = 2 x 3 x 7
56 = 2 x 2 x 2 x 7



Algoritmo MCD(M, N):
1.
2.

Scomponi M ed N in fattori primi
Estrai i componenti comuni
Questo metodo si’ puo’ solo applicare per numeri
piccoli (la scomposizione in fattori primi e’ molto
costosa)
MCD: L’ALGORITMO DI
EUCLIDE
MCD(M,N):

1.
2.
3.
4.
5.
RIPETI finche’ M  N
SE
M > N, M  M –N;
ALTRIMENTI, N  N – M;
RITORNA al passo 1;
OUTPUT M
ESEMPIO

MCD(42,56):




M(42)  N(56);
 N (56) > M (42)
 N  14
M(42)  N(14);
 M (42) > N (14);
 M  28
M(28)  N(14)
 M(28) > N (14);
 M  14
OUTPUT: 14
MCD(M,N):

1.
2.
3.
4.
5.
RIPETI finche’ M  N
SE
M > N, M  M –N;
ALTRIMENTI, N  N – M;
RITORNA al passo 1;
OUTPUT M
ALCUNE CONSIDERAZIONI:
PROBLEMI ED ALGORITMI


Ci sono sempre molti algoritmi per risolvere
un problema
Parte dell’arte della programmazione e’
trovare gli algoritmi piu’ efficienti
ALGORITMI E FUNZIONI

In termini matematici, un algoritmo puo’
essere visto come una FUNZIONE che
produce un certo OUTPUT dato un certo
INPUT


Per esempio, MCD(42,56) = 14
Due algoritmi si dicono EQUIVALENTI se
producono lo stesso output dato lo stesso
input.

Fattori primi e Euclide sono EQUIVALENTI (ma
non egualmente efficienti!!)
ALGORITMI PIU’ COMUNI IN
INFORMATICA

Algoritmi MATEMATICI


Algoritmi di ORDINAMENTO





Per fare calcoli anche molto complessi (per esempio,
integrali, la scoperta di numeri primi)
45 2 17 28 101  2 17 28 45 101
Algoritmi di RICERCA
Algoritmi per il TRATTAMENTO DELLE STRINGHE
COMPILATORI
Algoritmi di COMPRESSIONE
DA ALGORITMI A
PROGRAMMI
LINGUAGGI DI
PROGRAMMAZIONE


Un linguaggio di programmazione permette di
esprimere certi tipi di istruzioni in modo che
possano venire poi convertite in istruzioni
macchina
Un linguaggio di programmazione e’
caratterizzato da


SINTASSI (come vengono scritte le istruzioni)
SEMANTICA (come devono venire interpretate)
CONSIDERAZIONI, II:
INGREDIENTI ESSENZIALI DI UN LINGUAGGIO
DI PROGRAMMAZIONE
MCD(M,N):

1.
2.
3.
4.
5.
RIPETI finche’ M  N
SE
M > N, M  M –N;
ALTRIMENTI, N  N – M;
RITORNA al passo 1;
OUTPUT M
INGREDIENTI ESSENZIALI DI UN
LINGUAGGIO DI PROGRAMMAZIONE




Poter mettere istruzioni in SEQUENZA
Poter cambiare l’ordine di esecuzione sulla
base di TEST
Poter RIPETERE istruzioni
Questi ingredienti vengono catturati tramite i
DIAGRAMMI DI FLUSSO
DIAGRAMMI DI FLUSSO


Una rappresentazione grafica usata per
descrivere in modo piu’ preciso i passi di un
algoritmo senza usare una sintassi specifica
Un diagramma e’ composto da una serie di
BLOCCHI uniti da archi
ESEMPIO: AREA DEL
RETTANGOLO
Calcolo dell’area di un rettangolo
AREA:


1.
2.
3.
4.
Leggi da input l’altezza H
Leggi da input la base B
Calcola l’area A
Produci in output il risultato
AREA DEL RETTANGOLO:
DIAGRAMMA DI FLUSSO
BLOCCHI: INIZIO E FINE
PROGRAMMA
BLOCCHI:
ISTRUZIONI ELEMENTARI
COUNT  0
COUNT  COUNT + 1
BLOCCHI: INPUT / OUTPUT
LE VARIABILI

Molti algoritmi richiedono un qualche modo
per immagazzinare i risultati di certi calcoli.


Per esempio, nell’algoritmo per MCD, M e N
Quasi tutti i linguaggi di programmazione
permettono di usare delle VARIABILI per
questo scopo. Una variabile puo’ essere
pensata come un nome per una zona di
memoria.
VARIABILI NELL’ALGORITMO
DI EUCLIDE
MCD(M,N):

1.
2.
3.
RIPETI finche’ M  N
M > N , M  M –N ;
ALTRIMENTI, N  N – M;
SE
4.
RITORNA al passo 1;
5.
OUTPUT M
CONDIZIONALI

Un’altro degli ingredienti fondamentali di un
linguaggio di programmazione e’ la
possibilita’ di scegliere di eseguire istruzioni
diverse a seconda dei risultati di un TEST
CONDIZIONALI
ESEMPIO: PARI O DISPARI
1.
2.
3.
4.
Leggi N
Dividi N per 2
Se Resto = 0 scrivi: N e’ pari
Altrimenti scrivi: N e’ dispari
PARI E DISPARI
RIPETIZIONI

L’ultimo componente fondamentale di un
linguaggio di programmazione e’ la
possibilita’ di ripetere le stesse azioni un gran
numero di volte
RIPETIZIONI
ALGORITMO DI EUCLIDE
START
F
T
MN
T
F
M > N?
OUTPUT:M
MM-N
STOP
NN-M
LINGUAGGI DI
PROGRAMMAZIONE

Il calcolatore comprende istruzioni in LINGUAGGIO
MACCHINA


Una prima astrazione dal linguaggio macchina sono
i cosiddetti ASSEMBLER che esprimono le istruzioni
macchina in formato simbolico


0011 001 010
ADD R1 R2
Una seconda astrazione sono i linguaggi di
programmazione AD ALTO LIVELLO che
astraggono dalle istruzioni macchina

XX+Y
ALGORITMO DI EUCLIDE IN UN TIPICO
LINGUAGGIO AD ALTO LIVELLO
function MCD(M,N)
while M ≠ N
if M > N then M  M - N
else N  N - M
return M
COMPILATORE

E’ un programma che trasforma un
programma espresso in linguaggio ad alto
livello (PROGRAMMA SORGENTE) in
linguaggio macchina (PROGRAMMA
OGGETTO)


In Windows: crea file .exe
Linguaggi tipicamente compilati: C, C++,
Fortran, Pascal
COMPILATORI
Scarica