Elementi di Informatica

Documenti analoghi
Tecnologie dell'informazione e della Comunicazione

Fondamenti di Programmazione

Strutture di Controllo

Problemi decidibili, semidecidibili, indecidibili

Istruzioni di controllo: SEQUENZA

Strutture di controllo iterative

Ciclo do while in FORTRAN

Problemi, algoritmi, calcolatore

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

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 02/07/2015/ Foglio delle domande /VERSIONE 1 Matricola Cognome Nome

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Cosa si intende con stato

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 08/02/2017/ Foglio delle domande / VERSIONE 1

Fondamenti di Informatica A. A. 2018/19

Lo sviluppo di un semplice programma e la dimostrazione della sua correttezza

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

COMANDI ITERATIVI. Ivan Lanese

Laboratorio di Python

Laboratorio di Python

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Costrutti di iterazione

Diagrammi di flusso - Flowcharts. E un formalismo che consente di rappresentare graficamente gli algoritmi

Corso di PHP. Prerequisiti. 3 - Le strutture di controllo. Istruzioni semplici Controllo del flusso di programma

Il Concetto di Algoritmo Corso di Informatica Laurea in Fisica

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Elementi di Informatica

Risoluzione di un problema

Istruzioni Condizionali

Istruzioni Condizionali

Studio degli algoritmi

Laboratorio di Python

Il concetto di calcolatore e di algoritmo

laboratorio di python

Introduzione al Linguaggio C

Le parole dell informatica: algoritmo e decidibilità

Fondamenti Teorici e Programmazione

Logica per la Programmazione

Calcolare x n = x x x (n volte)

Cicli. S i a i = a 1 + a 2 + a a n

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

Fondamenti di Programmazione

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Esercitazioni di Fondamenti Informatica - Modulo A 1

Introduzione agli Algoritmi

Programmazione in Java (I modulo)

Le strutture di controllo

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Informatica, Algoritmi, Linguaggi

Soddisfacibilità e Semantic Tableau [1]

Programmare con MatLab IV

Matlab. Istruzioni condizionali, cicli for e cicli while.

Fondamenti. Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari. Linguaggi di Programmazione [010194] 7 mar, 2016

Nozioni fondamentali su Algoritmi e programmazione

ISTRUZIONI DI ITERAZIONE

Programmazione Strutturata

Laboratorio di Python

Fondamenti di Informatica T-1

Controllo del flusso

Sviluppo di programmi

Istruzioni decisionali

Ing. Lorenzo Vismara

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI

PROGRAMMAZIONE STRUTTURATA

CORSO DI PROGRAMMAZIONE

Loop in Matlab. Informatica B. Daniele Loiacono

Soddisfacibilità e Semantic Tableau [1]

contiene il valore e nel range [l, u]. Funziona correttamente solo se 0 l e u a.

Introduzione al MATLAB c Parte 2

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 30/06/2016/ Foglio delle domande / VERSIONE 1

Laboratorio. Due. 1) Switch 2) Costrutti Iterazione (For, While, do while)

La programmazione nel linguaggio JavaScript. Il programma

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. !

Esempi di insiemi infiniti. Un numero p 1 si dice primo se è divisibile solo per 1 e per se stesso.

Rappresentazione degli algoritmi

Fondamenti di Informatica

Silvia Rossi. Cenni sulla complessità. Informatica. Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Programmazione I

Appunti di informatica. Lezione 8 anno accademico Mario Verdicchio

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

Strutture di Controllo Iterative: Istruzione FOR

PROGRAMMAZIONE: Le strutture di controllo

Elementi di Informatica e Programmazione

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

Laboratorio di Informatica

Le strutture di controllo in C++

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

Programmare con MATLAB c Parte 5 Cicli: for e while

Fondamenti di Programmazione. Strutture di controllo

Strutture di Controllo Iterative: Istruzione FOR

Lezione 3 Strutture di controllo

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

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

Linguaggio C++ 5. Strutture cicliche

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Transcript:

Elementi di Informatica Capitolo 6 Iterazione Prof. Mauro Gaspari: mauro.gaspari@unibo.it

Assegnamenti multipli bruce = 5 print bruce, bruce = 7 print bruce

Assegnamento e uguaglianza E' importante distinguere tra l'operatore di assegnamento (=) e l'uguaglianza (che in realtà è ==). NB. l'uguaglianza è commutativa, l'assegnamento no. NB2. un uguaglianza matematica è in genere sempre vera, mentre una volta fatto un assegnamento il valore di una variabile puo' cambiare. a = 5 b = a # a and b are now equal a = 3 # a and b are no longer equal

Il concetto di iterazione Spesso i computer sono utilizzati per eseguire in modo automatico task ripetitivi. Le operazioni ripetitive sono quelle che i computer riescono a fare meglio rispetto a noi (che spesso ci possiamo sbagliare). Tecnicamente la ripetizione di comandi si dice iterazione. Un effetto simile si può ottenere con la ricorsione.

