Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per...

39
Algoritmi e diagrammi di flusso Corso di Informatica di Base A.A. 2011/2012 Luca Tornatore

Transcript of Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per...

Page 1: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Algoritmi e diagrammi di flusso

Corso di Informatica di BaseA.A. 2011/2012

Luca Tornatore

Page 2: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Cos’è l’informatica? Calcolatore: esecutore di ordini o automa Programma: insieme di istruzioni che possono essere

eseguite da un elaboratore elettronico Programmatore: colui che individua la sequenza di

ordini per risolvere un problema (c’è differenza tra programmatore e Informatico?!?)

Informatica: Informazione + AutomazioneSi riferisce ai processi e alle tecnologie che rendono

possibile l’immagazzinamento e l’elaborazione dell’informazione mediante macchine

Page 3: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Modello Semplificato(grezzo)

Dati in Ingresso Dati in Uscita

Operazioni sui dati

Page 4: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Abbiamo detto che… L’Informatica è la Scienza della

Rappresentazione e dell’Elaborazione dell’Informazione

Secondo la ACM (Association for Computing Machinery)…

L’Informatica è lo Studio sistematico degli algoritmi che descrivono e trasformano l’Informazione: la loro teoria, analisi, progetto, efficienza, realizzazione e applicazione.

Page 5: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Risoluzione di un problema: Esecuzione Automatica

L’uomo descrive l’algoritmo che la macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso)

Algoritmo

Programma

Linguaggio Macchina

La descrizione viene tradotta in Linguaggio di alto livello (ad esempio il linguaggio C)

Il programma di alto livello viene tradotto in linguaggio Macchina, ovvero codice binario (ad esempio dalcompilatore)

MacchinaInput

Output

Problema

Page 6: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Cosa è un algoritmo? Dato un problema, un algoritmo è una procedura,

cioè una sequenza di passi, che può essere eseguita automaticamente da una macchina in modo da risolvere il problema dato. Non tutti i problemi sono risolvibili. Un problema

risolvibile con un algoritmo si dice computabile

Page 7: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Esempio di Algoritmo

La torta al cioccolato

1. Abbiamo gli ingredienti (uova, farina, latte, ecc..) con le giuste quantità

2. Seguiamo la ricetta

3. Serviamo la torta

Page 8: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

L’Algoritmo della Somma

1. Sposta una pallina da sinistra a destra della prima riga e una da destra a sinistra nella terza riga

3. Sposta una pallina da sinistra a destra della seconda riga e una da destra a sinistra nella terza riga

2. Ripeti 1. fino ad esaurire la prima riga

4. Ripeti 3. fino ad esaurire la seconda riga. Il risultato è

il numero di palline a sinistra sulla terza riga

Esempio

Page 9: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Risoluzione di un problema

Generalmente la risoluzione di un problema consiste nel prendere alcuni dati iniziali (input) relativi al problema e nel fornire un risultato (output) che risolve quest’ultimo

EsecutoreInput Output

Algoritmo

Page 10: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Infatti…Problema Risolutore Algoritmo

Esecut ore

Processo di Esecuzione

… la risoluzione automatica prevedeuna notevole componente umana!!!

Page 11: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Definizione di algoritmo (Formale) Un algoritmo è una sequenza ordinata e finita di passi

(azioni o istruzioni) che producono un ben determinato risultato in un tempo finito

Page 12: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Caratteristiche di un algoritmo1. Azioni eseguibili e non ambigue

1. Non sono ammessi “un pò” e “a piacere”, che non sono termini adatti ad una macchina

2. Deterministico1. Fatto un passo, il successivo è uno ed uno solo, ben

determinato. Alternative sono possibili, ma la scelta deve essere unica

3. Numero finito di passi4. Terminazione

1. L’esecuzione prima o poi deve finire e produrre un risultato in tempo finito

2. Osservazione: la 3 non implica la 4

Page 13: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Esempio di non terminazione Stampare tutti i numeri successivi ad N

1. Si consideri il numero N2. Scrivere il numero successivo ad N3. Ripetere il passo precedente

Trova il più grande numero primo Non esiste un programma che riesce a dare una risposta

in tempo finito (Numero finito di passi)

Page 14: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Codifica dell’Algoritmo Affinchè una macchina riesca a comprendere ed

eseguire i passi specificati da un algoritmo, quest’ultimo deve essere prima codificato in un opportuno programma scritto in un linguaggio ad alto livello (che verrà successivamente compilato/interpretato)

Algoritmo Traduzione Programma

Page 15: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Descrizione di un algoritmo

Si descrive un algoritmo cercando di sintetizzare il più possibile la sua sequenza di passi.

La descrizione avviene mediante: Pseudo-Codice, oppure Diagramma di flusso

Page 16: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Diagramma di Flusso I diagrammi di flusso permettono di descrivere in

modo grafico le azioni che costituiscono un algoritmo e il loro flusso di esecuzione.

Ogni azione elementare è rappresentata da un blocco. Esistono diversi tipi di blocchi Prenderemo in esame solo 4 tipi di blocchi

Page 17: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Istruzioni di inizio e fine

Inizio

Fine

In degree: 0Out degree: 1

In degree: 1Out degree: 0

Page 18: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Operazioni di input e output

Leggi Dato Scrivi Dato

In degree: 1Out degree: 1

In degree: 1Out degree: 1

Page 19: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Istruzioni imperative Azioni oppure operazioni

Calcola: 10+2

In degree: arbitrarioOut degree: 1

Page 20: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Connettori I singoli diagrammi devono essere uniti tramite i

connettori. L’esecuzione delle istruzioni deve essere fatta

