Algoritmo - mauriziomancini.org

annuncio pubblicitario
Click to edit
Algoritmo
Master title style
•
algoritmo: un insieme ordinato di operazioni non
ambigue ed effettivamente computabili che, quando
eseguito, produce un risultato e si arresta in un tempo
finito
•
in termini informali: un algoritmo è una sequenza
ordinata di operazioni che risolve un problema specifico
Click to edit
Proprietà
Master title style
•
un algoritmo deve essere:
•
non ambiguo (i risultati non devono variare in funzione della
macchina o persona che esegue l'algoritmo)
•
corretto (deve risolvere un dato problema)
•
realizzabile (deve essere eseguibile con le risorse a disposizione)
•
finito (deve essere composto da un numero finito di passi elementari;
le operazioni sono eseguite un numero finito di volte)
•
efficiente (deve avere un costo accettabile, se non ottimo, in termini
di risorse consumate: tempo di CPU richiesto per completare, quantità
di memoria utilizzata, quantità di bit trasferiti)
Click to edit
Efficienza
Master title style
• efficienza è il termine usato per descrivere l’uso attento delle
risorse da parte di un algoritmo
• come si misurano il tempo e lo spazio consumati da un
algoritmo, in modo da determinare se è efficiente?
– efficienza rispetto allo spazio: si può giudicare in base alla
quantità di informazioni che l’algoritmo deve registrare
nella memoria del computer per svolgere il proprio
compito, oltre ai dati iniziali sui quali opera
– efficienza rispetto al tempo: è un’indicazione della quantità
di “lavoro” richiesto dall’algoritmo stesso; è una misura
dell’efficienza implicita del metodo, indipendente dalla
velocità della macchina su cui è eseguito, dai valori dei dati
di ingresso elaborati ma non dalla loro quantità
Click to edit
Complessità
Master title style
• descrive l'efficienza dell'algoritmo
– numero di operazioni svolte dall'algoritmo relativamente alla
misura dell'informazione su cui opera l'algoritmo
• esempio: per mettere in ordine una lista di N numeri interi
un algoritmo può eseguire N*N operazioni oppure logN
operazioni
• complessità tipiche degli algoritmi, in ordine crescente:
– logN, N, NlogN, N2, 2N
Click
Descrizione
to edit Master
di un algoritmo
title style
• un algoritmo è descritto in un linguaggio
• il linguaggio di descrizione di un algoritmo deve essere
adeguato alle caratteristiche del suo esecutore
•
esecutore umano:
– linguaggio naturale
– linguaggio grafico (ad esempio i diagrammi di flusso)
• esecutore automatico (computer):
– linguaggio di programmazione
Click to edit
Esecuzione
Master title style
• l'esecuzione delle azioni nell'ordine specificato
dall'algoritmo consente di ottenere, a partire dai dati
di ingresso, i risultati che risolvono il problema
Metodo
Risolutivo
(algoritmo)
DATI
Esecutore
RISULTATI
ESECUTORE
una macchina astratta
capace di eseguire le
azioni specificate dallo
algoritmo.
Esempio:
Click tolaedit
preparazione
Master titledel
style
caffè
• Esecutore: essere umano corredato di caffettiera "moka", cucina a gas
e macina-caffè;
• Algoritmo:
1. svitare la caffettiera;
2. se si dispone di caffè macinato:
• riempire il filtro con il caffè macinato e andare al punto 3
• altrimenti se si dispone di caffè in chicchi: macinarlo e tornare al punto 2
• altrimenti terminare (il caffè non si può fare..)
3.
4.
5.
6.
7.
riempire la parte inferiore della caffettiera con acqua
inserire il filtro nella macchina
avvitare la caffettiera
accendere il fuoco a gas
collocare la moka sul fuoco
8. attendere l'uscita del caffè
9. spegnere il fuoco
10. terminare (il caffè è pronto)
Click
Esempio:
to edit
assicurazione
Master title auto
style
• scrivere un algoritmo per decidere se l'assicurazione della
macchina è scaduta
1.
2.
3.
4.
5.
6.
7.
anno corrente < anno scadenza polizza? non è scaduta, fine
anno corrente > anno scadenza polizza? è scaduta, fine
mese corrente < mese scadenza polizza? non è scaduta, fine
mese corrente > mese scadenza polizza? è scaduta, fine
giorno corrente < giorno scadenza polizza? non è scaduta, fine
giorno corrente > giorno scadenza polizza? è scaduta, fine
non è scaduta ma lo sarà tra 24 ore
ClickIl to
concetto
edit Master
di variabile
title style
• per eseguire una qualsiasi algoritmo, abbiamo bisogno di
poter immagazzinare i risultati temporanei e finali
dell'algoritmo
• concettualmente, le variabili possono essere viste come
delle scatole con:
– un'etichetta che ci permette di identificarne il contenuto
– dei pezzi di carta al loro interno su cui si possono
annotare/modificare i valori di un calcolo che si sta facendo
Click to editVariabili
Master title style
• una variabile rappresenta una zona di memoria RAM che
può essere usata per memorizzare un valore
• analogia con una scatola di scarpe etichettata in uno
scaffale (che rappresenta la RAM):
–
–
–
–
la scatola ha un'etichetta con un nome
una posizione nello scaffale
un valore (le scarpe che si trovano dentro la scatola)
[un tipo (forma della scatola)]*
(* vedremo più avanti cos'è e a che serve il tipo di una variabile)
Click to editVariabili
Master title style
• nella pratica:
– ogni variabile ha un nome mnemonico, che si usa nel programma
per riferirsi alla variabile stessa.
– ogni variabile contiene un valore che può essere letto e
modificato a piacimento
– durante l’esecuzione di un programma, il sistema operativo
mantiene una associazione tra il nome di ogni variabile e
l’indirizzo della cella di memoria in cui è memorizzato il suo valore
• in definitiva una variabile è semplicemente un'astrazione
della cella di memoria fisica
Click to editVariabili
Master title style
• A = Valore oppure A ← Valore significa che il valore
specificato a destra dell'uguale viene memorizzato nella
zona di memoria RAM etichettata con l'etichetta "A":
Valore
A
• attenzione: non si tratta di un'equivalenza matematica!!!
Click to editVariabili
Master title style
• B = A oppure B ← A significa che un certo valore,
precedentemente memorizzato nella zona di memoria
etichettata con "A", viene copiato nella zona di memoria
etichettata con "B":
Valore
A
B
ClickEsempio:
to edit Master
incremento
title style
• A = A + 1 oppure A ← A + 1
(N.B.: matematicamente ciò non ha alcun senso!)
• in informatica significa "prima calcoliamo A+1 e poi
memorizziamo il risultato del calcolo in A"
• stiamo quindi considerano il valore di A in due istanti
diversi: prima per leggerne il valore e incrementarlo e
dopo per memorizzare il suo nuovo valore
Valore + 1
A
A
Click Diagrammi
to edit Master
di flusso
title style
• un diagramma di flusso (flow chart) è la definizione grafica
delle operazioni che costituiscono un algoritmo
• è uno strumento efficace per la descrizione degli algoritmi
• i diagrammi di flusso usano forme geometriche diverse
per rappresentare:
– trasferimento di informazioni (lettura dati, scrittura risultati,
visualizzazione dati intermedi)
– esecuzione di calcoli
– assunzione di decisioni
– esecuzione di iterazioni (ripetizione di sequenze di operazioni)
Click Diagrammi
to edit Master
di flusso
title style
– elaborazione – i blocchi rettangolari
rappresentano istruzioni di assegnazione di
valori o una modifica dello stato globale della
computazione
– input/output - i blocchi a forma di
parallelogramma corrispondono a operazioni di
input/output dei dati (lettura da tastiera,
visualizzazione su video)
– decisione – i blocchi a forma di rombo vengono
yes
utilizzati per rappresentare istruzioni di salto
condizionato
– inizio/fine – i blocchi ovali vengono utilizzati per
rappresentare l’inizio e la fine dell’algoritmo
vE
operation
condition
no
start
stop
Calcolo
Click to
dell’area
edit Master
di untitle
rettangolo
style
•
•
•
•
leggi da input l’altezza (H)
leggi da input la base (B)
calcola l’area H*B
dai in output il risultato
Calcola
Click to l’area
edit Master
di un rettangolo
title style
START
Leggi Altezza
Leggi Base
Area = Base*Altezza
Stampa Area
STOP
Click
Conversione
to edit Master
lire in
title
Euro
style
• leggi da input l'importo in lire (antica
moneta usata in Italia fino al secolo XX)
• calcola il corrispettivo in Euro
• dai in output il risultato
Click
Conversione
to edit Master
lire in
title
Euro
style
START
Leggi Lire
Euro = Lire/1936,27
Stampa Euro
STOP
Click to edit
IF-THEN-ELSE
Master title style
• selezione tra due istruzioni
sulla base di una condizione
I
Then
Else
O
Massimo
due numeri
Click
to edit tra
Master
title style
• leggi X
• leggi Y
• se X > Y
– stampa X
altrimenti
– stampa Y
Click
Massimo
to edit tra
Master
due numeri
title style
Click to edit
Pari Master
o disparititle style
• leggi N
• dividi N per 2
• se resto = 0
– scrivi “N è pari”
altrimenti
– scrivi “N è dispari”
Click to edit
Pari Master
o disparititle style
Click to edit
WHILE-DO
Master title style
I
O
Click to edit
ESEMPIO
Master title style
• CALCOLO DEL FATTORIALE
• N!=N*(N-1)*(N-2)*…*2
START
Leggi N
F=N
N>1?
no
yes
N=N-1
Stampa F
F=F*N
STOP
Click to edit
DO-WHILE
Master title style
I
O
Click to edit
ESEMPIO
Master title style
START
• CALCOLO DEL FATTORIALE
• N!=N*(N-1)*(N-2)*…*2
Leggi N
F=N
N=N-1
F=F*N
yes
no
N>1?
Stampa F
STOP
Scambio
Click todei
editvalori
Master
di due
titlevariabili
style
•
•
•
•
•
•
•
Leggi valore prima variabile X
Leggi valore seconda variabile Y
Conserva X in una variabile temporanea Aux
Assegna il valore di Y ad X
Assegna il valore di Aux a Y
Scrivi X
Scrivi Y
dei valori
di due variabili
ClickScambio
to edit
Master
title style
Click to editEsercizi
Master title style
•
•
•
•
•
dati 2 numeri in input trovare e stampare in output il max
dati 3 numeri in input trovare e stampare in output il max
dati 3 numeri in input stamparli in ordine crescente
dati 2 numeri in input stampare in output la somma
sul prezzo di un prodotto viene praticato lo sconto del 3% se costa
meno di 1.000.000 e del 5% se costa di più; dato in input il prezzo P,
calcolare il prezzo da pagare secondo la regola sopra descritta
• sul prezzo di un biglietto di un treno viene applicato un supplemento
del 7% se il treno è di tipo "a", del 12% se è di tipo "b" e del 18% se è
di tipo "c"; per gli altri treni non c'è supplemento; calcolare il prezzo
totale del biglietto, a seconda del tipo di treno e comunicare il tipo di
treno con il prezzo calcolato
Click to editEsercizi
Master title style
• dati in input i min, ore e sec stampare in output il totale
dei secondi
• data in input una data verificare se è giusta
• dato in input 100 valori stampare in output la somma dei
numeri positivi e la somma dei negativi
• dato in input una parola stampare in output se è una
palindrome o no
• dato in input una parola stampare in output il numero
delle vocali
Click to edit
Programma
Master title style
• ogni computer è una macchina in grado di
eseguire azioni elementari su dati
• l'esecuzione delle azioni elementari viene
attivata tramite sequenze di istruzioni
• le istruzioni sono espresse attraverso frasi di
un opportuno linguaggio di
programmazione
• un programma non è altro che la formulazione testuale di un algoritmo in un
linguaggio di programmazione
Algoritmo
e programma
Click to
edit Master
title style
problema
algoritmo
metodo
risolutivo
programma
linguaggio
di
programmazione
un programma è la formulazione, in un certo
linguaggio di programmazione, di un algoritmo
che risolve un dato problema
Click
Algoritmi
to edit Master
vs. programmi
title style
• calcolo del fattoriale:
– esiste un solo algoritmo per calcolare il
fattoriale
– esistono teoricamente infinite implementazioni
(e quindi programmi) per il calcolo del
fattoriale, una per ogni linguaggio di
programmazione esistente
• e quindi:
– per ogni programma esiste un solo algoritmo
– per ogni algoritmo esistono infiniti programmi
Linguaggi
Click to edit
di programmazione
Master title style
• I linguaggi di programmazione ad alto livello permettono
di scrivere programmi con una notazione adatta agli esseri
umani, e in alcuni casi molto intuitiva.
• Usando degli opportuni traduttori (compilatori ed
interpreti) lo stesso programma può essere usato su
macchine diverse
• Fortran, Cobol, Pascal, Ada, C, C++, Java, Lisp, ML,
Prolog,...
Click to Iledit
compilatore
Master title style
• un programma scritto in un linguaggio ad alto livello è
detto programma sorgente.
• per essere eseguito su un computer, va tradotto nel
linguaggio macchina del computer (il linguaggio del
processore)
• il compilatore è un programma che esegue la traduzione,
producendo il programma oggetto, ossia una sequenza di
istruzioni in linguaggio macchina
• il compilatore segnala anche eventuali errori di sintassi
nella scrittura del programma sorgente
Click to Iledit
compilatore
Master title style
programma P
scritto nel
linguaggio L
compilatore per P
sul computer M
programma P’ nel
linguaggio macchina di M
esecuzione
di P’ su M
Click to edit
L'interprete
Master title style
• in alternativa alla compilazione, un programma sorgente
può essere interpretato.
• un interprete è un programma che non produce alcun
programma oggetto, ma legge il ogni istruzione del
programma sorgente e genera le istruzioni macchina
corrispondenti, che vengono passate all’hardware per
l'esecuzione.
Click
Compilatori
to edit Master
Vs. Interpreti
title style
• programma compilato
– vantaggi: la traduzione avviene una sola volta, e poi il programma
oggetto può essere eseguito quanto si vuole
– svantaggi: la compilazione richiede un certo tempo di esecuzione
• programma interpretato
– vantaggi: il programma può essere eseguito subito senza dover
attendere la fine della compilazione
– svantaggi: la traduzione avviene mentre si esegue il programma
con conseguenze rallentamento dell'esecuzione
• alcuni linguaggi permettono entrambe le scelte
• attualmente, i computer sono così potenti che anche la
compilazione di lunghi programmi non richiede molto
tempo
Scarica