Algoritmi 1 Cos’è n Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati n Un algoritmo è un metodo per la soluzione di un problema adatto ad essere implementato sotto forma di programma 2 Risolvere un problema Ricettario Conoscenza di come si risolve un problema Descrizione della soluzione (ricetta) Esecutore (cuoco) Effettiva capacità di eseguire la soluzione del problema Altre Definizioni di Algoritmo n Un algoritmo si puo` definire come un procedimento che consente di ottenere un risultato atteso eseguendo, in un determinato ordine, un insieme di passi semplici corrispondenti ad azioni scelte solitamente da un insieme finito 4 Derivazione del Termine n Il termine deriva dal nome del matematico persiano Muhammad ibn Musa Al-Khwarizmi è Uno dei primi autori ad aver fatto riferimento esplicitamente a questo concetto n Tuttavia gli algoritmi erano presenti anche nelle antiche tradizioni matematiche è Es., la matematica babilonese, quella cinese o del Kerala trasmettevano le conoscenze in forma algoritmica 5 Semplicita vs. Ambiguita n Affermando che i passi costituenti di un algoritmo debbano essere “semplici”, si intende soprattutto che essi siano specificati in modo non ambiguo, è Immediatamente evidenti a chi sarà chiamato ad applicare l'algoritmo, cioè il suo esecutore 6 Semplicita vs. Ambiguita n “Rompete le uova” può essere un passo legittimo di un algoritmo di cucina, e potrebbe esserlo anche “Aggiungete sale quanto basta” se possiamo assumere che l'esecutore sia in grado di risolvere da solo l'ambiguità di questa frase n “Preparate un pentolino di crema pasticciera” non può probabilmente considerarsi semplice è Potrebbe però essere associato a un opportuno rimando a un'altra sezione del ricettario, che fornisca un algoritmo apposito per questa specifica operazione n Infine, una ricetta che preveda la cottura a microonde non può essere preparata da chi è sprovvisto dell'apposito elettrodomestico! 7 Esempi di Algoritmi n Ricetta per cucinare gli spaghetti è Metti l’acqua nella pentola è Fai bollire l’acqua è Metti la pasta nell’acqua è Aggiungi un po' di sale è Attendi alcuni minuti è Scola la pasta 8 Esempi di Algoritmi n Verifica se un numero è pari o dispari è Prendi il numero è Calcola il resto della divisione intera del numero per 2 è Se il resto è zero ü Allora il numero è pari ü Altrimenti il numero è dispari 9 Esempi di Algoritmi n Ricerca utente in un elenco telefonico è Dati ü Un insieme ordinato di coppie <nome, numero> ü Un nome X da ricercare è 1) Leggi la prima coppia <nome, numero> è 2) Se non hai oltrepassato l'ultima coppia Allora: ü Se nome = X allora il numero di telefono di X è quello letto; ü Altrimenti leggi la prossima coppia e vai al passo 2) è Altrimenti ü Il nome X cercato non è nell'elenco 10 Sviluppo di un programma PROBLEMA SISTEMA INFORMATICO: ANALISI STRUMENTI DI SUPPORTO EVOLUTI (CASE) SOLUZIONE INFORMALE FORMALIZZAZIONE SOLUZIONE FORMALE SISTEMA INFORMATICO: ALGORITMO AMBIENTE DI SVILUPPO TRADIZIONALE PROGRAMMAZIONE PROGRAMMA (alto livello) ESECUTORE DEL LINGUAGGIO DI ALTO LIVELLO TRADUZIONE ESECUTORE DEL LINGUAGGIO MACCHINA (HW) © Introduzione ai sistemi informatici 4/ed Donatella Sciuto, Giacomo Buonanno, Luca Mari PROGRAMMA (macchina) ESECUZIONE Esempi di Algoritmi n Ricerca di un utente X in un elenco telefonico n (alternativa) è 1) Leggi la prima coppia <nome, numero> è 2) Se non hai oltrepassato l'ultima coppia E nome precede X (secondo l'ordine alfabetico) Allora osserva la prossima coppia e ripeti il passo 2) è 3) Se hai oltrepassato l'ultima coppia OPPURE nome segue X Allora X non è presente nell'elenco è 4) Altrimenti il numero telefonico di X è l'ultimo letto 12 Proprietà degli Algoritmi n L'algoritmo è caratterizzato da è Finitezza: Composto da un numero finito di passi elementari. Le operazioni sono eseguite un numero finito di volte è Non ambiguità: I risultati non variano in funzione della macchina/persona che esegue l'algoritmo (deterministico) è Realizzabilità: Deve essere eseguibile con le risorse a disposizione 13 Proprietà degli Algoritmi n … ma gli esempi precedenti possiedono queste proprietà? n Problemi presenti è Ambiguità è Ipotesi implicite sulle capacità dell’esecutore è Uso del linguaggio naturale 14 Definire un Algoritmo n Per definire un algoritmo è necessario è Condurre un'attenta analisi del problema è Individuare i possibili ingressi è Precisare le uscite è Definire completamente e dettagliatamente la sequenza dei passi che portano alla soluzione ü E’ conveniente suddividere il problema in piccoli sottoproblemi 15 Rappresentare un Algoritmo n E’ necessario far riferimento a dei formalismi che è Non introducano ambiguità è Siano universalmente riconosciuti ed interpretati allo stesso modo da un generico esecutore è Permettano di rappresentare in modo efficace un algoritmo è Costituiscano un utile strumento per poi poter passare alla fase di codifica in un linguaggio di programmazione 16 Rappresentare un Algoritmo n Rappresentazione grafica è Diagramma di flusso (noto anche come diagramma a blocchi o flowchart) n Rappresentazione testuale è Notazione Lineare Strutturata (o pseudocode) 17 Operazioni di Base n Le operazioni primarie sono è Trasferimento di informazioni (istruzioni di I/O) ü Lettura dati, scrittura risultati, visualizzazione dati intermedi è Esecuzione di calcoli (valutazione espressioni) è Istruzioni di assegnamento è Strutture di controllo (che modificano il flusso sequenziale di esecuzione delle operazioni) 18 Flow chart: simboli fondamentali ingresso/uscita Elaborazione inizio/fine Selezione 19 Istruzioni di I/O n Lettura di dati in ingresso (input) n Scrittura dei risultati in uscita (output) Diagramma a blocchi Pseudocodice leggi A leggi A scrivi B scrivi B 20 Istruzione di Assegnamento n Concetto di variabile è Identificata da un’etichetta/identificatore simbolico è Può essere comodo pensare alla variabile come ad un contenitore in cui possiamo memorizzare o reperire dei dati utilizzati durante il calcolo è L’istruzione di assegnamento permette di assegnare un valore ad una variabile A=5 Alla variabile A viene assegnato il valore 5 21 Istruzione di Assegnamento n Inizializzazione è All’inizio di un algoritmo una variabile non ha alcun valore è Non ha quindi senso utilizzarla in una espressione (è un errore!) è Essa deve essere inizializzata ü O esplicitamente mediante un assegnamento ü Oppure mediante una operazione di lettura START A=B+3 START START B=0 leggi B A=B+3 A=B+3 CORRETTO CORRETTO ERRORE B non è inizializzata 22 Istruzione di Assegnamento n E’ stato usato il simbolo = per indicare l’istruzione di assegnamento n Alcuni testi/autori indicano invece il simbolo ← (per evitare confusione con l’operatore di uguaglianza) n Dato il seguente frammento di codice … A=5 A=A+1 Cosa fa quell’istruzione? n L’esecutore esegue i seguenti passi è Prima valuta l’espressione a destra, cioè calcola il valore di A+1 che vale 6 è Dopo assegna tale valore alla variabile a sinistra, cioè ad A è Alla fine dell’esecuzione di quella istruzione quindi, A vale 6 23 Valutazione delle Espressioni n L’esecutore è in grado di valutare espressioni aritmetiche Diagramma a blocchi Pseudo-codice B = 5*(82-35)/7 B = 5*(82-35)/7 A = (B+34)/B*2 A = (B+34)/B*2 24 Struttura di Selezione n Verifica di una condizione leggi N VERO Stampa “N e' negativo!” E' N < 0 ? FALSO Stampa “N e' non negativo!” 25 Rappresentazione degli Algoritmi n I diagrammi di flusso possono presentarsi è Ad un livello generale è Ad un livello particolare n A seconda del livello di dettaglio con cui specificano le operazioni da compiere n E’ opportuno procedere per fasi successive è Un diagramma globale (di massima) per focalizzare le operazioni essenziali da compiere è Un diagramma di flusso più particolareggiato, che tenga conto di operazioni più semplici e più elementari 26 Tecniche di Programmazione n Programmazione top-down è Scomposizione iterativa del problema in sottoproblemi è I sottoproblemi devono essere indipendenti ed avere interfacce ben definite è Visibilità dei dettagli di ogni sottoproblema n Programmazione bottom-up 27 Esempio: Somma di due numeri 28