Introduzione all'algoritmica. 1 Primo esempio: il massimo di una sequenza.

Documenti analoghi
Introduzione all'algoritmica per i Licei (C++). 2 Massimo e minimo.

Si può scrivere un programma anche utilizzando un editor di testo (Blocco Note, WordPad, ) ricordandosi comunque di salvarlo con l estensione.py.

CORSO DI PROGRAMMAZIONE

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Esercitazioni di Informatica B A.A. 2010/2011 Pseudocodice. Nicola Vitucci

Strutture di Controllo

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

STRUTTURE DI CONTROLLO DEL C++

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Fondamenti di Informatica

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Esercitazione 4. Comandi iterativi for, while, do-while

Microsoft Outlook Di Nunziante Esposito. `*************` Quinta parte: Come gestire la rubrica (contatti). `***********`

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Curriculum SR (Sistemi e Reti) Algoritmi e Laboratorio a.a.

INFORMATICA. Strutture iterative

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO III Indice

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

Excel. Il foglio di lavoro. Il foglio di lavoro Questa viene univocamente individuata dalle sue coordinate Es. F9

Le basi del linguaggio Java

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

Mini-Corso di Informatica

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

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Dall analisi alla codifica (1)

Strutture dati e loro organizzazione. Gabriella Trucco

Le strutture di controllo

anno Introduzione all'algoritmica per i Licei 3 Controllo del flusso di esecuzione.

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Lezione 6 Introduzione al C++ Mauro Piccolo

COMANDI ITERATIVI. Ivan Lanese

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

Macchine di TURING. Alan Mathison Turing ( )

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

PROGRAMMAZIONE STRUTTURATA

nome di un menu per visualizzarlo e poi selezionate facendo clic sul comando che vi interessa.

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Dall algoritmo al programma

CORSO LINUX PER LA CERTIFICAZIONE LPI ESSENTIALS

Programmazione in Python. Moreno Marzolla

PROGRAMMAZIONE: Le strutture di controllo

Lezione 6 programmazione in Java

Programmazione in Java (I modulo)

Costanti e Variabili

Esercizi per il corso di Architettura dei Calcolatori. Anno accademico 2008/09. Si prevede l utilizzo dell emulatore Eniac ( presentato a lezione )

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Rappresentazione degli algoritmi

Laboratorio di Informatica

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

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

Il linguaggio di programmazione Python

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

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

Università degli Studi di Brescia INFORMATICA. Dipartimento di Ingegneria Meccanica e Industriale

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Corso sul PACCHETTO OFFICE. Modulo Excel

Lezione 5: Controllo del flusso e costrutti avanzati

Laboratorio di Python

Modulo 3 DATI E OPERATORI. 1. Assegnare i dati da tastiera 2. Variabili e tipi di dati 3. Le stringhe 4. Un po di logica

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

Gli statement. Gli statement. Gli statement. Gli statement. Gli statement

Costrutti iterativi. Utilizzo dei costrutti iterativi

Iterazione (introduzione)

Struttura di programmi MAL Elementi lessicali

