18/10/2002 Lezione tratta dal libro: D. Sciuto, G. Buonanno, W. Fornaciari, L. Mari Introduzione ai sistemi informatici Lezione 8 Seconda Edizione, McGraw-Hill Introduzione agli algoritmi Capitolo 2: La formalizzazione dell’informazione Soluzione di un problema Soluzione di un problema Problema soggetto 1 ANALISI ANALISI Modello di soluzione STESURA STESURA DESCRIZIONE DESCRIZIONE SO G G ETTO 1 Conoscenza di come si risolve un problema Descrizione INTERPREINTERPRETAZIONE TAZIONE Deve fare tutto lo stesso soggetto? 18/10/2002 soggetto 2 SO G G ETTO 2 Effettiva capacità di risolverlo Descrizione interpretata ESECUZIONE ESECUZIONE Soluzione Introduzione ai sistemi informatici 3 Analisi ¾ 4 ¾ Eliminare ogni ambiguità nella specifica gli obiettivi ¾ Evidenziare ¾Regole ¾Dati espliciti ed impliciti ¾ Eliminare ¾Dettagli inutili ed ambigui ¾ Focalizzare • Comprensione del problema • Modellizzazione del problema • Ricerca della soluzione Introduzione ai sistemi informatici Introduzione ai sistemi informatici Comprensione del Problema Dalla specifica di un problema alla soluzione: la fase di analisi. 18/10/2002 18/10/2002 5 Corso Informatica A – Allievi Gestionali – prof. C. Silvano 18/10/2002 Introduzione ai sistemi informatici 6 1 18/10/2002 Ricerca della soluzione Definizione di algoritmo Algoritmo La soluzione è espressa come una sequenza di operazioni la cui esecuzione porta alla soluzione del problema Æ l’algoritmo risolutivo del problema Dati 18/10/2002 Algoritmo Dati Iniziali Si definisce algoritmo una sequenza di azioni che trasformi i dati iniziali in un numero finito di passi, elementari e non ambigui, per giungere al risultato finale. Soluzione Introduzione ai sistemi informatici Dati Finali (soluzione) Questa sequenza di azioni è valida per un insieme di dati iniziali ben definito e può essere eseguita da un opportuno esecutore. 7 Scomposizione in sottoproblemi 18/10/2002 Introduzione ai sistemi informatici 8 Algoritmo (definizione informale) ¾ Sequenza finita di istruzioni, da un esecutore (può essere uno strumento automatico), ¾ che descrive come realizzare un compito (come risolvere un “problema”). ¾ Tutte le operazioni specificate dall’algoritmo devono essere direttamente eseguibili dall’esecutore… (in questo caso si chiamano operazioni elementari) ¾ comprensibili ¾… altrimenti è necessario “scomporre” il problema troppo complesso in sottoproblemi più semplici 18/10/2002 Introduzione ai sistemi informatici 9 18/10/2002 ¾ I passi sono eseguiti in sequenza e l'ordine delle istruzioni è essenziale per la correttezza dell'algoritmo. ¾ Non basta organizzare i passi in sequenza, occorre valutare delle condizioni e in alcuni casi eseguire delle azioni ripetutamente. Introduzione ai sistemi informatici 10 Le strutture di controllo: SEQUENZA Algoritmo 18/10/2002 Introduzione ai sistemi informatici ¾ Le istruzioni devono semplicemente essere eseguite nell’ordine in cui sono presentate. ¾ Esempio: • solleva il ricevitore • componi il numero • … 11 Corso Informatica A – Allievi Gestionali – prof. C. Silvano 18/10/2002 Introduzione ai sistemi informatici 12 2 18/10/2002 Le strutture di controllo: SELEZIONE ¾ Le istruzioni da eseguire sono determinate dalla valutazione di una data condizione ¾ Esempio: Le strutture di controllo: ITERAZIONE • SE il numero è libero • ALLORA • attendi la risposta • conduci la conversazione • deponi il ricevitore ¾ Le istruzioni devono essere eseguite ripetutamente fino a che non si verifica una determinata condizione ¾ Esempio: • RIPETI • componi una cifra • FINO al completamento del numero • ALTRIMENTI • deponi il ricevitore 18/10/2002 Introduzione ai sistemi informatici 13 18/10/2002 Caratterizzazione dell’esecutore ¾ Un esecutore è caratterizzato da: ¾ ¾ ¾ ¾ Introduzione ai sistemi informatici 14 Caratterizzazione dell’esecutore • Il linguaggio che è in grado di interpretare • L’insieme della azioni che è in grado di compiere. • L’insieme delle regole che a ogni costrutto linguistico sintatticamente corretto associano le relative azioni da compiere. 18/10/2002 Introduzione ai sistemi informatici 15 Esecutori e linguaggi Il linguaggio che l’esecutore è in grado di interpretare deve essere definito in termini formali: caratterizzazione sintattica dell’esecutore. L’insieme della azioni che l’esecutore è in grado di compiere deve essere univocamente definito. Tali azioni devono essere deterministiche: l’esecuzione di una stessa azione deve produrre sempre lo stesso risultato. L’insieme delle regole di associazione tra costrutti del linguaggio e azioni deve essere univocamente definito: caratterizzazione semantica dell’esecutore. 18/10/2002 Introduzione ai sistemi informatici 16 Soluzione effettiva per l’esecutore ¾ Un esecutore (calcolatore) è definito in base a tre elementi: ¾ Se il problema è “semplice” per l’esecutore… • L’esecutore lo svolge direttamente • l’insieme delle operazioni che è capace di compiere; • l’insieme delle istruzioni che capisce (sintassi); • quali operazioni associa ad ogni istruzione che riconosce (semantica). ¾ Altrimenti… • Il descrittore deve scomporre il problema in sottoproblemi finché l’algoritmo non è espresso esclusivamente tramite operazioni elementari ¾ Il calcolatore “capisce” le istruzioni che fanno parte del linguaggio macchina. 18/10/2002 Introduzione ai sistemi informatici 17 Corso Informatica A – Allievi Gestionali – prof. C. Silvano 18/10/2002 Introduzione ai sistemi informatici 18 3 18/10/2002 Procedura di soluzione di un problema Soluzione effettiva per l’esecutore soluzione di un problema si dice effettiva per l’esecutore se l’esecutore è in grado di: ¾ La ¾ Se la soluzione di un problema è effettiva, l’esecutore la attua. ¾ Altrimenti il problema viene scomposto in sottoproblemi, e per ognuno di questi si applica nuovamente una procedura. • Interpretare la descrizione della soluzione ( e quindi associare a essa le azioni che deve compiere per eseguirla) • Eseguire le azioni, completando l’esecuzione in un tempo finito! 18/10/2002 Introduzione ai sistemi informatici 19 Procedura effettiva 20 concetti di problema elementare e azione elementare sono interscambiabili ed evidenziano rispettivamente l’aspetto descrittivo e quello esecutivo delle procedure effettive. insieme di problemi è una procedura effettiva quando: ¾I • Tutti i problemi dell’insieme sono elementari; • E’ fissato l’ordine di soluzione dei problemi; • E’ esplicitamente specificato il modo in cui un problema utilizza i risultati dei problemi che lo precedono. Introduzione ai sistemi informatici Introduzione ai sistemi informatici Problema e azione elementari ¾ Un 18/10/2002 18/10/2002 21 18/10/2002 Proprietà di un’azione elementare Introduzione ai sistemi informatici 22 Dal problema alla soluzione automatica ¾ Finitezza • l’azione deve concludersi in un tempo finito ¾ Specifiche ¾ Osservabilità • l’azione deve avere un effetto osservabile, cioè deve produrre qualcosa ¾ Riproducibilità • a partire dallo stesso stato iniziale, la stessa azione deve produrre sempre lo stesso risultato finale 18/10/2002 Introduzione ai sistemi informatici 23 Corso Informatica A – Allievi Gestionali – prof. C. Silvano dei requisiti: descrizione precisa e corretta dei requisiti (verificabilità) ---> cosa? ¾ Progetto: procedimento con cui si individua la soluzione ---> come? ¾ Soluzione: algoritmo 18/10/2002 Introduzione ai sistemi informatici 24 4 18/10/2002 Processo di sviluppo di un programma Soluzione Problema ANALISI ANALISI Proprietà degli algoritmi informale FORMALIZZAZIONE FORMALIZZAZIONE ¾ Correttezza Soluzione formale: ALGORITMO PROGRAMMAZIONE PROGRAMMAZIONE • L’algoritmo perviene alla soluzione del compito cui è preposto. Programma Ling. ad alto livello COMPILAZIONE COMPILAZIONE ¾ Efficienza • L’algoritmo perviene alla soluzione del problema usando la minima quantità di risorse fisiche: Programma Ling. macchina • tempo di esecuzione, memoria, … ESECUZIONE ESECUZIONE 18/10/2002 Introduzione ai sistemi informatici 25 ¾ ¾ Univocità • Non deve esistere alcun grado di libertà da parte del processore nell’esecuzione di ogni azione ¾ Effettività • Le operazioni previste dall’algoritmo devono poter essere eseguite in tempo finito ¾ ¾ Ingresso • Un algoritmo è corretto se porta ad un risultato coerente per ogni possibile scelta dei dati in ingresso ¾ Uscita ¾ • L’algoritmo deve fornire uno o più dati in uscita ¾ Introduzione ai sistemi informatici 26 Concetti base Proprietà di un algoritmo ¾ 18/10/2002 Terminazione • L’esecuzione di un algoritmo deve terminare in un numero Algoritmo descrizione di come si risolve un problema Programma algoritmo scritto in modo che possa essere eseguito da un calcolatore (linguaggio di programmazione) Linguaggio macchina linguaggio effettivamente “compreso” da un calcolatore, caratterizzato da istruzioni primitive semplici descritte in codifica binaria. Compito dell’informatico è produrre algoritmi (cioè capire la sequenza di passi che portano alla soluzione di un problema) e codificarli in programmi (cioè renderli comprensibili al calcolatore) finito di passi 18/10/2002 Introduzione ai sistemi informatici 27 Il problema e la soluzione 18/10/2002 di affrontare la soluzione occorre capire esattamente il problema ¾ Non serve saper risolvere il problema sbagliato Algoritmo Dati Iniziali • In questo corso supporremo che il problema sia ben noto e chiaramente formulato e ci concentreremo sul formulare una soluzione • Spesso in pratica è più difficile capire esattamente la natura del problema che non trovarne una soluzione! (Requirements engineering) Introduzione ai sistemi informatici 28 Algoritmo = dati + istruzioni ¾ Prima 18/10/2002 Introduzione ai sistemi informatici Dati Finali (soluzione) Composto da Dati 29 Corso Informatica A – Allievi Gestionali – prof. C. Silvano 18/10/2002 Istruzioni che operano sui dati Introduzione ai sistemi informatici 30 5 18/10/2002 Dati e istruzioni ¾ Tipi • • • • Criteri di classificazione dei dati di dati Numeri naturali o interi o reali Caratteri alfanumerici Dati logici o booleani Array o vettore di n elementi ¾ Visibilità (1, -2, 0.34) (A, B, ..) (Vero, Falso) ({1,2,3}) ¾ Variabilità 18/10/2002 (es. leggi, scrivi) (es. max = A + B) (es. SE, RIPETI ) Introduzione ai sistemi informatici ¾ Struttura • elementari (interi, alfanumerici, booleani, …) • strutturati (array, matrici, …) 31 1. Linguaggio naturale ¾ 2. Diagramma a blocchi ¾ 3. Pseudocodice ¾ 4. Linguaggio di programmazione 18/10/2002 Introduzione ai sistemi informatici 18/10/2002 Introduzione ai sistemi informatici ¾ Algoritmo formulato per essere comunicato tra esseri umani • sintetico e intuitivo • codificato in linguaggi informali o semi-formali (linguaggio naturale, diagrammi di flusso, …) ¾ Algoritmo formulato per essere eseguito automaticamente • preciso ed eseguibile • codificato in linguaggi comprensibili dagli esecutori automatici (linguaggio macchina o linguaggio di programmazione ad alto livello) 33 18/10/2002 18/10/2002 34 ¾ Problema: Calcolare il prodotto di due numeri interi positivi Regole base: • • • • Introduzione ai sistemi informatici Esempio Codifica degli algoritmi ¾ 32 Codifica degli algoritmi Rappresentazione degli algoritmi ¾ nel tempo • costanti • variabili (acquisizione dall’esterno o assegnazione) ¾ Istruzioni • Operazioni di Input/Output • Operazioni Aritmetico-logiche • Strutture di controllo da parte dell’utente • visibile (di ingresso o uscita) • trasparente (dati temporanei di supporto) Procedimento sequenziale Procedimento non ambiguo Formulazione generale Prevedere tutti i casi Introduzione ai sistemi informatici 35 Corso Informatica A – Allievi Gestionali – prof. C. Silvano 18/10/2002 Introduzione ai sistemi informatici 36 6 18/10/2002 Formulazione dell’algoritmo Formulazione dell’algoritmo Leggi w Leggi y sp = 0 ns = y Esegui { sp = sp + w ns = ns - 1 } Finché (ns = 0) z = sp Visualizza z ¾ Pseudocodice: Leggi w Leggi y Somma w a se stesso y volte Visualizza il risultato 18/10/2002 Introduzione ai sistemi informatici 37 18/10/2002 Strumenti per la descrizione degli algoritmi ¾ Pseudocodice: ¾ Diagrammi di flusso (flow chart, schemi a blocchi): • SE A>0 ALLORA A=A+1 ALTRIMENTI A=0 (specifiche iniziali, ancora intelligibili solo all’essere umano) ¾ Formali (programmi da eseguire): linguaggi di programmazione Introduzione ai sistemi informatici START PROCESS 39 18/10/2002 NO Scrivi S END 18/10/2002 Introduzione ai sistemi informatici Introduzione ai sistemi informatici NO 40 deve leggere un intero N e restituire il fattoriale di questo numero, cioè il valore ottenuto da N x (N-1) x (N-2) x … x 1. ¾ Scrivere l’algoritmo immaginando che i dati di ingresso siano sempre corretti (cioè sempre maggiori di zero). ¾ Modificare l’algoritmo in modo da considerare anche la possibilità che siano inseriti valori inferiori a 1. S s S+I I s I+1 I>N? DECISION ¾ L'esecutore Ss0 Is1 SI SI Esempio Leggi N Calcolare e poi stampare la somma dei primi N numeri naturali I/O END Start Esempio 38 Linguaggi semi-formali ¾ Semi-formali 18/10/2002 Introduzione ai sistemi informatici 41 Corso Informatica A – Allievi Gestionali – prof. C. Silvano 18/10/2002 Introduzione ai sistemi informatici 42 7 18/10/2002 Diverse alternative (es. N = 7) 1 2 6 24 120 720 * * * * * * 2 3 4 5 6 7 = = = = = = 2 6 24 120 720 5040 Le alternative sono “diverse”? Start Start Start Leggi N Leggi N Leggi N Leggi N Ps1 Is1 PsN Ps1 Is1 PsN 7 42 210 840 2520 Start NO I<N * * * * * 6 5 4 3 2 SI 42 210 840 2520 5040 NO IsI+1 PsP*I Scrivi P = = = = = N>2 I<N Scrivi P SI SI NO IsI+1 PsP*I Scrivi P End NsN-1 PsP*N Scrivi P End NO 43 18/10/2002 Come gestire le “eccezioni” Start Start Leggi N Leggi N Ps1 Is1 NO Scrivi P I<N NO N>0 SI NO IsI+1 PsP*I Scrivi P End Algoritmo per il caso “normale”. Come lo modifico per gestire anche i casi che non erano stati previsti? 18/10/2002 44 1: Determinare il maggiore di 2 numeri interi x e y ¾ Idea: un numero x è maggiore di un numero y se la loro differenza è positiva SI I<N SI IsI+1 PsP*I End Introduzione ai sistemi informatici 45 18/10/2002 Pseudocodice: Introduzione ai sistemi informatici Introduzione ai sistemi informatici 46 Esempio ¾ Problema 2: Determinare il maggiore di 3 numeri interi x, y e z ¾ Idea: Scomporre il problema in modo da utilizzare l’algoritmo usato per la soluzione del Problema 1 Leggi un valore dall’esterno e inseriscilo nella variabile x Leggi un secondo valore dall’esterno e inseriscilo nella variabile y Calcola la differenza d fra x e y (d = x – y) Se (d > 0) Stampa la frase “il massimo è “ seguita dal valore contenuto in x Altrimenti Stampa la frase “il massimo è “ seguita dal valore contenuto in y 18/10/2002 Introduzione ai sistemi informatici ¾ Problema Formulazione dell’algoritmo ¾ N= 0ÆP= 0 N = -4 Æ P = -4 Esempio Ps1 Is1 Scrivi “Errore!” NsN-1 PsP*N End N= 0ÆP=1 N = -4 Æ P = 1 Introduzione ai sistemi informatici SI Cosa succede se il dato in ingresso non rispetta le specifiche (N > 0)? Per esempio, che risultato restituisce l’esecutore per N = 0 ? e per N = -4 ? End 18/10/2002 N>2 47 Corso Informatica A – Allievi Gestionali – prof. C. Silvano 18/10/2002 Introduzione ai sistemi informatici 48 8 18/10/2002 Formulazione dell’algoritmo ¾ Esempio Pseudocodice: ¾ Problema 3: Determinare il maggiore di n numeri interi x1, x2, …, xn ¾ Idea: Generalizzazione del Problema 2 basato sull’utilizzo dell’algoritmo usato per la soluzione del Problema 1 Se x è maggiore di y (Problema 1); la soluzione corrisponde al maggiore tra x e z (Problema 1) Altrimenti la soluzione corrisponde al maggiore tra y e z (Problema 1) 18/10/2002 Introduzione ai sistemi informatici 49 18/10/2002 Introduzione ai sistemi informatici 50 Formulazione dell’algoritmo ¾ Pseudocodice: Calcola il maggiore tra i primi due numeri (Problema 1); Finché (ci sono numeri da verificare) Trova il maggiore tra il nuovo numero e il numero maggiore trovato in precedenza Visualizza il numero maggiore trovato. 18/10/2002 Introduzione ai sistemi informatici 51 Corso Informatica A – Allievi Gestionali – prof. C. Silvano 9