INFORMATICA ALGORITMI e DIAGRAMMI DI FLUSSO http slideplayer

  • Slides: 87
Download presentation
INFORMATICA ALGORITMI e DIAGRAMMI DI FLUSSO http: //slideplayer. it/slide/10300860/ http: //www. mat. uniroma 3.

INFORMATICA ALGORITMI e DIAGRAMMI DI FLUSSO http: //slideplayer. it/slide/10300860/ http: //www. mat. uniroma 3. it/users/liverani/IN 1/I N 110_02_algoritmi. pdf

Simboli e loro significato

Simboli e loro significato

Vediamo come procedere per costruire un percorso che ci porta alla soluzione di un

Vediamo come procedere per costruire un percorso che ci porta alla soluzione di un problema Passo 1 -Traduciamo il problema in algoritmo: caratteristiche di un algoritmo Passo 2 - Visualizziamo l’algoritmo in modo grafico: diagrammi di flusso Passo 3 - Traduciamo l’algoritmo in un linguaggio macchina: programma

UN PROBLEMA, IL MASSIMO COMUN DIVISORE e IL MINIMO COMUNE MULTIPLO DI DUE NUMERI

UN PROBLEMA, IL MASSIMO COMUN DIVISORE e IL MINIMO COMUNE MULTIPLO DI DUE NUMERI GLI ALGORITMI

UN PROBLEMA: IL MASSIMO COMUN DIVISORE

UN PROBLEMA: IL MASSIMO COMUN DIVISORE

MCD • Per determinare il MASSIMO COMUN DIVISORE tra due numeri a e b

MCD • Per determinare il MASSIMO COMUN DIVISORE tra due numeri a e b si possono usare vari metodi 1. Si scrivono i divisori dei due numeri e dopo aver determinato i divisori comuni, si determina il più grande tra essi 2. Si scompongono in fattori primi i due numeri e si fa il prodotto dei fattori comuni con il minimo esponente 3. Si può far uso di procedure ideate da Euclide

Procedura di Euclide per il calcolo del MCD • La procedura originale di Euclide,

Procedura di Euclide per il calcolo del MCD • La procedura originale di Euclide, basata su sottrazioni successive • il calcolo del MCD di due interi positivi, nella sua versione più semplice, si basa sulla seguente proprietà:

Procedura di Euclide per il calcolo del MCD • Se due numeri, m, n,

Procedura di Euclide per il calcolo del MCD • Se due numeri, m, n, sono divisibili per un terzo numero, x, allora anche la loro differenza è divisibile per x.

Procedura di Euclide per il calcolo del MCD • Per dimostrarla, si può utilizzare

Procedura di Euclide per il calcolo del MCD • Per dimostrarla, si può utilizzare la proprietà distributiva. Supponiamo m>n. m=kx n=hx m-n=kx-hx=x(k-h) Dunque si può dire che: • MCD(m, n) = MCD((m-n), n)

Procedura di Euclide per il calcolo del MCD • MCD(m, n) = MCD((m-n), n)

Procedura di Euclide per il calcolo del MCD • MCD(m, n) = MCD((m-n), n) • Come si vede, questa regola permette di passare, per mezzo di sottrazioni successive, a MCD di numeri sempre più piccoli, fino ad ottenere: • MCD(a, 0)=a

Una procedura più veloce, basata su divisioni successive • Euclide descrisse questo procedura nel

Una procedura più veloce, basata su divisioni successive • Euclide descrisse questo procedura nel suo libro degli Elementi. Invece di usare i numeri interi, però, utilizzò i segmenti di retta. Perciò il suo procedimento serve anche a determinare il massimo comune divisore di due segmenti.

Una procedura più veloce, basata su divisioni successive • In certi casi il procedimento

Una procedura più veloce, basata su divisioni successive • In certi casi il procedimento può richiedere numerosissimi passaggi, risultando molto lento (provate con MCD (900, 15)). Conviene quindi renderlo più veloce e si può fare ricorrendo ad una serie di divisioni con resto anziché sottrazioni.

Una procedura più veloce, basata su divisioni successive • Il principio su cui ci

