Schemi per diapo Sistemi in tempo reale

Codifica degli algoritmi
Università degli studi di Parma
Dipartimento di Ingegneria dell’Informazione
Informatica – a.a. 2012/13

Algoritmo formulato per essere comunicato tra esseri
umani
– chiaro, sintetico e intuitivo
– codificato in linguaggi informali o semi-formali (linguaggio
naturale, diagrammi di flusso, …)
Informatica
Facoltà di Medicina Veterinaria
a.a. 2012/13
prof. Stefano Cagnoni

Algoritmo formulato per essere eseguito
automaticamente
– preciso ed eseguibile
– codificato in linguaggi formali comprensibili dagli esecutori
automatici (linguaggio macchina o linguaggio di
programmazione di alto livello)
La formalizzazione dell’informazione:
Dati e Diagrammi di Flusso
Informatica 2012/2013
Algoritmo = dati + istruzioni

Dati e istruzioni
Composto da

Algoritmo
Dati
Iniziali
Informatica 2012/2013
Tipi di dati
–
–
–
–
–
Dati
Finali
(soluzione)

Dati
-2-
Numeri naturali, interi, reali
Caratteri alfanumerici
Dati logici o booleani
Array o vettori di n elementi
Matrici di mxn elementi
Informatica 2012/2013
-3-
)
Istruzioni
– Operazioni di Input/Output
– Operazioni Aritmetico-logiche
– Strutture di controllo
Istruzioni che
operano sui dati
(1, -2, 0.34)
(A, B, -,^,3)
(Vero, Falso)
({1,2,3})
(
123
456
(es. leggi, scrivi)
(es. max = A + B)
(es. SE, RIPETI )
-4-
Pag. 1
1
Criteri di classificazione dei dati

Operazioni elementari
Visibilità da parte dell’utente

– visibile (di ingresso o uscita)
– trasparente (dati temporanei di supporto)

– Es. C  (A + B)
Variabilità nel tempo

– costanti
– variabili (acquisizione dall’esterno o assegnazione)



2. Diagramma di flusso

“Stampa B”
-6-
Rappresentare gli algoritmi
Linguaggio naturale
- Sollevare il ricevitore
- Attendere il segnale di linea libera
- Comporre il numero
-…
DF
Inizio
Lettura
aeb
Pseudo codice
Input A,B
3. Pseudo-codice
Tot  0
4. Linguaggio di programmazione
Tot  Tot + B
Passo P0
Passo P1
ca– b
Sì
While A!=0 Do

oppure
Informatica 2012/2013
-5-
Rappresentazione degli Algoritmi
1. Linguaggio naturale
Lettura e scrittura di variabili
– “Leggi A”
– elementari o scalari (interi, alfanumerici, booleani, …)
– strutturati (array, matrici, …)

Condizioni sul valore di singole variabili
– se (A > B) allora … altrimenti …
Struttura
Informatica 2012/2013
Operazioni aritmetiche e assegnamenti di valori a singole
variabili
c> 0?
Scrittura
“max è a”
Ling. programmazione
#include <stdio.h>
No
Passo P2
Scrittura
“max è b”
Fine
Int main (void){
puts(“ciao mondo!”);
AA–1
return Exit_success;
Output Tot
}
Informatica 2012/2013
Informatica 2012/2013
-7-
-8-
Pag. 2
2
Diagrammi di flusso
Diagrammi di flusso

I blocchi sono collegati fra loro da archi orientati:
– L’arco identifica la sequenza delle operazioni
Inizio
Fine
Operazioni
di ingresso/uscita
– La freccia identifica il flusso della esecuzione

Sì
predicato
No
I circoletti indicano la ricongiunzione di
diversi ‘percorsi’, MAI una biforcazione (lo fa la
selezione a due vie)
NO
SI’
Elaborazione
Selezione a due vie
Informatica 2012/2013
Sottoprogramma
Informatica 2012/2013
-9-
Il maggiore fra 2 numeri interi x, y

- 10 -
Diagramma di Flusso di max
Inizio
Algoritmo max
1. Leggi i valori di x e y dall’esterno
Leggi x e y
2. Calcola la differenza d fra x e y (d=x-y)
d=x-y
3. Se d è maggiore di 0 vai al passo 5 altrimenti prosegui in
sequenza
Si
4. Stampa ‘il massimo è …’ seguito dal valore di y e vai a 6
Scrivi ‘max è x’
5. Stampa ‘il massimo è …’ seguito dal valore di x
6. Termina l’esecuzione
Informatica 2012/2013
d>0?
No
Scrivi ‘max è y’
Fine
Informatica 2012/2013
- 11 -
- 12 -
Pag. 3
3
Diagramma di Flusso di max
Determinare il massimo fra N numeri interi
Inizio

Algoritmo max_N
1. Leggi il valore di N dall’esterno
Leggi x e y
Passo 1
d=x-y
Passo 2
3. Trova il maggiore m fra i primi due numeri (con max)
Passo 3
4. Finchè (hai esaminato meno di N numeri)
2. Leggi i primi due numeri
Si
Passo 5
No
d>0?
Scrivi ‘max è x’
a.
Scrivi ‘max è y’
b.
Passo 4
c.
5. Stampa ‘il massimo è…’ ed il valore di m e termina
Passo 6
Fine
Informatica 2012/2013
Informatica 2012/2013
- 13 -
DF per il massimo di N numeri (versione 1)
Supponiamo N fissato
Inizio


m = max(a,b)
Si
Ancora numeri
da esaminare ?
Leggi il nuovo
numero in a
Informatica 2012/2013
I DF sono un primo passo verso la formalizzazione di un
algoritmo in modo non ambiguo
Per ottenere una codifica interpretabile direttamente
dalla macchina dobbiamo però specificare molti più
dettagli:
– trasformare tutte le ‘frasi’ in variabili e modifiche su di
esse:
No
•
Scrivi ‘max è m’
m = max(a,m)
- 15 -
DF e programmi (1)
Leggi i primi due numeri x1 e x2
e memorizzali nelle variabili a e b
sottoprogramma
Leggi un nuovo numero x
Trova il maggiore fra m e x con l’algoritmo max
Assegna il valore del maggiore a m
Fine
es : ‘ancora numeri da esaminare’ deve essere
tradotto in qualcosa di calcolabile dalla macchina
usando solo le operazioni elementari
Informatica 2012/2013
- 16 -
- 17 -
Pag. 4
4
DF per il massimo di N numeri (versione 2)
Supponiamo N >= 2
DF e programmi (2)
Inizio

Leggi N e i primi due numeri a e b
I=2
– decidere come codificare l’informazione
m = max(a,b)
Si
I=I+1
I<N
Leggi il nuovo
numero in a
Per ottenere una codifica interpretabile direttamente
dalla macchina dobbiamo anche :
•
No
– scrivere il tutto con una codifica ‘leggibile’ dalla macchina
Scrivi ‘max è m’
•
m = max(a,m)
Informatica 2012/2013
Fine
- 19 -
Diagrammi di flusso e programmi: max in C
main() /* calcola max */
{
int x, y, d;
… soluzione….
– usare linguaggi di ‘livello’ più alto (linguaggi di
programmazione ad alto livello)
– usare dei programmi appositi per far tradurre i nostri
programmi in linguaggio macchina (i compilatori)

… ma la macchina lavora molto a basso livello
(linguaggio macchina, codificato mediante bit) !!!!
Informatica 2012/2013
- 18 -
DF e programmi (3)

non banale in esempi più complessi del nostro, ad
esempio se voglio codificare un’immagine o un
video
Inizio
Leggi x e y
d=x-y
scanf ("%d %d”, &x, &y) ;
d=x-y;
if (d > 0)
printf (”il max è %d”, x) ;
else
printf (”il max è %d”, y) ;
return ;
Importante:
– I tipici linguaggi (C, Java, Fortran, Basic…) permettono di
definire sequenze di operazioni e strutture di controllo del
tutto analoghe a quelle contenute nei diagrammi di flusso
che abbiamo visto finora
Si
d>0?
Scrivi ‘max è x’
No
Scrivi ‘max è y’
Fine
}
Informatica 2012/2013
Informatica 2012/2013
- 20 -
- 21 -
Pag. 5
5
DF e programmi : max_N in C (1)
DF e programmi : max_N in C (2)
main() /* calcola max_N */
{
unsigned int m, i, a, b;
i=2;
scanf ("%d %d”, &a, &b);
m = max(a,b);
while (i < N) {
scanf ("%d ”, &a) ;
m = max(a,m);
i=i+1; }
printf (”il max è %d”, m) ;
return ;
}
int max(int x, int y)
/* sottoprogramma che calcola max */
{
int d;
d=x-y;
if (d > 0)
return x;
else
return y;
}
Informatica 2012/2013
Informatica 2012/2013
- 22 -
- 23 -
….

Fine per oggi…
Informatica 2012/2013
Pag. 6
6