Informa(ca Appun% dal laboratorio 4

1 Combinazioni lineari.

Esercitazione 3. Espressioni booleane I comandi if-else e while

EXCEL: FORMATTAZIONE E FORMULE

Excel 2003 Operazioni di base

Appunti di informatica. Lezione 4 anno accademico Mario Verdicchio

Introduzione all'algoritmica per i Licei (C++). 3 Ricerca binaria o dicotomica. versione 1 febbraio 2015

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Somma di numeri binari

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Istruzioni iterative (o cicliche)

Caratteri e stringhe

Introduzione alla Programmazione in Java attraverso un esempio commentato

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Laboratorio di Algoritmi e Strutture Dati

ESERCIZI DI PROGRAMMAZIONE DA SVOLGERE INDIVIDUALMENTE - parte 1 -

Calcolare x n = x x x (n volte)

Variabili. Unità 2. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Verso i puntatori: Cosa è una variabile?

EXCEL: FORMATTAZIONE E FORMULE

Fondamenti d Informatica: Le Macchine di Turing. Barbara Re, Phd

UNA CERTIFICAZIONE PER IL FUTURO

Fondamenti di Informatica

Corso di Fondamenti di Programmazione canale E-O ... Un esempio per iniziare. printf) Altri cenni su printf() Esercizi 8. (printf(

Usare il mouse e la tastiera

Costrutti condizionali e iterativi

C espressioni condizionali

Dati aggregati. Violetta Lonati

Istruzioni di ripetizione in Java 1

Programmazione con il linguaggio LibreOffice Basic

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Un esempio di if annidati

Macchine di Turing: somma di due numeri

5 - Istruzioni condizionali

Transcript:

Introduzione all'algoritmica (tratta da una presentazione preparata da Elio Giovannetti) 1 Primo esempio: il massimo di una sequenza. Ferruccio Damiani Dipartimento di Informatica Università di Torino Quest' opera è pubblicata sotto una Licenza Creative Commons Attribution-NonCommercial-ShareAlike 2.5.

Il massimo di una sequenza immessa da tastiera. Esperimento. Vi comunico lentamente una sequenza di numeri; voi, senza usare né carta né matita né altri strumenti, alla fine dovete dirmi qual è il massimo degli elementi.... Come avete fatto per dare la risposta giusta? Ad ogni passo: avete in memoria il massimo fino a quel momento; ricevete il nuovo numero; lo confrontate con il massimo: se è maggiore lo memorizzate come nuovo massimo dimenticando il precedente; altrimenti continuate a memorizzare il massimo 09/12/14 2

L'algoritmo ascolta il primo numero e memorizzalo come massimo ripeti indefinitamente : ascolta ciò che vien detto (per brevità, detto) se detto è "ho finito": esci dal ciclo altrimenti: considera il numero espresso da detto; se numero > massimo: memorizza numero come massimo fine del ciclo scrivi o pronuncia il massimo Nota: l'algoritmo funziona solo se termino la sequenza di numeri con la frase "ho finito"; se ad un certo punto, invece di dire un numero, dico "Buongiorno", non si sa se ho finito la sequenza o se intendo continuare 09/12/14 3

Il massimo di una sequenza immessa da tastiera Nel computer servono due celle di memoria: una per tenere il "massimo fino a quel momento", e una per mettervi ogni volta il nuovo numero preso dalla tastiera. Chiamiamole max e num. In Python l'input da tastiera è sempre interpretato come una stringa, cioè una sequenza di caratteri. Se essa rappresenta un numero intero, occorre trasformarla esplicitamente nel numero, per mezzo della funzione int. Può quindi essere utile disporre di un'altra cella di memoria, che nelle prossime slides per ragioni di spazio chiameremo semplicemente s, in cui mettere la stringa presa ogni volta da tastiera, prima di trasformarla in numero. Inoltre, solo per comodità, come segnale di fine-sequenza scegliamo la stringa vuota (che si ottiene pigiando il tasto INVIO senza aver digitato alcun numero). 09/12/14 4

Riprendiamo l'algoritmo fai l'input di un numero da tast. e memorizzalo come massimo ripeti indefinitamente : esegui l'input da tastiera una nuova stringa se la stringa è la stringa vuota: esci dal ciclo altrimenti: considera il numero espresso dalla stringa; se numero > massimo: memorizza numero come massimo fine del ciclo scrivi massimo 09/12/14 5

e traduciamolo in Python max = int(input("digita un numero: ")) ripeti indefinitamente : esegui l'input da tastiera una nuova stringa se la stringa è la stringa vuota: esci dal ciclo altrimenti: considera il numero espresso dalla stringa; se numero > massimo: memorizza numero come massimo fine del ciclo scrivi massimo 09/12/14 6

e traduciamolo in Python max = int(input("digita un numero: ")) while True: esegui l'input da tastiera una nuova stringa se la stringa è la stringa vuota: esci dal ciclo altrimenti: considera il numero espresso dalla stringa; se numero > massimo: memorizza numero come massimo fine del ciclo scrivi massimo 09/12/14 7

e traduciamolo in Python max = int(input("digita un numero: ")) while True: s = input("digita numero, INVIO per terminare: ") se la stringa è la stringa vuota: esci dal ciclo altrimenti: considera il numero espresso dalla stringa; se numero > massimo: memorizza numero come massimo fine del ciclo scrivi massimo 09/12/14 8

e traduciamolo in Python max = int(input("digita un numero: ")) while True: s = input("digita numero, INVIO per terminare: ") if s == "": break altrimenti: considera il numero espresso dalla stringa; se numero > massimo: memorizza numero come massimo fine del ciclo scrivi massimo 09/12/14 9

e traduciamolo in Python max = int(input("digita un numero: ")) while True: s = input("digita numero, INVIO per terminare: ") if s == "": break else: num = int(s) se numero > massimo: memorizza numero come massimo fine del ciclo scrivi massimo 09/12/14 10

e traduciamolo in Python max = int(input("digita un numero: ")) while True: s = input("digita numero, INVIO per terminare: ") if s == "": break else: num = int(s) if num > max: max = num scrivi massimo 09/12/14 11

e traduciamolo in Python max = int(input("digita un numero: ")) while True: s = input("digita numero, INVIO per terminare: ") if s == "": break else: num = int(s) if num > max: max = num print(max) Nota: affinché il programma funzioni correttamente occorre che venga immesso almeno un numero. 09/12/14 12

Analizziamo la prima riga del programma max = int(input("digita un numero: ")) 1) la funzione predefinita input scrive sulla schermo la sequenza di caratteri compresa fra virgolette, poi si mette in attesa che l'utente pigi dei tasti, terminando con il tasto INVIO; a quel punto la funzione dà come risultato al programma la stringa digitata sulla tastiera; 2) il programma prende questa stringa e la passa direttamente alla funzione predefinita int che dà come risultato il numero intero rappresentato dalla stringa: int(input("digita un numero: ")) 3) tale risultato, cioè il numero, viene memorizzato in una cella (una sorta di scatoletta elettronica) di nome max. Come si vede, le istruzioni che compongono la riga vengono eseguite da destra a sinistra, nell'ordine inverso di quello scritto. 09/12/14 13

while True: Analizziamo le righe successive come vedremo meglio nelle prossime slides, è un comando che fa ripetere indefinitamente la sequenza di istruzioni successive scritte con margine rientrato rispetto all'iniziale di while. Ora analizziamo la sequenza di istruzioni che viene ripetuta. s = input("digita numero, INVIO per terminare: ") è analoga alla prima riga; if s == "": break confronta la stringa memorizzata in s con la stringa vuota: se sono uguali, esegue l'istruzione break, che fa uscire subito dal ciclo di ripetizioni e fa andare alla prima istruzione successiva a quelle del ciclo; else: altrimenti esegue le righe "rientrate" successive. 09/12/14 14

Analizziamo le due righe del ramo else num = int(s) come nella prima riga, la funzione int prende la stringa contenuta in s e dà come risultato il numero corrispondente, che a sua volta viene depositato nella cella num. if num > max: max = num questo è il cuore dell'algoritmo: il contenuto della cella num, che contiene l'ultimo numero digitato, viene confrontato con il contenuto della cella max, che contiene il massimo fino a quel momento, e se il nuovo numero è maggiore di tale massimo, esso viene copiato nella cella max cancellando (o, come si dice in gergo informatico, sovrascrivendo) il valore precedente, che non ci serve più e può quindi essere perduto; se invece il nuovo numero non è maggiore, non si fa niente: il contenuto della cella max viene lasciato invariato. 09/12/14 15

Nota Bene Anche il contenuto della cella s viene ad ogni ciclo sovrascritta con una nuova stringa; quella della volta prima ovviamente non serve più. Così pure il contenuto della cella num viene sovrascritto ogni volta che viene eseguita l'istruzione num = int(s). 09/12/14 16

print(max) Analizziamo la riga finale tale riga, che è allineata a sinistra senza rientro, non fa parte del ciclo, e viene eseguita una sola volta alla fine, dopo che l'istruzione break ha fatto uscire dal ciclo; essa si limita a scrivere sullo schermo il contenuto della cella max, che ad ogni ripetizione del ciclo conteneva il massimo fino a quell'istante, e che alla fine conterrà il massimo definitivo. 09/12/14 17

Una possibile omissione. max = int(input("digita un numero: ")) while True: s = input("digita numero, INVIO per terminare: ") if s == "": break else: num = int(s) if num > max: max = num print(max) Nota. Se la stringa s è la stringa vuota, l'esecuzione della break fa uscire dal ciclo; se non è vuota, anche in assenza di else viene eseguita l'istruzione successiva. La else si può quindi omettere, anche se metterla non fa male. 09/12/14 18

Versione senza else max = int(input("digita un numero: ")) while True: s = input("digita numero, INVIO per terminare: ") if s == "": break num = int(s) if num > max: max = num print(max) 09/12/14 19

Un problema completamente diverso? Vi comunico una sequenza di parole, e alla fine voglio sapere quale di esse è l'ultima in ordine alfabetico o, come si dice con più precisione in informatica, in ordine lessicografico (da lessico, che vuol dire vocabolario). Ma è lo stesso problema del massimo! Cambia solo il tipo di ordine! In Python lo stesso simbolo "<", se usato con le stringhe, ne denota l'ordine lessicografico; si ha quindi, ad esempio: "abate" < "abete" < "cane" < "canestro" < "gatto" Dunque anche il programma Python è lo stesso: l'unica differenza è che ora non devo prima trasformare le stringhe in numeri, ma posso confrontarle direttamente. Più facile! 09/12/14 20

Esercizi 1. Scrivere e provare il programma Python che riceve in input una sequenza di stringhe terminata dalla stringa vuota, e scrive sullo schermo l'ultima di esse in ordine lessicografico. 2. Scrivere e provare il programma Python che riceve in input una sequenza di stringhe terminata dalla stringa vuota, e scrive sullo schermo la prima di esse in ordine lessicografico. 09/12/14 21

Un esercizio lievemente diverso. Esercizio 3. Scrivere un programma Python che riceve in input una sequenza di numeri terminata dalla stringa vuota, e alla fine ne scrive sullo schermo la somma. Nota. Mentre è sensato dire che il massimo di una sequenza vuota non esiste, la somma di una sequenza vuota può essere ragionevole considerarla uguale a 0, che è l'elemento neutro dell'addizione. Assumere che la somma di una sequenza priva di elementi sia 0 permette di scrivere un programma lievemente più semplice di quello del massimo: non c'è bisogno di prendere il primo numero prima di entrare nel ciclo. 09/12/14 22

Soluzione dell'esercizio 3. La somma degli elementi di una sequenza immessa da tastiera. Occorrono anche qui due celle: la somma parziale e il numero letto. Corpo del ciclo: ad ogni passo si aggiunge il numero alla somma parziale. Inizializzazione: la somma parziale contiene l'elemento neutro della somma, cioè 0. 09/12/14 23

L'algoritmo, pensando già a Python somma = 0.0 ripeti indefinitamente : esegui l'input di una nuova stringa se la stringa è la stringa vuota: esci dal ciclo altrimenti: aggiungi il numero in somma fine del ciclo scrivi somma 09/12/14 24

Traduciamolo tutto in Python somma = 0.0 while(true): esegui l'input di una nuova stringa se la stringa è la stringa vuota: esci dal ciclo altrimenti: aggiungi il numero in somma fine del ciclo scrivi somma 09/12/14 25

Traduciamolo tutto in Python somma = 0.0 while(true): s = input('digita numero, o termina con INVIO: ') se la stringa è la stringa vuota: esci dal ciclo altrimenti: aggiungi il numero in somma fine del ciclo scrivi somma 09/12/14 26

Traduciamolo tutto in Python somma = 0.0 while(true): s = input('digita numero, o termina con INVIO: ') if s == "": break altrimenti: aggiungi il numero in somma fine del ciclo scrivi somma 09/12/14 27

Traduciamolo tutto in Python somma = 0.0 while(true): s = input('digita numero, o termina con INVIO: ') if s == "": break else: somma = somma + float(s) fine del ciclo scrivi somma 09/12/14 28

Traduciamolo tutto in Python somma = 0.0 while(true): s = input('digita numero, o termina con INVIO: ') if s == "": break else: somma = somma + float(s) print(somma) Anche qui si può omettere la else, benché metterla non faccia male. 09/12/14 29

Traduciamolo tutto in Python (versione senza else) somma = 0.0 while(true): s = input('digita numero, o termina con INVIO: ') if s == "": break somma = somma + float(s) print(somma) 09/12/14 30

Un'altra versione, un po' particolare, dell'algoritmo. somma = 0 ripeti indefinitamente : esegui l'input di una nuova stringa tenta di trasformarla in un numero: se non ci riesci: esci dal ciclo aggiungi il numero in somma fine del ciclo scrivi somma 09/12/14 31

Traduciamolo tutto in Python somma = 0 while(true): esegui l'input di una nuova stringa tenta di trasformarla in un numero: se non ci riesci: esci dal ciclo aggiungi il numero in somma fine del ciclo scrivi somma 09/12/14 32

Traduciamolo tutto in Python somma = 0 while(true): s = input('immetti un numero: ') tenta di trasformarla in un numero: se non ci riesci: esci dal ciclo aggiungi il numero in somma fine del ciclo scrivi somma 09/12/14 33

Traduciamolo tutto in Python somma = 0 while(true): s = input('immetti un numero: ') try: num = float(s) se non ci riesci: esci dal ciclo aggiungi il numero in somma fine del ciclo scrivi somma 09/12/14 34

Traduciamolo tutto in Python somma = 0 while(true): s = input('immetti un numero: ') try: num = float(s) except: break aggiungi il numero in somma fine del ciclo scrivi somma 09/12/14 35

Traduciamolo tutto in Python somma = 0 while(true): s = input('immetti un numero: ') try: num = float(s) except: break somma = somma + num scrivi somma 09/12/14 36

somma = 0 while(true): Traduciamolo tutto in Python s = input('immetti un numero: ') try: num = float(s) except: break somma = somma + num print somma Usare il costrutto try per controllare una condizione di uscita dal ciclo non è considerata una buona pratica di programmazione, ma qui è usato solo per scrivere un programma semplice che riconosca come fine della sequenza numerica qualunque stringa che non rappresenti un numero. 09/12/14 E. Giovannetti - Algoritmica per i Licei 37