Una procedura più veloce, basata su divisioni successive • Il principio su cui ci si basa è il seguente (supponiamo m>n): • MCD(m, n) = MCD(r, n)dove r è il resto della divisione m/n • Come si vede, questa regola permette di passare rapidamente, per mezzo di divisioni con resto successive, a MCD di numeri sempre più piccoli, fino ad ottenere: • MCD(r, 0)=r

MCD: UN ALGORITMO ELEMENTARE • A scuola si impara un procedimento molto semplice per

MCD: UN ALGORITMO ELEMENTARE • A scuola si impara un procedimento molto semplice per calcolare MCD tra due numeri a e b: MCD(a, b): PROBLEMA 1. Scomponi a ed b in fattori primo passo 2. Estrai i fattori comuni secondo passo SOLUZIONE 3. Moltiplica tra di loro DEL PROBLEMA i fattori comuni con minimo esponente, presi una sola volta. N. B. Questo metodo è conveniente usarlo solo per numeri piccoli (la scomposizione in fattori primi e’ molto costosa)

ALGORITMO DEFINIZIONE INFORMALE DI ALGORITMO Una sequenza FINITA di passi DISCRETI e NON AMBIGUI

ALGORITMO DEFINIZIONE INFORMALE DI ALGORITMO Una sequenza FINITA di passi DISCRETI e NON AMBIGUI che porta alla soluzione di un problema è un processo detto ALGORITMO Questa definizione: • si puo’ applicare nella matematica (da cui ha origine) • ma anche nella cucina • è alla base di ciò che è legato all’informatica.

 • E’ importante trasformare ogni questione da risolvere in una successione di passi

• E’ importante trasformare ogni questione da risolvere in una successione di passi elementari, eventualmente reiterati che portano alla soluzione del problema.

UN QUASI-ALGORITMO: LA RICETTA PER LA BAGNA CAUDA 1. Cuocere gli spicchi di aglio,

UN QUASI-ALGORITMO: LA RICETTA PER LA BAGNA CAUDA 1. Cuocere gli spicchi di aglio, coperti con il latte, fino a quando non diventino teneri. 2. Tritare l'aglio 3. Unirlo all'olio, alle acciughe tagliate molto finemente 4. Cuocere a fiamma moderata e mescolare fino a far ridurre il contenuto in un composto omogeneo. 5. Dopo circa venti minuti aggiungere qualche fiocco di burro 6. Servire in tavola con le verdure.

PERCHE’ QUASIALGORITMO? • Numero di passi e’ finito • Ma molti passi sono ambigui:

PERCHE’ QUASIALGORITMO? • Numero di passi e’ finito • Ma molti passi sono ambigui: – ‘teneri’? – ‘fiamma moderata’?

IL TERMINE ALGORITMO • Il nome ALGORITMO deriva dal nome del matematico persiano Muhammad

IL TERMINE ALGORITMO • Il nome ALGORITMO deriva dal nome del matematico persiano Muhammad ibn Mūsa 'l-Khwārizmī che attorno all’ 825 scrisse un trattato chiamato Kitāb al-djabr wa 'lmuqābala (Libro sulla ricomposizione e sulla riduzione) – AL-KHWARIZMI ALGORISMO ALGORITMO – (ALGEBRA deriva da AL-DJABR)

Proprietà fondamentali degli algoritmi Dalla precedente definizione di algoritmo si evincono alcune proprietà necessarie,

Proprietà fondamentali degli algoritmi Dalla precedente definizione di algoritmo si evincono alcune proprietà necessarie, senza le quali un algoritmo non può essere definito tale:

Proprietà fondamentali degli algoritmi • i passi costituenti devono essere "elementari", ovvero non ulteriormente

Proprietà fondamentali degli algoritmi • i passi costituenti devono essere "elementari", ovvero non ulteriormente scomponibili (atomicità); Così, ad esempio, "rompere le uova" può essere considerato legittimamente un passo elementare di un "algoritmo per la cucina" (ricetta),

Proprietà fondamentali degli algoritmi • i passi costituenti devono essere interpretabili in modo diretto

