Gli Algoritmi Prof Salvatore Venticinque Prof Massimiliano Rak

  • Slides: 38
Download presentation
Gli Algoritmi Prof. Salvatore Venticinque Prof. Massimiliano Rak Elementi di Programmazione A. A. 2016

Gli Algoritmi Prof. Salvatore Venticinque Prof. Massimiliano Rak Elementi di Programmazione A. A. 2016 -2017

Terminologia Informazione Un'informazione è uno scambio di conoscenza. L’informazione riguarda il contesto in cui

Terminologia Informazione Un'informazione è uno scambio di conoscenza. L’informazione riguarda il contesto in cui i dati sono raccolti, la loro codifica in forma intelligibile ed in definitiva il significato attribuito a tali dati. Dato Un dato è una descrizione elementare, spesso codificata, di un'entità, di un fenomeno, di una transazione, di un avvenimento o di altro. Ogni tipo di dato dipende dal codice e dal formato impiegati.

Terminologia Rappresentazione Un codice è una rappresentazione di un insieme di simboli in grado

Terminologia Rappresentazione Un codice è una rappresentazione di un insieme di simboli in grado di rappresentare l'informazione che viene così codificata. Elaborazione Il processo di trasformazione dei dati che conduce alla produzione di nuovi dati (ed eventualmente di nuove informazioni)

Algoritmo Definizione del IX secolo di Mohammed Ibn Musa Abu Gefar Al-Khuwarizmi: Algoritmo: una

Algoritmo Definizione del IX secolo di Mohammed Ibn Musa Abu Gefar Al-Khuwarizmi: Algoritmo: una qualsiasi procedura effettiva che indichi le istruzioni da eseguire per ottenere a partire dai dati di cui si dispone i risultati volute Per noi informatici … Algoritmo: Una sequenza finita di passi che portano alla realizzazione di un compito

Algoritmi, Linguaggi ed Esecutori • Gli Algoritmi sono espresso attraverso un Linguaggio che permette

Algoritmi, Linguaggi ed Esecutori • Gli Algoritmi sono espresso attraverso un Linguaggio che permette di descrivere i passi che compongono l’algoritmo. • Un Esecutore effettua I passi dell’algoritmo per produrre I risultati attesi.

Linguaggi di programmazione • Linguaggio di programmazione C • Linguaggio Assembler • Linguaggio macchina

Linguaggi di programmazione • Linguaggio di programmazione C • Linguaggio Assembler • Linguaggio macchina Ma anche • Diagrammi di flusso • pseudo codice • Linguaggi visuali Chi è l’esecutore?

Un Esempio di Algoritmo: Somma con pallottoliere Inizializza il pallottoliere • Sposta tutte le

Un Esempio di Algoritmo: Somma con pallottoliere Inizializza il pallottoliere • Sposta tutte le palline a destra • Inserisci il primo addendo spostando a sinistra sulla prima riga un numero di palline pari all’addendo • Inserisci il secondo addendo spostando a sinistra sulla seconda riga un numero di 3 2 palline pari all’addedndo 1

Un Esempio di Algoritmo: Somma con pallottoliere Passo 1: Sposta a destra una pallina

Un Esempio di Algoritmo: Somma con pallottoliere Passo 1: Sposta a destra una pallina sulla prima riga Passo 2: Sposta a sinistra una pallina sulla terza riga Passo 3: Ritorna a Passo 1 se hai palline a sinistra sulla prima riga Passo 4: Sposta a destra una pallina sulla seconda riga Passo 5: Sposta a sinistra una pallina sulla terza riga Passo 6: Ritorna a Passo 4 se hai palline a sinistra sulla seconda riga FINE 3 2 1

Un Esempio di Algoritmo: Somma con pallottoliere Risultato finale: Numero di palline a sinistra

Un Esempio di Algoritmo: Somma con pallottoliere Risultato finale: Numero di palline a sinistra sulla terza riga • Chi è l’esecutore? • Che linguaggio abbiamo usato? • Quali sono i problemi di questo algoritmo? 3 2 1

Diagrammi di Flusso • I Diagrammi di flusso sono un linguaggio grafico per la

Diagrammi di Flusso • I Diagrammi di flusso sono un linguaggio grafico per la rappresentazione di un algoritmo • Il diagramma è compost da blocchi che rappresentano I passi dell’algoritmo • I blocchi hanno forme diverse in base al significato • I blocchi contengono testo che dscrive il passo da eseguire • CHI è l’esecutore? • Utili per descrivere un algoritmo più che per eseguirlo…