sequenzialmente, ovvero seguendo i connettori. Quando si scrive l’algoritmo bisogna fare molta

attenzione alla direzione del flusso di esecuzione.

Page 21: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Istruzione di Assegnamento Una variabile numerica è una entità caratterizzata da

Un nome, e Un valore (contenuto)

Può cambiare nel tempo

Una costante numerica è una entità caratterizzata da Un nome, e Un valore (contenuto)

Non può cambiare nel tempo

Page 22: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Istruzione di Assegnamento Un’espressione è una combinazione di operatori

aritmetici, costanti e variabili che può essere calcolata generando un singolo valore numerico ES: X, X+1 X+(Y*3)

Istruzione di assegnamento: “” VariabileEspressione ES: Z3 ZX+3

Page 23: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Somma di due numeri Leggo il valore di x e y Calcolo la somma e la

pongo in Z Stampo il valore

contenuto in z

Inizio

Leggi X

Leggi Y

ZX+Y

Scrivi Z

Fine

Page 24: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Scambio di 2 variabili Leggo il valore di x e y Copio il valore di y i una

variabile d’apoggio Copio x in y (sovrascrivo

y) Copio aux in x Stampo il valore di x e y

Inizio

Leggi X

Leggi Y

AuxY

YX

XAux

Scrivi Y

Scrivi X

Fine

Page 25: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Flusso di esecuzione Si possono avere casi in cui nel flusso di esecuzione si

deve scegliere tra diverse direzioni La direzione da scegliere è subordinata al verificarsi

di una condizione La condizione può assumere due stati: Vero, Falso In questi casi si parla di istruzione condizionale

Page 26: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Istruzioni condizionali

Condizione

Vero

Falso

In degree: arbitrarioOut degree: 2

I connettori OutSono etichettati

Page 27: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Massimo tra 2 numeriInizio

Leggi X

Leggi Y

X>Y

Scrivi YScrivi X

FalsoVero

Fine

Page 28: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Strutture di controlloWhile

Do-WhileIf-then-else

No

Si

Si No

Si No

Page 29: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Somma IterativaInizio

Leggi X

Leggi Y

Z Z+1X X-1

Scrivi Z

FineZ0

X=0

Z Z+1Y Y-1

No No

Si Y=0

Page 30: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Gli Array Gli array o vettori sono una struttura dati Gli elementi di una array sono tutti dello stesso tipo

(es. numeri) La dimensione della struttura è definita a priori A[1..10] indica un array chiamato A composto da 10

elementi. A[1], A[2], …. , A[10].

Page 31: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Gli Array L’elemento generico lo posso indicare con A[i]

con 1 ≤i ≤10 i indica quindi la posizione A[i] il contenuto

A[1] A[i] A[10]

Page 32: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Riempire un Array i=1 indica la posizione di

partenza i ≤10 indica la posizione

finale i++ indica di

incrementare la posizione di una unità

Per 1 ≤ i≤10 leggi A[i]

Start

i=1

Leggi A[i]

i≤10

i++

End Si

No

Page 33: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Stampare un Array i=1 indica la posizione di

partenza i ≤10 indica la posizione

finale i++ indica di

incrementare la posizione di una unità

Per 1 ≤ i≤10 leggi A[i]

Start

i=1

Scrivi A[i]

i≤10

i++

End

Si No

Page 34: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Stampare gli elementi di posto pari i=2 indica la posizione di

partenza (la prima posizione pari)

i ≤10 indica la posizione finale

La posizione dovrà essere incrementata di 2 unità

Per 1 ≤ i≤10 scrivi A[i]

Start

i=2

Scrivi A[i]

i≤10

i=i+2

End

Si

Page 35: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Stampare la 2a metà di un Array i=6 indica la posizione di

partenza i ≤10 indica la posizione

finale i++ indica di

incrementare la posizione di una unità

Per 1 ≤ i≤10 leggi A[i]

Start

i=6

Scrivi A[i]

i≤10

i++

End Si

No

Page 36: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Calcolare la media di un Array i=1 indica la posizione di

partenza S=0 inizializzo la somma i ≤10 indica la posizione

finale i++ indica di incrementare

la posizione di una unità Per ogni ciclo sommo A[i]

alla somma S Terminato il ciclo calcolo e

stampo la media

Start

i=1S=0

S=S+A[i]

i≤10

i++End

M=S/10

Scrivi M

No

Si

Page 37: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Trovare il max di un Array Assumpo che il max è

quello contenuto nella prima posizione

i=2 indica la posizione di partenza

i ≤10 indica la posizione finale

i++ indica di incrementare la posizione di una unità

Per ogni ciclo sommo A[i] Terminato il ciclo calcolo e

stampo la media

Start

Max= A[1]i=2

Max=A[i]

i≤10

i++

End

Scrivi Max

A[i]>Max

Si

Si

No

No

Page 38: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

Array bidimensionale o Matrice Sino ad ora abbiamo trattato array o vettori

monodimensionali Potremmo lavorare con array bidimensionali Dove abbiamo righe e colonne L’elemento generico lo indicheremo con A[i,j]

con 1≤i≤max colonne e con 1≤j≤max righe Gli array bidimensionali vengono anche chiamati

matrici Le immagini sono delle matrici (una per ciascun

piano RGB)

Page 39: Diagrammi di flusso - leoausili.it · Algoritmi e diagrammi di flusso ... macchina deve seguire per risolvere il problema (ad esempio con i Diagrammi di flusso) Algoritmo Programma

A[1,1] A[1,2] A[1,3] A[1,maxC]

A[2,1] A[2,2]

A[i,j]

A[maxR,1] A[maxR, maxC]