Fondamenti di Informatica Algoritmi Corso di Laurea in Ingegneria Civile Prof. Dario Bianchi Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Elaborazione dell’Informazione Risolvere un problema comporta: • Avere dei dati in ingresso • Elaborare questi dati • Produrre dei dati in uscita Bisogna quindi: • Descrivere i dati • Specificare come trattarli Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Processi • Un processo trasforma un insieme di dati iniziali nei risultati finali mediante una successione di azioni elementari. • Per descrivere un processo e’ necessario utilizzare un linguaggio. Il linguaggio deve far corrispondere a una frase ben precisa o istruzione ad ogni azione elementare e deve indicare come le aziono elementari si succedono nel processo. Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Programma, esecutore, algoritmo • L’insieme delle istruzioni che descrivono un processo espresse in un qualche linguaggio prende il nome di programma. • Il programma e’ espresso in termini di azioni elementari che un esecutore, uomo o macchina, deve essere in grado di mettere in atto. • La descrizione rigorosamente definita di un processo (eseguibile in un tempo finito) e’ un algoritmo. Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Requisiti degli algoritmi • Ogni istruzione deve essere ben definita nei suoi effetti (rigorosamente e senza ambiguita`). • Ogni istruzione rappresenta una azione elementare che che l’esecutore puo` portare a termine in un tempo finito. • Il processo dall’algoritmo deve terminare dopo un numero finito di passi. ( un passo = esecuzione di una azione elementare) Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Algoritmo di Euclide • Calcola il massimo comun divisore fra due interi positivi m ed n (supponiamo che n ≥ m, altrimenti li possiamo scambiare). • L’ algoritmo si compone di 3 passi ripetuti ciclicamente fino ad una condizione di arresto: Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Algoritmo di Euclide • Passo E1 {ricerca del resto} : Sia m ≥ n. Si divide m per n. Sia r il resto. Allora 0 ≤ r < n. • Passo E2 {r = 0?} : Se r = 0 l’ algoritmo e’ terminato e n e’ la risposta finale. • Passo E3 {scambio} : Se r ≠ 0 si operano gli scambi m ← n e n ← r. Si torni al passo E1. Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Algoritmo di Euclide: esempio Si voglia l’ MCD fra 30 e 45 (I due numeri vanno scambiati) m n r 45 30 15 30 15 0 Poiche’ il resto r = o, l’ultimo valore per n e’ l’ MCD Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Algoritmo di Euclide: finitezza • Poiche’ al passo E1 {ricerca del resto} si ha senpre 0 ≤ r < n, ad ogni scambio il valore di n decresce. • Dopo un numero finito di passi si raggiungera` la condizione r = 0, e la terminazione dell’ algoritmo. Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Algoritmo di Euclide: correttezza • Ad ogni passo abbiamo che m = q n + r (con q intero). • Se r ≠0 ogni divisore di m,n divide anche r=m-qn. D’altra parte anche ogni divisore di n,r divide m=qn+r. • In pratica la coppia m,n primo e dopo lo scambio m ← n e n ← r hanno lo stesso MCD. • Se r=0 l’ algoritmo termina e n e’ l’MCD. Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Il crivello di Eratostene • Si vogliono trovare tutti i numeri primi compresi fra 2 e n (In modo efficiente). 1) Si costruisca una sequenza ordinata dei numeri fra 2 e n. 2) Si estragga il primo numero dalla sequenza. E’ necessariamente un numero primo. 3) Si eliminino dalla sequenza tutti i multipli del numero estratto al passo 2). 4) se la sequenza non e’ vuota si torna la passo 2) altrimenti si termina. Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Il crivello di Eratostene: esempio • Sequenza iniziale (da 2 a 20): 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20 2 e’ primo lo elimino con tutti i suoi multipli: 3,5,7,9,11,13,15,17,19 3 e’ primo lo elimino con tutti i suoi multipli: 5,7,11,13,17,19 5 e’ primo lo elimino con tutti i suoi multipli: … 19 e’ primo, la sequenza e’ vuota, termino. Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Diagrammi di flusso • Sono un linguaggio grafico per la rappresentazione di algoritmi • Le operazioni su cui si basa un diagramma di flusso – – – – – – Ingresso/Uscita dati Trasferimento di informazione (Assegnamenti) Calcolo di espressioni aritmetiche e logiche Assunzione di decisioni Esecuzione di iterazioni (Cicli) Possono contenere costanti e variabili Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Simboli Start Inizio diagramma Stop Fine diagramma Var Var = Expr Var Scrittura dati Si Condizioni Expr1 = Expr2 Expr1 ≠ Expr2 Expr1 < Expr2 Expr1 > Expr2 Expr1 ≤ Expr2 Expr1 ≥ Expr2 Dario Bianchi - 2003 Linea di flusso Elaborazione Assegnamenro Lettura dati Condizione Decisione Fond. Informatica - Ing. Civile No Programmazione Strutturata • Si compone di sequenze, decisioni (if then, if then else) e cicli (while-do, repeat until). • Ogni diagramma ha esattamente un ingresso ed una uscita. • Ogni azione puo essere – una azione semplice – una azione composta da altri diagrammi strutturati Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Somma di tre numeri Start X1 Somma←X1+X2+X3 X2 Somma X3 Fine Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Somma di N numeri Start N N I<N Si Somma=0 X3 I=0 X Somma Fine Somma←Soma+X I=I+1 Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Strutture per il controllo di flusso • Sequenza I I O O Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Strutture per il controllo di flusso • Decisione If then I Vero Cond I Azione Falso O O Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Strutture per il controllo di flusso • Decisione If Then Else I Vero Falso Cond Azione1 I Azione2 O O Dario Bianchi - 2003 Fond. Informatica - Ing. Civile Strutture per il controllo di flusso • Ciclo While-Do I I Falso Cond Vero Azione Dario Bianchi - 2003 O Fond. Informatica - Ing. Civile O Strutture per il controllo di flusso • Ciclo Repeat Until I I Azione Falso Vero O Cond O Dario Bianchi - 2003 Fond. Informatica - Ing. Civile 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 solo all’interno del sottoproblema stesso Dario Bianchi - 2003 Fond. Informatica - Ing. Civile