Proprietà fondamentali degli algoritmi • i passi costituenti devono essere interpretabili in modo diretto e univoco dall'esecutore, sia esso umano o artificiale (non ambiguità); "aggiungere sale quanto basta" non è un passo interpretabile in modo univoco dato che l'espressione "quanto basta" è ambigua, e non indica con precisione quali passaggi servano per determinare la quantità necessaria

Proprietà fondamentali degli algoritmi • l'algoritmo deve essere composto da un numero finito di

Proprietà fondamentali degli algoritmi • l'algoritmo deve essere composto da un numero finito di passi e richiedere una quantità finita di dati in ingresso (finitezza) , "continuare a mescolare a fuoco vivo fino a quando il composto non assume colore bruno" è un'istruzione accettabile di tipo iterativo, che comporta un numero finito di operazioni (le rimestate) sebbene tale numero non sia conoscibile a priori, perché dipendente da ciò che è chiamato input (il grado di umidità della farina nel composto, il vigore della fiamma, ecc. ).

Proprietà fondamentali degli algoritmi • l'esecuzione deve avere termine dopo un tempo finito (terminazione);

Proprietà fondamentali degli algoritmi • l'esecuzione deve avere termine dopo un tempo finito (terminazione); • l'esecuzione deve portare a un risultato univoco (effettività).

Proprietà fondamentali degli algoritmi • Un passo come "preparare un pentolino di crema pasticcera"

Proprietà fondamentali degli algoritmi • Un passo come "preparare un pentolino di crema pasticcera" non può considerarsi legittimo perché ulteriormente scomponibile in sotto-operazioni (accendere il fuoco, regolare la fiamma, mettere il pentolino sul fornello, ecc. ) e anche perché contenente ambiguità (non specifica quanto grande deve essere il pentolino, quanto deve essere riempito di crema e così via).

Proprietà fondamentali degli algoritmi • gli algoritmi possano essere modulari All'istruzione non elementare di

Proprietà fondamentali degli algoritmi • gli algoritmi possano essere modulari All'istruzione non elementare di preparazione della crema potrebbe essere associato a un opportuno rimando a un'altra sezione del ricettario, che fornisca un sotto-algoritmo apposito per questa specifica operazione. Questo suggerisce che, per comodità d'implementazione, , ovvero orientati a risolvere specifici sottoproblemi, e gerarchicamente organizzati.

Proprietà fondamentali degli algoritmi • Un algoritmo deve poter essere realizzabile ovvero ci deve

Proprietà fondamentali degli algoritmi • Un algoritmo deve poter essere realizzabile ovvero ci deve essere compatibilità con le risorse materiali e temporali a disposizione una ricetta che preveda la cottura a microonde non può essere preparata da un esecutore sprovvisto dell'apposito elettrodomestico.

Proprietà fondamentali degli algoritmi • possono darsi più algoritmi validi per risolvere uno stesso

Proprietà fondamentali degli algoritmi • possono darsi più algoritmi validi per risolvere uno stesso problema, ma ognuno con un diverso grado di efficienza.

MCD: UN ALGORITMO ELEMENTARE • A scuola si impara un algoritmo molto semplice per

MCD: UN ALGORITMO ELEMENTARE • A scuola si impara un algoritmo molto semplice per calcolare MCD: la SCOMPOSIZIONE IN FATTORI PRIMI – 42 = 2 x 3 x 7 – 56 = 2 x 2 x 7 • Algoritmo MCD(M, N): 1. Scomponi M ed N in fattori primi 2. Estrai i componenti comuni • Questo metodo si’ puo’ solo applicare per numeri piccoli (la scomposizione in fattori primi e’ molto costosa)

MCD: L’ALGORITMO DI EUCLIDE I • MCD(M, N): 1. RIPETI finche’ M N 2.

MCD: L’ALGORITMO DI EUCLIDE I • MCD(M, N): 1. RIPETI finche’ M N 2. SE M > N, M M –N; 3. ALTRIMENTI, N N – M; 4. RITORNA al passo 1; 5. OUTPUT M

