Algoritmi

7,261 views
6,995 views

Published on

lezione sul concetto di algoritmo

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,261
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Algoritmi

  1. 1. 1<br />CONTENUTI<br /><ul><li>Definizione di algoritmo
  2. 2. Caratteristiche di un algoritmo
  3. 3. Costruzione di un algoritmo
  4. 4. Operazioni di assegnazione, input e output
  5. 5. Rappresentazione di un algoritmo: pseudocodifica e diagrammi a blocchi
  6. 6. Strutture degli algoritmi: sequenza, selezione, iterazione</li></li></ul><li>2<br />PREMESSA<br />Nel linguaggio comune spesso ci capita di dover descrivere dei procedimenti. Un esempio tipico sono le ricette di cucina<br /> Per esempio, nella ricetta di una torta vengono elencate una serie di azioni da eseguire per ottenere il dolce <br /> alcune sono azioni elementari perché si possono eseguire senza ulteriori indicazioni (es. mettere lo zucchero)<br /> altre sono invece azioni complesse perché potrebbero aver bisogno di essere ulteriormente descritte scomponendole in ulteriori azioni elementari <br />L’elenco delle azioni che si ricava fornisce un algoritmo che descrive un’azione complessa per mezzo di azioni elementari<br />Ogni volta che per risolvere un problema lo si scompone in una successione finita di problemi elementari si utilizza un algoritmo<br />
  7. 7. 3<br />ALGORITMO<br />Serie di prescrizioni o istruzioni che specifica l’insieme delle azioni da compiere per poter risolvere un problema.<br />In particolare: <br />L'algoritmo non è solamente l'insieme delle regole o dei comportamenti da applicare, ma anche l'esatta sequenza con cui vanno applicati per risolvere il problema a cui ci si riferisce.<br />L’algoritmo deve essere collocato in un contesto (per costruire un algoritmo è necessario sapere cosa sa fare l’esecutore)<br />Un algoritmo è una descrizione completa, univoca e esaustiva di un insieme finito di operazioni elementari, interpretabili e riproducibili da un esecutore, per portare a termine un dato compito e per raggiungere un risultato definitoin un tempo ragionevole. <br />
  8. 8. 4<br />ALGORITMO - ESEMPIO<br />Deve <br />Telefonare a Paolo<br />MARIA<br /><ul><li>numero telefonico di Paolo</li></ul>Informazioni<br /> necessarie:<br /><ul><li>Il messaggio da comunicare</li></ul>Risultati:<br /><ul><li>Esito della telefonata</li></ul>Algoritmo<br />leggere il numero telefonico<br /> comporre il numero<br />a seconda della situazione che si presenta :<br /> se Paolo non risponde andare al passo 6<br />se Paolo risponde<br />conversare con Paolo <br />Chiudere la comunicazione<br />
  9. 9. 5<br />ALGORITMO - REQUISITI<br />Finitezza (Spaziale – Temporale)<br />Deve pervenire al risultato finale con l'esecuzione di un numero<br />finito di azioni da poter essere eseguite in un tempo finito<br />Generalità<br /> Deve fornire il risultato del problema per tutti i possibili valori forniti dall'esterno. In questo caso si dice che l'algoritmo è definito su un intero insieme di valori e per tutti  fornisce un risultato corretto<br />Non ambiguità<br /> Deve sempre essere chiaro qual è il passo successivo da effettuare <br />Eseguibilità<br /> Deve essere effettivamente eseguibili dall’esecutore<br />Completezza<br />
  10. 10. 6<br />ALGORITMO - COSTRUZIONE<br />Esaminare una specifica realtà o problema (fase di analisi)<br />Costruirne un’astrazione<br />Rappresentarla (più o meno) formalmente <br />Individuare i dati di input e output e le risorse disponibili <br />Individuare una sequenza di azioni che, eseguite, risolvano il problema nel mondo dell’astrazione<br />
  11. 11. 7<br />ALGORITMI E LINGUAGGI<br />Un algoritmo può essere comunicato in più linguaggi<br />Quando chi riceve le istruzioni è un elaboratore elettronico il linguaggio deve essere adeguato al suo contesto<br />A questo scopo sono stati creati i linguaggi di programmazione di alto livello (es. Pascal)<br />Nei linguaggi è possibile codificare l’insieme delle istruzioni di un algoritmo per renderle eseguibili dal calcolatore<br />
  12. 12. 8<br />V  9<br />V  E<br />Espressione, cioè una formula che specifica sempre un valore.<br />Ogni espressione è composta da operandi e operatori<br />E<br />ASSEGNAZIONE<br />Un'Assegnazione è un'azione in cui ad una variabile del problema, di un certo tipo, viene assegnato un valore di tipo compatibile (in conseguenza di un calcolo o copiandolo direttamente da un'altra variabile o da una costante). <br />Le variabili  implicate nel calcolo non cambieranno il loro valore, ad eccezione eventualmente di quella che dovrà ricevere il valore calcolato (il risultato del calcolo)<br />Gli operandi possono essere costanti, espressioni o variabili<br />Gli operatori possono essere di tre tipi: aritmetici, di relazione e logici<br />
  13. 13. 9<br />INPUT<br />Un'operazione di Input è un'azione  in cui una variabile del problema viene impostata con un valore fornito dall'esterno. <br />Con un'operazione di Input si possono impostare, volendo, più variabili con altrettanti valori. <br />Questa operazione serve per fornire, dall'esterno all'algoritmo, dei valori su cui lavorare.<br />
  14. 14. 10<br />OUTPUT<br />Un'operazione di Output è un'azione in cui il valore o i valori rappresentati, ad un certo momento, da una o più variabili del problema vengono evidenziati all'esterno <br />Questa operazione serve per comunicare i risultati, parziali o definitivi, ottenuti attraverso l'algoritmo<br />
  15. 15. 11<br />ESEMPIO- ISTRUZIONI<br />Il passo 1 serve a ricevere i dati iniziali,input<br />Il passo 4 serve a comunicare il risultato, output<br />CALCOLARE LA MEDIA ARITMETICA DI DUE NUMERI QUALSIASI<br />Algoritmo:<br />Leggere i due numeri<br />Sommare i due numeri<br />Dividere il risultato per 2<br />Comunicare il risultato<br />Per acquisire i dati possiamo usare le istruzioni del tipo: leggi, acquisisci, accetta.<br />Per comunicare i dati possiamo usare le istruzioni del tipo: scrivi, comunica, mostra.<br />Ci possono essere delle variabili, che non sono nè di input nè di output, ma che sono necessarie all’elaborazione e che vengono dette Variabili di Lavoro.<br />
  16. 16. 12<br />ALGORITMO RAPPRESENTAZIONE<br />Prima di scrivere il programma, normalmente si formalizza l'Algoritmo che dovrà essere eseguito, utilizzando un modello. La formalizzazione dell'algoritmo renderà più agevole la scrittura del programma stesso.<br />Possiamo utilizzare sostanzialmente due Modelli per la rappresentazione degli Algoritmi: la Pseudo-Codifica e i Diagrammi di Flusso (Flow-Chart )<br />
  17. 17. 13<br />PSEUDOCODIFICA<br />La pseudocodifica è la descrizione di un algoritmo ottenuta utilizzando termini e parole del linguaggio comune, ma applicando una serie di regole che permettono di organizzare un tipo di testo formalmente rigoroso e strettamente orientato alla stesura degli algoritmi<br />La pseudocodifica utilizza delle regole per strutturare il testo:<br />Le parole chiave che aprono e chiudono il testo di un algoritmo sono INIZIO e FINE. Altre parole chiave sono ALLORA, SE, ALTRIMENTI, DA, ESEGUI, FINCHÉ, MENTRE, PER, RIPETI, <br />Ogni istruzione è indicata con una frase del linguaggio corrente e può contenere un’espressione di tipo aritmetico o logico<br />Le istruzioni LEGGI (lista di variabili) e SCRIVI (variabili e costanti) vengono utilizzate per descrivere le operazione di immissione ed emissione dei dati<br />La richiesta all’utente per acquisire i dati necessari all’elaborazione può essere indicata con CHIEDI(lista dei dati che servono)<br />Le variabili, le costanti vengono indicate da parole in minuscolo dette identificatori<br />
  18. 18. 14<br />PSEUDOCODIFICA - ESEMPIO<br />h<br />Area del rettangolo<br />PSEUDOCODIFICA<br />b<br />A= b  h<br />INIZIO<br />Dati input<br />Chiedi (base, altezza)<br />Leggi (base, altezza)<br />Area  base * altezza<br />Scrivi Area<br />Dati output<br />FINE<br />Base e altezza del rettangolo<br />Area del rettangolo<br />
  19. 19. 15<br />DIAGRAMMI A BLOCCHI (FLOW – CHART)<br />Il metodo dei diagrammi a blocchi permette un visione immediata dell’intero procedimento e dell’ordine di esecuzione delle varie istruzioni<br />I diagrammi a blocchiprevedono l'utilizzo di simboli grafici in cui vengono racchiuse le azioni da compiere.<br />I simboli di forma diversa hanno ciascuno un proprio significato; all’interno di ogni simbolo è presente un breve testo sintetico. Linee orientate con frecce, che uniscono fra loro i vari simboli, indicano il flusso delle operazioni.<br />Con questo modello si ottiene una rappresentazione che ha, nell'aspetto grafico, lo scopo di   mettere in particolare evidenza le strutture di base utilizzate. <br />
  20. 20. 16<br />DIAGRAMMI A BLOCCHI (FLOW – CHART)<br />Inizio <br />Condizione <br />Fine <br />commento<br />L'Assegnazione viene rappresentata utilizzando un rettangolo, le operazioni di Input/Output da un romboide (due lati orizzontali) e le proposizioni logiche vengono racchiuse in un rombo. I vari simboli grafici vengono uniti fra di loro, nella sequenza da applicare, utilizzando una linea continua; deve sempre essere indicata la FINE e l'INIZIO<br />
  21. 21. 17<br />FLOW CHART - ESEMPIO<br />Inizio <br />Area del rettangolo<br />DIAGRAMMA A BLOCCHI<br />h<br />Chiedi base, altezza<br />b<br />A= b  h<br />Leggi base altezza<br />Dati input<br />Base e altezza del rettangolo<br />Area base * altezza<br />Dati output<br />Scrivi area<br /> Area del rettangolo<br />Fine<br />
  22. 22. 18<br />ALGORITMI - STRUTTURE<br />Un programma serve per indicare al computer l'algoritmo da eseguire.<br /> Per risolvere la formalizzazione degli algoritmi e di conseguenza la scrittura dei programmi  (il software) vengono utilizzate tre tipi di strutture logiche che ci permettono di collegare le azioni elementari che compongono un algoritmo: la Sequenza, la Selezione, e l'Iterazione.<br />
  23. 23. 19<br />SEQUENZA<br />è una concatenazione di azioni<br />una o più azioni devono essere eseguite in successione<br />per attuarlanon ci sono termini particolari nella pseudocodifica<br />
  24. 24. 20<br />SEQUENZA - ESEMPIO<br />Algoritmo per calcolare la somma di due numeri<br />Input: i due valori che dovranno essere sommati, indichiamoli con ADDENDO1 e ADDENDO2 <br />Assegnazione: il risultato ottenuto dalla somma  fra i due valori lo assegneremo alla variabile  SOMMA. <br />Output: il valore presente nella variabile SOMMA.     <br />
  25. 25. 21<br />SELEZIONE<br />è una scelta di azioni alternative che dipendono da una condizione<br />una o più azioni devono essere eseguite, in alternativa ad altre, in base ad una condizione posta. <br />come alternativa alle azioni da effettuare, se la condizione è soddisfatta, possono anche non essere indicate azioni (in questo caso si andrà in sequenza, come se la Scelta non fosse presente).   <br />I termini della pseudocodifica sono se, allora, altrimenti<br />
  26. 26. 22<br />SELEZIONE - ESEMPIO<br />algoritmo per trovare il valore più grande fra due valori forniti <br />Input: i due valori da attribuire alla variabile A e alla variabile B <br />Output: il contenuto di una delle due variabili   ottenuto attraverso una Scelta; il valore di A se è maggiore di B oppure il valore di B se A non è maggiore di B<br />
  27. 27. 23<br />ITERAZIONE<br />è la ripetizione di una certa azione dipendente da una condizione<br />una o più azioni devono essere eseguite, più volte, sulla base di una condizione da soddisfare<br />I termini della pseudocodifica usati sono: ripeti, finchè oppure mentre, esegui<br />
  28. 28. 24<br />ITERAZIONE - ESEMPIO<br />Algoritmo per calcolare la somma di tutti i numeri da 1 ad un certo valore n. <br />Input: n, l’ultimo valore che si dovrà sommare, lo indichiamo con Num <br />Output:   Il valore finale della variabile Somma che ha la funzione di Accumulatore e servirà per accumulare  i vari valori sommati. <br />K: variabile di lavoro; viene inizialmente impostata a 1 e successivamente incrementata, ogni volta, di una unità per fornire i numeri da sommare <br />Procedimento: all'interno di un'iterazione (ciclo) verrà, ogni volta, aggiunto a Somma il valore contenuto in K; il ciclo verrà ripetuto  finché K risulta minore o uguale a Num  <br />
  29. 29. 25<br />TEOREMA DI BÖHM-JACOPINI<br />Ogni algoritmo, comunque formulato, è sempre riconducibile a un algoritmo contenete soltanto le strutture logiche di sequenza, selezione, iterazione.<br />Quindi, ogni azione complessa che sia esprimibile collegando in qualche modo azioni elementari eseguibili per qualche esecutore può anche essere espressa con un algoritmo contenente le azioni elementari collegate tra loro solamente dalle tre strutture logiche di sequenza, selezione, iterazione<br />Risultato: è possibile definire e minimizzare un linguaggio algoritmico senza limitarne la potenza espressiva<br />
  30. 30. 26<br />TEOREMA DI BÖHM-JACOPINI<br />LINGUAGGIO COMUNE<br />Ogni frase descrittiva può <br />essere formulata in modi <br />diversi, con sfumature<br /> diverse, usando <br />costrutti diversi<br />(Complessità)<br />LINGUAGGIO ALGORITMICO<br />Ogni descrizione operativa <br />utilizza solo azioni elementari<br /> e le strutture di selezione,<br />sequenza e iterazione<br />(Riduzione della complessità,<br />Formalizzazione)<br />TEOREMA DI BOHM-JACOPINI<br />Hanno la stessa potenza <br />espressiva sul piano<br /> algoritmico operativo<br />

×