Diagrammi di Flusso • Blocchi Start e Stop vengono utilizzati per indicare da dove

Diagrammi di Flusso • Blocchi Start e Stop vengono utilizzati per indicare da dove il diagramma inizia e quando il diagramma termina. Start Stop

Diagrammi di Flusso • I Blocchi Input e Output vengono utilizzati per indicare la

Diagrammi di Flusso • I Blocchi Input e Output vengono utilizzati per indicare la richiesta di dati all’utente INPUT OUTPUT

Diagrammi di Flusso • I Blocchi Azione vengono utilizzati per indicare una operazione di

Diagrammi di Flusso • I Blocchi Azione vengono utilizzati per indicare una operazione di elaborazione elementare Azione

Diagrammi di Flusso • I Blocchi Condizione vengono utilizzati per indicare una operazione di

Diagrammi di Flusso • I Blocchi Condizione vengono utilizzati per indicare una operazione di scelta • Ogni ramo di uscita rappresenta una scelta differente Condizione

Diagrammi di Flusso • I Blocchi connettore vengono utilizzati per indicare che due o

Diagrammi di Flusso • I Blocchi connettore vengono utilizzati per indicare che due o più blocchi differenti portano allo stesso blocco

Diagramma di Flusso: Somma di due numeri Passo 1: Leggi A Passo 2: Leggi

Diagramma di Flusso: Somma di due numeri Passo 1: Leggi A Passo 2: Leggi B Passo 3: Somma A e B Passo 4: Stampa il risultato Start Leggi A Leggi B R=A+B Stampa R Stop

Diagramma di Flusso: Stampa il maggiore di due numeri Start Passo 1: Leggi A

Diagramma di Flusso: Stampa il maggiore di due numeri Start Passo 1: Leggi A Passo 2: Leggi B Passo 3: confronta A e B Passo 4: Se A>B stampa A, Leggi A Leggi B altrimenti stampa B Vero A>B Falso Stampa B Stampa A Stop

Diagrammi di Flusso: Strutture Avanzate • Il blocco sequenza viene utilizzato per indicare l’esecuzione

Diagrammi di Flusso: Strutture Avanzate • Il blocco sequenza viene utilizzato per indicare l’esecuzione consecutiva di blocchi. Azione 1 Azione … Azione n Sequenza

Diagrammi di Flusso: Strutture Avanzate • I blocchi If-Then e IF-Then-Else vengono utilizzati per

Diagrammi di Flusso: Strutture Avanzate • I blocchi If-Then e IF-Then-Else vengono utilizzati per I costrutti di selezione Condizione Sequenza If-Then-Else Sequenza If-Then

Diagrammi di Flusso: Strutture Avanzate • I blocchi while-do e repeat-until vengono utilizzati per

Diagrammi di Flusso: Strutture Avanzate • I blocchi while-do e repeat-until vengono utilizzati per le operazioni cicliche Condizione falso Sequenza vero While-do Condizione falso Repeat-until

Diagrammi di Flusso strutturati • Un Diagramma di Flusso si chiama strutturato se: •

Diagrammi di Flusso strutturati • Un Diagramma di Flusso si chiama strutturato se: • Ha un solo blocco START • Ha un solo blocco STOP • Utilizza solo sequenze o le strutture avanzate • • If-then-else While-do Repeat-until

Diagramma di Flusso non strutturato Diagramma di Flusso strutturato Sequenza Condizione Sequenza If-Then

Diagramma di Flusso non strutturato Diagramma di Flusso strutturato Sequenza Condizione Sequenza If-Then

Diagrammi di Flusso: Strutture Avanzate Diagramma di Flusso non strutturato Diagramma di Flusso strutturato

Diagrammi di Flusso: Strutture Avanzate Diagramma di Flusso non strutturato Diagramma di Flusso strutturato Condizione Sequenza Stop

Teorema di Böhm-Jacopini Qualunque diagramma di flusso può essere trasformato in un diagramma di

Teorema di Böhm-Jacopini Qualunque diagramma di flusso può essere trasformato in un diagramma di flusso strutturato equivalente • In altre parole è possibile realizzare ogni algoritmo utilizzando solo le strutture avanzate • I Diagrammi strutturati hanno il vantaggio di essere molto più intuitivi e comprensibili.

Diagrammi di Flusso non Strutturati: Problemi • Cosa fa programma? Start Leggi A, B,