Il comando while def countdown(n): while n > 0: print n n = n-1 print "Blastoff!" NB. la ricorsione è stata levata. Si puo' leggere il comando while in modo letterale: while significa fino a quando ed è associato ad una condizione. Fino a quando la condizione vale si esegue il body del while.

Semantica del while 1) Si valuta la condizione booleana. 2) Se la condizione è falsa (0): si esce dal while e si continua con l'esecuzione del comando successivo. 3) Se la condizione è vera (1): si eseguono tutti i comandi del body e alla fine si torna al passo 1. Questo tipo di flusso di controllo si chiama anche ciclo (= loop), perché con il passo 3) si torna indietro, all'inizio del comando.

Osservazioni sul loop. NB. Se la condizione è falsa i comandi del body non vengono mai eseguiti. È opportuno che nel body ci siano dei comandi che cambiano il valore di variabili che appaiono nella condizione. Altrimenti si ottengono dei loop infiniti.

Esempio def sequence(n): while n!= 1: print n, if n%2 == 0: n = n/2 else: n = n*3+1 # n is even # n is odd Questo programma termina sempre?

Osservazioni Dato che a volte il numero cresce e a volte decresce non è facile dimostrare in modo semplice che il programma termina sempre. E' possibile dimostrare la terminazione c'è per qualche n. Ad esempio se n è una potenza di 2. Ma è possibile dimostrare che il programma termina per tutti i valori di n? Fino ad ora nessuno è riuscito a dimostrare che questa affermazione vale e nemmeno che questa non vale.

Non terminazione e decidibilità Un problema è decidibile quando si riesce sempre a dare una risposta. Ad esempio si può dimostrare e quindi decidere che il programma countdown visto prima termina sempre con gli interi positivi. Una proprietà importante che vale nell'informatica è la seguente: dato un qualsiasi programma non è sempre possibile stabilire se questo termina per tutti i possibili input (problema della non terminazione - delle macchine di Turing). Quindi il problema della terminazione non è decidibile.

Decidibile e semidecidibile Come facciamo a stabilire se un problema è decidibile? Se troviamo un programma (algoritmo) che termina sempre un problema è decidibile. Se invece troviamo un programma che potrebbe non terminare ma termina sempre se la risposta al problema e' SI. Il problema si dice semidecidibile.

Problemi semidecidibili Un esempio di problema semidecidibile: dire se un programma ha un errore a tempo di esecuzione (a runtime)? Se il programma termina perché si verifica l'errore allora la risposta è SI. Se il programma termina correttamente la risposta è NO. Pero' un programma potrebbe non terminare, in questo caso non sono in grado ne di dare una risposta positiva ne negativa. Sono pero' sicuro che se la risposta è SI prima o poi riesco a trovarla (ovvero se c'è un errore a tempo di esecuzione questo prima o poi si verifica, anche dopo giorni).

Problemi indecidibili Ci sono problemi che non sono ne decidibili, ne semidecidibili, questi si dicono indecidibili (ovvero insolubili, non calcolabili). Ad esempio il problema inverso a quello nella precedente slide: determinare se un programma non ha errori a tempo di esecuzione (determinare se un programma è corretto a runtime) non è ne decidibile ne semidecidibile. Un altro problema indecidibile che abbiamo visto in precedenza è il problema della terminazione di un qualsiasi programma con un qualsiasi input. Un altro problema indecidibile è quello di stabilire se due programmi qualsiasi danno gli stessi risultati.

Iterazione infinita a break Se vogliamo realizzare una calcolatrice serve un ciclo infinito. A volte può essere utile uscire da un ciclo prima di terminare i comandi del body. done = done # va bene done senza virgolette while True: line = input( >> ), if line == done: print bye break print line

Esempio radice quadrata Metodo di Newton I cicli vengono spesso utilizzati per calcolare valori numerici tramite successive approssimazioni. Ad esempio il metodo di Newton per calcolare la radice quadrata: se vogliamo calcolare la radice quadrata di un numero a partendo da un approssimazione qualsiasi x, un approssimazione migliore y si ottiene con la seguente formula:

Metodo di Newton esempio

Quando fermarsi? In generale non è possibile stabilire quanti passi sono necessari per arrivare alla risposta giusta. Quando si verifica la condizione y == x ci si può fermare.

Soluzione senza break a = float(input('radice di ')) x = float(input('soluzione approssimata ')) y = (x + a/x) / 2 while x!= y: print x x = y y = (x + a/x) / 2 print x

Attenzione al confronto tra floating point! L'uguaglianza tra numeri floating point presenta dei rischi. I valori floating point sono sempre approssimati e quindi in caso di approssimazioni diverse l operatore == potrebbe non cogliere l uguaglianza. In questi casi si consiglia di cambiare il test come segue: son epsilon = 0.00001 e abs una funzione built-in di Python

Algoritmi e programmazione Il metodo di newton è un esempio di algoritmo (=algorithm), ovvero un processo meccanico che risolve un certo problema. L aspetto più rilevante della programmazione è proprio il processo che porta alla definizione di un algoritmo.