Informatica B
Introduzione al corso
Danilo Ardagna
Politecnico di Milano
11-3-2013
Corso offerto a
!
Ingegneri Elettrici [A,L)
!
Ingegneri Chimici
!
Ingegneri dei Materiali e Nanotecnologie
2
Docenti
Docente: Danilo Ardagna
Dipartimento di Elettronica, Informazione e Biongingegneria
e-mail: [email protected]
Ufficio: Dipartimento di Elettronica, Informazione e Bioingegneria,
Ed. 22 piano III
Via Golgi 42
Tel: 02/2399 3514
Esercitatori:
Michele Ciavotta, [email protected]
Responsabili di laboratorio:
Davide Cucci, [email protected]
Luca Florio, [email protected]
3
Organizzazione
! 
Il corso equivale a 7 crediti
! 
! 
! 
! 
Lezioni = 36 ore
Esercitazioni = 30 ore
Laboratorio = 18 ore
Orario:
!   Lezioni ed Esercitazioni:
Martedì 8.15– 10.15, aula CG3
Giovedì 14.15 – 17.15, aula CG3
Venerdì 15.15 – 18.15 (secondo il calendario sul sito)
!   Laboratorio:
! 
! 
Il venerdì, secondo il calendario e suddivisione in squadre esposte sul sito.
Aula EG7
Facoltativo
A partire dal 14 aprile verrà attivato il servizio di tutoring
Ricevimento:
!   Martedì: 16.30 – 18.30 o su appuntamento
! 
! 
4
Materiale didattico
! 
Slide delle lezioni esercizi e temi d’esame
accessibili attraverso il sito
!
Mandrioli, Ceri, Sbattella, Cremonesi, Cugola.
Informatica, arte e mestiere. McGraw-Hill, 2008
! 
Un libro sul linguaggio C (a scelta)
!
!
! 
! 
Deitel & Deitel. C: Corso completo di programmazione.
Nuova Edizione, Apogeo
Kochan. Programmare in C, Pearson
Bellini e Guidi. Linguaggio C, McGraw-Hill
Kernighan, Ritchie. Il linguaggio C, Pearson/Prentice Hall
5
Materiale didattico
! 
Slide delle lezioni esercizi e temi d’esame
accessibili attraverso il sito
!
Mandrioli, Ceri, Sbattella, Cremonesi, Cugola.
Informatica, arte e mestiere. McGraw-Hill, 2008
! 
Un libro sul linguaggio C (a scelta)
!
!
! 
! 
Deitel & Deitel. C: Corso completo di programmazione.
Nuova Edizione, Apogeo
Kochan. Programmare in C, Pearson
Bellini e Guidi. Linguaggio C, McGraw-Hill
Kernighan, Ritchie. Il linguaggio C, Pearson/Prentice Hall
6
Materiale didattico
!
Eserciziari:
!
Bisogni, Borney, Mezzalira. Programmare con il linguaggio
C, Spiegel
!
Bellettini et al. Linguaggio C: esercizi e temi d’esame
risolti, ed. Esculapio, prog. Leonardo
!
Morzenti Campi Di Nitto Loiacono Spoletini. Introduzione
alla programmazione in Matlab Ed.2011, Esculapio
7
Modalità esame
! 
Prove in itinere
! 
Appelli
! 
Esame scritto che assegna complessivamente 32
punti corrispondenti al voto massimo di 30 e lode
8
Prove in itinere
! 
! 
Le due prove scritte previste durante lo
svolgimento del corso saranno collocate nei
due periodi di sospensione dell'attività
didattica
Le prove in itinere saranno costituite da
esercizi e/o domande inerenti la parte del
programma alla quale fanno riferimento e
potrebbero in casi eccezionali essere
completate da un colloquio orale
9
Prove in itinere
! 
! 
Ogni prova assegna un massimo di 16 punti ed è
considerata valida se lo studente ottiene almeno un
punteggio minimo di 8 punti; chi ottiene un
punteggio inferiore a quello minimo in almeno una
prova è obbligato a sostenere la prova di recupero
(appello, quindi per partecipare alla seconda prova
è necessario superare la prima!)
Per superare l'esame è inoltre necessario che la
somma dei punteggi delle due prove in itinere sia
almeno di 18 punti sui 32 disponibili; lo studente
che non soddisfa le precedenti condizioni dovrà
recuperare l’intera prova scritta
10
Prova di recupero (Appello)
! 
! 
! 
Gli studenti sono ammessi ai recuperi se non hanno
superato entrambe le prove in itinere, o se il
risultato delle due prove è inferiore a 18, oppure se
intendono migliorare il voto ottenuto
In ciascuno di questi casi lo studente annulla
automaticamente il voto precedentemente ottenuto
non appena si presenta in aula per la prova di
recupero
La prova di recupero è organizzata in un’unica prova
che fa riferimento all’intero programma del corso
11
Programma
! 
! 
Breve rassegna sull’Informatica
Nozioni di base sull’architettura hardware e software di un calcolatore
! 
! 
! 
La programmazione del calcolatore:
! 
! 
! 
!
! 
! 
Struttura e principi di funzionamento di un calcolatore elettronico elementare
Codifica binaria dell'informazione
Rappresentazione dello schema risolutivo (algoritmo) di un problema in una
forma adatta all'elaborazione automatica
Rappresentazione e codifica degli algoritmi in un linguaggio formale (programmi)
Linguaggio C
Matlab e Octave
Database, linguaggio SQL (facoltativo per gli allievi Chimici e Materiali)
Applicazioni dell’Informatica
! 
! 
Reti di calcolatori, sistemi distribuiti (facoltativo per gli allievi Chimici e
Materiali)
Internet (facoltativo per gli allievi Chimici e Materiali)
12
Programma dei laboratori
1. 
2. 
3. 
4. 
5. 
6. 
Introduzione all'ambiente, primi esempi C
Programmi semplici, strutture dati
Funzioni e Procedure
Matlab, introduzione
Funzioni e Procedure in Matlab
SQL (facoltativo per gli allievi Chimici e
Materiali)
13
Perché studiare informatica
! 
! 
! 
Perché l’informatica è a livello mondiale uno dei
settori industriali maggiori e in maggiore crescita
Perché oltre ad essere una tecnologia “primaria” è
una tecnologia “abilitante” di altre tecnologie e di
altri settori industriali
Perché imparare a programmare passando dalla
formulazione del problema alla sua soluzione
attraverso lo studio di un algoritmo risolutivo,
insegna un metodo, rigoroso, spendibile in tutte le
altre attività
14
Applicazioni dell’informatica per
Ingegneri Elettrici e Chimici
!
Analisi circuiti
15
Applicazioni dell’informatica per
Ingegneri Elettrici e Chimici
!
!
Analisi circuiti
Simulazione
16
Applicazioni dell’informatica per
Ingegneri Elettrici e Chimici
!
!
! 
! 
Analisi circuiti
Simulazione
Smart-Grid
…
17
Grid esempi: acceleratore di
particelle
• Generazione dati
dell’ordine di TB/s
• Un cluster riduce il
flusso dei dati
all’ordine dei MB/s
18
Grid esempi: protein folding
• Passo simulazione pSec
• Durata simulazione µSec
• Tempo di CPU 30 anni
19
Un progenitore: ENIAC
1945 - University of Pennsylvania
spazio: 170 m² peso: 30 t
Attività quotidiane: riparazione
Attività quotidiane: programmazione
CRC 102A (1954)
Il “computer di Dadda”
Un investimento post-bellico in ricerca
120.000 US$
CRC 102A (1954)
Il “computer di Dadda”
Evoluzione
•  Il software
•  Il computer (l’hardware)
•  Le reti di interconnessione
Evoluzione
•  Il software
•  Il computer (l’hardware)
•  Le reti di interconnessione
Dedicherò la prima conferenza all’opposizione
leggerezza-peso, e sosterrò le ragioni della leggerezza.
[...]
E’ vero che il software non potrebbe esercitare i poteri
della sua leggerezza se non mediante la pesantezza del
hardware; ma è il software che comanda, che agisce sul
mondo esterno e sulle macchine, le quali esistono solo
in funzione del software, si evolvono in modo
d’elaborare programmi sempre più complessi. La
seconda rivoluzione industriale non si presenta come la
prima con immagini schiaccianti quali presse di
laminatoi o colate d’acciaio, ma come i bits d’un flusso
d’informazione che corre sui circuiti sotto forma
d’impulsi elettronici. Le macchine di ferro ci sono
sempre, ma obbediscono ai bits senza peso.
Evoluzione
•  Il software
•  Il computer (l’hardware)
•  Le reti di interconnessione
Evoluzione dell’hardware
A parità di funzioni la dimensione si dimezza ogni 2 anni
(legge di Moore)
Ubiquitous computing
Ubiquitous computing names the third
wave in computing, just now beginning.
The most profound technologies are those
that disappear.
They weave themselves into the fabric of
everyday life until they are indistinguishable
from it.
Mark Wiser, 1991
First were mainframes, each shared by
lots of people. Now we are in the
personal computing era, person and
machine staring uneasily at each other
across the desktop. Next comes
ubiquitous computing, or the age of
calm technology, when technology
recedes into the background of our lives.
Mark Wiser, 1995
Internet delle cose (Internet of Things)
Google Smart Contact Lens
32
Altri esempi
!
IoT - IBM
!
http://www.youtube.com/watch?v=sfEbMV295Kk
33
Altri esempi
! 
Google glasses
!
http://www.youtube.com/watch?v=JSnB06um5r4
34
Che cos’è l’Informatica?
! 
E’ una scienza, ovvero una conoscenza
sistematica di tecniche/metodi per:
!
!
!
Rappresentare dell’informazione
Elaborare l’informazione
L’informazione è costituita da una
collezione di dati (osservazioni, fatti,
entità fisiche o concettuali) strutturata ed
elaborata automaticamente
35
Che cos’è un calcolatore?
•
Nell’epoca moderna, è uno strumento elettronico che
elabora informazione.
Informazione
in ingresso
Informazione
in uscita
Calcolatore
Il calcolatore esegue un algoritmo
ed utilizza elementi di memoria per elaborare
l’informazione
36
Che cos’è un calcolatore?
Uscita informazione
Calcolatore
Ingresso informazione
37
Che cos’è un algoritmo?
•
Es. IKEA
Una sequenza finita di
operazioni elementari tali
che:
•
•
•
siano comprensibili ad
uno specifico esecutore
possano essere eseguite
senza ambiguità
permettano di risolvere
uno specifico problema
38
Un esempio di algoritmo
Ricetta di cucina: cuocere un uovo in padella
!   Metti un cucchiaio colmo d’olio in una padella
!   Metti la padella sul fuoco
!   Aspetta un minuto
!   Rompi un uovo
!   Versa il tuorlo e l’albume nella padella
!   Aggiungi un pizzico di sale
!   Togli dal fuoco quando l’albume si è rappreso
39
Esempio: il prodotto di due interi
positivi
! 
! 
! 
! 
Leggi W
Leggi Y
Somma W a se stesso Y volte
Scrivi risultato
40
Prodotto di due interi positivi
1
2
3
4
5
6
7
8
9
Leggi W
3
2
Leggi Y
SP = 0
0
2
NS = Y
SP = SP + W 3 6
NS = NS - 1 1 0
NS = 0?
Se NO: torna a 5
6
Z=SP
Scrivi Z
! 
! 
! 
! 
Procedimento
sequenziale
Non ambiguo
Formulazione generale
Prevede tutti i casi
(che succede se Y < 0?)
6
41
Proprietà degli Algoritmi
! 
! 
Procedimenti sequenziali: un passo dopo l’altro
secondo un ordine specificato (flusso di
esecuzione)
I passi elementari devono essere eseguiti in modo
univoco dall’esecutore
! 
devono essere descritti in una forma eseguibile e
comprensibile dall’esecutore
42
Proprietà degli Algoritmi
! 
La descrizione di un algoritmo per un esecutore
deve avere una formulazione generale
! 
! 
! 
! 
la soluzione individuata non deve dipendere solo da valori
predefiniti dei dati, così che l’algoritmo sia utilizzabile nel
maggior numero possibile di casi
gli algoritmi prevedono particolari passi destinati ad
acquisire i valori dei dati da utilizzare ed elaborare in ogni
particolare esecuzione
L’esecutore deve terminare in tempo finito per ogni
insieme di valori in ingresso
L’esecutore deve essere in grado di eseguire
l’algoritmo con le risorse a sua disposizione
(informazioni + tecnologia)
43
Proprietà degli Algoritmi
Ogni operazione o direttiva deve:
!   terminare entro un intervallo finito di tempo
! 
! 
! 
Es.: calcolare le cifre decimale di π, NO!
produrre un effetto osservabile (stato prima
dell’esecuzione, stato dopo l’esecuzione)
produrre lo stesso effetto ogni volta che
viene eseguita a partire dalle stesse
condizioni iniziali
! 
Es. x=5, y=10 à x+y=15
44
Proprietà degli Algoritmi
! 
Correttezza
! 
! 
L’algoritmo ottiene la soluzione del compito
cui è preposto
Efficienza
! 
L’algoritmo perviene alla soluzione del
problema nel modo più veloce possibile e/o
usando la minima quantità di risorse fisiche
45
Elementi degli Algoritmi
! 
Oggetti: le entità su cui opera l’algoritmo
! 
! 
! 
Operazioni: Interventi da effettuare sui dati
! 
! 
Dati iniziali del problema, informazioni ausiliarie, risultati
parziali e finali
Le informazioni sono dette anche dati (anche i risultati
parziali e finali) e possono essere variabili o costanti
Calcoli, confronti, ricopiature, acquisizioni, emissioni, ecc.
Flusso di controllo: l’indicazione delle possibili
successioni dei passi dell’algoritmo
! 
La correttezza dei risultati dipende non solo dalla corretta
esecuzione delle singole operazioni, ma anche dalla corretta
sequenza con cui sono eseguite
46
Elementi degli Algoritmi
! 
! 
Flusso di controllo: la descrizione a priori di tutte le
possibili sequenze nell’esecuzione dei passi dell’algoritmo,
in particolare di operazioni in alternativa e di operazioni da
ripetere più volte ciclicamente
Flusso di esecuzione: la sequenza di operazioni
effettivamente seguita durante una particolare esecuzione
dell’algoritmo e che dipende dai particolari valori che i dati
assumono in quell’esecuzione
47
Rappresentazione di un algoritmo
destinato all’esecuzione automatica
! 
Rappresentazione di un algoritmo
! 
! 
Descrizione, univoca per l’esecutore, di tutte le possibili
sequenze di operazioni da eseguire per risolvere il
problema dato
Descrizione del flusso di controllo, delle operazioni
eseguibili, e degli oggetti su cui agiscono le singole
operazioni
48
Rappresentazione di un algoritmo
destinato all’esecuzione automatica
! 
E’ necessario un formalismo di
rappresentazione, cioè un linguaggio costituito
da:
! 
! 
! 
Vocabolario: insieme di elementi per la descrizione di
oggetti, operazioni e flusso di controllo
Sintassi: insieme di regole di composizione degli elementi
in frasi eseguibili e costrutti di controllo (istruzioni)
Semantica: insieme di regole per l’interpretazione degli
elementi e delle istruzioni sintatticamente corrette
49
Linguaggi di descrizione
! 
! 
I linguaggi per descrivere gli algoritmi devono essere
noti all’uomo che progetta gli algoritmi e al
calcolatore che deve eseguirli
Fasi iniziali di progetto: struttura generale
dell’algoritmo
! 
! 
descrizione rigorosa del flusso di controllo
descrizione semplificata delle direttive, per es.
mediante l’uso di linguaggio naturale
50
Linguaggi semi-formali
! 
Schemi a blocchi (o diagrammi di flusso)
! 
! 
! 
elementi grafici per indicare il flusso di controllo e i tipi di
operazioni
elementi testuali per descrivere le operazioni e gli oggetti
Linguaggio naturale/pseudo-codice
! 
! 
! 
completamente testuale
costrutti di controllo descritti con la forma e le parole
chiave dei linguaggi di programmazione
le operazioni possono essere descritte in modo informale
IF A>0 THEN A=A+1 ELSE A=0
51
Schemi a Blocchi
! 
Blocco esecutivo
! 
Blocco di inizio
! 
Blocco di terminazione
! 
Flusso di controllo delle operazioni
! 
Blocco condizionale
! 
Blocco di ingresso dati
Operazione di ingresso
! 
Blocco di uscita dati
Operazione di uscita
operazione
Inizio
Fine
vera
Condizione
falsa
52
Schemi a blocchi - Variabili
! 
Rappresentata tramite nomi simbolici
! 
! 
Contenitore di valori
! 
! 
! 
Le operazioni descritte possono essere eseguite di volta in volta sui
diversi valori assegnabili alle variabili (formulazione generale)
Proprietà: una variabile non può essere vuota, cioè ad una variabile è
sempre associato un valore
Il nome della variabile rappresenta una scatola
Il valore della variabile il suo contenuto
5
x
Valore della variabile
x=5
Nome della variabile
53
Schemi a blocchi
! 
Negli schemi a blocchi operazioni e
condizioni sono rappresentate in modo
testuale e tramite simboli che rappresentano
gli operatori aritmetici, di confronto, ecc.
54
Regole di composizione ed
interpretazione degli elementi
Composizione degli elementi
flusso di controllo dell’algoritmo, cioè tutte le possibili
sequenze di blocchi da eseguire
Un solo blocco di inizio
!   Almeno un blocco di terminazione
! 
55
Regole di composizione ed
interpretazione degli elementi
! 
Dal blocco di inizio e da ogni blocco esecutivo
deve uscire una sola freccia
! 
Se per ogni blocco c’e’ un solo blocco successivo:
flusso di controllo sequenziale (sequenza)
Inizio
operazione
56
Regole di composizione ed
interpretazione degli elementi
! 
! 
Il flusso di controllo non è più sequenziale se dopo un blocco si
possono presentare diverse alternative. In questo caso si usa
un blocco di selezione
Dal blocco di selezione escono due frecce che devono essere
contrassegnate dal valore vero o falso.Il successivo blocco da
eseguire dipende dal valore della condizione
Condizione
vera
operazione1
falsa
operazione2
57
Regole di composizione ed
interpretazione degli elementi
! 
In tutti i casi -in esecuzione- è unica la
scelta del blocco successivo da eseguire
Condizione
vera
operazione1
falsa
operazione2
58
Esempio: Prodotto di due numeri interi positivi
Diagramma di flusso con direttive in italiano
Inizio
Leggi(W)
Leggi(Y)
Acquisizione dall’utente dei particolari valori da
considerare per i due fattori del prodotto e da
assegnare alle variabili W e Y
Moltiplica intero W per intero
Y e denota il risultato con Z
Operazioni di elaborazione, valide per qualsiasi
valore dei dati
Scrivi (Z)
Fine
Emissione all’utente del risultato dell’elaborazione
Variabili W, Y, Z intere
W, Y, fattori di ingresso, Z risultato in uscita
59
Operatori ed espressioni
! 
Operatori aritmetici: +, -, , /, ...
! 
! 
! 
Operatori di confronto: >, <,==,>=, …
! 
! 
! 
agiscono sugli operandi (variabili o costanti)
producono un valore numerico
agiscono sugli operandi (variabili o costanti)
producono un valore logico (vero o falso)
Funzioni: cos(x), log(x), …
! 
! 
agiscono su valori detti parametri (variabili oppure costanti)
producono un valore
60
Operatori ed espressioni
! 
Procedure: Leggi(X), Scrivi(N), …
! 
! 
! 
agiscono su valori detti parametri
effettuano operazioni
Espressione: 5+cos(Y), ...
composizione di operatori, funzioni, variabili e costanti
!   ad essa è associato un valore
Assegnamento: X = 6, Y = X, Z = X+6, ...
!   Il valore dell’espressione a destra dell’operatore di
assegnamento è assegnato alla variabile a sinistra
! 
! 
61
Esempio 2: Prodotto di due interi
tramite somme ripetute
! 
! 
Algoritmo: somma W a se stesso tante volte
quanto vale Y
Variabili:
! 
! 
! 
W,Y intere (valori in ingresso)
Z intera (valore in uscita)
Variabili ausiliari:
! 
! 
NS intera (contatore del numero di somme ancora da
eseguire)
SP intera (valore della somma parziale)
62
Schema a Blocchi con ciclo a condizione finale
(l’algoritmo è corretto se Y>0)
Inizio
Leggi(W)
Acquisizione dei dati in ingresso e attribuzione dei
loro valori a W e Y
Leggi(Y)
SP=0
Inizializzazione delle variabili ausiliarie
NS=Y
SP=SP+W
Corpo del ciclo
NS=NS-1
NS>0
no
si
Valutazione della condizione di uscita dal ciclo
Z=SP
Scrivi (Z)
Fine
Emissione del risultato
63
Flusso di controllo ciclico
! 
! 
! 
Permette di esprimere l’iterazione di un
insieme di istruzioni (corpo del ciclo)
Il corpo del ciclo è ripetuto un numero finito
di volte
La ripetizione è controllata dalla valutazione
della condizione di permanenza del ciclo
64
Flusso di controllo ciclico
! 
variabile di controllo del ciclo
! 
! 
condizione di permanenza
! 
! 
funzione della variabile di controllo
corpo del ciclo
! 
! 
inizializzata prima di entrare nel ciclo
contiene la modifica della variabile di controllo
Cicli:
! 
! 
a condizione finale
a condizione iniziale
65
Schema a blocchi con ciclo a condizione
iniziale (l’algoritmo è corretto per Y>=0)
Inizio
Leggi(W)
Leggi(Y)
SP=0
NS=Y
no
SP=SP+W
NS=NS-1
NS>0
si
NS>0
si
SP=SP+W
NS=NS-1
no
Z=SP
Scrivi (Z)
Fine
66
Pre- e post-condizioni nei cicli
! 
! 
Nell’esempio la verifica della condizione è stata
spostata dalla fine all’inizio del ciclo
Nell’esempio abbiamo migliorato l’algoritmo ma in
realtà i due algoritmi NON sono funzionalmente
equivalenti:
! 
! 
! 
Il primo è corretto per y > 0
Il secondo è corretto per y >= 0
Se vogliamo due algoritmi equivalenti non basta
quindi semplicemente spostare la condizione ma
vanno verificati i casi limite
67
Algoritmo in linguaggio naturale
per calcolare il prodotto di due numeri con somme ripetute
(ciclo a condizione iniziale)
! 
! 
! 
! 
! 
! 
Leggi W
Leggi Y
Azzera il prodotto
Le somme da fare = Y
Ripeti se hai ancora somme da fare
{
somma W al prodotto
sottrai 1 ai cicli ancora da fare
}
Scrivi il prodotto
68
Algoritmo in linguaggio naturale
per calcolare il prodotto di due numeri con somme ripetute
(ciclo a condizione finale)
! 
! 
! 
! 
! 
! 
Leggi W
Leggi Y
Azzera il prodotto
Le somme da fare = Y
Ripeti
{
somma W al prodotto
sottrai 1 ai cicli ancora da fare
}
fintantoche’ hai ancora somme da fare
Scrivi il prodotto
69
Algoritmo con esecutore calcolatore per l’esempio
precedente (ciclo a condizione finale)
main ()
{
int w,y,z,sp,ns;
/*dichiarazione delle variabili */
leggi(w);
leggi(y);
sp=0;
ns=y;
/*inizializzazione*/
/*inizializzazione*/
70
Algoritmo con esecutore calcolatore per l’esempio
precedente (ciclo a condizione finale)
/*ciclo a condizione finale: l’algoritmo e’
corretto solo nell’ipotesi y>0 */
do
{
sp=sp+w;
ns=ns-1;
}while (ns>0);
z=sp;
scrivi (z);
}
71
Algoritmo con esecutore calcolatore per l’esempio
precedente (ciclo a condizione iniziale)
main ()
{
int w,y,z,sp,ns;
/*dichiarazione delle variabili */
leggi(w);
leggi(y);
sp=0;
ns=y;
/*inizializzazione*/
/*inizializzazione*/
72
Algoritmo con esecutore calcolatore per l’esempio
precedente (ciclo a condizione iniziale)
/*ciclo a condizione iniziale: l’algoritmo e’
corretto solo nell’ipotesi y>=0 */
while (ns>0)
{
sp=sp+w;
ns=ns-1;
}
z=sp;
scrivi (z);
}
73
Raffinamenti Successivi
! 
! 
! 
Nelle prime fasi di progetto si trascurano i
dettagli
Man mano che il progetto evolve si conosce
meglio il problema
Uno dei raffinamenti tipici:
VERIFICA DEI DATI IN INGRESSO
! 
! 
! 
L’utente può commettere errori nell’immissione dei dati
Si verifica che i dati immessi siano accettabili rispetto
alle ipotesi di correttezza dell’algoritmo
Esempio precedente: l’algoritmo non fornisce valori
corretti per valori negativi di Y (Y >= 0 ?)
74
ESEMPIO: verifica dei dati in ingresso
Ipotesi: l’algoritmo non
calcola il prodotto nei casi in
cui Y è < 0
Inizio
Leggi(W)
Leggi(Y)
si
Y>=0
SP=0
Scrivi: “Secondo fattore
Negativo”
NS=Y
no
no
NS>0
si
SP=SP+W
NS=NS-1
Z=SP
Scrivi (Z)
Fine
75
Ipotesi: i due fattori possono essere positivi, nulli o negativi
Inizio
Leggi(W)
Leggi(Y)
si
Y>=0 ?
no
NS=Y
NS=-Y
CS=1
CS=-1
SP=0
no
NS> 0?
si
SP=SP+W
NS=NS-1
si
CS=1?
Z=SP
no
Z=-SP
Scrivi (Z)
76
Fine
In linguaggio naturale
Leggi w e y
Controlla e ricorda se y<0
Inizializza la somma
Ripeti y volte
sp=sp+w
se y era <0
cambia segno a sp
Scrivi sp
scrivi(z);
77
Raffiniamo
Leggi w
Leggi y
se y>=0
ns=y
cs=1
altrimenti (è negativo)
ns=-y
cs=-1
sp=0
(inizializzazione somma)
Ripeti mentre ns>0
{
sp=sp+w
ns=ns-1
}
se cs==1
z=sp
altrimenti
z=-sp
scrivi(z);
78
Codifica in C
main ()
{int w,y,z,sp,ns,cs;/*dichiarazione variabili*/
leggi(w);
leggi(y);
if (y>=0)
{ ns=y;
cs=1;
}
else /*y è negativo*/
{ ns=-y;
cs=-1;
}
sp=0; /*inizializzazione*/
79
Codifica in C
while (ns>0)
{ sp=sp+w;
ns=ns-1;
}
if (cs==1)
{z=sp;}
else
{z=-sp;}
scrivi(z);
}
80
E ora che abbiamo il codice?
! 
! 
! 
Dobbiamo trovare un elaboratore in grado di
eseguirlo
Problema! L’elaboratore ragiona in modo
differente: linguaggio macchina
Dobbiamo quindi trovare anche un modo per
trasformare il C (alto livello) in linguaggio
macchina (basso livello)
81
Perché linguaggio macchina?
! 
! 
! 
Un elaboratore è un insieme di circuiti
Si basa su logica binaria
Il linguaggio C è vicino al modo di pensare
umano
! 
! 
È infatti un linguaggio ad alto livello
Il linguaggio macchina è vicino al modo di
lavorare di un elaboratore
! 
È infatti un linguaggio di basso livello
82
Il processo
analisi
algoritmo
Compilazione
(linguaggio macchina)
Codifica
(linguaggio C)
esecuzione
83
Flusso di esecuzione
! 
Il flusso di controllo:
! 
! 
! 
Il flusso di esecuzione:
! 
! 
! 
definisce tutti i cammini possibili di esecuzione
si basa su ipotesi relative ai valori assumibili dalle
variabili
definisce un particolare cammino di esecuzione
si basa su valori precisi date alle variabili ottenute
anche dai dati in ingresso dall’utente
Il tracing è il meccanismo che permette di
controllare il funzionamento di un algoritmo
analizzando il valore delle variabili durante
l’esecuzione
84
Tracing
! 
! 
In una griglia vanno messe tutte le variabili definite nell’algoritmo
In ogni riga va indicato il valore della variabile per ogni operazione eseguita
Contenuto della
variabile
non definito
Ipotesi di valore
inserito
dall’utente
leggi (x);
leggi (y);
sp=0;
while (y>0){
sp=sp+x;
y=y-1;
}
w=sp;
scrivi(w);
X
Y
SP
W
5
#
#
#
5
2
#
#
5
2
0
#
5
2
5
#
5
1
5
#
5
1
10
#
5
0
10
#
5
0
10
10
85