ESEMPIO • MCD(42, 56): – M(42) N(56); • N (56) > M (42) •

ESEMPIO • MCD(42, 56): – M(42) N(56); • N (56) > M (42) • N 14 – M(42) N(14); • M (42) > N (14); • M 28 – M(28) N(14) • M(28) > N (14); • M 14 – OUTPUT: 14 MCD(M, N): l 1. 2. 3. 4. 5. RIPETI finche’ M N SE M > N, M M –N; ALTRIMENTI, N N – M; RITORNA al passo 1; OUTPUT M

ALCUNE CONSIDERAZIONI: PROBLEMI ED ALGORITMI • Ci sono sempre molti algoritmi per risolvere un

ALCUNE CONSIDERAZIONI: PROBLEMI ED ALGORITMI • Ci sono sempre molti algoritmi per risolvere un problema • Parte dell’arte della programmazione e’ trovare gli algoritmi piu’ efficienti

ALGORITMI E FUNZIONI • In termini matematici, un algoritmo puo’ essere visto come una

ALGORITMI E FUNZIONI • In termini matematici, un algoritmo puo’ essere visto come una FUNZIONE che produce un certo OUTPUT dato un certo INPUT – Per esempio, MCD(42, 56) = 14 • Due algoritmi si dicono EQUIVALENTI se producono lo stesso output dato lo stesso input. – Fattori primi e Euclide sono EQUIVALENTI (ma non egualmente efficienti!!)

Lo studio sistematico dei processi algoritmici che descrivono e trasformano l'informazione sono alla base

Lo studio sistematico dei processi algoritmici che descrivono e trasformano l'informazione sono alla base di una scienza chiamata INFORMATICA

INFORMATICA • L'informatica è la scienza che si occupa del trattamento dell'informazione mediante procedure

INFORMATICA • L'informatica è la scienza che si occupa del trattamento dell'informazione mediante procedure automatizzabili. • Il trattamento automatico dell'informazione avviene mediante calcolatore (naturale o artificiale) • L'elaboratore, infatti, non fa altro che eseguire istruzioni preventivamente "impartitegli" da un essere umano: PROGRAMMA • ll computer, grazie alla velocità di calcolo, è diventato insostituibile nei campi più disparati della vita e della scienza.

PROGRAMMI • Un PROGRAMMA e’ “un ALGORITMO” posto in forma comprensibile al computer

PROGRAMMI • Un PROGRAMMA e’ “un ALGORITMO” posto in forma comprensibile al computer

PROGRAMMI e COMPUTER – Un programma e’ un ALGORITMO, per risolvere un certo PROBLEMA,

PROGRAMMI e COMPUTER – Un programma e’ un ALGORITMO, per risolvere un certo PROBLEMA, scritto secondo le regole di un LINGUAGGIO DI PROGRAMMAZIONE – Un computer e’ una macchina per eseguire PROGRAMMI

ALGORITMI PIU’ COMUNI IN INFORMATICA • Algoritmi MATEMATICI – Per fare calcoli anche molto

ALGORITMI PIU’ COMUNI IN INFORMATICA • Algoritmi MATEMATICI – Per fare calcoli anche molto complessi (per esempio, integrali, la scoperta di numeri primi) • Algoritmi di ORDINAMENTO – 45 2 17 28 101 2 17 28 45 101 • Algoritmi di RICERCA • Algoritmi per il TRATTAMENTO DELLE STRINGHE • COMPILATORI • Algoritmi di COMPRESSIONE

RICORDIAMO DA DOVE SIAMO PARTITI Per procedere alla costruzione di un percorso che ci

RICORDIAMO DA DOVE SIAMO PARTITI Per procedere alla costruzione di un percorso che ci porta alla soluzione di un problema abbiamo che: Passo 1 - Bisogna tradurre il problema in algoritmo: caratteristiche di un algoritmo Vediamo ora i passi successivi Passo 2 - Visualizziamo l’algoritmo in modo grafico: diagrammi di flusso Passo 3 - Traduciamo l’algoritmo in un linguaggio macchina: programma

DA ALGORITMI A PROGRAMMI

DA ALGORITMI A PROGRAMMI

