Elementi di Informatica e Programmazione Il concetto di Algoritmo e di Calcolatore Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Cos è l informatica? L informatica è lo studio sistematico degli algoritmi che descrivo e trasforma l informazione: la loro teoria, analisi, progetto, efficienza, realizzazione applicazione [ACM Association for Computing Machinery] L informatica è dunque una scienza: l elaborazione dell informazione avviene in modo sistematico e rigoroso L elaborazione può essere automatizzata Docente: Daniela Fogli Daniela Fogli Elementi di Informatica e Programmazione 2 Alcuni concetti chiave I problemi e la loro risoluzione Algoritmo: una sequenza di operazioni che riguarda l elaborazione di informazione e che so comprensibili ed eseguibili da un esecutore Un esempio di esecutore: il calcolatore In realtà un calcolatore esegue un programma, ovvero la descrizione formale di un algoritmo Necessità di linguaggi per la descrizione formale di algoritmi: linguaggi di programmazione Gli algoritmi di fatto risolvo problemi vediamo cosa significa Problema: classe di domande omogenee alle quali è possibile dare risposta mediante una procedura uniforme Istanza del problema: ogni specifica domanda della classe Variabili di ingresso: termini variabili che caratterizza la formulazione di un problema (permetto di generare le istanze) Variabili di uscita: termini variabili che caratterizza le soluzioni attese (delle istanze) di un problema Dati: valori che posso assumere le variabili d ingresso Risultati: valori che posso assumere le variabili d uscita Soluzione di un istanza di un problema: risposta alla specifica domanda che l istanza rappresenta Daniela Fogli Elementi di Informatica e Programmazione 3 Daniela Fogli Elementi di Informatica e Programmazione 4
Esempio Esempio Classe di domande omogenee Problema Quanto vale la radice quadrata intera Y di un numero intero positivo X? Variabile di uscita Variabile di ingresso Classe di domande omogenee Problema Quanto vale la radice quadrata Y di un numero intero positivo X? Variabile di uscita Variabile di ingresso Istanza Istanza Dati = Interi positivi Risultati = Interi Quanto vale la radice quadrata intera Y del numero 49? Soluzione dell istanza = 7 Dati = Interi positivi Risultati = Reali Quanto vale la radice quadrata Y del numero 50? Soluzione dell istanza = 7,07 Daniela Fogli Elementi di Informatica e Programmazione 5 Daniela Fogli Elementi di Informatica e Programmazione 6 Un esempio di problema e di procedura di risoluzione Procedura di risoluzione Problema: Quanto vale la radice quadrata intera Y di un numero intero positivo X? Quale potrebbe essere una procedura di risoluzione? Partiamo dalle istanze X=5: 2*2=4, 3*3=9 Y=2 X=9: 2*2=4, 3*3=9 Y=3 X=1: 1*1=1, 2*2=4 Y=1 X=10: 2*2=4, 3*3=9, 4*4=16 Y=3 Idea! Parto da Y=1, controllo se Y 2 <X Se allora provo con Y+1 e continuo Altrimenti significa che Y 2 >=X: Se Y 2 = X allora Ok Altrimenti la soluzione deve essere Y-1 Una possibile procedura di risoluzione per il problema dato è dunque: 1. INIZIO: Assegna a Y il valore 0 2. Incrementa Y di 1 3. Se Y 2 < X allora torna all istruzione 2 4. Se Y 2 = X allora FINE 5. Se Y 2 > X allora decrementa Y di 1: FINE Daniela Fogli Elementi di Informatica e Programmazione 7 Daniela Fogli Elementi di Informatica e Programmazione 8
Procedure di risoluzione e algoritmi La procedura di risoluzione è quindi espressa come sequenza di istruzioni la cui esecuzione porta alla soluzione del problema ALGORITMO RISOLUTIVO Computazione Computazione: esecuzione di un algoritmo in corrispondenza di certi dati Passo di computazione: ogni singolo passo elementare che un esecutore compie durante l esecuzione di un algoritmo Sequenza di computazione: sequenza di passi elementari che un esecutore compie in corrispondenza di certi dati iniziali durante l esecuzione di un algoritmo Algoritmo = concetto statico Computazione = concetto dinamico DATI ALGORITMO SOLUZIONE Daniela Fogli Elementi di Informatica e Programmazione 9 Daniela Fogli Elementi di Informatica e Programmazione 10 Esempio di sequenza di computazione Più formalmente Supponendo che la variabile in ingresso X = 8 eseguiamo l algoritmo passo-passo 1 Y 0 2 Calcolo di Y+1 e risultato in Y Y =1 3 Controllo se Y 2 < X è vero 4 Calcolo di Y+1 e risultato in Y Y =2 5 Controllo se Y 2 < X è vero 6 Calcolo di Y+1 e risultato in Y Y =3 7 Controllo se Y 2 < X è falso 8 Controllo se Y 2 = X è falso 9 Controllo se Y 2 > X è vero (ovviamente!) 10 Calcolo di Y-1 e risultato in Y Y =2 11 Fine Problema P[X, Y] Istanza del problema (X 1, X 2,, X n ): variabili di ingresso, con domini D 1, D 2,, D n (insiemi di dati) (Y 1, Y 2,, Y m ): variabili di uscita, con domini R 1, R 2,, R m (insiemi di risultati) P[X, Y] con X D = D 1 x D 2 x x D n Daniela Fogli Elementi di Informatica e Programmazione 11 Daniela Fogli Elementi di Informatica e Programmazione 12
Algoritmo risolvente del problema Calcolatore come Esecutore Universale di Algoritmi Detiamo con A[X, Y] l algoritmo risolvente di P[X, Y] A[X, Y] produce una soluzione per ogni possibile istanza di P[X, Y] Eseguendo l algoritmo risolvente A[X, Y] con il dato di ingresso X Є D si otterrà come risultato la soluzione Y Є R dell istanza P[X, Y] algoritmo A[X, Y] problema P[X, Y] Problema P[X, Y] Algoritmo A[X, Y] dato: X CALCOLATORE risultato: Y soluzione Sostituzione di X con X Esecuzione di A con il dato X P[X, Y] Istanza P[X, Y] Risultato Y: soluzione di P[X, Y] istanza Daniela Fogli Elementi di Informatica e Programmazione 13 Daniela Fogli Elementi di Informatica e Programmazione 14 Calcolatore come esecutore Algoritmi, programmi e calcolatori Un esecutore deve essere in grado di interpretare la descrizione della procedura di risoluzione (algoritmo risolvente) Deve iltre essere in grado di eseguire le azioni presenti nella descrizione interpretata Il calcolatore è un esecutore di algoritmi identificate e descritte da esseri umani (in genere un team di progettisti, programmatori e utenti) Un algoritmo deve essere comprensibile per il suo esecutore Per essere comprensibili da un calcolatore, gli algoritmi devo essere espressi in un linguaggio di programmazione Programma: descrizione formale di un algoritmo attraverso un linguaggio di programmazione Un programma è una sequenza di istruzioni scritte in un opportu linguaggio comprensibile dal calcolatore Il calcolatore è dunque un esecutore di programmi Il compito di un esperto informatico consiste nel produrre algoritmi e codificarli in programmi Daniela Fogli Elementi di Informatica e Programmazione 15 Daniela Fogli Elementi di Informatica e Programmazione 16
Il calcolatore come esecutore di programmi Il calcolatore come esecutore (una definizione rivisitata) Dati iniziali Assegnati a variabili di ingresso Programma CALCOLATORE sequenza di istruzioni di un linguaggio di programmazione (descrive un algoritmo) Risultati dell esecuzione in corrispondenza dei dati iniziali Assegnati a variabili di uscita Un calcolatore è un sistema che, ricevendo in ingresso la descrizione, in un opportu linguaggio, di un algoritmo risolvente A[X,Y] (cioè un programma) per un certo problema P[X,Y] e un dato X, produce un risultato Y, ovvero la soluzione Y dell istanza P[X,Y] Un calcolatore è un esecutore universale di programmi elabora puri simboli (per esso privi di significato ) n risolve problemi (il problema n è un suo ingresso) ma esegue programmi! Daniela Fogli Elementi di Informatica e Programmazione 17 Daniela Fogli Elementi di Informatica e Programmazione 18 Esempio Perché usare un calcolatore come esecutore dati iniziali a = 2, n = 5 Istanza del problema = P[2,5,b] CALCOLATORE Programma per il calcolo della potenza n-esima di a: P[a, n, b] Risultati dell esecuzione in corrispondenza dei dati iniziali b = 32 X Y Alme 3 aspetti lo fan preferire a un esecutore uma Velocità Es. si pensi al calcolo strutturale, alla simulazione di processi, al controllo della traiettoria di un veicolo spaziale ma anche a tutte quelle situazioni in cui occorre trattare una erme quantità di dati es. gestione anagrafe fiscale Affidabilità basso tasso di errore Ecomicità ottimo compromesso costi/benefici Daniela Fogli Elementi di Informatica e Programmazione 19 Daniela Fogli Elementi di Informatica e Programmazione 20
L unicità del calcolatore nella storia della teclogia Il fatto fondamentale: il calcolatore è un dispositivo programmabile Consente di svolgere compiti diversi senza alcuna modifica della sua struttura fisica Basta intervenire sul livello software (programmi) lasciando inalterato il livello hardware (struttura fisica) per modificarne il comportamento Proprietà di un algoritmo La definizione di algoritmo presuppone che esso possa essere espresso in termini linguistici ben definiti, interpretato ed eseguito da un soggetto esecutore (il calcolatore). Da ciò conseguo le seguenti proprietà: Finitezza: un algoritmo deve essere costituito da un numero finito di istruzioni Definitezza: le istruzioni di cui un algoritmo è costituito devo appartenere a un insieme finito e prefissato di tipi elementari Univocità: ogni istruzione deve essere univocamente interpretabile ed eseguibile Effettività: deve esistere un esecutore in grado di eseguire ogni istruzione dell algoritmo in un tempo finito Daniela Fogli Elementi di Informatica e Programmazione 21 Daniela Fogli Elementi di Informatica e Programmazione 22 Altre proprietà Sequenza di computazione finita Determinismo: per qualunque dato di ingresso, a ogni passo della computazione, esiste al più un passo successivo. Ovvero: assegnato un dato di ingresso, esiste una e una sola computazione possibile dell algoritmo Correttezza: l algoritmo perviene alla soluzione del compito cui è preposto Efficienza: l algoritmo perviene alla soluzione del compito impiegando il numero minimo di risorse fisiche Risorse fisiche: tempo, memoria,. Terminazione: l esecuzione di un algoritmo deve terminare in un numero finito di passi dato: X A[X, Y] algoritmo ESECUTORE risultato: Y passo 1 passo 2 passo 3 passo n In questo caso, la computazione produce un risultato Daniela Fogli Elementi di Informatica e Programmazione 23 Daniela Fogli Elementi di Informatica e Programmazione 24
Sequenza di computazione infinita Funzione calcolata da un algoritmo A[X, Y] algoritmo NB: l algoritmo è comunque finito! D A[X, Y] R dato: X ESECUTORE f A passo 1 passo 2 passo 3 In questo caso, il risultato rimane indefinito Un algoritmo A[X, Y] calcola una funzione da D (dominio delle variabili di ingresso) a R (dominio delle variabili di uscita): - f A : D R tale che f A (X) = Y con Y prodotto dalla computazione di A[X, Y] con il dato X La funzione è in generale parziale! Daniela Fogli Elementi di Informatica e Programmazione 25 Daniela Fogli Elementi di Informatica e Programmazione 26 Note Due algoritmi che risolvo lo stesso problema Funzione come concetto equivalente di problema Problema: come lo risolvo? Funzione: come la calcolo? Un algoritmo risolve 1 problema (calcola 1 funzione) Viceversa, per ogni problema risolubile (ovvero, se esiste un algoritmo che lo risolve), esisto infiniti algoritmi che lo risolvo, infatti: un algoritmo è descritto da una sequenza di istruzioni è sufficiente pensare che possiamo sempre aggiungere sequenze di istruzioni che n han effetto sul risultato e possiamo farlo in infiniti modi (es. sommare e sottrarre 1 a/da una variabile, sommare e sottrarre 2, ecc. ecc.) 1. INIZIO: Assegna a Y il valore 0 2. Incrementa Y di 1 3. Se Y 2 < X allora torna all istruzione 2 4. Se Y 2 = X allora FINE 5. Se Y 2 > X allora decrementa Y di 1: FINE Algoritmo modificato ma equivalente Algoritmo di partenza 1.INIZIO: Assegna a Y il valore 0 2.Incrementa Y di 1 3.Se Y 2 < X allora torna all istruzione 2 4.Se Y 2 = X allora FINE 5.Incrementa Y di 1 6.Decrementa Y di 1 7.Se Y 2 > X allora decrementa Y di 1: FINE Daniela Fogli Elementi di Informatica e Programmazione 27 Daniela Fogli Elementi di Informatica e Programmazione 28
Informatica Teorica Cenni sulla macchina di Turing Utilizzando strumenti matematici, studia macchine astratte descritte formalmente, anziché macchine concrete Permette di ottenere risultati su cosa una macchina è in grado di calcolare e quindi quali problemi posso essere risolti a prescindere dalla teclogia impiegata per realizzare i calcolatori La teclogia cambia, i risultati generali : - La macchina analitica di Charles Babbage (mai realizzata) è stata progettata nel 1830 - La macchina di Turing (di Alan Turing) è stata pubblicata nel 1936 - Il primo calcolatore elettronico solo nel 1943 Macchina astratta utilizzata nell informatica teorica per formalizzare i concetti di algoritmo, esecutore e computazione Macchine di estrema semplicità, ma ogni funzione effettivamente computabile, complessa quanto si vuole, può essere computata da una macchina di Turing purché n si ponga limiti di tempo e di memoria (Tesi di Church-Turing) Questa tesi n può essere provata Rappresenta una definizione del concetto intuitivo di funzione computabile, ovvero una funzione che può essere calcolata da un algoritmo finito Daniela Fogli Elementi di Informatica e Programmazione 29 Daniela Fogli Elementi di Informatica e Programmazione 30 La macchina di Turing Macchina di Turing è composta da: Nastro (potenzialmente infinito) suddiviso in caselle in cui posso essere scritti o letti simboli di un alfabeto (simboli: s 0, s 1,, s n ) Testina di lettura/scrittura Unità di spostamento per muovere la testina a destra o sinistra in ogni istante Orga di controllo che determina il comportamento. E caratterizzato ad ogni istante da u stato inter (stati: q 1, q 2,, q m con m finito) s 1 B Testina di lettura/scrittura Unità di spostamento testina nastro q 1 Unità di controllo (contenente un elemento di stato) Daniela Fogli Elementi di Informatica e Programmazione 31 Daniela Fogli Elementi di Informatica e Programmazione 32
Esecuzione di un programma Esempio di Macchina di Turing Il programma per una macchina di Turing consiste in un insieme di istruzioni, ciascuna formata da una quintupla <q i, s j, s k, D, q u > dove q i : stato presente s j : simbolo letto dal nastro s k : simbolo sostituito sul nastro D: direzione del movimento (R, L, N) q u : stato futuro Ad ogni istante la macchina esegue la quintupla che può essere applicata per l attuale stato inter e per il simbolo in lettura L insieme delle quintuple che descrive una MT i può essere espresso tramite una tabella Tabella delle transizioni di stato Stati Ingressi 0 1 b q 1 q 2 0q 1 R 0q 2 R 0q h N 0q 2 R 0q 1 R 1q h N Dato il simbolo di ingresso letto sul nastro (in questa macchina: 0, 1 o b) e lo stato corrente macchina (in questa: q 1 o q 2 ) la macchina scrive un nuovo simbolo sul nastro al posto di quello letto modifica lo stato della macchina sposta la testina di lettura/scrittura di un posto a destra (R/right) o a sinistra (L/left) o la lascia dov è (N/ne) Questa macchina calcola una ben precisa funzione: è quella MT che è in grado di dire se la sequenza in ingresso contiene un numero pari o dispari di 1 Daniela Fogli Elementi di Informatica e Programmazione 33 Daniela Fogli Elementi di Informatica e Programmazione 34 Funzioni calcolate e Macchine di Turing Macchina di Turing Universale Ogni macchina di Turing definisce una particolare funzione matematica che agisce sui dati in ingresso forniti dal nastro Una Macchina di Turing MT i calcola una e una sola funzione f i Non è vero il contrario: se una funzione f j può essere calcolata da una Macchina di Turing MT j allora esisto infinite altre Macchine di Turing che calcola la medesima funzione Esisto problemi (funzioni) n computabili, ovvero per i quali n esisto algoritmi risolventi (macchine di Turing che le calcola) un esempio: n esiste un algoritmo che, dato un qualunque algoritmo e un dato, può decidere se esso termina oppure E una macchina che può simulare il comportamento di una qualunque macchina di Turing una volta ricevuto in ingresso la descrizione della macchina da simulare (Se qualcu è interessato all informatica teorica, può consultare i capitoli 15, 16, 17 del libro di testo) Daniela Fogli Elementi di Informatica e Programmazione 35 Daniela Fogli Elementi di Informatica e Programmazione 36
Elementi di Informatica e Programmazione Esercizi sugli Algoritmi Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Esercizio 1 Scrivere l algoritmo (in linguaggio naturale e con un diagramma di flusso) per il seguente problema: l esecutore deve leggere in ingresso una sequenza di numeri naturali (i.e. interi positivi strettamente maggiori di zero) e calcolarne (per poi visualizzarli) il massimo, il minimo e la media La sequenza si interrompe n appena viene introdotto un numero negativo o uguale a zero Per esempio, data la sequenza 5, 1, 2, 3, 6, -5, il risultato deve essere: Il massimo è 6, il minimo è 1, la media è 3.4 mentre, data la sequenza -2, il risultato deve essere La sequenza inserita è nulla Fare l esecuzione passo-passo dell algoritmo nei 2 casi sopra menzionati 2 Algoritmo per esercizio 1 Descrizione dell algoritmo in linguaggio naturale: n 0, media 0 Leggi un valore dall ester e inseriscilo nella variabile x Se x > 0 allora max x, min x Finché x > 0 ripeti Se x > max allora max x Se x < min allora min x media media + x n n + 1 Leggi un valore dall ester e inseriscilo nella variabile x Fine ciclo media media / n Visualizza Massimo, minimo, media = seguita dai valori in max, min, media altrimenti Visualizza La sequenza inserita è nulla Fine La sequenza inserita è nulla inizio media 0 n 0 x x > 0 media media / n max min media max x min x x > 0 Corpo del ciclo Schema a blocchi x > max x < min media media + x n n + 1 x Corpo del ciclo max x min x 3 fine 4
Esecuzione passo passo dell algoritmo: data la sequenza 5, 1, 2, 3, 6, -5 Esecuzione passo passo dell algoritmo: data la sequenza 5, 1, 2, 3, 6, -5 1. media 0, n 0 2. Lettura di un numero e memorizzazione nella variabile x (x 5) 3. Controllo se x > 0 è vero 4. max 5, min 5 5. Controllo se x > 0 è vero 6. Controllo se x > max n è vero 7. Controllo se x < min n è vero 8. media 0 + 5 = 5 9. n 0 + 1 = 1 10. Lettura di un numero e memorizzazione nella variabile x (x 1) 11. Controllo se x > 0 è vero 12. Controllo se x > max n è vero 13. Controllo se x < min è vero 14. min 1 15. media 1 + 5 = 6 16. n 1 + 1 = 2 17. Lettura di un numero e memorizzazione nella variabile x (x=2) 18. Controllo se x > 0 è vero 19. Controllo se x > max n è vero 20. Controllo se x < min n è vero 21. media 6 + 2 = 8 22. n 2 + 1 = 3 23. Lettura di un numero e memorizzazione nella variabile x (x=3) 24. Controllo se x > 0 è vero 25. Controllo se x > max n è vero 26. Controllo se x < min n è vero 27. media 8 + 3 = 11 28. n 3 + 1 = 4 5 6 Esecuzione passo passo dell algoritmo: data la sequenza 5, 1, 2, 3, 6, -5 Esecuzione passo passo dell algoritmo: data la sequenza 2 (cioè sequenza nulla) 29 Lettura di un numero e memorizzazione nella variabile x (x = 6) 30 Controllo se x > 0 è vero 31 Controllo se x > max è vero 32 max 6 33 Controllo se x < min n è vero 34 media 11 + 6 = 17 35 n 4 + 1 = 5 36 Lettura di un numero e memorizzazione nella variabile x (x = -5) 37 Controllo se x > 0 n è vero 38 media 17 / 5 = 3 39 Visualizza il Massimo è 6 40 Visualizza Il minimo è 1 41 Visualizza La media è 3.4 42 Fine 1 Lettura di un numero e memorizzazione nella variabile x (x = -2) 2 Controllo se x > 0 n è vero 3 Visualizza La sequenza inserita è nulla 4 Fine 7 8
Esercizio 2 Algoritmo per esercizio 2 Sia y = r i= q 1 i Scrivere l algoritmo in linguaggio naturale e il diagramma di flusso per il calcolo di y assumendo di acquisire r e q dall ester (dati di input) Nota: controllare che r e q sia interi positivi tali che r > q Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile r Leggi un valore dall ester e inseriscilo nella variabile q Se (r>0) AND (q > 0) AND (r > q) allora y 0, i q Finché i <= r ripeti y y + 1/ i i i + 1 Fine ciclo Visualizza Il risultato è, y altrimenti Visualizza Errore nell immissione dati Fine 9 10 inizio r q (r > 0) AND (q > 0) AND (r > q) y = r i= q 1 i Sia y = k i ( i= 1 j= 1 i + Esercizio 3 1 ) j 2 y 0 i q Errore nell immissione dei dati Scrivere l algoritmo in linguaggio naturale e il diagramma di flusso per il calcolo di y assumendo di acquisire k dall ester (dato di input) controllando che k sia intero positivo. In caso di errata immissione continuare a chiedere k. i <= r y y + (1/i) i i +1 y fine 11 12
Algoritmo per esercizio 3 inizio Descrizione dell algoritmo in linguaggio naturale: Inizio Ciclo Leggi un valore dall ester e inseriscilo nella variabile k Se k <= 0 allora Visualizza Errore nell immissione dati Torna a Inizio Ciclo Finché k <= 0 y 0, i 1 Finché i <= k ripeti s 0, j 1 Finché j <= i ripeti s s + 1/(i + j) j j + 1 Fine ciclo s s * s y y + s i i + 1 Fine ciclo Visualizza Il risultato è, y Fine 13 S S*S y y + S i i + 1 k k <= 0 y 0 i 1 i<=k S 0 j 1 j<=i Errore nell immissione dei dati S S + 1/(i+j) j j+1 y k = ( i i= 1 j= 1 i + y fine Ciclo a condizione finale 1 ) j 2 14
Elementi di Informatica e Programmazione Il Progetto degli Algoritmi Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Risoluzione di un problema Dato un problema da risolvere, n è facile né efficiente, scrivere un programma in linguaggio macchina che lo risolva Facciamo un passo indietro Fasi del procedimento di risoluzione di un problema: 1. Analisi del problema e individuazione di una procedura di risoluzione 2. Descrizione della procedura di risoluzione 3. Interpretazione della procedura di risoluzione 4. Attuazione della procedura di risoluzione Daniela Fogli Elementi di Informatica e Programmazione 2 Processo di risoluzione di un problema Esempio: montaggio di un elettrodomestico Problema Analisi Individuazione procedura Stesura descrizione procedura Descrizione procedura Soggetto 1 SOGGETTO 1 Coscenza di come si risolve il problema Es. progettista di un elettrodomestico SOGGETTO 2 attività ingresso/uscita oppure Soggetto 2 Interpretazione descrizione Descrizione interpretata Attuazione procedura Soluzione Effettiva capacità di risolvere il problema Es. l acquirente dell elettrodomestico Daniela Fogli Elementi di Informatica e Programmazione 3 Daniela Fogli Elementi di Informatica e Programmazione 4
Analisi del problema Modellazione del problema L analisi di un problema consiste in: Comprensione del problema: eliminando ogni ambiguità nella sua formulazione, focalizzando gli obiettivi, evidenziando i dati impliciti ed espliciti del problema Modellazione del problema: creando un modello Ricerca di una procedura di soluzione: scomponendo il problema e individuando una sequenza di passi per risolverlo Cos è un modello? Dato un certo problema, un modello del problema è una rappresentazione semplificata del problema stesso che evidenzia: Gli elementi del problema Le loro proprietà e le relazioni fra di essi Esempio: l archivio di una biblioteca - Titolo - Autori - stanza, scaffale - Mondo reale Modello Daniela Fogli Elementi di Informatica e Programmazione 5 Daniela Fogli Elementi di Informatica e Programmazione 6 Relazione tra realtà e modello Procedura di risoluzione di un problema Mondo reale analisi Astrae dai dettagli irrilevanti del mondo Un MODELLO è un astrazione del problema. Rappresenta una semplificazione completa e autoconsistente della realtà, creata per comprendere il problema MODELLO Risolvere un problema = risolvere un opportuna successione di problemi più semplici SCOMPOSIZIONE IN SOTTO-PROBLEMI I sotto-problemi potrebbero dover essere a loro volta scomposti in sotto-sotto-problemi, e co via La scomposizione deve giungere fi ai problemi elementari (o primitivi) Ad ogni problema elementare corrisponde una istruzione elementare, che rappresenta la maniera di descrivere il problema elementare in modo che l esecutore sia in grado di interpretarlo correttamente f(x) = g'(y) h(z) Daniela Fogli Elementi di Informatica e Programmazione 7 Daniela Fogli Elementi di Informatica e Programmazione 8
Un esempio (informale) di scomposizione di un problema Problema: richiesta di un libro Gestione di una biblioteca in cui: I libri so disposti sugli scaffali La posizione di ogni libro è data da: numero dello scaffale e posizione nello scaffale Esiste un schedario ordinato in cui ogni scheda riporta le seguenti informazioni: Cogme e me dell autore Titolo del libro Data di pubblicazione Numero dello scaffale in cui si trova Posizione nello scaffale Come procedo? 1. Decido quale libro richiedere 2. Prelevo il libro Il secondo passo va dettagliato, ovvero va scomposto in sotto-problemi (procedura per raffinamenti successivi o top-down) Daniela Fogli Elementi di Informatica e Programmazione 9 Daniela Fogli Elementi di Informatica e Programmazione 10 Il problema diventa Cercare la scheda 1. Decido quale libro richiedere 2. Cerco la scheda del libro nello schedario 3. Mi seg numero dello scaffale e posizione nello scaffale 4. Cerco lo scaffale 5. Cerco il libro nella sua posizione all inter dello scaffale 6. Prelevo il libro Non è un problema elementare! Scompongo in sotto-sotto-problemi: 1. Prendo la prima scheda 2. Il titolo, l autore e la data corrispondo a quelli del libro che sto cercando? Se allora ho individuato la scheda, altrimenti passo alla scheda successiva e ripeto il controllo 3. Se le schede so esaurite, allora il libro n esiste Esisto metodi più efficienti per risolvere lo stesso problema come fareste voi? Daniela Fogli Elementi di Informatica e Programmazione 11 Daniela Fogli Elementi di Informatica e Programmazione 12
Un metodo più efficiente Più precisamente 1. Esami la scheda centrale dello schedario 2. Se la scheda corrisponde al libro cercato allora termi la ricerca 3. Altrimenti cerco (con lo stesso metodo) nella metà inferiore o superiore dello schedario a seconda che il libro cercato preceda o segua il libro indicato sulla scheda In realtà il passo 2 deve accorgersi anche se il libro n esiste, diventa: se la scheda corrisponde al libro cercato oppure se la parte di schedario da esaminare è vuota allora termi la ricerca Dal problema a un programma comprensibile dal calcolatore Analisi del problema e identificazione procedura di risoluzione Specifica dell algoritmo risolutivo Programmazione in linguaggio di alto livello Traduzione del programma in linguaggio macchina Esecuzione del programma Daniela Fogli Elementi di Informatica e Programmazione 13 Daniela Fogli Elementi di Informatica e Programmazione 14 Dall analisi del problema all esecuzione Algoritmo problema analisi procedura di risoluzione (informale) specifica algoritmo (formale) Attività dell uomo svolte con l ausilio di strumenti CASE e e ambienti di sviluppo La procedura di risoluzione è specificata in maniera formale come sequenza di istruzioni ALGORITMO RISOLUTIVO programazione programma (alto livello) Attività automatica svolta da programmi traduttori Dati iniziali ALGORITMO Dati finali (soluzione) traduzione programma (ling. macchina) Esecutore del linguaggio macchina esecuzione Istruzioni che opera sui dati Daniela Fogli Elementi di Informatica e Programmazione 15 Daniela Fogli Elementi di Informatica e Programmazione 16
Algoritmo = Dati + Istruzioni Come posso classificare i dati? Dati: Numeri (naturali, interi, reali, ) Caratteri alfanumerici (a, b, c, ) Dati logici (vero, falso) Vettori di elementi, matrici, ([1,2,3], [[1,1],[1,2],]) Immagini, suoni, Istruzioni: Istruzioni di ingresso/uscita (es. leggi, visualizza,) Istruzioni aritmetico-logiche (es. c = a * b) Istruzioni di controllo (es. se allora, ripeti) In base alla visibilità da parte dell utente Visibile (di ingresso o uscita) Trasparente (dati temporanei di supporto) In base alla variabilità nel tempo Costanti Variabili (acquisizione dall ester o assegnazione) In base alla struttura Elementari (interi, alfanumerici, logici, ) Strutturati (vettori, matrici, ) Daniela Fogli Elementi di Informatica e Programmazione 17 Daniela Fogli Elementi di Informatica e Programmazione 18 Variabili, espressioni e assegnamenti Espressioni aritmetiche Variabile: contenitore di dati Ha un me (es. x) nel calcolatore i mi delle variabili identifica una ben precisa locazione di memoria Ad una variabile può essere assegnato un valore: es. x 10 nel calcolatore diventa il contenuto della locazione di memoria identificata dal me della variabile Le variabili posso comparire in espressioni aritmetiche (es. x- y) o logiche, e in predicati logici Le espressioni posso essere assegnate ad altre variabili: ad es. scriveremo d x-y per indicare che d conterrà il risultato dell espressione Si potrebbe anche usare x o y al posto di d, in questo modo si sovrascrive il precedente valore so formate da: Operandi: variabili e costanti (si ipotizza di considerare solo numeri interi) Operatori: addizione (+), sottrazione (-), moltiplicazione (*), divisione intera (/), modulo (mod) Semantica: quella usuale dell aritmetica Esempi (a mod 5) + b * 3 (b c)/2 + 3 * a Daniela Fogli Elementi di Informatica e Programmazione 19 Daniela Fogli Elementi di Informatica e Programmazione 20
Espressioni logiche Predicati logici so formate da: Operandi: espressioni aritmetiche Operatori: operatori relazionali di uguaglianza (=), miranza (<) e maggioranza (>) fra numeri Semantica: quella delle disequazioni fra numeri so formati da: Operandi: espressioni logiche e/o predicati Operatori: operatori logici di congiunzione (AND), disgiunzione (OR) e negazione (NOT) Semantica: quella dell Algebra di Boole Esempi a = b (b + d) < (10 * c) Han un valore logico (vero o falso) Esempi (a < b) AND (b < c) OR (c = d+2) Han un valore logico (vero o falso) Not( ( (a=10*b) AND (b = c) ) OR (c = 20) ) Daniela Fogli Elementi di Informatica e Programmazione 21 Daniela Fogli Elementi di Informatica e Programmazione 22 Rappresentazione degli algoritmi Linguaggio naturale/pseudo-codice Problema: determinare il maggiore di due numeri interi ricevuti in ingresso (si assuma di avere a disposizione solo le istruzioni aritmetiche e quella di confronto con lo zero) 1. Linguaggio naturale/pseudo-codice 2. Diagrammi di flusso 3. Linguaggi di programmazione Algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un secondo valore e inseriscilo nella variabile y Calcola x-y e assegna il risultato a d Se d è diverso a 0 allora Se d è maggiore di 0 allora Visualizza Il massimo è seguita dal valore contenuto in x altrimenti Visualizza Il massimo è seguita dal valore contenuto in y altrimenti Visualizza I due numeri so uguali! Fine Daniela Fogli Elementi di Informatica e Programmazione 23 Daniela Fogli Elementi di Informatica e Programmazione 24
I diagrammi di flusso La simbologia comunemente utilizzata Termini equivalenti: diagrammi a blocchi, schemi a blocchi, flowchart Formalismo grafico per descrivere algoritmi Elementi del linguaggio: simboli per indicare inizio e fine, operazioni di ingresso/uscita (I/O), elaborazioni, condizioni, sottoprogrammi inizio I/O fine cond elaborazione selezione a 2 vie sottoprogramma Daniela Fogli Elementi di Informatica e Programmazione 25 Daniela Fogli Elementi di Informatica e Programmazione 26 Blocchi Inizio e Fine Blocco di I/O Inizio Il blocco Inizio deta il punto da cui l esecuzione dell algoritmo deve iniziare x Contiene un istruzione di lettura di un valore dall ester (esempio lettura da tastiera) oppure un istruzione di scrittura verso l ester (esempio scrittura a video) Fine Il blocco Fine deta il punto in cui l esecuzione dell algoritmo termina x x x lettura di un valore e sua memorizzazione nella variabile x scrittura (invio) del valore di x all ester Daniela Fogli Elementi di Informatica e Programmazione 27 Daniela Fogli Elementi di Informatica e Programmazione 28
Blocco di Elaborazione Selezione a 2 vie (Blocco decisionale) Contiene un istruzione di assegnamento come ad esempio: Condizione (predicato) Rappresenta un istruzione di controllo Esempi di condizioni: x 0 x y x x+1 x y+z*w Nei linguaggi di programmazione più comuni il simbolo = oppure := viene usato al posto di x = 0 Posso anche indicarsi con V (vero) ed F (falso) x = y x < z x >= z*w Se la condizione risulta vera allora l esecuzione prosegue lungo l arco detato con altrimenti prosegue lungo l arco detato con Daniela Fogli Elementi di Informatica e Programmazione 29 Daniela Fogli Elementi di Informatica e Programmazione 30 Blocco Sottoprogramma Collegamenti fra i blocchi Contiene un istruzione di chiamata di un sottoprogramma come ad esempio: I blocchi so collegati fra loro da archi orientati Media(x,y,z) Max(x,y) MCD(y,z) Nei linguaggi di programmazione più comuni si distingue fra chiamate di procedura e chiamate di funzione In ogni caso so sottoprogrammi richiamabili dal programma principale o da altri sottoprogrammi L arco identifica la sequenza delle operazioni da compiere La freccia identifica il flusso di esecuzione Daniela Fogli Elementi di Informatica e Programmazione 31 Daniela Fogli Elementi di Informatica e Programmazione 32
Esempio: Problema 1 Problema: determinare il maggiore di due numeri interi ricevuti in ingresso (si assuma di avere a disposizione solo le istruzioni aritmetiche e quella di confronto con lo zero) inizio x y Algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un secondo valore e inseriscilo nella variabile y Calcola x-y e assegna il risultato a d Se d è diverso a 0 allora Se d è maggiore di 0 allora Visualizza Il massimo è seguita dal valore contenuto in x altrimenti Visualizza Il massimo è seguita dal valore contenuto in y altrimenti Visualizza I due numeri so uguali! Fine Diagramma di flusso dell algoritmo che risolve il problema 1 numeri uguali d x - y d 0 Il max è, x fine d > 0 Il max è, y Daniela Fogli Elementi di Informatica e Programmazione 33 Daniela Fogli Elementi di Informatica e Programmazione 34 Esecuzione passo passo del programma Esempio: Problema 2 1 Lettura di un numero e memorizzazione nella variabile x (supponiamo che il numero acquisito sia 8, quindi in memoria si avrà x=8) Lettura di un numero e memorizzazione nella variabile y (supponiamo che il numero acquisito sia 6, quindi in memoria si avrà y=6) 2 Calcolo di x-y e risultato in d d = 2 3 Controllo se d 0 è vero 4 Controllo se d>0 è vero 5 Visualizzo Il massimo è 8 6 Fine Calcolo del Massimo Comune Divisore (MCD) di due interi x ed y Individuazione della procedura di risoluzione: Fai la scansione di tutti i numeri compresi fra 1 e il minimo tra x ed y. Per ognu stabilisci se è un divisore comune ad x ed y (come? b è divisore di a se a mod b = 0, ovvero se la divisione di a per b dà come resto 0). Ogni volta che un numero preso in considerazione risulta divisore sia di x che di y memorizzalo come attuale MCD in una variabile all inizio posta a 1. Alla fine della scansione la variabile conterrà il valore desiderato. Daniela Fogli Elementi di Informatica e Programmazione 35 Daniela Fogli Elementi di Informatica e Programmazione 36
Algoritmo per il Massimo Comune Divisore Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un valore dall ester e inseriscilo nella variabile y Se x < y allora min x altrimenti min y mcd 1 contatore 1 Finché (contatore <= min) ripeti Se ((x mod contatore = 0) e (y mod contatore = 0)) allora mcd contatore contatore contatore + 1 fine ciclo Stampa MCD = seguito dal valore in mcd Fine e il ramo altrimenti? Diagramma di flusso dell algoritmo che risolve il problema 2 e se x e y so uguali? fine min x MCD =, mcd inizio x y x < y mcd 1 contatore 1 contatore<=min min y (x mod contatore = 0) AND (y mod contatore = 0) contatore contatore + 1 Ciclo a condizione iniziale mcd contatore Daniela Fogli Elementi di Informatica e Programmazione 37 Daniela Fogli Elementi di Informatica e Programmazione 38 Esecuzione passo passo dell algoritmo Esecuzione passo passo dell algoritmo (cont.) 1. Lettura di due numeri e memorizzazione nelle variabili x e y (supponiamo di acquisire 6 e 9, quindi in memoria si avrà x=6 e y=9) 2 Controllo se x < y è vero 3 min 6 4 mcd 1, contatore 1 5 controllo se (contatore <= min) è vero 6 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 1 e 9 è divisibile per 1 è vero 7 mcd 1 8 contatore 2 9 controllo se (contatore <= min) è vero 10 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 2 e 9 è divisibile per 2 n è vero 11 contatore 3 12 controllo se (contatore <= min) è vero 13 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 3 e 9 è divisibile per 3 è vero 14 mcd 3 15 contatore 4 16 controllo se (contatore <= min) è vero 17 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 4 e 9 è divisibile per 4 n è vero 18 contatore 5 19 controllo se (contatore <= min) è vero 20 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 5 e 9 è divisibile per 5 n è vero Daniela Fogli Elementi di Informatica e Programmazione 39 Daniela Fogli Elementi di Informatica e Programmazione 40
21 contatore 6 Esecuzione passo passo dell algoritmo (cont.) 22 controllo se (contatore <= min) è vero 23 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 6 e 9 è divisibile per 6 n è vero 24 contatore 7 25 controllo se (contatore <= min) n è vero 26 Stampa MCD = 3 (cioè stampo il valore nella variabile mcd) Esercizio: Rifare l esecuzione passo passo assumendo di acquisire x = 18 e y = 12 Daniela Fogli Elementi di Informatica e Programmazione 41 Esempio: Algoritmo di Euclide Algoritmo di Euclide per il calcolo del Massimo Comun Divisore (MCD) di due interi un altro algoritmo che risolve lo stesso problema Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un valore dall ester e inseriscilo nella variabile y Se x < y allora scambia x con y Dividi x per y: sia q il quoziente ed r il resto (cioè q x div y; r x mod y)* Finché r 0 ripeti x y y r q x div y r x mod y Fine ciclo Visualizza MCD = seguita dal valore in y Fine * div = divisione intera, mod = resto della divisione Daniela Fogli Elementi di Informatica e Programmazione 42 inizio x y Esecuzione passo passo dell algoritmo di Euclide che risolve il problema 2 Diagramma di flusso che descrive l algoritmo di Euclide (che risolve il problema 2) a x x y y a x < y r 0 fine q x div y r x mod y MCD =, y ta: per realizzare lo scambio ho bisog di una variabile di appoggio (a) x y y r q x div y r x mod y 1 Lettura di due numeri e memorizzazione nelle variabili x e y (supponiamo di acquisire 6 e 9, quindi in memoria si avrà x=6 e y=9) 2 Controllo se x < y è vero 3 Faccio lo scambio: a 6, x 9, y 6 4 q x div y (q 1), r x mod y (r 3) 5 controllo se r 0 è vero 6 x y (x 6), y r (y 3) 7 q x div y (q 2), r x mod y (r 0) 8 controllo se r 0 n è vero 9 Stampa/visualizza MCD = 3 10 Fine Esercizio: Rifare l esecuzione passo passo assumendo di acquisire x = 18 e y = 12 Daniela Fogli Elementi di Informatica e Programmazione 43 Daniela Fogli Elementi di Informatica e Programmazione 44
Algoritmo di Euclide L algoritmo di Euclide in forma più semplice Si basa sulla constatazione che: Se x = y allora MCD(x,y) = x (oppure y) Se x y allora, supponendo x > y, MCD(x,y) = MCD(x-y,y) Infatti: 1. Se x > y e k è un divisore comune a x e a y, allora k è anche un divisore di x-y. Infatti x = k * d e y = k * r per qualche intero positivo d e r. Quindi: x-y = k*(d-r), essendo (d-r) ancora un intero positivo 2. Allo stesso modo è possibile dimostrare che se k è un divisore comune ad x-y e a y allora è un divisore anche di x 3. Quindi tutti i divisori comuni di x e y coincido con i divisori comuni di x-y e y, dunque anche i massimi comuni divisori fra le due coppie di numeri coincido Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un valore dall ester e inseriscilo nella variabile y Finché x y ripeti Se x > y allora x x y altrimenti y = y x Fine ciclo Visualizza la frase MCD = seguita dal valore in y Fine Quindi: Se x > y allora MCD(x,y) = MCD(x-y,y) altrimenti MCD(y,x) = MCD(y-x,x) Daniela Fogli Elementi di Informatica e Programmazione 45 Daniela Fogli Elementi di Informatica e Programmazione 46 inizio Esecuzione passo passo dell algoritmo Diagramma di flusso dell algoritmo di Euclide (versione semplificata) MCD =, y fine x x y x y x y x > y y y x 1. Lettura di due numeri e memorizzazione nelle variabili x e y (supponiamo di acquisire 6 e 9, quindi in memoria si avrà x=6 e y=9) 2. Controllo se x y è vero 3. Controllo se x > y n è vero 4. y 3 (infatti: y 9 6) 5. Controllo se x y è vero 6. Controllo se x > y è vero 7. x 3 (infatti: x 6 3) 8. Controllo se x y n è vero 9. Stampa/visualizza MCD = 3 10. Fine Esercizio: Rifare l esecuzione passo passo assumendo di acquisire x = 24 e y = 9 Daniela Fogli Elementi di Informatica e Programmazione 47 Daniela Fogli Elementi di Informatica e Programmazione 48
Due proprietà degli algoritmi Correttezza: l algoritmo risolve il problema per cui è stato progettato (efficacia). Gli algoritmi visti per il problema 2 so tutti corretti rispetto al problema di calcolare il MCD Complessità: legata al numero di istruzioni eseguite, cioè di passi di computazione, necessari per risolvere il problema (efficienza). Il primo algoritmo visto per il calcolo del MCD è più complesso degli altri due (a parità di dati iniziali, 26 passi col primo e 10 passi con il secondo e il terzo) Esempio: Problema 3 Determinare il massimo fra n numeri positivi, finchè n si inserisce 0 Descrizione dell algoritmo in linguaggio naturale: max 0 (ta: la variabile max conterrà il risultato finale) Leggi un valore dall ester e inseriscilo nella variabile x Finché x 0 ripeti chiama il sottoprogramma Massimo(x, max) e inserisci il risultato nella variabile c Se c è uguale a Vero allora max x Leggi un valore dall ester e inseriscilo nella variabile x Fine ciclo Stampa Il massimo è seguita dal valore contenuto in max Fine NOTA: Massimo(x,max) è un sottoprogramma che descrive la soluzione del seguente sottoproblema: ricevendo in ingresso x e max, ritorna un valore Vero se x>=max e un valore Falso se x<max (leggermente diverso dal problema 1 esercizio: fare lo schema a blocchi) Daniela Fogli Elementi di Informatica e Programmazione 49 Daniela Fogli Elementi di Informatica e Programmazione 50 inizio max 0 x Esercizio: Fare l esecuzione passo passo assumendo di acquisire la sequenza 3,5,1,4,0 Calcolo della moltiplicazione Calcolo della moltiplicazione fra due numeri naturali x e y utilizzando solo operazioni di somma e sottrazione Diagramma di flusso dell algoritmo che risolve il problema 3 Il massimo è, max x 0 c Massimo (x,max) c= Vero x max x Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un valore dall ester e inseriscilo nella variabile y z 0 Finché y > 0 ripeti z z + x y y 1 Fine ciclo Stampa/visualizza la frase Prodotto = seguita dal valore in z Fine fine Daniela Fogli Elementi di Informatica e Programmazione 51 Daniela Fogli Elementi di Informatica e Programmazione 52
inizio Esecuzione passo passo dell algoritmo Diagramma di flusso dell algoritmo della moltiplicazione Prodotto =, z fine x y z 0 y > 0 z z + x y y 1 1. Lettura di un numero e memorizzazione nella variabile x (supponiamo x=8) 2. Lettura di un numero e memorizzazione nella variabile y (supponiamo y=3) 3. Assegna 0 alla variabile z (che conterrà il risultato) 4. Controllo se y > 0 è vero 5. z = 0 + 8 = 8 6. y = 3 1 = 2 7. Controllo se y > 0 è vero 8. z = 8 + 8 = 16 9. y = 2 1 = 1 10. Controllo se y > 0 è vero 11. z = 16 + 8 = 24 12. y = 1 1 = 0 13. Controllo se y > 0 n è vero 14. Stampa/visualizza Prodotto = 24 15. Fine Daniela Fogli Elementi di Informatica e Programmazione 53 Daniela Fogli Elementi di Informatica e Programmazione 54 Calcolo di x y inizio Calcolo di x y (con x e y numeri naturali) utilizzando il sottoprogramma moltiplica(a,b) x y z 1 Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un valore dall ester e inseriscilo nella variabile y z 1 Finché y > 0 ripeti z moltiplica(z, x) y y 1 Fine ciclo Stampa/visualizza la frase x y = seguita dal valore in z Fine * il sottoprogramma moltiplica(a,b) riceve in ingresso due numeri naturali e ne restituisce il prodotto (può essere ad esempio definito attraverso l algoritmo precedente) Diagramma di flusso dell algoritmo per il calcolo di x y y > 0 z moltiplica(z,x) y y 1 x y =, z fine chiamata di un sottoprogramma Daniela Fogli Elementi di Informatica e Programmazione 55 Daniela Fogli Elementi di Informatica e Programmazione 56
Esecuzione passo passo dell algoritmo Esecuzione passo passo dell algoritmo (cont.) 1 Lettura di un numero e memorizzazione nella variabile x (supponiamo x=2) Lettura di un numero e memorizzazione nella variabile y (supponiamo y=4) 2 Assegna 1 alla variabile z (che conterrà il risultato) 3 Controllo se y > 0 è vero 4 z = moltiplica(1, 2) = 2 5 y = 4 1 = 3 6 Controllo se y > 0 è vero 7 z = moltiplica(2, 2) = 4 8 y = 3 1 = 2 9 Controllo se y > 0 è vero 10 z = moltiplica(4, 2) = 8 11 y = 2 1 = 1 12 Controllo se y > 0 è vero 13 z = moltiplica(8, 2) = 16 14 y = 1 1 = 0 15 Controllo se y > 0 n è vero 16 Stampa/visualizza x y =, z 17 Fine Daniela Fogli Elementi di Informatica e Programmazione 57 Daniela Fogli Elementi di Informatica e Programmazione 58 Calcolo del fattoriale inizio Calcolo del fattoriale del numero N N! = N x (N-1) x (N-2) x x 1 Esempio: 5! = 5 x 4 x 3 x 2 x 1 = 120 N N<0 Descrizione dell algoritmo in linguaggio naturale: Inizio ciclo Leggi un valore dall ester e inseriscilo nella variabile N Se N < 0 allora Stampa/visualizza la frase Errore nell inserimento del valore di N Torna a Inizio Ciclo Finché N < 0 fattoriale 1 Finché N > 1 ripeti fattoriale fattoriale x N N N 1 Fine ciclo Stampa/visualizza la frase Fattoriale = seguita dal valore in fattoriale Fine Diagramma di flusso dell algoritmo del fattoriale Errore nell inserimento fine Fattoriale =, fattoriale fattoriale 1 N > 1 fattoriale fattoriale * N N N 1 Daniela Fogli Elementi di Informatica e Programmazione 59 Daniela Fogli Elementi di Informatica e Programmazione 60
Esecuzione passo passo dell algoritmo Esercizio 1 1 Lettura di un numero e memorizzazione nella variabile N (supponiamo N=4) 2 Controllo se N < 0 n è vero 3 Assegna 1 alla variabile fattoriale (che conterrà il risultato) 4 Controllo se N > 1 è vero 5 fattoriale = 1 * 4 = 4 6 N = 4 1 = 3 7 Controllo se N > 1 è vero 8 fattoriale = 4 * 3 = 12 9 N = 3 1 = 2 10 Controllo se N > 1 è vero 11 fattoriale = 12 * 2 = 24 12 N = 2 1 = 1 13 Controllo se N > 1 n è vero (esce dal ciclo) 14 Stampa/visualizza Fattoriale = 24 15 Fine Scrivere l algoritmo (in linguaggio naturale e con un diagramma di flusso) per il seguente problema: l esecutore deve leggere in ingresso una sequenza di numeri naturali (i.e. interi positivi strettamente maggiori di zero) e calcolarne (per poi visualizzarli) il massimo, il minimo e la media La sequenza si interrompe n appena viene introdotto un numero negativo o uguale a zero Per esempio, data la sequenza 5, 1, 2, 3, 6, -5, il risultato deve essere: Il massimo è 6, il minimo è 1, la media è 3.4 mentre, data la sequenza -2, il risultato deve essere La sequenza inserita è nulla Fare l esecuzione passo-passo dell algoritmo nei 2 casi sopra menzionati Daniela Fogli Elementi di Informatica e Programmazione 61 Daniela Fogli Elementi di Informatica e Programmazione 62 Esercizio 2 Esercizio 3 Sia y = r i= q 1 i Sia y = k i ( 1 i= 1 j= 1 i + ) j 2 Scrivere l algoritmo in linguaggio naturale e il diagramma di flusso per il calcolo di y assumendo di acquisire r e q dall ester (dati di input) Nota: controllare che r e q sia interi positivi tali che r > q Scrivere l algoritmo in linguaggio naturale e il diagramma di flusso per il calcolo di y assumendo di acquisire k dall ester (dato di input) controllando che k sia intero positivo. In caso di errata immissione continuare a chiedere k. Daniela Fogli Elementi di Informatica e Programmazione 63 Daniela Fogli Elementi di Informatica e Programmazione 64
Elementi di Informatica e Programmazione Dagli Algoritmi ai Programmi Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Perché gli algoritmi n basta Un algoritmo descritto con i linguaggi visti è spesso interpretabile in modo ambiguo Non è utilizzabile da un esecutore automatico Ad esempio, in quegli algoritmi n si parlava di: come so codificati i dati come avviene l interazione con operatori umani problemi legati alle caratteristiche fisiche: ad es. limiti nella dimensione dei numeri rappresentabili Università degli Studi di Brescia Docente: Daniela Fogli Daniela Fogli Elementi di Informatica e Programmazione 2 Dall analisi del problema all esecuzione di un programma Programma problema analisi proc. di risoluzione (informale) specifica algoritmo (formale) programazione programma (alto livello) traduzione programma (ling. macchina) Un programma è la descrizione formale di un algoritmo attraverso un linguaggio di programmazione Scrivere programmi è un compito complesso (alcuni programmi posso arrivare ad essere composti da alcuni milioni di righe di istruzioni) Il calcolatore esegue i programmi passo per passo: se i passi n so completi o n so nell ordine corretto, oppure se ci so dei conflitti tra i passi, il calcolatore n sarà in grado di portare a termine il suo compito Hw esecuzione Daniela Fogli Elementi di Informatica e Programmazione 3 Daniela Fogli Elementi di Informatica e Programmazione 4