Algoritmi, dati e programmi Scopo della lezione

Algoritmi, dati e programmi
Laboratorio di Informatica
AA 2007/2008
1
Scopo della lezione
Introduzione ai concetti di:
– problema
– dato
– algoritmo
– linguaggio di programmazione
– programma
– diagramma di flusso
Laboratorio di Informatica
AA 2007/2008
2
1
Informatica
informatica
informazione
mezzi
mezzi fisici
rappresentazione
dell’informazione
calcolatori
procedure
programmi
Laboratorio di Informatica
AA 2007/2008
3
Elaborazione di informazione
Ogni problema di elaborazione di
informazione è caratterizzato da
– un insieme di dati di partenza
– un risultato cercato
Ogni sua soluzione è
– una procedura che genera un risultato
sulla base dei dati indicati
Laboratorio di Informatica
AA 2007/2008
4
2
Elaborazione dell’informazione
• Es. Problema di elaborazione dell’informazione: “Quanto
fa 21+32?”
• Dati di partenza: {21,32}
• Risultato cercato: {53}
• Soluzione: procedura per l’addizione (addizione delle
unità con riporto + addizione delle decine con riporto, ...)
21 +
32 =
----53
Laboratorio di Informatica
AA 2007/2008
5
Elaborazione di informazione
Distinguiamo tra:
• conoscenza di come si risolve un problema
– analisi del problema
– identificazione di una soluzione
– descrizione della soluzione
• effettiva capacità di risolvere un problema
– interpretazione della soluzione
– attuazione della soluzione
Laboratorio di Informatica
AA 2007/2008
6
3
Elaborazione di informazione
•
Es. Problema di elaborazione dell’informazione: “Quanto fa 21+32?”
•
Conoscenza di come si risolve il problema:
–
–
–
•
Analisi Æ è un problema di somma tra due numeri interi;
Identificazione di una soluzione Æ esiste una procedura per la somma tra due numeri interi;
Descrizione della soluzione Æ i due numeri interi vanno incolonnati, si sommano le unità, il
riporto viene sommato alla somma delle decine, il riporto viene sommato alla somma delle
centinaia, ...
Effettiva capacità di risolvere il problema:
–
–
Interpretazione della soluzione Æ un utente italiano legge la descrizione del problema e
comprende le operazioni da eseguire;
Attuazione della soluzione Æ
21 +
32 =
----53
Laboratorio di Informatica
AA 2007/2008
7
Elaborazione di informazione
• La conoscenza di come si risolve un
problema è ciò che ci permette di
sviluppare un programma.
• Il programma sarà poi interpretato ed
eseguito da un esecutore (es.: essere
umano, calcolatore, ...)
• Sono competenze distinte.
Laboratorio di Informatica
AA 2007/2008
8
4
Elaborazione di informazione
• Conoscenza di come si risolve un
problema Æ Scoperta / invenzione di un
algoritmo per la risoluzione di un
problema… Richiede uno sforzo creativo.
• Risoluzione del problema Æ
Intepretazione di un linguaggio ed
esecuzione di una serie di operazioni…
Operazioni “meccaniche”.
Laboratorio di Informatica
AA 2007/2008
9
Elaborazione di informazione
Analisi del problema
Individuazione dell’algoritmo
Scrittura del programma
Intepretazione del programma
Dati
Ambito scientifico
del problema
Programmazione
Calcolatore
Esecuzione del programma
Risultato
Laboratorio di Informatica
AA 2007/2008
10
5
Elaborazione di informazione
Per la descrizione della soluzione si utilizza:
• linguaggio naturale
– italiano, inglese, …
• sono linguaggi ambigui
– Es. in una ricetta, “Aggiungere un pizzico di sale…” Quanto è un
pizzico di sale?
• linguaggio formale
–
–
–
–
–
formalismo matematico
pseudo-codice
diagramma di flusso (flow-chart)
linguaggio di programmazione
codice macchina
• sono linguaggi non ambigui
Laboratorio di Informatica
AA 2007/2008
11
Elaborazione di informazione
La descrizione della soluzione può essere
fatta a diversi livelli di dettaglio:
Esempio:
• cucinare le lasagne al forno
– preparare il ragù Alto livello
– preparare la besciamella
Basso livello
• setacciare 50g di farina e stemperarla con 10cc di latte
– …
• aggiungere 30cc di latte e 50g di burro a pezzetti
• ….
– bollire le lasagne
– mettere a strati nella teglia e cuocere in forno
Laboratorio di Informatica
AA 2007/2008
12
6
Elaborazione di informazione
Analisi del problema
Individuazione dell’algoritmo
Scrittura del programma
Intepretazione del programma
Dati
Ambito scientifico
del problema
Programmazione
Calcolatore
Esecuzione del programma
Risultato
Laboratorio di Informatica
AA 2007/2008
13
Algoritmo
algoritmo [al-go-rìt-mo] s.m. Dal Dal nome del
matematico ar. Al-Khuwa¯rizmi¯ (sec. IX): 1 (mat.)
procedimento sistematico di calcolo: algoritmo algebrico,
euclideo 2 nel Medioevo, il calcolo basato sull'uso delle
cifre arabiche 3 in logica matematica, procedimento
meccanico che permette la risoluzione di problemi
mediante un numero finito di passi | (inform.) serie di
operazioni logiche e algebriche, espresse in linguaggio
comprensibile all'elaboratore, la cui sequenza
costituisce un programma.
Fonte: Dizionario Garzanti on-line (http://www.garzantilinguistica.it)
Laboratorio di Informatica
AA 2007/2008
14
7
Algoritmo
La descrizione rigorosa di un metodo che consente di
ottenere un risultato attraverso passi elementari si
chiama algoritmo.
Definizione di algoritmo:
•
•
•
•
un insieme ordinato
di passi eseguibili
e non ambigui
che determinano un procedimento atto a risolvere un
problema o una classe di problemi
• utilizzando dati iniziali e ottenendo dei risultati
• in un tempo finito.
Laboratorio di Informatica
AA 2007/2008
15
Algoritmo
Esempi:
• gli algoritmi per eseguire le 4 operazioni che
ci sono stati insegnati alle elementari
– in un linguaggio adatto ai bambini
• la ricetta per fare le lasagne
– linguaggio dei libri di cucina
• livello di dettaglio diverso a seconda delle
competenze dell’esecutore (Æ linguaggi a
basso / alto livello).
• Att.ne! L’algoritmo è indipendente dal
linguaggio nel quale viene espresso!
Laboratorio di Informatica
AA 2007/2008
16
8
Esempi di algoritmi
Algoritmo per accedere a un PC del laboratorio
• Accendere lo schermo se è spento
• Scrivere il proprio <username> nella riga in
cui compare la scritta login:
• Scrivere la propria <password> nella riga in
cui compare la scritta password
• Se il sistema risponde con la frase: «utente
non abilitato», chiamare il tutor
Laboratorio di Informatica
AA 2007/2008
17
Esempi di algoritmi (2)
12317
53
41
67
4
7
1759
Laboratorio di Informatica
AA 2007/2008
18
9
Esempi di algoritmi (3)
Laboratorio di Informatica
AA 2007/2008
19
Linguaggio e algoritmo
• Att.ne! Il linguaggio con cui è espresso
l’algoritmo non fa parte dell’algoritmo!
• Es. l’algoritmo per effettuare la somma tra
due numeri è lo stesso sia in inglese che
in italiano… Ciò che cambia è la
rappresentazione dell’algoritmo, non
l’algoritmo!
Laboratorio di Informatica
AA 2007/2008
20
10
Elaborazione di informazione
Analisi del problema
Individuazione dell’algoritmo
Scrittura del programma
Intepretazione del programma
Dati
Ambito scientifico
del problema
Programmazione
Calcolatore
Esecuzione del programma
Risultato
Laboratorio di Informatica
AA 2007/2008
21
Linguaggio
Un linguaggio è costituito da:
• un vocabolario;
• una sintassi, cioè un insieme di regole che
specificano come comporre i vocaboli per
ottenere costrutti ben formati
(sintatticamente corretti);
• una semantica, che associa un significato
ad ogni costrutto linguistico sintatticamente
corretto.
Laboratorio di Informatica
AA 2007/2008
22
11
Sintassi e semantica
Sintassi
Semantica
Esempi
Girare la carta
Un lato grigio
Distinguere tra i due lati
Piegare a monte
rappresenta
Piegare a valle
rappresenta
Ripiegare
produce
Piegare internamente
produce
Laboratorio di Informatica
AA 2007/2008
23
Elaborazione di informazione
Analisi del problema
Individuazione dell’algoritmo
Scrittura del programma
Intepretazione del programma
Dati
Ambito scientifico
del problema
Programmazione
Calcolatore
Esecuzione del programma
Risultato
Laboratorio di Informatica
AA 2007/2008
24
12
Esecutore di algoritmi
Un esecutore è un soggetto in grado di
attuare le azioni specificate in un
algoritmo
• Nei casi esemplificati, noi
Laboratorio di Informatica
AA 2007/2008
25
Esecutore di algoritmi
Un esecutore è quindi caratterizzato da:
• il linguaggio che è in grado di interpretare
• l’insieme di azioni che è in grado di
compiere
• l’insieme delle regole che ad ogni costrutto
linguistico sintatticamente corretto associano
le relative azioni da compiere.
Laboratorio di Informatica
AA 2007/2008
26
13
Esecutore di algoritmi
A seconda dell’insieme delle azioni, differenti
esecutori possono usare algoritmi diversi per
risolvere uno stesso problema
• Nel caso della divisione, un computer NON
userebbe l’algoritmo proposto nell’esempio!
• Es. algoritmo per spostarsi avanti di un metro:
– muovi le gambe per un esecutore umano;
– muovi le ruote per un robot.
– CPU diverse possono utilizzare operazioni elementari
diverse per eseguire semplici istruzioni! (es. utilizzano
algoritmi diversi per la somma)
Laboratorio di Informatica
AA 2007/2008
27
Elaborazione di informazione
Analisi del problema
Individuazione dell’algoritmo
Scrittura del programma
Intepretazione del programma
Dati
Ambito scientifico
del problema
Programmazione
Calcolatore
Esecuzione del programma
Risultato
Laboratorio di Informatica
AA 2007/2008
28
14
Programmi
• I programmi sono sequenze finite di
istruzioni, ognuna scritta in un fissato
linguaggio (di programmazione)
• I programmi eseguibili da un computer
devono essere scritti usando un linguaggio
che il computer è in grado di “comprendere”.
Laboratorio di Informatica
AA 2007/2008
29
Programmi e algoritmi
Un algoritmo può essere quindi specificato sottoforma
di programma eseguibile da un calcolatore.
Att.ne! Programma e algoritmo sono concetti diversi!
Algoritmo = concetto astratto;
Programma = sequenza finita di istruzioni in un
determinato linguaggio… Può essere la
rappresentazione di un algoritmo… Ma la sequenza
di operazioni può anche non terminare in un tempo
finito!
Laboratorio di Informatica
AA 2007/2008
30
15
Linguaggi di programmazione
Un linguaggio di programmazione è
costituito da:
• un vocabolario
• un insieme di regole sintattiche che
specificano come comporre istruzioni
ben formate
• una semantica che associa un
“significato” alle istruzioni ben formate,
cioè l’azione denotata da ciascuna
istruzione.
Laboratorio di Informatica
AA 2007/2008
31
Linguaggi di programmazione
• Rispetto ad una qualsiasi lingua parlata da
esseri umani, un linguaggio di
programmazione è molto più semplice,
perché la sua sintassi è molto semplice.
• La teoria dei linguaggi formali fornisce una
classificazione dei linguaggi in base alla loro
“semplicità”.
Laboratorio di Informatica
AA 2007/2008
32
16
Linguaggi di basso livello
• Linguaggi di programmazione le cui istruzioni
corrispondono ad azioni molto elementari.
Richiedono uno sforzo di codifica maggiore
da parte di un programmatore.
Laboratorio di Informatica
AA 2007/2008
33
Linguaggi di alto livello
• Linguaggi di programmazione alle cui
istruzioni corrisponde un insieme di azioni più
articolato. Richiedono uno sforzo di codifica
inferiore da parte di un programmatore.
Laboratorio di Informatica
AA 2007/2008
34
17
Esempio
•
•
•
•
Il linguaggio L1 mette a disposizione i
comandi:
Aggiungi_una_unità al dato A
Leggi dato A
Leggi dato B
Esegui per <numero di volte>
Laboratorio di Informatica
AA 2007/2008
35
Esempio
Il linguaggio L2 mette a disposizione i
comandi:
• Leggi dato A
• Leggi dato B
• Somma <addendo1, addendo2>
Laboratorio di Informatica
AA 2007/2008
36
18
Esempio (2)
Vogliamo scrivere un programma per sommare
due numeri A e B:
In L1
In L2
• Leggi dato A
• Leggi dato A
• Leggi dato B
• Leggi dato B
• Esegui per B volte:
Aggiungi _una_unità al • Somma (A, B)
dato A
Laboratorio di Informatica
AA 2007/2008
37
Esempio (3)
• L2 è un linguaggio di livello più alto rispetto a
L1, perché offre al programmatore la
possibilità di usare istruzioni che sono meno
“vicine” al modo in cui lavora il processore e
più vicine al modo in cui lavoriamo noi.
Laboratorio di Informatica
AA 2007/2008
38
19
Esempio (4)
Alto livello
Basso livello
•
“preleva dalla memoria il
contenuto della cella A e
mettilo nel registro AA della
CPU”;
• “preleva dalla memoria il
contenuto della cella B e
mettilo nel registro BB della
CPU”;
• “Somma i registri AA e BB e
metti il risultato nel registro CC
della CPU”;
• “Copia in memoria il registro
CC della CPU, in posizione C”.
• C = A + B.
Laboratorio di Informatica
AA 2007/2008
39
Linguaggio macchina
• Il processore è in grado di riconoscere (e
quindi di eseguire) solo programmi scritti in un
proprio linguaggio di basso livello (linguaggio
macchina).
• Ogni modello di processore (es: Intel, Pentium,
Motorola, PowerPC) ha un proprio linguaggio
macchina diverso da quello degli altri
processori.
Laboratorio di Informatica
AA 2007/2008
40
20
Linugaggio macchina – diversi
processori
• Un processore di tipo A ha N registri;
• Un processore di tipo B ha M>N registri;
• Per il processore A, ogni istruzione che
utilizza i registri da N+1 a M non ha senso!
• Anche la sintassi o l’insieme di istruzioni
del linguaggio possono essere diverse.
Laboratorio di Informatica
AA 2007/2008
41
Linugaggio macchina – diversi
processori
• Un processore di tipo A implementa direttamente la
funzione “prodotto”;
• Un processore di tipo B implementa l’operazione
“somma” ma non l’operazione “prodotto”;
• Per il processore B, non è disponibile l’operazione
“prodotto” nel linguaggio a basso livello!
• L’insieme di istruzioni del linguaggio macchina sono
diverse per A e B.
• Il processore B potrà essere utilizzato per fare dei
prodotti utilizzando un ciclo e l’operazione “somma”.
Laboratorio di Informatica
AA 2007/2008
42
21
Linguaggi di alto livello
• Un programma scritto in un linguaggio diverso dal
linguaggio macchina deve essere quindi tradotto nel
linguaggio che il processore sa riconoscere
• I soggetti preposti a questa traduzione sono a loro
volta dei programmi (interpreti e compilatori)
• Compilatore Æ traduce un programma per intero, poi
il programma può essere eseguito (es.
programmazione in C, compilatore Microsoft);
• Inerprete Æ traduce ed esegue un’istruzione
immediatamente (es. Matlab).
Laboratorio di Informatica
AA 2007/2008
43
Interpreti e compilatori
Programma (istruzione)
in linguaggio macchina
Intel
Programma
(istruzione) in
linguaggio ad
alto livello
Interprete o
compilatore
Processore
Intel
Programma (istruzione)
in linguaggio macchina
Athlon
Processore
Athlon
Programma (istruzione)
in linguaggio macchina
Motorola
Processore
Motorola
Laboratorio di Informatica
AA 2007/2008
44
22
Un confronto
Velocità
Portabilità
Complessità
Linguaggio
macchina
Linguaggi
di alto livello
Laboratorio di Informatica
AA 2007/2008
45
Una nota sulla velocità
• Molti linguaggi di alto livello vengono tradotti
in linguaggio macchina da un apposito
traduttore (detto compilatore), ottenendo in
questo modo delle ottime prestazioni anche
in termini di velocità
• Esempi: C, PASCAL
• JAVA si trova a metà strada
Laboratorio di Informatica
AA 2007/2008
46
23
Elaborazione di informazione
Analisi del problema
Individuazione dell’algoritmo
Scrittura del programma
Intepretazione del programma
Dati
Ambito scientifico
del problema
Programmazione
Calcolatore
Esecuzione del programma
Risultato
Laboratorio di Informatica
AA 2007/2008
47
Dal problema al programma
• Per costruire un programma conviene
procedere con metodo,
– passando da un’analisi del problema da
risolvere
– all’algoritmo di soluzione rappresentato
in un “linguaggio” adatto all’uomo ma
non troppo lontano dai linguaggi di
programmazione
– e infine al programma scritto nel
linguaggio di programmazione prescelto
Laboratorio di Informatica
AA 2007/2008
48
24
Dal problema al programma
Riassumendo, il processo di sviluppo di un
programma prevede le seguenti fasi:
– analisi del problema e specificazione dei dati in
ingresso e in uscita;
– identificazione e formalizzazione di una soluzione,
definizione dell’algoritmo risolutivo;
– programmazione in un linguaggio di
programmazione “ad alto livello”;
– traduzione in linguaggio macchina;
– verifica (testing).
Laboratorio di Informatica
AA 2007/2008
49
Dal problema al programma
Approccio top-down alla progettazione:
• si parte da una descrizione ad alto livello della soluzione, in cui
si individuano sotto-problemi
• si definiscono le soluzioni dei sotto-problemi in termini di
operazioni più elementari
• … e così via, fino ad esprimere tutto in termini di problemi
elementari.
[Programmazione bottom-up – meno intuitiva Æ si parte dalla
risoluzione dei singoli sottoproblemi, si assemblano poi le
soluzioni dei sottoproblemi per arrivare alla soluzione di
problemi più grandi – es. sviluppo di librerie]
Laboratorio di Informatica
AA 2007/2008
50
25
Dal problema al programma
Due aspetti da gestire:
• i dati da utilizzare
• la successione di operazioni da compiere
Laboratorio di Informatica
AA 2007/2008
51
Dal problema al programma
• introdurremo la nozione di contenitore di
dati come astrazione dalla nozione di zona
della memoria utilizzata da un computer per i
dati
• introdurremo i principali tipi di istruzioni
• descriveremo gli algoritmi mediante
diagrammi di flusso, strumento per
descrivere una successione di operazioni
adatto all’uomo e orientato alla traduzione in
un linguaggio di programmazione
Laboratorio di Informatica
AA 2007/2008
52
26
Processo di sviluppo di un algoritmo
orientato alla programmazione
• Descriveremo i passi da seguire nella
costruzione di un algoritmo, intesa come
passo preliminare alla costruzione di un
corrispondente programma.
• Il processo delineato è adatto alla
programmazione in piccolo
– programmazione in piccolo = costruzione di
programmi di dimensioni trattabili da un singolo
programmatore
• La programmazione in grande richiede
processi di sviluppo ingegnerizzati, che non
tratteremo.
Laboratorio di Informatica
AA 2007/2008
53
I contenitori di dati
Un contenitore dati
– è un’astrazione della nozione di area di memoria
contenente dei dati,
– è detto anche variabile di programma.
• Un contenitore dati ha un tipo, che caratterizza
– un insieme di elementi, cioè l’insieme dei valori
ammessi per quel contenitore
– le operazioni possibili su di essi
– Es.: tipo intero (32 bit per ogni variabile)
• insieme: insieme dei numeri interi rappresentabili
• operazioni: +, -, *, /, ecc.
Laboratorio di Informatica
AA 2007/2008
54
27
I contenitori di dati
• Es. tipo BYTE
• Occupazione in memoria: 1 byte per
variabile
• Operazioni possibili: +, -, (attenzione
all’overflow!), >, <, ==, *, / (con
approssimazioni!)
• Numeri da 0 a 255
– 0 Æ [00000000]
– 255 Æ [11111111]
Laboratorio di Informatica
AA 2007/2008
55
I contenitori di dati
• Es. tipo BOOLEAN
• Occupazione in memoria: 1 byte per
variabile
• TRUE o FALSE
– 0 Æ [00000000] –> FALSE
– Qualsiasi altra rappresentazione Æ TRUE
• Operazioni possibili: AND, OR, XOR,
NOT… Non è possibile eseguire * o /!
Laboratorio di Informatica
AA 2007/2008
56
28
Rappresentazione grafica dei
contenitori di dati
Nome del contenitore: pippo
tipo : intero
pippo: intero
54
Contenuto = dato
(appartenete al tipo di dati
associato al nome, infatti
54 è un numero intero, e su
di esso sono ammesse le
usuali operazioni
aritmetiche)
Laboratorio di Informatica
AA 2007/2008
57
I contenitori di dati
• I linguaggi di programmazione ad alto livello (ma
anche Excel e Access) prevedono la tipizzazione
dei dati.
• I dati possono essere di tipo semplice, cioè con un
solo valore, ed i tipi comunemente previsti sono:
– Intero
• Es.: -158
0
32
– Reale
• Es.:
1,414213562373 -56,133
– Logico
• vero / falso
– Testo
• Es.: a, pippo, Mario_Rossi, casa
Laboratorio di Informatica
AA 2007/2008
58
29
I contenitori di dati
• I dati possono essere di tipo strutturato, cioè
contenenti più valori, ad esempio:
– vettori e matrici (strutture uniformi, cioè più
valori dello stesso tipo)
• Es.: vettore di interi [2,5,7,3,12,43]
– record (strutture non uniformi, cioè più valori non
necessariamente dello stesso tipo)
• Es.: studente
cognome : caratteri
nome : caratteri
matricola : intero
….
Rossi
Mario
656565
….
Laboratorio di Informatica
AA 2007/2008
59
Istruzioni
• Tre categorie:
– istruzioni di ingresso e uscita (lettura e
scrittura)
– istruzioni aritmetico-logiche (assegnamento)
– istruzioni di controllo (selezione, iterazione)
Laboratorio di Informatica
AA 2007/2008
60
30
Istruzioni
• Le istruzioni di ingresso / uscita permettono di
acquisire dati e di presentare risultati
Esempi:
• read a
– acquisisci un dato da tastiera e mettilo nel contenitore
‘a’
• print 'La media dei valori dati in ingresso è ', media
– stampa il contenuto di ‘media’ preceduto da un
commento
Laboratorio di Informatica
AA 2007/2008
61
Istruzioni
• Le istruzione di assegnamento modificano lo
stato di memoria, cioè i valori dei contenitori dati
(detti variabili). Sono della forma:
– CONTENITORE = ESPRESSIONE
– (leggi: metti ESPRESSIONE in CONTENITORE)
• Es.: a = b + 3
– ESPRESSIONE può essere: una costante, una
variabile, un’espressione vera e propria, una funzione
– CONTENITORE è il nome di una variabile
– l’esecutore valuta l’ESPRESSIONE e mette il valore
così calcolato in CONTENITORE, sostituendone il
valore precedente.
Laboratorio di Informatica
AA 2007/2008
62
31
Espressioni
• Le espressioni aritmetiche esprimono calcoli
numerici
– somma, sottrazione, prodotto divisione
– elevamento a potenza, radice, logaritmo,
esponenziale, ecc.
• Es.: b**2 – 4 * a * c
• Le espressioni sui caratteri modificano parole
e testi.
– concatenazione
• Es.: moto&sega
(risultato: motosega)
–…
Laboratorio di Informatica
AA 2007/2008
63
Espressioni
• Le espressioni logiche (o booleane)
esprimono calcoli logici e possono quindi
assumere solo i valori vero o falso.
– Operatori logici relazionali: confronto fra due valori,
ad esempio
• x<y
• (x + 5) = y
• ecc.
– Operatori logici AND, OR, NOT, ecc. per comporre,
ad es.:
• (x < y) AND (y < z)
• Un valore booleano (vero, falso) è
rappresentabile con un bit. Convenzionalmente
si assegna 1 a vero, 0 a falso.
Laboratorio di Informatica
AA 2007/2008
64
32
Espressioni
• Le espressioni di tipo booleano assumono
particolare importanza perché, usate nelle
istruzioni di controllo, ci permettono di prendere
delle decisioni.
Laboratorio di Informatica
AA 2007/2008
65
Istruzioni
• Le istruzioni di controllo permettono di
modificare il flusso di esecuzione delle
istruzioni all’interno di un programma,
altrimenti puramente sequenziale.
– Selezione
• if, case, ...
– Iterazione
• while, repeat
• for
• Si basano sull’uso di espressioni booleane
– Es. se x > 0, calcola la radice quadrata di x
Laboratorio di Informatica
AA 2007/2008
66
33
Diagrammi di flusso
• Blocchi di elaborazione: contengono sequenze di azioni
metti x+y in y
metti x-1 in x
Laboratorio di Informatica
AA 2007/2008
67
Diagrammi di flusso
• Blocchi decisionali: contengono una condizione booleana;
se vera, si segue la freccia vero, se falsa si segue la freccia
falso.
falso
vero
x = 0
Laboratorio di Informatica
AA 2007/2008
68
34
Diagrammi di flusso
• Un diagramma di flusso si ottiene
collegando le frecce uscenti dai
blocchi di elaborazione e
decisionali.
Laboratorio di Informatica
AA 2007/2008
69
Simboli principali
• inizio o fine
• elaborazione
• decisione
• connessione
Laboratorio di Informatica
AA 2007/2008
70
35
Strutture di controllo principali
sequenza
Laboratorio di Informatica
AA 2007/2008
71
Strutture di controllo principali
selezione
vero
falso
Laboratorio di Informatica
AA 2007/2008
72
36
Strutture di controllo principali
Iterazione
(sequenza +
selezione)
falso
vero
Laboratorio di Informatica
AA 2007/2008
73
Esempio
Inizio
Function RadiceQuadrata;
Acquisisci a
SI’
Real a,b; // Si alloca spazio in memoria per a, b
Repeat
a<0?
Display(‘Dammi a’);
read a;
NO
Until (a>=0)
b = sqrt (a)
Scrivi: “la radice
di a è <b>”
b=sqrt(a);
Display(‘La radice di a è: <b>’)
end
Fine
Laboratorio di Informatica
AA 2007/2008
74
37
Esempio di decomposizione
modulare
Laboratorio di Informatica
AA 2007/2008
75
Esempio di programma strutturato
procedura
programma
principale
chiamata di
procedura
Laboratorio di Informatica
AA 2007/2008
76
38
Paradigmi di programmazione
•
•
Programmazione Æ Traduzione da diagramma di flusso (o da altra
rappresentazione ad altissimo livello!) a linguaggio di programmazione.
Esistono diversi paradigmi di programmazione… Approfondiamo la
programmazione procedurale:
– Basato su moduli (funzioni) che permettono di elaborare dei dati fornendo dei
risultati;
– Le funzioni possono essere incapsulate l’una dentro l’altra.
•
Es. Altro paradigma di programmazione: ad oggetti
– si creano degli oggetti caratterizzati da uno stato e da alcune attività
caratteristiche;
– L’interazione tra oggetti fa avanzare il programma.
– Es. oggetto panettiere;
• Possibili stati: dietro al bancone, al forno…
• Attività caratteristiche: cuocere il pane, emettere scontrino, …
– Oggetto ‘consumatore’
• Possibili stati: al lavoro, a fare shopping,…
• Attività caratteristiche: acquista pane, …
Laboratorio di Informatica
AA 2007/2008
77
Introduzione alla programmazione
procedurale
Moduli Æ funzioni
Una funzione permette di elaborare i dati, può
avere una serie di input (variabili di ingresso) e
di output (variabili di uscita);
Input Æ dati da elaborare;
Output Æ risultati.
Esempio:
[Quoziente, Resto] = DivisioneIntera (Dividendo, Divisore)
Laboratorio di Informatica
AA 2007/2008
78
39
Introduzione alla programmazione
procedurale
Implementazione di: [Quoziente, Resto] = DivisioneIntera
(Dividendo, Divisore), notazione Matlab.
[Quoziente, Resto] = function DivisioneIntera (Dividendo, Divisore);
Quoziente = div (Dividendo, Divisore);
Resto = mod (Dividendo, Divisore);
return;
Parole chiave (function, return), caratteristiche del
lingugaggio di programmazione.
function Æ dichiarazione di una funzione;
return Æ per terminare l’esecuzione della funzione (può
essere omesso).
Laboratorio di Informatica
AA 2007/2008
79
Introduzione alla programmazione
procedurale
[Quoziente, Resto] = function DivisioneIntera (Dividendo, Divisore);
• La prima riga contiene la dichiarazione della
funzione. Nella dichiarazione viene utilizzata la
parola chiave function, che specifica che si sta
effettuando una dichiarazione di funzione;
• E’ necessario dichiarare una funzione per
poterla utilizzare in seguito;
• Tutte le istruzioni terminano con ‘;’.
Laboratorio di Informatica
AA 2007/2008
80
40
Introduzione alla programmazione
procedurale
Quoziente = div (Dividendo, Divisore);
Resto = mod (Dividendo, Divisore);
• Elaborazione dei dati.
• Per dichiarare una funzione, la sintassi è data da:
– [Output1, Output2, … OutputN] = function Funzione (Input1, Input2, …
input);
• Per utilizzare una funzione, la sintassi è data da:
– [Output1, Output2, … OutputN] = Funzione (Input1, Input2, … input);
• E’ comodo creare una libreria di funzioni, perché ciascuna funzione
può essere utilizzata da altre funzioni quando necessario
(programmazione modulare – ogni funzione è un modulo da
riutilizzare).
Laboratorio di Informatica
AA 2007/2008
81
Introduzione alla programmazione
procedurale
return;
• Infine, la quarta e ultima riga termina
l’esecuzione della funzione mediante la
parole chiave return (opzionale in Matlab).
Laboratorio di Informatica
AA 2007/2008
82
41