Introduzione
(algoritmi e pseudocodice)
Lezione 1
Jan 29, 2008
1
Discussion
Time
Esempio: Somma di due numeri
Immagina di descrivere come addizionare a qualcuno che non ne ha mai
sentito parlare. Come lo spiegheresti?
2
Come possiamo descrivere un algoritmo in un modo
sufficientemente preciso da non lasciare ambiguita’?
Il linguaggio di un robot
 Semplici istruzioni di movimento
 Es.
 “Muoviti in avanti per un sec.”
Due tipi di istruzioni composite (di controllo)
Condizionali
If condition Then
{
List of instructions
}
Loop
Do 5 times
{
List of instructions
}
Else
{
List of instructions
}
3
Il linguaggio del robot illustra gli elementi
essenziali di tutti i linguaggi per computer
BASIC
Torre di Babele dei computer
C++
Java
Python
Caratteristiche dei languaggi umani: Caratteristiche dei linguaggi dei computer:
variabili, semplici istruzioni aritmetiche,
sostantivi/verbi/aggettivi/etc.
Istruzioni condizionali/loop
Per un computer, esistono solo numeri
Justin Bieber song
Sequenza di Numeri che
rappresentano ampiezza,
frequenza, etc. ad ogni istante
(es., formato mp3)
Image
Sequenza di Numeri che
rappresentano intensita’ dei colori
per ogni pixel.
4
Compito base di un computer
40.99
62.99
52.99
…
22.99
Data: una sequenza di numeri in memoria (es., musica mp3)
Scopo: Elabora questi numeri per ottenere una specifica sequenza di
numeri come output (es., segnali elettrici che comandano le
cuffie e riproducono la musica)
Un primo semplice problema
 Un robot si prepara ad un’uscita galante…
 Come identificare il profumo piu’ economico? (Assumiamo
possa leggere i prezzi)
5
Soluzione
 Prendi la prima bottiglia,
 Cammina
lungo lo scaffale
 Confronta il prezzo sulla bottiglia dello scaffale con quello in
mano
 Se e’ minore scambia la bottiglia tenuta in mano con quella sullo
scaffale
 Alla fine la bottiglia di costo minimo e’ nelle mani del
robot
Problema simile in altro contesto
 Robot
ha n prezzi in memoria
 Vuole
trovare il prezzo
minimo
6
Memoria: visione semplificta
 Una lavagnetta che puo’ essere cancellata e riscritta
quante volte si vuole
 Una variabile: un pezzo di memoria con un nome;
contiene/memorizza un “valore”
i=
nome
22.99
valore
Esempi
i ←5
Assegna ad i il valore 5
j ←i
Assegna a j qualsiasi valore sia
assegnato ad i.
Lascia il valore di i invariato
i ←j+1
Assegna i al valore di j + 1.
Lascia il valore di j invariato
i ←i+1
Assegna ad i il valore ottenuto
sommando 1 al valore
precedentemente assegnato
ad i stesso.
7
Array
 A e’ un array di n valori
A[ i ] e’ l’ i-esimo valore
A=
 40.99
62.99
52.99
…
22.99
Esempio: A[3] = 52.99
Soluzione
 Prendi la prima bottiglia, controlla il prezzo
 Vai lungo lo scaffale. Per ogni bottiglia, esegui:
 Se
il prezzo sulla bottiglia e’ inferiore al prezzo di quella in mano,
scambia le bottiglie.
8
Procedura trovamin!
 n
elementi, nell’array A
 Variabili di supporto: i, best
best ← 1!
Do for i = 2 to n !
! {!
! ! if ( A[i] < A[best] ) then!
!!
best ← i !
! }!
Un’alternativa per lo stesso task
best ← 1;!
i ← 1!
Do while (i < n)!
{!
!
i ← i + 1;!
!
if ( A[i] < A[best] ) then!
!
!
best ← i !
}!
9
Molti passi di elaborazione in poche righe di codice
Nuovo problema per robot: ordinamento
Riposiziona le bottiglie in modo tale che i prezzi crescano
da sinistra a destra.
10
Devo ordinare n bottiglie. Mmmm?!?
Aha! trovo quella col prezzo minimo e la
metto nella posizione piu’ a sinistra. Quindi
mi rimane da ordinare solo le n-1 bottiglie alla
sua destra.
Soluzione
Nota: sappiamo gia’ fare questo!
Do for i=1 to n-1
{
Trova la bottiglia piu’ economica tra quelle
numerate da i a n
Scambia tale bottiglia e la bottiglia i -esima.
}
“selection sort”
11