Elementi di Informatica e Programmazione



Documenti analoghi
Dal problema a un programma comprensibile dal calcolatore. Il Progetto degli Algoritmi. Dall analisi del problema all esecuzione

Il concetto di calcolatore e di algoritmo

Problemi, algoritmi, calcolatore

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

I Problemi e la loro Soluzione. Il Concetto Intuitivo di Calcolatore. Esempio. Risoluzione di un Problema

Esempio: Problema 2 Il Progetto degli Algoritmi (Il linguaggio degli schemi a blocchi: seconda parte)

Elementi di Informatica e Programmazione

Università di Salerno Corso di FONDAMENTI DI INFORMATICA Corso di Laurea Ingegneria. Docente : Ing. Secondulfo Giovanni Anno Accademico

- Dispensa I ALGORITMI

Università degli Studi di Verona. Algoritmie Diagrammidiflusso. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

Laboratorio di Programmazione

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo

Informatica. Come si risolve un problema?

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

La formalizzazione dell informazione: Dati e Diagrammi di Flusso

LA METAFORA DELL UFFICIO

Sviluppo di programmi

Appunti del corso di Informatica 1 (IN110 Fondamenti) 3 Modelli di calcolo

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Pag. 1. La formalizzazione dell informazione: Dati e Diagrammi di Flusso. Codifica degli algoritmi

Lezione 8. Soluzione di un problema Problema. Soluzione di un problema. Comprensione del Problema. Analisi. Introduzione agli algoritmi

Algoritmi. Andrea Passerini Conoscenze informatiche e relazionali Corso di laurea in Scienze dell Ingegneria Edile

L ELABORATORE ELETTRONICO

Sistemi di Elaborazione delle Informazioni

Algoritmi. Andrea Passerini Informatica. Algoritmi

Risoluzione di un problema

Sviluppo di programmi

Fasi di creazione di un programma

Altrimenti, il M.C.D. di a e b è anche divisore di r (e.g. a=15,b=6,r=3 che è il M.C.D.)

L ELABORATORE ELETTRONICO!

Corso di Informatica di Base

Parte Seconda: Fondamenti di informatica

Analisi e Programmazione

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

I Problemi e la loro Soluzione. Il Concetto Intuitivo di Calcolatore. Risoluzione di un Problema. Esempio

Algoritmi. Un tema centrale dell informatica è lo studio degli algoritmi.

Dall algoritmo al calcolatore: concetti introduttivi. Algoritmo. Problema: consumo medio 9/27/2018. Fondamenti di Programmazione 3

Sviluppo di programmi

La Programmazione particolare insieme di azioni particolare tipologia di dati risolvere un problema

Elaboratore Elettronico

L ELABORATORE ELETTRONICO

LA METAFORA DELL UFFICIO

ELEMENTI DI INFORMATICA L. Ing. Claudia Chiusoli

Corso di Programmazione Dati e Istruzioni. Comunicazione dell algoritmo all elaboratore. Programmazione. Dott. Pasquale Lops

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

INFORMATICA. Scienza dei calcolatori elettronici (computer science) Scienza dell informazione (information science)

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova

Algoritmi e programmi

Concetti Introduttivi. Il Computer

Capitolo 3 Elaborazione e Strutturazione dell Informazione. (Introduzione ai Sistemi Informatici Sciuto et alii)

Sommario FONDAMENTI DI INFORMATICA. Definizione formale di algoritmo. Informatica e algoritmi. ALGORITMI E LINGUAGGIO PYTHON Introduzione

Linguaggi, Traduttori e le Basi della Programmazione

Pseudo codice. Pseudo codice, Paolo Bison, FI07, p.1 / Pseudo codice, Paolo Bison, FI07, p.3

Corso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a

LA METAFORA DELL UFFICIO LAVAGNA DI PROGRAMMA SPORTELLO UTENTE LAVAGNA DI LAVORO

Unità E1. Obiettivi. Non solo problemi matematici. Problema. Risoluzione di un problema. I dati

CAPITOLO 3 - ALGORITMI E CODIFICA

Scaletta. Cenni di computabilità. Cosa fa un programma? Definizioni (1/2) Definizioni (2/2) Problemi e domande. Stefano Mizzaro 1

! Problemi, domande, risposte. ! Algoritmi che calcolano funzioni. ! Funzioni computabili e non. ! Problema = insieme di domande omogenee. !

Linguaggio Testuale. E un formalismo che consente di rappresentare gli algoritmi mediante semplici istruzioni in linguaggio «parlato»

Inf matica C.I. Metodologia Scientifica & Linguistica Mario&Pavone& &

Pseudo codice. Paolo Bison. Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova. Pseudo codice, Paolo Bison, A.A , p.

Analisi strutturata 1

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Termine algoritmo da:

o Introduzione agli algoritmi o Rappresentazione delle Informazioni o Architettura del calcolatore o Reti di Calcolatori

L uomo come esecutore di algoritmi

ALGORITMI: PROPRIETÀ FONDAMENTALI

= < < < < < Matematica 1

MODULO 07. La soluzione dei problemi mediante gli algoritmi

Risoluzione dei problemi

Flow-chart. Introduzione agli algoritmi e ai diagrammi a blocchi.

Algoritmi e (cenni sul) calcolatore

