7. 3 ALGORITMO Serie di prescrizioni o istruzioni che specifica l’insieme delle azioni da compiere per poter risolvere un problema. In particolare: 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. L’algoritmo deve essere collocato in un contesto (per costruire un algoritmo è necessario sapere cosa sa fare l’esecutore) 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.
8.
9. 5 ALGORITMO - REQUISITI Finitezza (Spaziale – Temporale) Deve pervenire al risultato finale con l'esecuzione di un numero finito di azioni da poter essere eseguite in un tempo finito Generalità 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 Non ambiguità Deve sempre essere chiaro qual è il passo successivo da effettuare Eseguibilità Deve essere effettivamente eseguibili dall’esecutore Completezza
10. 6 ALGORITMO - COSTRUZIONE Esaminare una specifica realtà o problema (fase di analisi) Costruirne un’astrazione Rappresentarla (più o meno) formalmente Individuare i dati di input e output e le risorse disponibili Individuare una sequenza di azioni che, eseguite, risolvano il problema nel mondo dell’astrazione
11. 7 ALGORITMI E LINGUAGGI Un algoritmo può essere comunicato in più linguaggi Quando chi riceve le istruzioni è un elaboratore elettronico il linguaggio deve essere adeguato al suo contesto A questo scopo sono stati creati i linguaggi di programmazione di alto livello (es. Pascal) Nei linguaggi è possibile codificare l’insieme delle istruzioni di un algoritmo per renderle eseguibili dal calcolatore
12. 8 V 9 V E Espressione, cioè una formula che specifica sempre un valore. Ogni espressione è composta da operandi e operatori E ASSEGNAZIONE 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). 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) Gli operandi possono essere costanti, espressioni o variabili Gli operatori possono essere di tre tipi: aritmetici, di relazione e logici
13. 9 INPUT Un'operazione di Input è un'azione in cui una variabile del problema viene impostata con un valore fornito dall'esterno. Con un'operazione di Input si possono impostare, volendo, più variabili con altrettanti valori. Questa operazione serve per fornire, dall'esterno all'algoritmo, dei valori su cui lavorare.
14. 10 OUTPUT 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 Questa operazione serve per comunicare i risultati, parziali o definitivi, ottenuti attraverso l'algoritmo
15. 11 ESEMPIO- ISTRUZIONI Il passo 1 serve a ricevere i dati iniziali,input Il passo 4 serve a comunicare il risultato, output CALCOLARE LA MEDIA ARITMETICA DI DUE NUMERI QUALSIASI Algoritmo: Leggere i due numeri Sommare i due numeri Dividere il risultato per 2 Comunicare il risultato Per acquisire i dati possiamo usare le istruzioni del tipo: leggi, acquisisci, accetta. Per comunicare i dati possiamo usare le istruzioni del tipo: scrivi, comunica, mostra. 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.
16. 12 ALGORITMO RAPPRESENTAZIONE 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. Possiamo utilizzare sostanzialmente due Modelli per la rappresentazione degli Algoritmi: la Pseudo-Codifica e i Diagrammi di Flusso (Flow-Chart )
17. 13 PSEUDOCODIFICA 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 La pseudocodifica utilizza delle regole per strutturare il testo: 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, Ogni istruzione è indicata con una frase del linguaggio corrente e può contenere un’espressione di tipo aritmetico o logico Le istruzioni LEGGI (lista di variabili) e SCRIVI (variabili e costanti) vengono utilizzate per descrivere le operazione di immissione ed emissione dei dati La richiesta all’utente per acquisire i dati necessari all’elaborazione può essere indicata con CHIEDI(lista dei dati che servono) Le variabili, le costanti vengono indicate da parole in minuscolo dette identificatori
18. 14 PSEUDOCODIFICA - ESEMPIO h Area del rettangolo PSEUDOCODIFICA b A= b h INIZIO Dati input Chiedi (base, altezza) Leggi (base, altezza) Area base * altezza Scrivi Area Dati output FINE Base e altezza del rettangolo Area del rettangolo
19. 15 DIAGRAMMI A BLOCCHI (FLOW – CHART) Il metodo dei diagrammi a blocchi permette un visione immediata dell’intero procedimento e dell’ordine di esecuzione delle varie istruzioni I diagrammi a blocchiprevedono l'utilizzo di simboli grafici in cui vengono racchiuse le azioni da compiere. 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. Con questo modello si ottiene una rappresentazione che ha, nell'aspetto grafico, lo scopo di mettere in particolare evidenza le strutture di base utilizzate.
20. 16 DIAGRAMMI A BLOCCHI (FLOW – CHART) Inizio Condizione Fine commento 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
21. 17 FLOW CHART - ESEMPIO Inizio Area del rettangolo DIAGRAMMA A BLOCCHI h Chiedi base, altezza b A= b h Leggi base altezza Dati input Base e altezza del rettangolo Area base * altezza Dati output Scrivi area Area del rettangolo Fine
22. 18 ALGORITMI - STRUTTURE Un programma serve per indicare al computer l'algoritmo da eseguire. 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.
23. 19 SEQUENZA è una concatenazione di azioni una o più azioni devono essere eseguite in successione per attuarlanon ci sono termini particolari nella pseudocodifica
24. 20 SEQUENZA - ESEMPIO Algoritmo per calcolare la somma di due numeri Input: i due valori che dovranno essere sommati, indichiamoli con ADDENDO1 e ADDENDO2 Assegnazione: il risultato ottenuto dalla somma fra i due valori lo assegneremo alla variabile SOMMA. Output: il valore presente nella variabile SOMMA.
25. 21 SELEZIONE è una scelta di azioni alternative che dipendono da una condizione una o più azioni devono essere eseguite, in alternativa ad altre, in base ad una condizione posta. 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). I termini della pseudocodifica sono se, allora, altrimenti
26. 22 SELEZIONE - ESEMPIO algoritmo per trovare il valore più grande fra due valori forniti Input: i due valori da attribuire alla variabile A e alla variabile B 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
27. 23 ITERAZIONE è la ripetizione di una certa azione dipendente da una condizione una o più azioni devono essere eseguite, più volte, sulla base di una condizione da soddisfare I termini della pseudocodifica usati sono: ripeti, finchè oppure mentre, esegui
28. 24 ITERAZIONE - ESEMPIO Algoritmo per calcolare la somma di tutti i numeri da 1 ad un certo valore n. Input: n, l’ultimo valore che si dovrà sommare, lo indichiamo con Num Output: Il valore finale della variabile Somma che ha la funzione di Accumulatore e servirà per accumulare i vari valori sommati. K: variabile di lavoro; viene inizialmente impostata a 1 e successivamente incrementata, ogni volta, di una unità per fornire i numeri da sommare 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
29. 25 TEOREMA DI BÖHM-JACOPINI Ogni algoritmo, comunque formulato, è sempre riconducibile a un algoritmo contenete soltanto le strutture logiche di sequenza, selezione, iterazione. 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 Risultato: è possibile definire e minimizzare un linguaggio algoritmico senza limitarne la potenza espressiva
30. 26 TEOREMA DI BÖHM-JACOPINI LINGUAGGIO COMUNE Ogni frase descrittiva può essere formulata in modi diversi, con sfumature diverse, usando costrutti diversi (Complessità) LINGUAGGIO ALGORITMICO Ogni descrizione operativa utilizza solo azioni elementari e le strutture di selezione, sequenza e iterazione (Riduzione della complessità, Formalizzazione) TEOREMA DI BOHM-JACOPINI Hanno la stessa potenza espressiva sul piano algoritmico operativo