RAPPRESENTAZIONE GRAFICA DI UN ALGORITMO • E’ utile una rappresentazione grafica per descrivere in

RAPPRESENTAZIONE GRAFICA DI UN ALGORITMO • E’ utile una rappresentazione grafica per descrivere in modo piu’ preciso i passi di un algoritmo senza usare una sintassi specifica. Come possiamo immaginare tale rappresentazione? DISCUSSIONE

RAPPRESENTAZIONE GRAFICA DI UN ALGORITMO • Una utile rappresentazione grafica per descrivere in modo

RAPPRESENTAZIONE GRAFICA DI UN ALGORITMO • Una utile rappresentazione grafica per descrivere in modo piu’ preciso i passi di un algoritmo, può essere pensata come una serie di BLOCCHI uniti da archi

MODELLO GRAFICO per rappresentare un algoritmo • Per rappresentare in modo efficace un algoritmo

MODELLO GRAFICO per rappresentare un algoritmo • Per rappresentare in modo efficace un algoritmo sono stati sviluppati dei modelli grafici detti : DIAGRAMMI DI FLUSSO

Criteri grafici per rappresentare un algoritmo i passi di un algoritmo Che criterio grafico

Criteri grafici per rappresentare un algoritmo i passi di un algoritmo Che criterio grafico individuiamo per simboleggiare: • • • i blocchi di inizio e fine programma (start, stop) i blocchi per assegnare valori numerici i blocchi di istruzioni elementari i blocchi in cui si esprimono delle condizioni i blocchi per i dati di input /output (leggi, scrivi…) Che simbolo usiamo per tornare ad una istruzione già eseguita ( vai al passo…)

Criteri grafici per rappresentare un algoritmo i passi di un algoritmo Vediamo cosa è

Criteri grafici per rappresentare un algoritmo i passi di un algoritmo Vediamo cosa è stato stabilito in generale

BLOCCHI: INIZIO E FINE PROGRAMMA

BLOCCHI: INIZIO E FINE PROGRAMMA

BLOCCHI: ISTRUZIONI ELEMENTARI COUNT 0 COUNT + 1

BLOCCHI: ISTRUZIONI ELEMENTARI COUNT 0 COUNT + 1

BLOCCHI: INPUT / OUTPUT

BLOCCHI: INPUT / OUTPUT

RIPETIZIONI

RIPETIZIONI

CONDIZIONALI

CONDIZIONALI

Criteri grafici per rappresentare i passi di un algoritmo: I DIAGRAMMI DI FLUSSO RIASSUMIAMO

Criteri grafici per rappresentare i passi di un algoritmo: I DIAGRAMMI DI FLUSSO RIASSUMIAMO

Esempi Da un ALGORITMO al DIAGRAMMA DI FLUSSO

Esempi Da un ALGORITMO al DIAGRAMMA DI FLUSSO

ESEMPIO: AREA DEL RETTANGOLO • • Calcolo dell’area di un rettangolo AREA: 1. 2.

ESEMPIO: AREA DEL RETTANGOLO • • Calcolo dell’area di un rettangolo AREA: 1. 2. 3. 4. Leggi da input l’altezza H Leggi da input la base B Calcola l’area A Produci in output il risultato

AREA DEL RETTANGOLO: DIAGRAMMA DI FLUSSO dati di input /output (leggi, scrivi, stampa…) Istruzione

AREA DEL RETTANGOLO: DIAGRAMMA DI FLUSSO dati di input /output (leggi, scrivi, stampa…) Istruzione elementare

Ripetizione Condizione

Ripetizione Condizione

SOTTOLINEAMO

SOTTOLINEAMO

LINGUAGGI DI PROGRAMMAZIONE • Un linguaggio di programmazione permette di esprimere certi tipi di

LINGUAGGI DI PROGRAMMAZIONE • Un linguaggio di programmazione permette di esprimere certi tipi di istruzioni in modo che possano venire poi convertite in istruzioni macchina • Un linguaggio di programmazione e’ caratterizzato da – SINTASSI (come vengono scritte le istruzioni) – SEMANTICA (come devono venire interpretate)