Diagrammi di Flusso non Strutturati: Problemi • Cosa fa programma? Start Leggi A, B, C D=0 F=A+B Vero D=0? Falso A=C B=F D=1 Stampa F Stop questo

Diagrammi di Flusso non Strutturati: Problemi • Cosa fa questo programma? • Stampa F=A+B+C

Diagrammi di Flusso non Strutturati: Problemi • Cosa fa questo programma? • Stampa F=A+B+C … Start Leggi A, B, C D=0 F=A+B Vero D=0? Falso A=C B=F D=1 Stampa F Stop • L’uso di pogrammi non strutturati porta a codice non leggibile e spesso pieno di errori ….

Diagrammi Di Flusso ed Algoritm Concetti acquisiti • L’algoritmo definisce una sequenza di passi

Diagrammi Di Flusso ed Algoritm Concetti acquisiti • L’algoritmo definisce una sequenza di passi che permettono all’esecutore di ottenere un risultato in base ai dati di cui dispone • I Diagrammi di Flusso sono un linguaggio visuale per rappresentare algoritmi • I Diagrammi di Flusso strutturati utilizzano delle strutture avanzate per rappresentare I passi (selezione e cicli)

Fare clic per modificare lo stile del titolo Esempi di Algoritmi

Fare clic per modificare lo stile del titolo Esempi di Algoritmi

Stampa in Ordine Richiedere in ingresso 3 numeri e stampare il massimo

Stampa in Ordine Richiedere in ingresso 3 numeri e stampare il massimo

Stampa il Massimo di tre Start Leggi A, B, C If-then-else Vero Max=A Vero

Stampa il Massimo di tre Start Leggi A, B, C If-then-else Vero Max=A Vero A>C A>B Falso Vero Falso Max=C Max=B Stampa Max Stop If-then-else B>C Falso Max=C

Stampa in Ordine Richiedere in ingresso 10 numeri e stampare il massimo

Stampa in Ordine Richiedere in ingresso 10 numeri e stampare il massimo

Stampa il Massimo di 10 Start Count=1; Ma è un Diagramma di Flusso Strutturato?

Stampa il Massimo di 10 Start Count=1; Ma è un Diagramma di Flusso Strutturato? Leggi Max Count=Count+1; Leggi val Vero Max=Val; Vero Val>Max Falso Count<10 Falso Stampa Max Stop

Stampa il Massimo di 10 Start Count=1; Sequenza Leggi Max Count=Count+1; Sequenza Leggi val

Stampa il Massimo di 10 Start Count=1; Sequenza Leggi Max Count=Count+1; Sequenza Leggi val If-then Vero Max=Val; Vero Val>Max Falso Count<10 Falso Stampa Max Stop

Stampa il Massimo di 10 Start Count=1; Sequenza Leggi Max Count=Count+1; Repeat-until Leggi val

Stampa il Massimo di 10 Start Count=1; Sequenza Leggi Max Count=Count+1; Repeat-until Leggi val Sequenza Vero Max=Val; Vero Count<10 Falso Stampa Max Stop Val>Max Falso

Stampa in Ordine Realizzare il Diagramma di Flusso dell’Algoritmo per il calcolo del Massimo

Stampa in Ordine Realizzare il Diagramma di Flusso dell’Algoritmo per il calcolo del Massimo Comun Divisore

Algoritmo Massimo Comun Divisore Teorema di Euclide: “ogni divisore comune di a e b

Algoritmo Massimo Comun Divisore Teorema di Euclide: “ogni divisore comune di a e b è divisore di a, b e del resto r della divisione tra a e b (a mod b), se questo non è nullo” Soluzione di Euclide - Costruzione dell’algoritmo Dati due numeri a, b assumiamo che a sia sempre il maggiore Effettuiamo l’operazione r= a mod b se r=0 allor b è MCD di a Altrimenti calcoliamo r’= b mod r, se r’=0 allora r è divisore di b ed è MCD di a (non lo era b) Possiamo quindi procedere così fino a trovare il caso in cui l’operazione dia zero. Elementi di Programmazione

Massimo Comun Divisore Algoritmo: 1. acquisire due numeri a, b 2. se b>a scambiare

Massimo Comun Divisore Algoritmo: 1. acquisire due numeri a, b 2. se b>a scambiare a con b 3. se b= 0 MCD(a, b)=a e termina 4. r= a mod b 5. sostituire a con b, b con r ed andare al passo 3 Start Leggi a, b vero scambia a e b; b>a falso o b!=0 vero r=a mod b a=b; b=r; falso MCD=a Stop

Fine …

Fine …