Corso di Informatica Modulo T1 2-Proprietà degli algoritmi M. Malatesta 2-Proprietà degli algoritmi-17 1 26/09/2013 Prerequisiti Conoscere il concetto di M.C.D. tra due numeri interi Concetto intuitivo di funzione matematica M. Malatesta 2-Proprietà degli algoritmi-17 2 26/09/2013 1 Introduzione Sappiamo scrivere algoritmi, rappresentandoli in diversi modi, ma resta da rispondere ancora ai seguenti interrogativi. Ogni sequenza logica di operazioni è un algoritmo? Quali sono le azioni elementari? Quali sono le proprietà degli algoritmi? In questa Unità rispondiamo a questi quesiti. M. Malatesta 2-Proprietà degli algoritmi-17 3 26/09/2013 M.C.D. tra due interi Problema: si deve calcolare il massimo comun divisore tra due numeri interi (applicando la regola di calcolo consueta) ATTIVITA’: scrivere l’analisi del testo del problema Fase 1 Analisi del testo Il problema chiede di calcolare il M.C.D. tra due numeri interi a e b. Usiamo una variabile mcd intera per il risultato. Supponiamo di saper scomporre un numero in fattori primi, di saper individuare il minimo fra 2 numeri, di saper individuare se un elemento è comune a due insiemi e di saper svolgere la moltiplicazione. I dati espliciti sono sufficienti ed il problema è solubile. La verifica del procedimento si effettua constatando che mcd è effettivamente M.C.D.(a, b). M. Malatesta 2-Proprietà degli algoritmi-17 4 26/09/2013 2 M.C.D. tra due interi ATTIVITA’: scrivere la tabella delle variabili Dati INPUT OUTPUT Nome a b mcd Tipo Intero Intero Intero Significato primo numero secondo numero M.C.D.(a, b) ATTIVITA’: scrivere il procedimento risolutivo Procedimento risolutivo: Immetti i valori di a e di b. Scomponi a in fattori primi e ponili nell’insieme PA; scomponi b in fattori primi e ponili nell’insieme PB. Seleziona negli insiemi PA e PB i fattori comuni con il minimo esponente e ponili in un insieme PAB. Calcola il prodotto mcd degli elementi di PAB ed emetti il valore di mcd M. Malatesta 2-Proprietà degli algoritmi-17 5 26/09/2013 M.C.D. tra due interi Algoritmo MCD ATTIVITA’: scrivere il corrispondente algoritmo a passi numerati (Fase 2) Inizio 1: immetti il valore di a; 2: immetti il valore di b; 3: scomponi a in fattori primi e poni i fattori primi in un insieme PA; 4: scomponi b in fattori primi e poni i fattori in un insieme PB; 5: poni in PAB l’intersezione di PA e PB, selezionando i fattori comuni con il minimo esponente; 6: calcola il prodotto mcd degli elementi di PAB; 7: emetti il valore di mcd; Fine. M. Malatesta 2-Proprietà degli algoritmi-17 6 26/09/2013 3 M.C.D. tra due interi L’esempio descritto prevede: un esecutore – colui che esegue il processo una sequenza logica di passi numerati un repertorio di azioni operative – immetti, scomponi in fattori primi, emetti, ecc che l’esecutore sa svolgere autonomamente una esecuzione sequenziale che NON effettua alcun salto. Sfortunatamente, nessun esecutore ha nel suo repertorio azioni come: “scomponi…” “poni in un insieme…” qiindi l’algoritmo scritto non può essere eseguito. M. Malatesta 2-Proprietà degli algoritmi-17 7 26/09/2013 M.C.D. tra due interi Problema: si deve calcolare il massimo comun divisore tra due numeri interi (applicando la definizione) ATTIVITA’: scrivere l’analisi del testo del problema Fase 1 Analisi del testo Il problema chiede di calcolare il M.C.D. tra due numeri interi a e b. Usiamo una variabile mcd intera per il risultato. Supponiamo di saper calcolare i divisori di un numero, di saper individuare se un numero è comune a due insiemi e di saper calcolare il massimo di un insieme di numeri. I dati espliciti sono sufficienti ed il problema è solubile. La verifica del procedimento si effettua constatando che mcd è effettivamente M.C.D.(a, b). M. Malatesta 2-Proprietà degli algoritmi-17 8 26/09/2013 4 M.C.D. tra due interi ATTIVITA’: scrivere la tabella delle variabili di I/O Dati INPUT OUTPUT Nome a b mcd Tipo Intero Intero Intero Significato primo numero secondo numero M.C.D.(a, b) ATTIVITA’: scrivere il procedimento risolutivo Procedimento risolutivo: Immetti il valore di a e di b: calcola i divisori di a e ponili in un insieme DA; calcola i divisori di b e ponili in un insieme DB. Esegui l’intersezione di DA con DB nell’insieme DAB. Calcola il valore massimo mcd dell’insieme DAB ed emettilo all’esterno. M. Malatesta 2-Proprietà degli algoritmi-17 9 26/09/2013 M.C.D. tra due interi ATTIVITA’: scrivere il corrispondente algoritmo a passi Algoritmo MCD numerati (Fase 2) Inizio 1: immetti il valore di a; 2: immetti il valore di b; 3: calcola i divisori di a e ponili in un insieme DA; 4: calcola i divisori di b e ponili in un insieme DB; 5: esegui l’intersezione di DA e DB che chiamiamo DAB; Problema che facciamo? 6: calcola il valore massimo mcd tra gli elementi … di PAB; Niente paura … ci viene in 7: emetti il valore di mcd; aiuto Euclide… parliamo di Fine. Sfortunatamente, nessun esecutore nel suo repertorio azioni come: 2300haanni fa!!! “calcola il valore massimo di un insieme …” “poni in un insieme…” qiindi l’algoritmo scritto non può essere eseguito. M. Malatesta 2-Proprietà degli algoritmi-17 10 26/09/2013 5 M.C.D. tra due interi Problema: si deve calcolare il massimo comun divisore tra due numeri interi a e b (metodo della divisione di Euclide) Osservazione: L’algoritmo di divisione di Euclide che funziona come segue: Es. a=18, b=12. a 18 18 12 b r 12 12 6 6 0 Note 18:12 resto 6 12:6 resto 0 B è l’MCD 11 26/09/2013 M. Malatesta 2-Proprietà degli algoritmi-17 M.C.D. tra due interi Dati INPUT OUTPUT Nome a b mcd Tipo Intero Intero Intero Significato primo numero secondo numero M.C.D.(a, b) ATTIVITA’: scrivere l’analisi del testo del problema Fase 1 Analisi del testo Il problema chiede di calcolare il M.C.D. tra due numeri interi a e b. Usiamo una variabile mcd intera per il risultato. Supponiamo di saper calcolare il quoziente ed il resto di una divisione intera. I dati espliciti sono sufficienti ed il problema è solubile. La verifica del procedimento si effettua constatando che mcd è effettivamente M.C.D.(a, b). M. Malatesta 2-Proprietà degli algoritmi-17 12 26/09/2013 6 M.C.D. tra due interi ATTIVITA’: scrivere il procedimento risolutivo Procedimento risolutivo Immetti il valore di a e di b. Esegui ripetutamente il calcolo del resto r della divisione tra a e b ed ogni volta che si effettua la divisione, assegna b ad a e r a b. Il procedimento di divisione termina quando r risulta uguale a 0. In questo caso, assegna b ad mcd ed emetti mcd. M. Malatesta 2-Proprietà degli algoritmi-17 13 26/09/2013 M.C.D. tra due interi ATTIVITA’: scrivere il corrispondente algoritmo a passi numerati (Fase 2) Algoritmo MCD Il gruppo di istruzioni 3-5-6-7 viene eseguito Inizio ciclicamente, fino al verificarsi della 1: immetti il valore di a; condizione espressa dal controllo presente al passo 4. Un ciclo è anche detto loop. 2: immetti il valore di b; 3: assegna ad r il resto della divisione tra a e b; 4: r = 0 ? Se SI vai al passo 8; 5: assegna b ad a; L’istruzione di assegnazione consente di porre in una 6: assegna r a b; variabile, il valore di una qualunque espressione. Si indica con il simbolo “=“ 7: vai al passo 3; 8: assegna b ad mcd; 9: emetti il valore di mcd; Fine. Salto incondizionato M. Malatesta 2-Proprietà degli algoritmi-17 14 26/09/2013 7 M.C.D. tra due interi Algoritmo MCD Inizio 1: immetti il valore di a; 2: immetti il valore di b; Il simbolo % indica il resto della 3: r = a % b; divisione tra gli operandi che si 4: r = 0 ? Se SI vai al passo 8; trovano ai suoi lati 5: a = b; 6: b = r; Tutti gli esecutori sanno Assegnazioni 7: vai al passo 3; svolgere le operazioni 8: mcd = b; indicate, per cui 9: emetti il valore di mcd; l’algoritmo scritto può essere eseguito! Fine. M. Malatesta 2-Proprietà degli algoritmi-17 15 26/09/2013 M.C.D. tra due interi La verifica della correttezza dell’algoritmo viene fatta con la tabella di traccia r Passo a b mcd Nella tabella di traccia si 1 12 assegnano alle variabili di 2 10 input i valori inizali e si svolge, 3 2 passo passo, l’algoritmo. Come 4 10 si vede, al passo 8, si ottiene r=0; il corrispondente valore di 5 2 b rappresenta il mcd. 6 0 7 2 M. Malatesta 2-Proprietà degli algoritmi-17 16 26/09/2013 8 Azioni elementari Nell’esempio del massimo comun divisore, abbiamo visto che il repertorio è diventato: ridotto, perché formato da poche azioni operative (immetti, emetti, calcola resto) semplice perché le istruzioni operative svolgono compiti elementari M. Malatesta 2-Proprietà degli algoritmi-17 17 26/09/2013 Azioni elementari Riducendo al minimo le capacità dell’esecutore, esso riconosce le seguenti azioni elementari: istruzioni operative quali: – immetti – emetti – assegna il valore di un’espressione ad una variabile controllo che consentono un: – salto condizionato: Se...vai … – salto incondizionato: vai… M. Malatesta 2-Proprietà degli algoritmi-17 18 26/09/2013 9 Azioni elementari M. Malatesta 2-Proprietà degli algoritmi-17 19 26/09/2013 Proprietà degli algoritmi Rispetto alla descrizione in linguaggio naturale, un algoritmo risulta: basato su un ridotto e semplice repertorio di istruzioni elementari (operative e di controllo) indipendente dal risolutore e suo modo di esprimersi privo delle ambiguità tipiche del linguaggio naturale Siamo perciò in grado di stabilire le proprietà cui devono soddisfare gli algoritmi. M. Malatesta 2-Proprietà degli algoritmi-17 20 26/09/2013 10 Proprietà degli algoritmi - Generalità Il processo risolutivo rappresentato dall’algoritmo deve essere in grado di trattare non soltanto il problema da cui è nato, ma tutti i problemi che si risolvono nello stesso modo e che ovviamente variano soltanto per i valori degli input. I problemi che hanno lo stesso procedimento risolutivo si dice che appartengono alla stessa classe di problemi. Pertanto l’algoritmo deve essere generale M. Malatesta 2-Proprietà degli algoritmi-17 21 26/09/2013 Proprietà degli algoritmi - Operatività discreta Come abbiamo detto il processo risolutivo deve essere sequenziale nel tempo. Una istruzione non può iniziare prima che la precedente sia terminata. Poiché in un algoritmo può essere eseguita una sola istruzione alla volta, si dice che esso opera in modo discreto. M. Malatesta 2-Proprietà degli algoritmi-17 22 26/09/2013 11 Proprietà degli algoritmi - Finitezza della descrizione Le parole Inizio e Fine indicano che la descrizione del processo risolutivo di un problema (algoritmo) deve avere una origine ed un termine. I passi elementari che compongono un algoritmo devono essere in numero finito. L’algoritmo deve cioè essere finito nella sua descrizione. M. Malatesta 2-Proprietà degli algoritmi-17 23 26/09/2013 Proprietà degli algoritmi - Finitezza della esecuzione L’inizio e la fine della descrizione di un algoritmo devono corrispondere anche all’inizio e alla fine della sua esecuzione. Non è accettabile un algoritmo che non termini la sua esecuzione. Poiché l’esecuzione di un algoritmo deve avvenire dopo un tempo finito rispetto al suo inizio, si dice che l’algoritmo deve essere finito nella esecuzione M. Malatesta 2-Proprietà degli algoritmi-17 24 26/09/2013 12 Proprietà degli algoritmi - Non ambiguità Ogni istruzione dell’algoritmo deve corrispondere ad una ben precisa operazione del repertorio di istruzioni dell’esecutore. Non sono ammesse nell’algoritmo istruzioni che l’esecutore non sia in grado di svolgere. Poiché le istruzioni presenti nell’algoritmo devono avere una interpretazione univoca da parte dell’esecutore, si dice che l’algoritmo deve essere non ambiguo. M. Malatesta 2-Proprietà degli algoritmi-17 25 26/09/2013 Proprietà degli algoritmi - Effettività Ogni istruzione dell’algoritmo deve far evolvere il processo risolutivo verso i risultati voluti. Non sono ammesse istruzioni che non producano avanzamento del processo risolutivo. In altre parole, nella tabella di traccia ogni passo prevede il cambiamento di valore di una variabile Poiché le istruzioni presenti nell’algoritmo devono di fatto far evolvere il processo e quindi produrre un effetto (calcolare i risultati) si dice che l’algoritmo deve essere effettivo M. Malatesta 2-Proprietà degli algoritmi-17 26 26/09/2013 13 Proprietà degli algoritmi - Sequenzialità Le operazioni previste dall’algoritmo devono essere eseguite una dopo l’altra nell’ordine in cui compaiono Poiché le istruzioni presenti nell’algoritmo devono di fatto essere eseguite nell’ordine strettamente consecutivo, si dice che l’algoritmo deve essere sequenziale 27 26/09/2013 M. Malatesta 2-Proprietà degli algoritmi-17 Concetto matematico di algoritmo Dati in ingresso (P) Dati in uscita (A) Un algoritmo esprime un legame tra due insiemi (insieme dei dati in input e insieme dei dati in output) e pertanto esso corrisponde al concetto matematico di funzione. Se non è possibile individuare una funzione che leghi logicamente l’input e l’output di un problema, il problema non è solubile e non esiste alcun algoritmo in grado di risolverlo. M. Malatesta 2-Proprietà degli algoritmi-17 28 26/09/2013 14 Le variabili Quando si scrive un algoritmo può essere necessario utilizzare delle variabili. Ogni variabile è identificata da un: Nome, scelto dal programmatore in modo che ricordi il suo significato Scopo, indica la finalità della variabile (ciò che indichiamo con “Significato” nella tabella delle variabili). Tipo, indica il tipo di dato cioè se si tratta di una variabile di tipo Intero, Reale, Logico, Carattere o Stringa (sequenza di caratteri) Contenuto, rappresenta il valore registrato nella variabile M. Malatesta 2-Proprietà degli algoritmi-17 29 26/09/2013 Argomenti M.C.D. tra due interi Azioni elementari Area del quadrato Minimo fra tre valori Proprietà degli algoritmi – – – – – – – Generalità Operatività discreta Finitezza della descrizione Finitezza della esecuzione Non ambiguità Effettività Sequenzialità Concetto matematico di algoritmo Le variabili M. Malatesta 2-Proprietà degli algoritmi-17 30 26/09/2013 15 Altre fonti di informazione P.Gallo, F.Salerno – Informatica Generale 1, ed. Minerva Italica G.Callegarin – Corso di Informatica 1, ed. CEDAM M. Pellerey-Informatica: fondamenti culturali e tecnologici, ed. SEI M. Malatesta 2-Proprietà degli algoritmi-17 31 26/09/2013 16