L informazione. Bateson, Ricevere informazioni vuol dire necessariamente ricevere notizie di differenza (Es.: Luce accesa/spenta, 1/0,...

CdL in Medicina Veterinaria - STPA AA

Il concetto di algoritmo. Il concetto di algoritmo. Costruire un algoritmo. Il concetto di algoritmo (più tecnico) Dati di ingresso (input)

Algoritmi e Programmi

INFORMATICA Algoritmi come formalizzazione della risoluzione di un problema

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Dal Problema all Algoritmo. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Caratteristiche di un calcolatore elettronico

Informatica. Richiami. Diagrammi di flusso. Algoritmi, programmi e dati. Algoritmi e diagrammi di flusso. per le lauree triennali

L INFORMATICA c1. Informatica è qualcosa che ha a che fare con l uso del computer

Elementi di informatica

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

Algoritmi. Informatica B. Daniele Loiacono

1 Esercizi in pseudocodice

Transcript:

Elementi di Informatica e Programmazione Il concetto di Algoritmo e di Calcolatore Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Cos è l informatica? L informatica è lo studio sistematico degli algoritmi che descrivo e trasforma l informazione: la loro teoria, analisi, progetto, efficienza, realizzazione applicazione [ACM Association for Computing Machinery] L informatica è dunque una scienza: l elaborazione dell informazione avviene in modo sistematico e rigoroso L elaborazione può essere automatizzata Docente: Daniela Fogli Daniela Fogli Elementi di Informatica e Programmazione 2 Alcuni concetti chiave I problemi e la loro risoluzione Algoritmo: una sequenza di operazioni che riguarda l elaborazione di informazione e che so comprensibili ed eseguibili da un esecutore Un esempio di esecutore: il calcolatore In realtà un calcolatore esegue un programma, ovvero la descrizione formale di un algoritmo Necessità di linguaggi per la descrizione formale di algoritmi: linguaggi di programmazione Gli algoritmi di fatto risolvo problemi vediamo cosa significa Problema: classe di domande omogenee alle quali è possibile dare risposta mediante una procedura uniforme Istanza del problema: ogni specifica domanda della classe Variabili di ingresso: termini variabili che caratterizza la formulazione di un problema (permetto di generare le istanze) Variabili di uscita: termini variabili che caratterizza le soluzioni attese (delle istanze) di un problema Dati: valori che posso assumere le variabili d ingresso Risultati: valori che posso assumere le variabili d uscita Soluzione di un istanza di un problema: risposta alla specifica domanda che l istanza rappresenta Daniela Fogli Elementi di Informatica e Programmazione 3 Daniela Fogli Elementi di Informatica e Programmazione 4

Esempio Esempio Classe di domande omogenee Problema Quanto vale la radice quadrata intera Y di un numero intero positivo X? Variabile di uscita Variabile di ingresso Classe di domande omogenee Problema Quanto vale la radice quadrata Y di un numero intero positivo X? Variabile di uscita Variabile di ingresso Istanza Istanza Dati = Interi positivi Risultati = Interi Quanto vale la radice quadrata intera Y del numero 49? Soluzione dell istanza = 7 Dati = Interi positivi Risultati = Reali Quanto vale la radice quadrata Y del numero 50? Soluzione dell istanza = 7,07 Daniela Fogli Elementi di Informatica e Programmazione 5 Daniela Fogli Elementi di Informatica e Programmazione 6 Un esempio di problema e di procedura di risoluzione Procedura di risoluzione Problema: Quanto vale la radice quadrata intera Y di un numero intero positivo X? Quale potrebbe essere una procedura di risoluzione? Partiamo dalle istanze X=5: 2*2=4, 3*3=9 Y=2 X=9: 2*2=4, 3*3=9 Y=3 X=1: 1*1=1, 2*2=4 Y=1 X=10: 2*2=4, 3*3=9, 4*4=16 Y=3 Idea! Parto da Y=1, controllo se Y 2 <X Se allora provo con Y+1 e continuo Altrimenti significa che Y 2 >=X: Se Y 2 = X allora Ok Altrimenti la soluzione deve essere Y-1 Una possibile procedura di risoluzione per il problema dato è dunque: 1. INIZIO: Assegna a Y il valore 0 2. Incrementa Y di 1 3. Se Y 2 < X allora torna all istruzione 2 4. Se Y 2 = X allora FINE 5. Se Y 2 > X allora decrementa Y di 1: FINE Daniela Fogli Elementi di Informatica e Programmazione 7 Daniela Fogli Elementi di Informatica e Programmazione 8

Procedure di risoluzione e algoritmi La procedura di risoluzione è quindi espressa come sequenza di istruzioni la cui esecuzione porta alla soluzione del problema ALGORITMO RISOLUTIVO Computazione Computazione: esecuzione di un algoritmo in corrispondenza di certi dati Passo di computazione: ogni singolo passo elementare che un esecutore compie durante l esecuzione di un algoritmo Sequenza di computazione: sequenza di passi elementari che un esecutore compie in corrispondenza di certi dati iniziali durante l esecuzione di un algoritmo Algoritmo = concetto statico Computazione = concetto dinamico DATI ALGORITMO SOLUZIONE Daniela Fogli Elementi di Informatica e Programmazione 9 Daniela Fogli Elementi di Informatica e Programmazione 10 Esempio di sequenza di computazione Più formalmente Supponendo che la variabile in ingresso X = 8 eseguiamo l algoritmo passo-passo 1 Y 0 2 Calcolo di Y+1 e risultato in Y Y =1 3 Controllo se Y 2 < X è vero 4 Calcolo di Y+1 e risultato in Y Y =2 5 Controllo se Y 2 < X è vero 6 Calcolo di Y+1 e risultato in Y Y =3 7 Controllo se Y 2 < X è falso 8 Controllo se Y 2 = X è falso 9 Controllo se Y 2 > X è vero (ovviamente!) 10 Calcolo di Y-1 e risultato in Y Y =2 11 Fine Problema P[X, Y] Istanza del problema (X 1, X 2,, X n ): variabili di ingresso, con domini D 1, D 2,, D n (insiemi di dati) (Y 1, Y 2,, Y m ): variabili di uscita, con domini R 1, R 2,, R m (insiemi di risultati) P[X, Y] con X D = D 1 x D 2 x x D n Daniela Fogli Elementi di Informatica e Programmazione 11 Daniela Fogli Elementi di Informatica e Programmazione 12

Algoritmo risolvente del problema Calcolatore come Esecutore Universale di Algoritmi Detiamo con A[X, Y] l algoritmo risolvente di P[X, Y] A[X, Y] produce una soluzione per ogni possibile istanza di P[X, Y] Eseguendo l algoritmo risolvente A[X, Y] con il dato di ingresso X Є D si otterrà come risultato la soluzione Y Є R dell istanza P[X, Y] algoritmo A[X, Y] problema P[X, Y] Problema P[X, Y] Algoritmo A[X, Y] dato: X CALCOLATORE risultato: Y soluzione Sostituzione di X con X Esecuzione di A con il dato X P[X, Y] Istanza P[X, Y] Risultato Y: soluzione di P[X, Y] istanza Daniela Fogli Elementi di Informatica e Programmazione 13 Daniela Fogli Elementi di Informatica e Programmazione 14 Calcolatore come esecutore Algoritmi, programmi e calcolatori Un esecutore deve essere in grado di interpretare la descrizione della procedura di risoluzione (algoritmo risolvente) Deve iltre essere in grado di eseguire le azioni presenti nella descrizione interpretata Il calcolatore è un esecutore di algoritmi identificate e descritte da esseri umani (in genere un team di progettisti, programmatori e utenti) Un algoritmo deve essere comprensibile per il suo esecutore Per essere comprensibili da un calcolatore, gli algoritmi devo essere espressi in un linguaggio di programmazione Programma: descrizione formale di un algoritmo attraverso un linguaggio di programmazione Un programma è una sequenza di istruzioni scritte in un opportu linguaggio comprensibile dal calcolatore Il calcolatore è dunque un esecutore di programmi Il compito di un esperto informatico consiste nel produrre algoritmi e codificarli in programmi Daniela Fogli Elementi di Informatica e Programmazione 15 Daniela Fogli Elementi di Informatica e Programmazione 16

Il calcolatore come esecutore di programmi Il calcolatore come esecutore (una definizione rivisitata) Dati iniziali Assegnati a variabili di ingresso Programma CALCOLATORE sequenza di istruzioni di un linguaggio di programmazione (descrive un algoritmo) Risultati dell esecuzione in corrispondenza dei dati iniziali Assegnati a variabili di uscita Un calcolatore è un sistema che, ricevendo in ingresso la descrizione, in un opportu linguaggio, di un algoritmo risolvente A[X,Y] (cioè un programma) per un certo problema P[X,Y] e un dato X, produce un risultato Y, ovvero la soluzione Y dell istanza P[X,Y] Un calcolatore è un esecutore universale di programmi elabora puri simboli (per esso privi di significato ) n risolve problemi (il problema n è un suo ingresso) ma esegue programmi! Daniela Fogli Elementi di Informatica e Programmazione 17 Daniela Fogli Elementi di Informatica e Programmazione 18 Esempio Perché usare un calcolatore come esecutore dati iniziali a = 2, n = 5 Istanza del problema = P[2,5,b] CALCOLATORE Programma per il calcolo della potenza n-esima di a: P[a, n, b] Risultati dell esecuzione in corrispondenza dei dati iniziali b = 32 X Y Alme 3 aspetti lo fan preferire a un esecutore uma Velocità Es. si pensi al calcolo strutturale, alla simulazione di processi, al controllo della traiettoria di un veicolo spaziale ma anche a tutte quelle situazioni in cui occorre trattare una erme quantità di dati es. gestione anagrafe fiscale Affidabilità basso tasso di errore Ecomicità ottimo compromesso costi/benefici Daniela Fogli Elementi di Informatica e Programmazione 19 Daniela Fogli Elementi di Informatica e Programmazione 20

L unicità del calcolatore nella storia della teclogia Il fatto fondamentale: il calcolatore è un dispositivo programmabile Consente di svolgere compiti diversi senza alcuna modifica della sua struttura fisica Basta intervenire sul livello software (programmi) lasciando inalterato il livello hardware (struttura fisica) per modificarne il comportamento Proprietà di un algoritmo La definizione di algoritmo presuppone che esso possa essere espresso in termini linguistici ben definiti, interpretato ed eseguito da un soggetto esecutore (il calcolatore). Da ciò conseguo le seguenti proprietà: Finitezza: un algoritmo deve essere costituito da un numero finito di istruzioni Definitezza: le istruzioni di cui un algoritmo è costituito devo appartenere a un insieme finito e prefissato di tipi elementari Univocità: ogni istruzione deve essere univocamente interpretabile ed eseguibile Effettività: deve esistere un esecutore in grado di eseguire ogni istruzione dell algoritmo in un tempo finito Daniela Fogli Elementi di Informatica e Programmazione 21 Daniela Fogli Elementi di Informatica e Programmazione 22 Altre proprietà Sequenza di computazione finita Determinismo: per qualunque dato di ingresso, a ogni passo della computazione, esiste al più un passo successivo. Ovvero: assegnato un dato di ingresso, esiste una e una sola computazione possibile dell algoritmo Correttezza: l algoritmo perviene alla soluzione del compito cui è preposto Efficienza: l algoritmo perviene alla soluzione del compito impiegando il numero minimo di risorse fisiche Risorse fisiche: tempo, memoria,. Terminazione: l esecuzione di un algoritmo deve terminare in un numero finito di passi dato: X A[X, Y] algoritmo ESECUTORE risultato: Y passo 1 passo 2 passo 3 passo n In questo caso, la computazione produce un risultato Daniela Fogli Elementi di Informatica e Programmazione 23 Daniela Fogli Elementi di Informatica e Programmazione 24

Sequenza di computazione infinita Funzione calcolata da un algoritmo A[X, Y] algoritmo NB: l algoritmo è comunque finito! D A[X, Y] R dato: X ESECUTORE f A passo 1 passo 2 passo 3 In questo caso, il risultato rimane indefinito Un algoritmo A[X, Y] calcola una funzione da D (dominio delle variabili di ingresso) a R (dominio delle variabili di uscita): - f A : D R tale che f A (X) = Y con Y prodotto dalla computazione di A[X, Y] con il dato X La funzione è in generale parziale! Daniela Fogli Elementi di Informatica e Programmazione 25 Daniela Fogli Elementi di Informatica e Programmazione 26 Note Due algoritmi che risolvo lo stesso problema Funzione come concetto equivalente di problema Problema: come lo risolvo? Funzione: come la calcolo? Un algoritmo risolve 1 problema (calcola 1 funzione) Viceversa, per ogni problema risolubile (ovvero, se esiste un algoritmo che lo risolve), esisto infiniti algoritmi che lo risolvo, infatti: un algoritmo è descritto da una sequenza di istruzioni è sufficiente pensare che possiamo sempre aggiungere sequenze di istruzioni che n han effetto sul risultato e possiamo farlo in infiniti modi (es. sommare e sottrarre 1 a/da una variabile, sommare e sottrarre 2, ecc. ecc.) 1. INIZIO: Assegna a Y il valore 0 2. Incrementa Y di 1 3. Se Y 2 < X allora torna all istruzione 2 4. Se Y 2 = X allora FINE 5. Se Y 2 > X allora decrementa Y di 1: FINE Algoritmo modificato ma equivalente Algoritmo di partenza 1.INIZIO: Assegna a Y il valore 0 2.Incrementa Y di 1 3.Se Y 2 < X allora torna all istruzione 2 4.Se Y 2 = X allora FINE 5.Incrementa Y di 1 6.Decrementa Y di 1 7.Se Y 2 > X allora decrementa Y di 1: FINE Daniela Fogli Elementi di Informatica e Programmazione 27 Daniela Fogli Elementi di Informatica e Programmazione 28

Informatica Teorica Cenni sulla macchina di Turing Utilizzando strumenti matematici, studia macchine astratte descritte formalmente, anziché macchine concrete Permette di ottenere risultati su cosa una macchina è in grado di calcolare e quindi quali problemi posso essere risolti a prescindere dalla teclogia impiegata per realizzare i calcolatori La teclogia cambia, i risultati generali : - La macchina analitica di Charles Babbage (mai realizzata) è stata progettata nel 1830 - La macchina di Turing (di Alan Turing) è stata pubblicata nel 1936 - Il primo calcolatore elettronico solo nel 1943 Macchina astratta utilizzata nell informatica teorica per formalizzare i concetti di algoritmo, esecutore e computazione Macchine di estrema semplicità, ma ogni funzione effettivamente computabile, complessa quanto si vuole, può essere computata da una macchina di Turing purché n si ponga limiti di tempo e di memoria (Tesi di Church-Turing) Questa tesi n può essere provata Rappresenta una definizione del concetto intuitivo di funzione computabile, ovvero una funzione che può essere calcolata da un algoritmo finito Daniela Fogli Elementi di Informatica e Programmazione 29 Daniela Fogli Elementi di Informatica e Programmazione 30 La macchina di Turing Macchina di Turing è composta da: Nastro (potenzialmente infinito) suddiviso in caselle in cui posso essere scritti o letti simboli di un alfabeto (simboli: s 0, s 1,, s n ) Testina di lettura/scrittura Unità di spostamento per muovere la testina a destra o sinistra in ogni istante Orga di controllo che determina il comportamento. E caratterizzato ad ogni istante da u stato inter (stati: q 1, q 2,, q m con m finito) s 1 B Testina di lettura/scrittura Unità di spostamento testina nastro q 1 Unità di controllo (contenente un elemento di stato) Daniela Fogli Elementi di Informatica e Programmazione 31 Daniela Fogli Elementi di Informatica e Programmazione 32

Esecuzione di un programma Esempio di Macchina di Turing Il programma per una macchina di Turing consiste in un insieme di istruzioni, ciascuna formata da una quintupla <q i, s j, s k, D, q u > dove q i : stato presente s j : simbolo letto dal nastro s k : simbolo sostituito sul nastro D: direzione del movimento (R, L, N) q u : stato futuro Ad ogni istante la macchina esegue la quintupla che può essere applicata per l attuale stato inter e per il simbolo in lettura L insieme delle quintuple che descrive una MT i può essere espresso tramite una tabella Tabella delle transizioni di stato Stati Ingressi 0 1 b q 1 q 2 0q 1 R 0q 2 R 0q h N 0q 2 R 0q 1 R 1q h N Dato il simbolo di ingresso letto sul nastro (in questa macchina: 0, 1 o b) e lo stato corrente macchina (in questa: q 1 o q 2 ) la macchina scrive un nuovo simbolo sul nastro al posto di quello letto modifica lo stato della macchina sposta la testina di lettura/scrittura di un posto a destra (R/right) o a sinistra (L/left) o la lascia dov è (N/ne) Questa macchina calcola una ben precisa funzione: è quella MT che è in grado di dire se la sequenza in ingresso contiene un numero pari o dispari di 1 Daniela Fogli Elementi di Informatica e Programmazione 33 Daniela Fogli Elementi di Informatica e Programmazione 34 Funzioni calcolate e Macchine di Turing Macchina di Turing Universale Ogni macchina di Turing definisce una particolare funzione matematica che agisce sui dati in ingresso forniti dal nastro Una Macchina di Turing MT i calcola una e una sola funzione f i Non è vero il contrario: se una funzione f j può essere calcolata da una Macchina di Turing MT j allora esisto infinite altre Macchine di Turing che calcola la medesima funzione Esisto problemi (funzioni) n computabili, ovvero per i quali n esisto algoritmi risolventi (macchine di Turing che le calcola) un esempio: n esiste un algoritmo che, dato un qualunque algoritmo e un dato, può decidere se esso termina oppure E una macchina che può simulare il comportamento di una qualunque macchina di Turing una volta ricevuto in ingresso la descrizione della macchina da simulare (Se qualcu è interessato all informatica teorica, può consultare i capitoli 15, 16, 17 del libro di testo) Daniela Fogli Elementi di Informatica e Programmazione 35 Daniela Fogli Elementi di Informatica e Programmazione 36

Elementi di Informatica e Programmazione Esercizi sugli Algoritmi Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Esercizio 1 Scrivere l algoritmo (in linguaggio naturale e con un diagramma di flusso) per il seguente problema: l esecutore deve leggere in ingresso una sequenza di numeri naturali (i.e. interi positivi strettamente maggiori di zero) e calcolarne (per poi visualizzarli) il massimo, il minimo e la media La sequenza si interrompe n appena viene introdotto un numero negativo o uguale a zero Per esempio, data la sequenza 5, 1, 2, 3, 6, -5, il risultato deve essere: Il massimo è 6, il minimo è 1, la media è 3.4 mentre, data la sequenza -2, il risultato deve essere La sequenza inserita è nulla Fare l esecuzione passo-passo dell algoritmo nei 2 casi sopra menzionati 2 Algoritmo per esercizio 1 Descrizione dell algoritmo in linguaggio naturale: n 0, media 0 Leggi un valore dall ester e inseriscilo nella variabile x Se x > 0 allora max x, min x Finché x > 0 ripeti Se x > max allora max x Se x < min allora min x media media + x n n + 1 Leggi un valore dall ester e inseriscilo nella variabile x Fine ciclo media media / n Visualizza Massimo, minimo, media = seguita dai valori in max, min, media altrimenti Visualizza La sequenza inserita è nulla Fine La sequenza inserita è nulla inizio media 0 n 0 x x > 0 media media / n max min media max x min x x > 0 Corpo del ciclo Schema a blocchi x > max x < min media media + x n n + 1 x Corpo del ciclo max x min x 3 fine 4

Esecuzione passo passo dell algoritmo: data la sequenza 5, 1, 2, 3, 6, -5 Esecuzione passo passo dell algoritmo: data la sequenza 5, 1, 2, 3, 6, -5 1. media 0, n 0 2. Lettura di un numero e memorizzazione nella variabile x (x 5) 3. Controllo se x > 0 è vero 4. max 5, min 5 5. Controllo se x > 0 è vero 6. Controllo se x > max n è vero 7. Controllo se x < min n è vero 8. media 0 + 5 = 5 9. n 0 + 1 = 1 10. Lettura di un numero e memorizzazione nella variabile x (x 1) 11. Controllo se x > 0 è vero 12. Controllo se x > max n è vero 13. Controllo se x < min è vero 14. min 1 15. media 1 + 5 = 6 16. n 1 + 1 = 2 17. Lettura di un numero e memorizzazione nella variabile x (x=2) 18. Controllo se x > 0 è vero 19. Controllo se x > max n è vero 20. Controllo se x < min n è vero 21. media 6 + 2 = 8 22. n 2 + 1 = 3 23. Lettura di un numero e memorizzazione nella variabile x (x=3) 24. Controllo se x > 0 è vero 25. Controllo se x > max n è vero 26. Controllo se x < min n è vero 27. media 8 + 3 = 11 28. n 3 + 1 = 4 5 6 Esecuzione passo passo dell algoritmo: data la sequenza 5, 1, 2, 3, 6, -5 Esecuzione passo passo dell algoritmo: data la sequenza 2 (cioè sequenza nulla) 29 Lettura di un numero e memorizzazione nella variabile x (x = 6) 30 Controllo se x > 0 è vero 31 Controllo se x > max è vero 32 max 6 33 Controllo se x < min n è vero 34 media 11 + 6 = 17 35 n 4 + 1 = 5 36 Lettura di un numero e memorizzazione nella variabile x (x = -5) 37 Controllo se x > 0 n è vero 38 media 17 / 5 = 3 39 Visualizza il Massimo è 6 40 Visualizza Il minimo è 1 41 Visualizza La media è 3.4 42 Fine 1 Lettura di un numero e memorizzazione nella variabile x (x = -2) 2 Controllo se x > 0 n è vero 3 Visualizza La sequenza inserita è nulla 4 Fine 7 8

Esercizio 2 Algoritmo per esercizio 2 Sia y = r i= q 1 i Scrivere l algoritmo in linguaggio naturale e il diagramma di flusso per il calcolo di y assumendo di acquisire r e q dall ester (dati di input) Nota: controllare che r e q sia interi positivi tali che r > q Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile r Leggi un valore dall ester e inseriscilo nella variabile q Se (r>0) AND (q > 0) AND (r > q) allora y 0, i q Finché i <= r ripeti y y + 1/ i i i + 1 Fine ciclo Visualizza Il risultato è, y altrimenti Visualizza Errore nell immissione dati Fine 9 10 inizio r q (r > 0) AND (q > 0) AND (r > q) y = r i= q 1 i Sia y = k i ( i= 1 j= 1 i + Esercizio 3 1 ) j 2 y 0 i q Errore nell immissione dei dati Scrivere l algoritmo in linguaggio naturale e il diagramma di flusso per il calcolo di y assumendo di acquisire k dall ester (dato di input) controllando che k sia intero positivo. In caso di errata immissione continuare a chiedere k. i <= r y y + (1/i) i i +1 y fine 11 12

Algoritmo per esercizio 3 inizio Descrizione dell algoritmo in linguaggio naturale: Inizio Ciclo Leggi un valore dall ester e inseriscilo nella variabile k Se k <= 0 allora Visualizza Errore nell immissione dati Torna a Inizio Ciclo Finché k <= 0 y 0, i 1 Finché i <= k ripeti s 0, j 1 Finché j <= i ripeti s s + 1/(i + j) j j + 1 Fine ciclo s s * s y y + s i i + 1 Fine ciclo Visualizza Il risultato è, y Fine 13 S S*S y y + S i i + 1 k k <= 0 y 0 i 1 i<=k S 0 j 1 j<=i Errore nell immissione dei dati S S + 1/(i+j) j j+1 y k = ( i i= 1 j= 1 i + y fine Ciclo a condizione finale 1 ) j 2 14

Elementi di Informatica e Programmazione Il Progetto degli Algoritmi Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela Fogli Risoluzione di un problema Dato un problema da risolvere, n è facile né efficiente, scrivere un programma in linguaggio macchina che lo risolva Facciamo un passo indietro Fasi del procedimento di risoluzione di un problema: 1. Analisi del problema e individuazione di una procedura di risoluzione 2. Descrizione della procedura di risoluzione 3. Interpretazione della procedura di risoluzione 4. Attuazione della procedura di risoluzione Daniela Fogli Elementi di Informatica e Programmazione 2 Processo di risoluzione di un problema Esempio: montaggio di un elettrodomestico Problema Analisi Individuazione procedura Stesura descrizione procedura Descrizione procedura Soggetto 1 SOGGETTO 1 Coscenza di come si risolve il problema Es. progettista di un elettrodomestico SOGGETTO 2 attività ingresso/uscita oppure Soggetto 2 Interpretazione descrizione Descrizione interpretata Attuazione procedura Soluzione Effettiva capacità di risolvere il problema Es. l acquirente dell elettrodomestico Daniela Fogli Elementi di Informatica e Programmazione 3 Daniela Fogli Elementi di Informatica e Programmazione 4

Analisi del problema Modellazione del problema L analisi di un problema consiste in: Comprensione del problema: eliminando ogni ambiguità nella sua formulazione, focalizzando gli obiettivi, evidenziando i dati impliciti ed espliciti del problema Modellazione del problema: creando un modello Ricerca di una procedura di soluzione: scomponendo il problema e individuando una sequenza di passi per risolverlo Cos è un modello? Dato un certo problema, un modello del problema è una rappresentazione semplificata del problema stesso che evidenzia: Gli elementi del problema Le loro proprietà e le relazioni fra di essi Esempio: l archivio di una biblioteca - Titolo - Autori - stanza, scaffale - Mondo reale Modello Daniela Fogli Elementi di Informatica e Programmazione 5 Daniela Fogli Elementi di Informatica e Programmazione 6 Relazione tra realtà e modello Procedura di risoluzione di un problema Mondo reale analisi Astrae dai dettagli irrilevanti del mondo Un MODELLO è un astrazione del problema. Rappresenta una semplificazione completa e autoconsistente della realtà, creata per comprendere il problema MODELLO Risolvere un problema = risolvere un opportuna successione di problemi più semplici SCOMPOSIZIONE IN SOTTO-PROBLEMI I sotto-problemi potrebbero dover essere a loro volta scomposti in sotto-sotto-problemi, e co via La scomposizione deve giungere fi ai problemi elementari (o primitivi) Ad ogni problema elementare corrisponde una istruzione elementare, che rappresenta la maniera di descrivere il problema elementare in modo che l esecutore sia in grado di interpretarlo correttamente f(x) = g'(y) h(z) Daniela Fogli Elementi di Informatica e Programmazione 7 Daniela Fogli Elementi di Informatica e Programmazione 8

Un esempio (informale) di scomposizione di un problema Problema: richiesta di un libro Gestione di una biblioteca in cui: I libri so disposti sugli scaffali La posizione di ogni libro è data da: numero dello scaffale e posizione nello scaffale Esiste un schedario ordinato in cui ogni scheda riporta le seguenti informazioni: Cogme e me dell autore Titolo del libro Data di pubblicazione Numero dello scaffale in cui si trova Posizione nello scaffale Come procedo? 1. Decido quale libro richiedere 2. Prelevo il libro Il secondo passo va dettagliato, ovvero va scomposto in sotto-problemi (procedura per raffinamenti successivi o top-down) Daniela Fogli Elementi di Informatica e Programmazione 9 Daniela Fogli Elementi di Informatica e Programmazione 10 Il problema diventa Cercare la scheda 1. Decido quale libro richiedere 2. Cerco la scheda del libro nello schedario 3. Mi seg numero dello scaffale e posizione nello scaffale 4. Cerco lo scaffale 5. Cerco il libro nella sua posizione all inter dello scaffale 6. Prelevo il libro Non è un problema elementare! Scompongo in sotto-sotto-problemi: 1. Prendo la prima scheda 2. Il titolo, l autore e la data corrispondo a quelli del libro che sto cercando? Se allora ho individuato la scheda, altrimenti passo alla scheda successiva e ripeto il controllo 3. Se le schede so esaurite, allora il libro n esiste Esisto metodi più efficienti per risolvere lo stesso problema come fareste voi? Daniela Fogli Elementi di Informatica e Programmazione 11 Daniela Fogli Elementi di Informatica e Programmazione 12

Un metodo più efficiente Più precisamente 1. Esami la scheda centrale dello schedario 2. Se la scheda corrisponde al libro cercato allora termi la ricerca 3. Altrimenti cerco (con lo stesso metodo) nella metà inferiore o superiore dello schedario a seconda che il libro cercato preceda o segua il libro indicato sulla scheda In realtà il passo 2 deve accorgersi anche se il libro n esiste, diventa: se la scheda corrisponde al libro cercato oppure se la parte di schedario da esaminare è vuota allora termi la ricerca Dal problema a un programma comprensibile dal calcolatore Analisi del problema e identificazione procedura di risoluzione Specifica dell algoritmo risolutivo Programmazione in linguaggio di alto livello Traduzione del programma in linguaggio macchina Esecuzione del programma Daniela Fogli Elementi di Informatica e Programmazione 13 Daniela Fogli Elementi di Informatica e Programmazione 14 Dall analisi del problema all esecuzione Algoritmo problema analisi procedura di risoluzione (informale) specifica algoritmo (formale) Attività dell uomo svolte con l ausilio di strumenti CASE e e ambienti di sviluppo La procedura di risoluzione è specificata in maniera formale come sequenza di istruzioni ALGORITMO RISOLUTIVO programazione programma (alto livello) Attività automatica svolta da programmi traduttori Dati iniziali ALGORITMO Dati finali (soluzione) traduzione programma (ling. macchina) Esecutore del linguaggio macchina esecuzione Istruzioni che opera sui dati Daniela Fogli Elementi di Informatica e Programmazione 15 Daniela Fogli Elementi di Informatica e Programmazione 16

Algoritmo = Dati + Istruzioni Come posso classificare i dati? Dati: Numeri (naturali, interi, reali, ) Caratteri alfanumerici (a, b, c, ) Dati logici (vero, falso) Vettori di elementi, matrici, ([1,2,3], [[1,1],[1,2],]) Immagini, suoni, Istruzioni: Istruzioni di ingresso/uscita (es. leggi, visualizza,) Istruzioni aritmetico-logiche (es. c = a * b) Istruzioni di controllo (es. se allora, ripeti) In base alla visibilità da parte dell utente Visibile (di ingresso o uscita) Trasparente (dati temporanei di supporto) In base alla variabilità nel tempo Costanti Variabili (acquisizione dall ester o assegnazione) In base alla struttura Elementari (interi, alfanumerici, logici, ) Strutturati (vettori, matrici, ) Daniela Fogli Elementi di Informatica e Programmazione 17 Daniela Fogli Elementi di Informatica e Programmazione 18 Variabili, espressioni e assegnamenti Espressioni aritmetiche Variabile: contenitore di dati Ha un me (es. x) nel calcolatore i mi delle variabili identifica una ben precisa locazione di memoria Ad una variabile può essere assegnato un valore: es. x 10 nel calcolatore diventa il contenuto della locazione di memoria identificata dal me della variabile Le variabili posso comparire in espressioni aritmetiche (es. x- y) o logiche, e in predicati logici Le espressioni posso essere assegnate ad altre variabili: ad es. scriveremo d x-y per indicare che d conterrà il risultato dell espressione Si potrebbe anche usare x o y al posto di d, in questo modo si sovrascrive il precedente valore so formate da: Operandi: variabili e costanti (si ipotizza di considerare solo numeri interi) Operatori: addizione (+), sottrazione (-), moltiplicazione (*), divisione intera (/), modulo (mod) Semantica: quella usuale dell aritmetica Esempi (a mod 5) + b * 3 (b c)/2 + 3 * a Daniela Fogli Elementi di Informatica e Programmazione 19 Daniela Fogli Elementi di Informatica e Programmazione 20

Espressioni logiche Predicati logici so formate da: Operandi: espressioni aritmetiche Operatori: operatori relazionali di uguaglianza (=), miranza (<) e maggioranza (>) fra numeri Semantica: quella delle disequazioni fra numeri so formati da: Operandi: espressioni logiche e/o predicati Operatori: operatori logici di congiunzione (AND), disgiunzione (OR) e negazione (NOT) Semantica: quella dell Algebra di Boole Esempi a = b (b + d) < (10 * c) Han un valore logico (vero o falso) Esempi (a < b) AND (b < c) OR (c = d+2) Han un valore logico (vero o falso) Not( ( (a=10*b) AND (b = c) ) OR (c = 20) ) Daniela Fogli Elementi di Informatica e Programmazione 21 Daniela Fogli Elementi di Informatica e Programmazione 22 Rappresentazione degli algoritmi Linguaggio naturale/pseudo-codice Problema: determinare il maggiore di due numeri interi ricevuti in ingresso (si assuma di avere a disposizione solo le istruzioni aritmetiche e quella di confronto con lo zero) 1. Linguaggio naturale/pseudo-codice 2. Diagrammi di flusso 3. Linguaggi di programmazione Algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un secondo valore e inseriscilo nella variabile y Calcola x-y e assegna il risultato a d Se d è diverso a 0 allora Se d è maggiore di 0 allora Visualizza Il massimo è seguita dal valore contenuto in x altrimenti Visualizza Il massimo è seguita dal valore contenuto in y altrimenti Visualizza I due numeri so uguali! Fine Daniela Fogli Elementi di Informatica e Programmazione 23 Daniela Fogli Elementi di Informatica e Programmazione 24

I diagrammi di flusso La simbologia comunemente utilizzata Termini equivalenti: diagrammi a blocchi, schemi a blocchi, flowchart Formalismo grafico per descrivere algoritmi Elementi del linguaggio: simboli per indicare inizio e fine, operazioni di ingresso/uscita (I/O), elaborazioni, condizioni, sottoprogrammi inizio I/O fine cond elaborazione selezione a 2 vie sottoprogramma Daniela Fogli Elementi di Informatica e Programmazione 25 Daniela Fogli Elementi di Informatica e Programmazione 26 Blocchi Inizio e Fine Blocco di I/O Inizio Il blocco Inizio deta il punto da cui l esecuzione dell algoritmo deve iniziare x Contiene un istruzione di lettura di un valore dall ester (esempio lettura da tastiera) oppure un istruzione di scrittura verso l ester (esempio scrittura a video) Fine Il blocco Fine deta il punto in cui l esecuzione dell algoritmo termina x x x lettura di un valore e sua memorizzazione nella variabile x scrittura (invio) del valore di x all ester Daniela Fogli Elementi di Informatica e Programmazione 27 Daniela Fogli Elementi di Informatica e Programmazione 28

Blocco di Elaborazione Selezione a 2 vie (Blocco decisionale) Contiene un istruzione di assegnamento come ad esempio: Condizione (predicato) Rappresenta un istruzione di controllo Esempi di condizioni: x 0 x y x x+1 x y+z*w Nei linguaggi di programmazione più comuni il simbolo = oppure := viene usato al posto di x = 0 Posso anche indicarsi con V (vero) ed F (falso) x = y x < z x >= z*w Se la condizione risulta vera allora l esecuzione prosegue lungo l arco detato con altrimenti prosegue lungo l arco detato con Daniela Fogli Elementi di Informatica e Programmazione 29 Daniela Fogli Elementi di Informatica e Programmazione 30 Blocco Sottoprogramma Collegamenti fra i blocchi Contiene un istruzione di chiamata di un sottoprogramma come ad esempio: I blocchi so collegati fra loro da archi orientati Media(x,y,z) Max(x,y) MCD(y,z) Nei linguaggi di programmazione più comuni si distingue fra chiamate di procedura e chiamate di funzione In ogni caso so sottoprogrammi richiamabili dal programma principale o da altri sottoprogrammi L arco identifica la sequenza delle operazioni da compiere La freccia identifica il flusso di esecuzione Daniela Fogli Elementi di Informatica e Programmazione 31 Daniela Fogli Elementi di Informatica e Programmazione 32

Esempio: Problema 1 Problema: determinare il maggiore di due numeri interi ricevuti in ingresso (si assuma di avere a disposizione solo le istruzioni aritmetiche e quella di confronto con lo zero) inizio x y Algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un secondo valore e inseriscilo nella variabile y Calcola x-y e assegna il risultato a d Se d è diverso a 0 allora Se d è maggiore di 0 allora Visualizza Il massimo è seguita dal valore contenuto in x altrimenti Visualizza Il massimo è seguita dal valore contenuto in y altrimenti Visualizza I due numeri so uguali! Fine Diagramma di flusso dell algoritmo che risolve il problema 1 numeri uguali d x - y d 0 Il max è, x fine d > 0 Il max è, y Daniela Fogli Elementi di Informatica e Programmazione 33 Daniela Fogli Elementi di Informatica e Programmazione 34 Esecuzione passo passo del programma Esempio: Problema 2 1 Lettura di un numero e memorizzazione nella variabile x (supponiamo che il numero acquisito sia 8, quindi in memoria si avrà x=8) Lettura di un numero e memorizzazione nella variabile y (supponiamo che il numero acquisito sia 6, quindi in memoria si avrà y=6) 2 Calcolo di x-y e risultato in d d = 2 3 Controllo se d 0 è vero 4 Controllo se d>0 è vero 5 Visualizzo Il massimo è 8 6 Fine Calcolo del Massimo Comune Divisore (MCD) di due interi x ed y Individuazione della procedura di risoluzione: Fai la scansione di tutti i numeri compresi fra 1 e il minimo tra x ed y. Per ognu stabilisci se è un divisore comune ad x ed y (come? b è divisore di a se a mod b = 0, ovvero se la divisione di a per b dà come resto 0). Ogni volta che un numero preso in considerazione risulta divisore sia di x che di y memorizzalo come attuale MCD in una variabile all inizio posta a 1. Alla fine della scansione la variabile conterrà il valore desiderato. Daniela Fogli Elementi di Informatica e Programmazione 35 Daniela Fogli Elementi di Informatica e Programmazione 36

Algoritmo per il Massimo Comune Divisore Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un valore dall ester e inseriscilo nella variabile y Se x < y allora min x altrimenti min y mcd 1 contatore 1 Finché (contatore <= min) ripeti Se ((x mod contatore = 0) e (y mod contatore = 0)) allora mcd contatore contatore contatore + 1 fine ciclo Stampa MCD = seguito dal valore in mcd Fine e il ramo altrimenti? Diagramma di flusso dell algoritmo che risolve il problema 2 e se x e y so uguali? fine min x MCD =, mcd inizio x y x < y mcd 1 contatore 1 contatore<=min min y (x mod contatore = 0) AND (y mod contatore = 0) contatore contatore + 1 Ciclo a condizione iniziale mcd contatore Daniela Fogli Elementi di Informatica e Programmazione 37 Daniela Fogli Elementi di Informatica e Programmazione 38 Esecuzione passo passo dell algoritmo Esecuzione passo passo dell algoritmo (cont.) 1. Lettura di due numeri e memorizzazione nelle variabili x e y (supponiamo di acquisire 6 e 9, quindi in memoria si avrà x=6 e y=9) 2 Controllo se x < y è vero 3 min 6 4 mcd 1, contatore 1 5 controllo se (contatore <= min) è vero 6 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 1 e 9 è divisibile per 1 è vero 7 mcd 1 8 contatore 2 9 controllo se (contatore <= min) è vero 10 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 2 e 9 è divisibile per 2 n è vero 11 contatore 3 12 controllo se (contatore <= min) è vero 13 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 3 e 9 è divisibile per 3 è vero 14 mcd 3 15 contatore 4 16 controllo se (contatore <= min) è vero 17 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 4 e 9 è divisibile per 4 n è vero 18 contatore 5 19 controllo se (contatore <= min) è vero 20 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 5 e 9 è divisibile per 5 n è vero Daniela Fogli Elementi di Informatica e Programmazione 39 Daniela Fogli Elementi di Informatica e Programmazione 40

21 contatore 6 Esecuzione passo passo dell algoritmo (cont.) 22 controllo se (contatore <= min) è vero 23 controllo se ((x mod contatore = 0) e (y mod contatore = 0)), cioè se 6 è divisibile per 6 e 9 è divisibile per 6 n è vero 24 contatore 7 25 controllo se (contatore <= min) n è vero 26 Stampa MCD = 3 (cioè stampo il valore nella variabile mcd) Esercizio: Rifare l esecuzione passo passo assumendo di acquisire x = 18 e y = 12 Daniela Fogli Elementi di Informatica e Programmazione 41 Esempio: Algoritmo di Euclide Algoritmo di Euclide per il calcolo del Massimo Comun Divisore (MCD) di due interi un altro algoritmo che risolve lo stesso problema Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un valore dall ester e inseriscilo nella variabile y Se x < y allora scambia x con y Dividi x per y: sia q il quoziente ed r il resto (cioè q x div y; r x mod y)* Finché r 0 ripeti x y y r q x div y r x mod y Fine ciclo Visualizza MCD = seguita dal valore in y Fine * div = divisione intera, mod = resto della divisione Daniela Fogli Elementi di Informatica e Programmazione 42 inizio x y Esecuzione passo passo dell algoritmo di Euclide che risolve il problema 2 Diagramma di flusso che descrive l algoritmo di Euclide (che risolve il problema 2) a x x y y a x < y r 0 fine q x div y r x mod y MCD =, y ta: per realizzare lo scambio ho bisog di una variabile di appoggio (a) x y y r q x div y r x mod y 1 Lettura di due numeri e memorizzazione nelle variabili x e y (supponiamo di acquisire 6 e 9, quindi in memoria si avrà x=6 e y=9) 2 Controllo se x < y è vero 3 Faccio lo scambio: a 6, x 9, y 6 4 q x div y (q 1), r x mod y (r 3) 5 controllo se r 0 è vero 6 x y (x 6), y r (y 3) 7 q x div y (q 2), r x mod y (r 0) 8 controllo se r 0 n è vero 9 Stampa/visualizza MCD = 3 10 Fine Esercizio: Rifare l esecuzione passo passo assumendo di acquisire x = 18 e y = 12 Daniela Fogli Elementi di Informatica e Programmazione 43 Daniela Fogli Elementi di Informatica e Programmazione 44

Algoritmo di Euclide L algoritmo di Euclide in forma più semplice Si basa sulla constatazione che: Se x = y allora MCD(x,y) = x (oppure y) Se x y allora, supponendo x > y, MCD(x,y) = MCD(x-y,y) Infatti: 1. Se x > y e k è un divisore comune a x e a y, allora k è anche un divisore di x-y. Infatti x = k * d e y = k * r per qualche intero positivo d e r. Quindi: x-y = k*(d-r), essendo (d-r) ancora un intero positivo 2. Allo stesso modo è possibile dimostrare che se k è un divisore comune ad x-y e a y allora è un divisore anche di x 3. Quindi tutti i divisori comuni di x e y coincido con i divisori comuni di x-y e y, dunque anche i massimi comuni divisori fra le due coppie di numeri coincido Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un valore dall ester e inseriscilo nella variabile y Finché x y ripeti Se x > y allora x x y altrimenti y = y x Fine ciclo Visualizza la frase MCD = seguita dal valore in y Fine Quindi: Se x > y allora MCD(x,y) = MCD(x-y,y) altrimenti MCD(y,x) = MCD(y-x,x) Daniela Fogli Elementi di Informatica e Programmazione 45 Daniela Fogli Elementi di Informatica e Programmazione 46 inizio Esecuzione passo passo dell algoritmo Diagramma di flusso dell algoritmo di Euclide (versione semplificata) MCD =, y fine x x y x y x y x > y y y x 1. Lettura di due numeri e memorizzazione nelle variabili x e y (supponiamo di acquisire 6 e 9, quindi in memoria si avrà x=6 e y=9) 2. Controllo se x y è vero 3. Controllo se x > y n è vero 4. y 3 (infatti: y 9 6) 5. Controllo se x y è vero 6. Controllo se x > y è vero 7. x 3 (infatti: x 6 3) 8. Controllo se x y n è vero 9. Stampa/visualizza MCD = 3 10. Fine Esercizio: Rifare l esecuzione passo passo assumendo di acquisire x = 24 e y = 9 Daniela Fogli Elementi di Informatica e Programmazione 47 Daniela Fogli Elementi di Informatica e Programmazione 48

Due proprietà degli algoritmi Correttezza: l algoritmo risolve il problema per cui è stato progettato (efficacia). Gli algoritmi visti per il problema 2 so tutti corretti rispetto al problema di calcolare il MCD Complessità: legata al numero di istruzioni eseguite, cioè di passi di computazione, necessari per risolvere il problema (efficienza). Il primo algoritmo visto per il calcolo del MCD è più complesso degli altri due (a parità di dati iniziali, 26 passi col primo e 10 passi con il secondo e il terzo) Esempio: Problema 3 Determinare il massimo fra n numeri positivi, finchè n si inserisce 0 Descrizione dell algoritmo in linguaggio naturale: max 0 (ta: la variabile max conterrà il risultato finale) Leggi un valore dall ester e inseriscilo nella variabile x Finché x 0 ripeti chiama il sottoprogramma Massimo(x, max) e inserisci il risultato nella variabile c Se c è uguale a Vero allora max x Leggi un valore dall ester e inseriscilo nella variabile x Fine ciclo Stampa Il massimo è seguita dal valore contenuto in max Fine NOTA: Massimo(x,max) è un sottoprogramma che descrive la soluzione del seguente sottoproblema: ricevendo in ingresso x e max, ritorna un valore Vero se x>=max e un valore Falso se x<max (leggermente diverso dal problema 1 esercizio: fare lo schema a blocchi) Daniela Fogli Elementi di Informatica e Programmazione 49 Daniela Fogli Elementi di Informatica e Programmazione 50 inizio max 0 x Esercizio: Fare l esecuzione passo passo assumendo di acquisire la sequenza 3,5,1,4,0 Calcolo della moltiplicazione Calcolo della moltiplicazione fra due numeri naturali x e y utilizzando solo operazioni di somma e sottrazione Diagramma di flusso dell algoritmo che risolve il problema 3 Il massimo è, max x 0 c Massimo (x,max) c= Vero x max x Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un valore dall ester e inseriscilo nella variabile y z 0 Finché y > 0 ripeti z z + x y y 1 Fine ciclo Stampa/visualizza la frase Prodotto = seguita dal valore in z Fine fine Daniela Fogli Elementi di Informatica e Programmazione 51 Daniela Fogli Elementi di Informatica e Programmazione 52

inizio Esecuzione passo passo dell algoritmo Diagramma di flusso dell algoritmo della moltiplicazione Prodotto =, z fine x y z 0 y > 0 z z + x y y 1 1. Lettura di un numero e memorizzazione nella variabile x (supponiamo x=8) 2. Lettura di un numero e memorizzazione nella variabile y (supponiamo y=3) 3. Assegna 0 alla variabile z (che conterrà il risultato) 4. Controllo se y > 0 è vero 5. z = 0 + 8 = 8 6. y = 3 1 = 2 7. Controllo se y > 0 è vero 8. z = 8 + 8 = 16 9. y = 2 1 = 1 10. Controllo se y > 0 è vero 11. z = 16 + 8 = 24 12. y = 1 1 = 0 13. Controllo se y > 0 n è vero 14. Stampa/visualizza Prodotto = 24 15. Fine Daniela Fogli Elementi di Informatica e Programmazione 53 Daniela Fogli Elementi di Informatica e Programmazione 54 Calcolo di x y inizio Calcolo di x y (con x e y numeri naturali) utilizzando il sottoprogramma moltiplica(a,b) x y z 1 Descrizione dell algoritmo in linguaggio naturale: Leggi un valore dall ester e inseriscilo nella variabile x Leggi un valore dall ester e inseriscilo nella variabile y z 1 Finché y > 0 ripeti z moltiplica(z, x) y y 1 Fine ciclo Stampa/visualizza la frase x y = seguita dal valore in z Fine * il sottoprogramma moltiplica(a,b) riceve in ingresso due numeri naturali e ne restituisce il prodotto (può essere ad esempio definito attraverso l algoritmo precedente) Diagramma di flusso dell algoritmo per il calcolo di x y y > 0 z moltiplica(z,x) y y 1 x y =, z fine chiamata di un sottoprogramma Daniela Fogli Elementi di Informatica e Programmazione 55 Daniela Fogli Elementi di Informatica e Programmazione 56

Esecuzione passo passo dell algoritmo Esecuzione passo passo dell algoritmo (cont.) 1 Lettura di un numero e memorizzazione nella variabile x (supponiamo x=2) Lettura di un numero e memorizzazione nella variabile y (supponiamo y=4) 2 Assegna 1 alla variabile z (che conterrà il risultato) 3 Controllo se y > 0 è vero 4 z = moltiplica(1, 2) = 2 5 y = 4 1 = 3 6 Controllo se y > 0 è vero 7 z = moltiplica(2, 2) = 4 8 y = 3 1 = 2 9 Controllo se y > 0 è vero 10 z = moltiplica(4, 2) = 8 11 y = 2 1 = 1 12 Controllo se y > 0 è vero 13 z = moltiplica(8, 2) = 16 14 y = 1 1 = 0 15 Controllo se y > 0 n è vero 16 Stampa/visualizza x y =, z 17 Fine Daniela Fogli Elementi di Informatica e Programmazione 57 Daniela Fogli Elementi di Informatica e Programmazione 58 Calcolo del fattoriale inizio Calcolo del fattoriale del numero N N! = N x (N-1) x (N-2) x x 1 Esempio: 5! = 5 x 4 x 3 x 2 x 1 = 120 N N<0 Descrizione dell algoritmo in linguaggio naturale: Inizio ciclo Leggi un valore dall ester e inseriscilo nella variabile N Se N < 0 allora Stampa/visualizza la frase Errore nell inserimento del valore di N Torna a Inizio Ciclo Finché N < 0 fattoriale 1 Finché N > 1 ripeti fattoriale fattoriale x N N N 1 Fine ciclo Stampa/visualizza la frase Fattoriale = seguita dal valore in fattoriale Fine Diagramma di flusso dell algoritmo del fattoriale Errore nell inserimento fine Fattoriale =, fattoriale fattoriale 1 N > 1 fattoriale fattoriale * N N N 1 Daniela Fogli Elementi di Informatica e Programmazione 59 Daniela Fogli Elementi di Informatica e Programmazione 60

Esecuzione passo passo dell algoritmo Esercizio 1 1 Lettura di un numero e memorizzazione nella variabile N (supponiamo N=4) 2 Controllo se N < 0 n è vero 3 Assegna 1 alla variabile fattoriale (che conterrà il risultato) 4 Controllo se N > 1 è vero 5 fattoriale = 1 * 4 = 4 6 N = 4 1 = 3 7 Controllo se N > 1 è vero 8 fattoriale = 4 * 3 = 12 9 N = 3 1 = 2 10 Controllo se N > 1 è vero 11 fattoriale = 12 * 2 = 24 12 N = 2 1 = 1 13 Controllo se N > 1 n è vero (esce dal ciclo) 14 Stampa/visualizza Fattoriale = 24 15 Fine Scrivere l algoritmo (in linguaggio naturale e con un diagramma di flusso) per il seguente problema: l esecutore deve leggere in ingresso una sequenza di numeri naturali (i.e. interi positivi strettamente maggiori di zero) e calcolarne (per poi visualizzarli) il massimo, il minimo e la media La sequenza si interrompe n appena viene introdotto un numero negativo o uguale a zero Per esempio, data la sequenza 5, 1, 2, 3, 6, -5, il risultato deve essere: Il massimo è 6, il minimo è 1, la media è 3.4 mentre, data la sequenza -2, il risultato deve essere La sequenza inserita è nulla Fare l esecuzione passo-passo dell algoritmo nei 2 casi sopra menzionati Daniela Fogli Elementi di Informatica e Programmazione 61 Daniela Fogli Elementi di Informatica e Programmazione 62 Esercizio 2 Esercizio 3 Sia y = r i= q 1 i Sia y = k i ( 1 i= 1 j= 1 i + ) j 2 Scrivere l algoritmo in linguaggio naturale e il diagramma di flusso per il calcolo di y assumendo di acquisire r e q dall ester (dati di input) Nota: controllare che r e q sia interi positivi tali che r > q Scrivere l algoritmo in linguaggio naturale e il diagramma di flusso per il calcolo di y assumendo di acquisire k dall ester (dato di input) controllando che k sia intero positivo. In caso di errata immissione continuare a chiedere k. Daniela Fogli Elementi di Informatica e Programmazione 63 Daniela Fogli Elementi di Informatica e Programmazione 64

Elementi di Informatica e Programmazione Dagli Algoritmi ai Programmi Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Perché gli algoritmi n basta Un algoritmo descritto con i linguaggi visti è spesso interpretabile in modo ambiguo Non è utilizzabile da un esecutore automatico Ad esempio, in quegli algoritmi n si parlava di: come so codificati i dati come avviene l interazione con operatori umani problemi legati alle caratteristiche fisiche: ad es. limiti nella dimensione dei numeri rappresentabili Università degli Studi di Brescia Docente: Daniela Fogli Daniela Fogli Elementi di Informatica e Programmazione 2 Dall analisi del problema all esecuzione di un programma Programma problema analisi proc. di risoluzione (informale) specifica algoritmo (formale) programazione programma (alto livello) traduzione programma (ling. macchina) Un programma è la descrizione formale di un algoritmo attraverso un linguaggio di programmazione Scrivere programmi è un compito complesso (alcuni programmi posso arrivare ad essere composti da alcuni milioni di righe di istruzioni) Il calcolatore esegue i programmi passo per passo: se i passi n so completi o n so nell ordine corretto, oppure se ci so dei conflitti tra i passi, il calcolatore n sarà in grado di portare a termine il suo compito Hw esecuzione Daniela Fogli Elementi di Informatica e Programmazione 3 Daniela Fogli Elementi di Informatica e Programmazione 4