Algoritmi Maurizio Palesi Maurizio Palesi 1 Cos’è Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Un algoritmo è un metodo per la soluzione di un problema adatto ad essere implementato sotto forma di programma Maurizio Palesi 2 1 Altre Definizioni di Algoritmo 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 Maurizio Palesi 3 Derivazione del Termine 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 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 Maurizio Palesi 4 2 Semplicita vs. Ambiguita 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 Maurizio Palesi 5 Semplicita vs. Ambiguita “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 “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 Infine, una ricetta che preveda la cottura a microonde non può essere preparata da chi è sprovvisto dell'apposito elettrodomestico! Maurizio Palesi 6 3 Esempi di Algoritmi Ricetta per cucinare gli spaghetti ÎMetti l’acqua nella pentola ÎFai bollire l’acqua ÎMetti la pasta nell’acqua ÎAggiungi un pò di sale ÎAttendi 6 minuti ÎScola la pasta Maurizio Palesi 7 Esempi di Algoritmi Verifica se un numero è pari o dispari ÎPrendi il numero ÎCalcola il resto della divisione intera del numero per 2 ÎSe il resto è zero 9Allora il numero è pari 9Altrimenti il numero è dispari Maurizio Palesi 8 4 Esempi di Algoritmi Ricerca utente in un elenco telefonico ÎDati 9 Un insieme ordinato di coppie <nome, numero> 9 Un nome X da ricercare Î1) Leggi la prima coppia <nome, numero> Î2) Se non hai oltrepassato l'ultima coppia Allora: 9 Se nome = X allora il numero di telefono di X è quello letto; 9 Altrimenti leggi la prossima coppia e vai al passo 2) ÎAltrimenti 9 Il nome X cercato non è nell'elenco Maurizio Palesi 9 Esempi di Algoritmi Ricerca di un utente X in un elenco telefonico (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 Maurizio Palesi 10 5 Proprietà degli Algoritmi 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 Maurizio Palesi 11 Proprietà degli Algoritmi … ma gli esempi precedenti possiedono queste proprietà? Problemi presenti ÎAmbiguità ÎIpotesi implicite sulle capacità dell’esecutore ÎUso del linguaggio naturale Maurizio Palesi 12 6 Definire un Algoritmo 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 9E’ conveniente suddividere il problema in piccoli sottoproblemi Maurizio Palesi 13 Rappresentare un Algoritmo 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 Maurizio Palesi 14 7 Rappresentare un Algoritmo Rappresentazione grafica ÎDiagramma di flusso (noto anche come diagramma a blocchi o flow-chart) Rappresentazione testuale ÎNotazione Lineare Strutturata (o pseudocode) Maurizio Palesi 15 Operazioni di Base Le operazioni primarie sono ÎTrasferimento di informazioni (istruzioni di I/O) 9Lettura 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) Maurizio Palesi 16 8 Simboli Convenzionali ingresso/uscita inizializzazione documento Elaborazione inizio/fine input manuale elab. predefinita connessioni disco decisione mem. sequenziale Maurizio Palesi 17 Istruzioni di I/O Lettura di dati in ingresso (input) Scrittura dei risultati in uscita (output) Diagramma a blocchi Maurizio Palesi Pseudocodice leggi A leggi A scrivi B scrivi B 18 9 Istruzione di Assegnamento 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 Alla variabile A viene assegnato il valore 5 A=5 Maurizio Palesi 19 Istruzione di Assegnamento 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 9 O esplicitamente mediante un assegnamento 9 Oppure mediante una operazione di lettura START START B=0 leggi B A=B+3 A=B+3 CORRETTO CORRETTO START A=B+3 ERRORE B non è inizializzata Maurizio Palesi 20 10 Istruzione di Assegnamento E’ stato usato il simbolo = per indicare l’istruzione di assegnamento Alcuni testi/autori indicano invece il simbolo ← (per evitare confusione con l’operatore di uguaglianza) Dato il seguente frammento di codice … A=5 A=A+1 Cosa fa quell’istruzione? 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 Maurizio Palesi 21 Valutazione delle Espressioni 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 Maurizio Palesi 22 11 Rappresentazione degli Algoritmi I diagrammi di flusso possono presentarsi ÎAd un livello generale ÎAd un livello particolare A seconda del livello di dettaglio con cui specificano le operazioni da compiere 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 Maurizio Palesi 23 Tecniche di Programmazione 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 Programmazione bottom-up Maurizio Palesi 24 12