Schemi per diapo Sistemi in tempo reale

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