CONSIDERAZIONI, II: INGREDIENTI ESSENZIALI DI UN LINGUAGGIO DI PROGRAMMAZIONE • MCD(M, N): 1. RIPETI

CONSIDERAZIONI, II: INGREDIENTI ESSENZIALI DI UN LINGUAGGIO DI PROGRAMMAZIONE • MCD(M, N): 1. RIPETI finche’ M N 2. SE M > N, M M –N; 3. ALTRIMENTI, N N – M; 4. RITORNA al passo 1; 5. OUTPUT M

INGREDIENTI ESSENZIALI DI UN LINGUAGGIO DI PROGRAMMAZIONE • Poter mettere istruzioni in SEQUENZA •

INGREDIENTI ESSENZIALI DI UN LINGUAGGIO DI PROGRAMMAZIONE • Poter mettere istruzioni in SEQUENZA • Poter cambiare l’ordine di esecuzione sulla base di TEST • Poter RIPETERE istruzioni • Questi ingredienti vengono catturati tramite i DIAGRAMMI DI FLUSSO

DIAGRAMMI DI FLUSSO • Una rappresentazione grafica usata per descrivere in modo piu’ preciso

DIAGRAMMI DI FLUSSO • Una rappresentazione grafica usata per descrivere in modo piu’ preciso i passi di un algoritmo senza usare una sintassi specifica • Un diagramma e’ composto da una serie di BLOCCHI uniti da archi

LE VARIABILI • Molti algoritmi richiedono un qualche modo per immagazzinare i risultati di

LE VARIABILI • Molti algoritmi richiedono un qualche modo per immagazzinare i risultati di certi calcoli. – Per esempio, nell’algoritmo per MCD, M e N • Quasi tutti i linguaggi di programmazione permettono di usare delle VARIABILI per questo scopo. Una variabile puo’ essere pensata come un nome per una zona di memoria.

 • VARIABILI NELL’ALGORITMO DI EUCLIDE MCD(M, N): 1. RIPETI finche’ M N 2.

• VARIABILI NELL’ALGORITMO DI EUCLIDE MCD(M, N): 1. RIPETI finche’ M N 2. M > N, M M –N; ALTRIMENTI, N N – M; SE 3. 4. RITORNA al passo 1; 5. OUTPUT M

ESEMPIO: SCAMBIO DI VALORI 1. Leggi il valore della prima variabile X 2. Leggi

ESEMPIO: SCAMBIO DI VALORI 1. Leggi il valore della prima variabile X 2. Leggi il valore della seconda variabile Y 3. Salva il valore di X in una variable Aux per ricordarlo 4. Assegna ad X il valore di Y 5. Assegna a Y il valore di Aux

DIAGRAMMA DI FLUSSO

DIAGRAMMA DI FLUSSO

CONDIZIONALI • Un’altro degli ingredienti fondamentali di un linguaggio di programmazione e’ la possibilita’

CONDIZIONALI • Un’altro degli ingredienti fondamentali di un linguaggio di programmazione e’ la possibilita’ di scegliere di eseguire istruzioni diverse a seconda dei risultati di un TEST

CONDIZIONALI

CONDIZIONALI

ESEMPIO: PARI O DISPARI 1. 2. 3. 4. Leggi N Dividi N per 2

ESEMPIO: PARI O DISPARI 1. 2. 3. 4. Leggi N Dividi N per 2 Se Resto = 0 scrivi: N e’ pari Altrimenti scrivi: N e’ dispari

PARI E DISPARI

PARI E DISPARI

RIPETIZIONI • L’ultimo componente fondamentale di un linguaggio di programmazione e’ la possibilita’ di

RIPETIZIONI • L’ultimo componente fondamentale di un linguaggio di programmazione e’ la possibilita’ di ripetere le stesse azioni un gran numero di volte

RIPETIZIONI

RIPETIZIONI

ALGORITMO DI EUCLIDE START F T M N T F M > N? OUTPUT:

ALGORITMO DI EUCLIDE START F T M N T F M > N? OUTPUT: M M M-N STOP N N-M