Dall analisi alla codifica (2)

Documenti analoghi
Problemi, algoritmi e oggetti

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Dall analisi alla codifica (1)

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E07. C. Limongelli Novembre 2007

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1

Iterazione (introduzione)

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Lezione 6 programmazione in Java

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Civile Elementi di Informatica. Esercizi. Carla Limongelli. Esercizi 1

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

Esempi di Problemi Iterativi

Espressioni. Operatori aritmetici e metodi della classe java.lang.math

Espressioni. Operatori aritmetici e metodi della classe java.lang.math

Richiami di Fondamenti di Informatica - 1

Esempi di Problemi Iterativi

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

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript

Metodi statici. Dichiarazione e chiamata di metodi statici

Formalismi per la descrizione di algoritmi

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

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

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

PROGRAMMAZIONE: Le strutture di controllo

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Introduzione alla programmazione Esercizi risolti

Costrutti iterativi. Utilizzo dei costrutti iterativi

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Laboratorio di Programmazione Laurea in Bioinformatica

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

Laboratorio di Informatica 4 Novembre 2005

INFORMATICA. Strutture iterative

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

Basi della programmazione in Java. Anteprima. Uso delle variabili. Il concetto di variabile Uso delle variabili. Input da tastiera I tipi Esercizi

Array mono- e bi-dimensionali Cicli while e do-while

Classi e array. Viene ora affrontato un problema di definizione di una classe in cui una variabile d istanza è di tipo array

Istruzioni Condizionali

Laboratorio di Python

Fondamenti di Informatica T-1

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Esempio: somma di due numeri

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

Elementi di Informatica e Programmazione

Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008

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

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

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Laboratorio di Programmazione Ottobre. Simone Zaccaria

Algoritmi di Ricerca. Esempi di programmi Java

Definizione di classi

PROGRAMMAZIONE STRUTTURATA

Rappresentazione degli algoritmi

Modulo 2: Strutture fondamentali della programmazione Java

Esercitazione 6. Array

Le strutture di controllo

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

Laboratorio di Matematica e Informatica 1

Esempio: quanto mi piace questo corso! qufuafantofo mifi pifiafacefe qufuefestofo coforsofo!

Unità B3 Strutture di controllo

Corso di Fondamenti di Informatica Classi di istruzioni 2

Decomposizione per scelta

Correttezza (prima parte)

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

Istruzioni iterative. Istruzioni iterative

Algoritmi e soluzione di problemi

Esercitazioni di Fondamenti Informatica - Modulo A 1

Istruzioni iterative (o cicliche)

Programmare in C. Esempio: Algoritmo del Risveglio

Algoritmi di Ricerca. Esempi di programmi Java

Le basi del linguaggio Java

I costrutti forniti dal linguaggio si dividono in corrispondenti classi di istruzioni

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Istruzioni di Ciclo. Unità 4. Domenico Daniele Bloisi

Algoritmi di Ricerca. Esempi di programmi Java

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

Corso sul linguaggio Java

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 07. Oggetti e Java. Marzo Programmazione Java 1

Laboratorio di programmazione

5 - Istruzioni condizionali

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

6) Descrivere con un diagramma a blocchi un algoritmo che legga da input due numeri ne calcoli il prodotto in termini di somme ripetute.

Laboratorio di Python

Fondamenti di Informatica

A lezione sono stati presentati i seguenti passi per risolvere un problema:

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione

Per gli esercizi sulla algebra booleana, si consiglia di verificare tramite tabelle di verità le equivalenze logiche proposte sulle dispense.

#include <iostream> using namespace std; // int main ( ) { // --- Dichiarazione delle variabili int N ; float A, Pot;

Le basi del linguaggio Java

Esercizi Programmazione I

Corso di Fondamenti di Informatica. Dispensa 3: Espressioni artimetico-logiche e costrutti di decisione. Prof. Domenico Rosaci

Note ed esercizi aggiuntivi

Prof. Pagani Corrado ALGORITMI ESERCITAZIONI CICLI

Indice. Prefazione. 3 Oggetti e Java 53

Laboratorio di Programmazione Lezione 3. Cristian Del Fabbro

Transcript:

Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 10 Dall analisi alla codifica (2) Aprile 2010 Dall analisi alla codifica (2) 1

Contenuti Problemi di ingresso e uscita (esempi ed esercizi) Lunghezza di una sequenza Perimetro di un triangolo Equazioni di primo e secondo grado Elevamento a potenza Media aritmetica di una sequenza di numeri interi Numero di zeri di una sequenza di numeri interi Somma di una sequenza di 10 numeri interi Massimo di una sequenza di 10 numeri interi Somma dei primi n numeri interi dispari Escursione dei valori in una sequenza Divisori di un numero Generazione di n numeri random 2 Dall analisi alla codifica (2) 2

Esercizi Per tutti gli esercizi che seguono eseguire i seguenti passi (se non sono presenti): Definire la specifica del problema indicando sinteticamente: Il problema i dati di input Le pre-condizioni che devono soddisfare I dati di input I dati di output Le post-condizioni che devono soddisfare I dati di output Scrivere l algoritmo risolutivo in pseudo-codice Scrivere l algoritmo risolutivo con il diagramma a blocchi Scrivere la traccia del processo di esecuzione per almeno un dato insieme di dati di input Scrivere la codifica Java ed esegure il programma su diversi dati di input 3

Lunghezza di una sequenza Si consideri ora il seguente problema di ingressouscita si vuole leggere dalla tastiera una sequenza di numeri interi, disposti su una singola linea e separati da spazi, calcolare la lunghezza della sequenza (ovvero, il numero di elementi della sequenza) e visualizzarla sullo schermo Scrivi una sequenza di numeri interi 10 15 0-2 La lunghezza della sequenza è 4 Dall analisi alla codifica (2) 4

Lunghezza di una sequenza Problema lettura di una sequenza di numeri interi e calcolo della lunghezza Dati di ingresso una sequenza di numeri interi A 1, A 2,..., A N Pre-condizione N>=0, i numeri sono disposti su una singola linea e separati da spazi Dati di uscita un numero L Post-condizione L è uguale alla lunghezza N della sequenza A 1, A 2,..., A N Dall analisi alla codifica (2) 5

Lunghezza di una sequenza Una variante del problema della lettura e somma di una sequenza di numeri interi bisogna leggere dalla tastiera una sequenza di numeri interi ma non bisogna calcolarne la somma bisogna piuttosto contare il numero degli elementi È possibile scrivere un algoritmo come adattamento di quello della somma di una sequenza di numeri non ripartendo da zero anziché gestire la variabile somma va gestita una variabile lunghezza che inizialmente deve valere zero ogni volta che viene letto un elemento deve essere incrementata di uno lunghezza viene usata per contare il numero degli elementi della sequenza che sono stati letti al termine, è uguale alla lunghezza della sequenza Dall analisi alla codifica (2) 6

Algoritmo per il calcolo della lunghezza di una sequenza (pseudocodifica) 1. leggi una sequenza di numeri interi e calcolane la lunghezza lunghezza 1.1 inizialmente lunghezza vale zero lunghezza = 0; 1.2 finché ci sono altri elementi nella sequenza, leggili e incrementa lunghezza while (!Lettore.in.eoln() ) { leggi un elemento della sequenza numero dalla tastiera numero = Lettore.in.leggiInt(); incrementa lunghezza lunghezza = lunghezza + 1; 2. visualizza lunghezza System.out.println(lunghezza); Dall analisi alla codifica (2) 7

Algoritmo per il calcolo della lunghezza di una sequenza (diagramma a blocchi) input (A1,,An) l = 0 Ci sono ancora numeri da leggere? No Si Ai = numero letto l = l+1 scrivi l Fine assegnazione selezione iterazione 8

Lunghezza di una sequenza: codifica import fiji.io.*; /* Applicazione che calcola la lunghezza di una sequenza di numeri dati in input */ class LunghezzaSequenza{ public static void main(string[] args){ int num; int l; //precondizioni sequenza non vuota l=0; System.out.println("Scrivi una sequenza non vuota di numeri interi"); /* finche' non viene dato invio */ while (!Lettore.in.eoln()){ /*lettura di un numero ad ogni iterazione */ num = Lettore.in.leggiInt(); l=l+1; System.out.print("lunghezza calcolata "); System.out.println(l); Dall analisi alla codifica (2) 9

Perimetro di un triangolo Problema Calcolare il perimetro di un triangolo date le coordinate dei suoi vertici Input coordinate dei vertici x1,y1 x2,y2 x3,y3 Pre-condizioni Coordinate dei vertici tutte positive Output perimetro Post-condizioni. Dall analisi alla codifica (2) 10

Perimetro di un triangolo input (x1,y1,x2,y2,x3,y3) assegnazione d12=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) d13=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3)) d23=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3)) perimetro = d12 + d13 + d23 Scrivi perimetro Fine 11

Perimetro di un triangolo A che serve? Indica che la import fiji.io.*; classe usa classi del /* Applicazione che calcola e visualizza package fiji.io, in * il perimetro di un triangolo. */ particolare class PerimetroTriangolo { public static void main(string[] args) { double x1, y1; // coordinate primo vertice double x2, y2; // coordinate secondo vertice double x3, y3; // coordinate terzo vertice double d12, d13, d23; // distanze tra i vertici double perimetro; // perimetro del triangolo /* imposta le coordinate dei vertici */ System.out.println("CALCOLO DEL PERIMETRO DI UN TRIANGOLO"); System.out.println("scrivi le coordinate del primo vertice"); x1 = Lettore.in.leggiInt(); y1 = Lettore.in.leggiInt(); System.out.println("scrivi le coordinate del secondo vertice"); x2 = Lettore.in.leggiInt(); y2 = Lettore.in.leggiInt(); System.out.println("scrivi le coordinate del terzo vertice"); x3 = Lettore.in.leggiInt(); y3 = Lettore.in.leggiInt(); Dall analisi alla codifica (2) 12... segue...

Perimetro di un triangolo Esiste un metodo che calcola la potenza? Math.pow (vedere documentazione classe Math)... segue... /* calcola la distanza tra p1 e p2 */ d12 = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); d13 = Math.sqrt((x1-x3)*(x1-x3) + (y1-y3)*(y1-y3)); d23 = Math.sqrt((x2-x3)*(x2-x3) + (y2-y3)*(y2-y3)); /* calcola il perimetro del triangolo */ perimetro = d12 + d13 + d23; /* visualizza il perimetro */ System.out.print("Il perimetro del triangolo e' "); System.out.println(perimetro); System.out sa eseguire anche una operazione print, che visualizza l argomento, ma senza poi andare a capo (come fa println) Dall analisi alla codifica (2) 13

Equazioni di 1 e 2 grado Problema Input Calcolo delle radici di un equazione di primo o secondo grado i coefficienti a, b, c dell equazione ax*x+bx+c Pre-condizioni Coordinate dei vertici tutte positive Output le radici dell equazione x1 e x2, oppure segnalazione di non esistenza di radici Post-condizioni a*x1*x1 + b*x1 + c = 0 e a*x2*x2 + b*x2 + c = 0 Dall analisi alla codifica (2) 14

Equazioni di 1 e 2 grado Si input (a,b,c) a = 0 No selezione assegnazione Si b = 0 No delta = b*b-4*a*c Scrivi no soluzione x1 = -c/b Scrivi 1 soluzione,x1 Si delta < 0 No Scrivi x1 = no soluzione (-b + sqrt(delta))/2*a x2 = (-b - sqrt(delta))/2*a Scrivi x1 e x2 Fine Dall analisi alla codifica (2) 15

Equazioni di 1 e 2 grado Programma: Calcolo radici equazione di 1 e 2 grado Variabili: double a, b, c, delta, x1, x2; Istruzioni: input(a,b,c) if (a==0){ if (b==0) scrivi( non esistono soluzioni ); else{ x1 = -c/b; scrivi( unica soluzione, x1); else{ delta = b*b - 4*a*c; if (delta < 0) scrivi( non esistono soluzioni ); else{ x1 = (-b + sqrt(delta))/2*a; x2 = (-b - sqrt(delta))/2*a; scrivi( soluzioni:, x1, x2); Dall analisi alla codifica (2) 16

Equazioni di 1 e 2 grado import fiji.io.*; /** Applicazione che calcola le radici reali delle equazioni di secondo grado */ class Equazioni2grado{ public static void main(string[] args){ double a,b,c; //coefficenti dell'equazione double delta; //valore del delta double x1,x2; //radici reali, se esistono /*lettura dei coefficienti da input */ System.out.println("Scrivi i coefficienti dell'equazione"); a = Lettore.in.leggiDouble(); b = Lettore.in.leggiDouble(); c = Lettore.in.leggiDouble(); Dall analisi alla codifica (2) 17

Equazioni di 1 e 2 grado if (a==0){ if (b==0) System.out.println("l'eq. non ha soluzioni"); else{ x1 = -c/b; System.out.println("l'eq. ha 1 sola soluzione"); System.out.println(x1); else{ //a<>0 /* calcolo del delta */ delta = b*b-4*a*c; /* verifica se il delta e' positivo o nullo */ if (delta<0) System.out.println("l'equazione non ammette soluzioni"); else{ x1 = (-b+math.sqrt(delta))/(2*a); x2 = (-b-math.sqrt(delta))/(2*a); System.out.print("le soluzioni sono "); System.out.print(x1); System.out.print(" e "); System.out.println(x2); Dall analisi alla codifica (2) 18

Elevamento a potenza Problema Calcolare l elevamento a potenza tra numeri naturali positivi (o nulli) Input Base, esp Pre-condizioni interi positivi o nulli Output pot Post-condizioni pot = base esp Dall analisi alla codifica (2) 19

Elevamento a potenza No input (base,esp) base==0 and esp==0 Si selezione assegnazione iterazione pot = 1 esp > 0 Si pot = pot * base No Scrivi errore esp = esp - 1 scrivi pot Fine Dall analisi alla codifica (2) 20

Elevamento a potenza Programma: Variabili: Elevamento a potenza int base; int esp; int pot; Istruzioni: 1. input(base, esp) 2. if (base==0 AND esp ==0) 3. scrivi( errore ); else{ 4. pot = 1; 5. while (esp > 0) { 6. pot = pot * base; 7. esp = esp 1; 8. scrivi pot; Dall analisi alla codifica (2) 21

Elevamento a potenza: traccia del processo di esecuzione Istruzione base esp pot 1. 3 2 2. 3 2 4. 3 2 1 5. 3 2 1 6. 3 2 3 7. 3 1 3 5. 3 1 3 6. 3 1 9 7. 3 0 9 5. 3 0 9 8. 3 0 9 La variabile pot contiene il valore della potenza Dall analisi alla codifica (2) 22

Elevamento a potenza: codifica import fiji.io.*; /* elevamento a potenza tra numeri naturali positivi (o nulli) */ class Potenza { public static void main(string[] args) { /* Definizione variabili */ int base; // base int esp; // esponente int pot; // risultato /** Corpo programma **/ System.out.println("elevamento a potenza:"); System.out.print("base: "); base = Lettore.in.leggiInt(); System.out.print("esponente:"); esp = Lettore.in.leggiInt();... segue... Dall analisi alla codifica (2) 23

Elevamento a potenza... segue... if ((base == 0) && (esp == 0)) System.out.println("errore"); else{ pot = 1; while (esp > 0) { pot = pot * base; esp = esp - 1; System.out.println("risultato = " + pot); Dall analisi alla codifica (2) 24

Esercizio Scrivere un algoritmo che legge una sequenza non vuota di numeri interi e ne calcola la media aritmetica la somma degli elementi diviso il numero degli elementi Dall analisi alla codifica (2) 25

Esercizio Risolvere il seguente problema di ingressouscita leggere dalla tastiera una sequenza di numeri interi, disposti su una singola linea e separati da spazi, calcolare il numero di zeri della sequenza (ovvero, il numero di elementi della sequenza che sono uguali a zero) e visualizzare il numero di zeri sullo schermo Scrivi una sequenza di numeri interi 10 15 0-2 Il numero di zeri nella sequenza è 1 bisogna usare l istruzione if 26

Calcolo degli zeri di una sequenza int numero; int zeri; // elemento corrente della sequenza // numero di zeri nella sequenza /* leggi una sequenza di numeri interi e * calcolane il numero di zeri */ /* inizialmente zeri vale zero */ zeri = 0; /* finché ci sono altri elementi nella sequenza, * leggili e calcola il numero di zeri */ while (!Lettore.in.eoln()) { /* leggi un elemento della sequenza */ numero = Lettore.in.leggiInt(); /* se numero è uguale a zero, incrementa zeri */ if (numero==0) /* incrementa zeri */ zeri = zeri + 1; /* visualizza zeri */ System.out.println(zeri); // se numero è uguale a zero 27

Somma di una sequenza di dieci numeri Si consideri il seguente problema di ingressouscita si vuole leggere dalla tastiera una sequenza di numeri interi di lunghezza fissata (ad esempio, di lunghezza dieci), calcolare la somma degli elementi e visualizzarla sullo schermo Scrivi una sequenza di dieci numeri interi 1 12-13 2 0-4 8 0 4 10 La somma dei dieci numeri è 20 28

Lettura e somma di una sequenza di dieci numeri interi Problema lettura di una sequenza di dieci numeri interi e calcolo della somma degli elementi Dati di ingresso una sequenza di dieci numeri interi A 1, A 2,..., A 10 Pre-condizione nessuna Dati di uscita un numero S Post-condizione S è la somma degli elementi della sequenza A 1, A 2,..., A 10 29

Lettura e somma di una sequenza di dieci numeri interi Una soluzione poco parametrica e poco modificabile dieci variabili dieci istruzioni di lettura una somma di dieci valori Soluzione parametrica basata su una istruzione ripetitiva si suppone che la lunghezza della sequenza sia nota a priori cerchiamo un algoritmo parametrico rispetto a questa lunghezza 30

Lettura e somma di una sequenza di dieci numeri interi L algoritmo può essere realizzato gestendo le seguenti variabili numero valore dell elemento corrente della sequenza somma la somma degli elementi della sequenza che sono stati già letti numeriletti il numero degli elementi della sequenza che sono stati già letti La gestione delle variabili somma e numeriletti è come segue inizialmente valgono entrambe zero per ogni numero letto somma deve essere incrementata di numero numeriletti deve essere incrementata di uno 31

Algoritmo per la lettura e somma di dieci numeri leggi una sequenza di dieci numeri interi e calcolane la somma 1.inizializza la somma e il numero di elementi letti somma = 0; numeriletti = 0; 2.leggi i dieci elementi della sequenza e calcolane la somma while ( ci sono altri elementi nella sequenza ) { leggi un elemento numero della sequenza numero = Lettore.in.leggiInt(); incrementa somma di numero somma = somma + numero; incrementa numeriletti numeriletti = numeriletti + 1; Bisogna raffinare la condizione dell istruzione ripetitiva quante volte viene valutata la condizione? quanto vale numeriletti durante ciascuna valutazione della condizione? 32

Algoritmo per la lettura e somma di dieci numeri inizializza la somma e il numero di elementi letti somma = 0; numeriletti = 0; leggi i dieci elementi della sequenza e calcolane la somma while ( numeriletti<10 ) { leggi un elemento numero della sequenza numero = Lettore.in.leggiInt(); incrementa somma di numero somma = somma + numero; incrementa numeriletti numeriletti = numeriletti + 1; 33

Programma per la lettura e somma di dieci numeri int numero; // elemento corrente della sequenza int somma; // somma degli elementi della sequenza int numeriletti; // numero degli elementi letti /* leggi una sequenza di dieci numeri interi e * calcolane la somma */ /* inizializza la somma e il numero di elementi letti */ somma = 0; numeriletti = 0; /* leggi i dieci elementi della sequenza e * calcolane la somma */ while (numeriletti < 10) { /* leggi un elemento della sequenza */ numero = Lettore.in.leggiInt(); /* incrementa somma di numero */ somma = somma + numero; /* incrementa numeriletti */ numeriletti = numeriletti + 1; /* visualizza somma */ System.out.println(somma); // ci sono altri elementi 34

Calcolo del massimo di dieci numeri Si consideri il seguente problema di ingresso-uscita si vuole leggere dalla tastiera una sequenza di numeri interi di lunghezza fissata (ad esempio, di lunghezza 10), calcolare il valore massimo degli elementi e visualizzarlo sullo schermo Scrivi una sequenza di dieci numeri interi 1 12-13 2 0-4 8 0 4 10 Il valore massimo calcolato e : 12 35 35

Calcolo del massimo di una sequenza di 10 numeri interi Problema lettura di una sequenza di 10 numeri interi e calcolo del valore massimo degli elementi Dati di ingresso una sequenza di dieci numeri interi A 1, A 2,..., A 10 Pre-condizione nessuna Dati di uscita un numero max Post-condizione max è il massimo degli elementi della sequenza A 1, A 2,..., A 10 36 36

Algoritmo per il calcolo del massimo tra 10 interi L algoritmo può essere realizzato gestendo le seguenti variabili num: valore dell elemento corrente della sequenza cont: contatore degli elementi della sequenza già letti max: valore massimo degli elementi della sequenza già letti La gestione delle variabili max e cont avviene come segue inizialmente cont vale 0 leggi il primo numero num, assumilo provvisoriamente come valore del massimo max e incrementa cont di uno per ogni numero num letto max deve essere confrontato con num ed eventualmente modificato cont deve essere incrementata di uno 37 37

Algoritmo per il calcolo del massimo tra 10 interi Leggi una sequenza di dieci numeri interi e calcolane il massimo: 1. inizializza il contatore dei numeri letti cont = 0; 2. leggi un numero num da input 3. inizializza max max = num; 4. incrementa il contatore dei numeri letti cont = cont + 1; 5. finché ci sono ancora numeri da leggere while (cont <= 9) 5.1 leggi un numero num 5.2 confronta num con max se num > max memorizza il contenuto di num in max if (num > max) max = num; 6. il risultato è max 5.3 incrementa cont cont = cont + 1; 38 38

Codifica per il calcolo del massimo tra 10 interi...... int num; int max; int cont; //numero letto //massimo calcolato //contatore dei numeri letti //precondizioni sequenza non vuota: almeno un elemento /* inizializzazione del contatore */ cont = 0; /* lettura del primo numero - fuori dal ciclo */ System.out.println("Scrivi una sequenza di 10 numeri interi"); num = Lettore.in.leggiInt(); /* appena leggo un numero incremento il contatore */ cont = cont + 1; /* essendo l'unico numero letto esso e' il massimo */ max = num;... 39 39

... Codifica per il calcolo del massimo tra 10 interi...... /* devono essere letti altri 9 numeri */ while (cont <= 9){ /* lettura di un numero ad ogni iterazione */ num = Lettore.in.leggiInt(); cont = cont+1; /* se num e' maggiore del max, aggiorno max */ if (num > max) max = num; System.out.print( Il valore massimo calcolato e : "); System.out.println(max); 40 40

Applicazione per il calcolo del massimo tra 10 interi... import fiji.io.*; /* Applicazione che calcola il massimo tra 10 numeri */ class Max10Numeri{ public static void main(string[] args){ int num; //numero letto int max; //massimo calcolato int cont; //contatore dei numeri letti... //precondizioni sequenza non vuota: almeno un elemento /* inizializzazione del contatore */ cont = 0; /* lettura del primo numero - fuori dal ciclo*/ System.out.println("Scrivi una sequenza di 10 numeri interi"); num = Lettore.in.leggiInt(); 41 41

... Applicazione per il calcolo del massimo tra 10 interi... /* appena leggo un numero incremento il contatore */ cont = cont + 1; /*essendo l'unico numero letto esso e' il massimo */ max = num; /* devono essere letti altri 9 numeri */ while (cont <= 9){ /*lettura di un numero ad ogni iterazione */ num = Lettore.in.leggiInt(); cont = cont + 1; /* se num e' maggiore del max, aggiorno max */ if (num > max) max = num; System.out.print("valore massimo calcolato e : "); System.out.println(max); 42 42

Algoritmo per il calcolo del massimo tra 10 interi Leggi una sequenza di dieci numeri interi e calcolane il massimo: 1. inizializza il contatore dei numeri letti cont = 0; 2. leggi un numero num da input 3. inizializza max max = num; 4. incrementa il contatore dei numeri letti cont = cont + 1; 5. finché ci sono ancora numeri da leggere while (cont <= 9) 5.1 leggi un numero num 5.2 confronta num con max se num > max memorizza il contenuto di num in max if (num > max) max = num; 6. il risultato è max 5.3 incrementa cont cont = cont + 1; 43 43

Massimo tra 3 interi: traccia del processo di esecuzione Es. 5-1 7 Istruzione num cont max 1. 0 2. 5 0 3. 5 0 5 4. 5 1 5 5. 5 1 5 5.1. -1 1 5 5.2. -1 1 5 5.3. -1 2 5 5. -1 2 5 5.1. 7 2 5 5.2. 7 2 7 5.3. 7 3 7 5. 7 3 7 La variabile max contiene il valore del massimo della sequenza Dall analisi alla codifica (2) 44

Somma dei primi n numeri interi dispari Problema Scrivere un applicazione che, dato un numero intero n, calcoli e visualizzi la somma dei primi n numeri dispari Esempio per n = 4 la somma dei primi 4 numeri dispari e 1+3+5+7=16 Dati di ingresso un intero n Pre-condizione n >= 0 Dati di uscita un numero somma Post-condizione somma è la somma dei primi n numeri dispari 45 45

Algoritmo: somma dei primi n numeri interi dispari L algoritmo può essere realizzato gestendo le seguenti variabili n - quantità di numeri dispari da sommare somma - somma degli interi dispari disp - numero dispari corrente leggi da tastiera un numero intero n inizializza somma a zero inizializza il primo numero dispari disp a 1 usa la stessa variabile n come contatore: finché n > 0 aggiungi a somma il valore di disp incrementa disp di 2 (il prossimo numero dispari) decrementa n visualizza il valore di somma 46 46

Codifica: somma dei primi n numeri interi dispari int n; //numero totale di dispari da sommare e contatore int disp; //numero dispari da sommare int somma; //somma calcolata //pre: n > 0 /*lettura del numero di elementi da sommare */ System.out.println("Scrivi il numero (>0)di elementi da sommare"); n = Lettore.in.leggiInt(); somma = 0; disp = 1; //il primo num dispari 47 while (n > 0){ /* lettura di un numero ad ogni iterazione */ somma = somma + disp; n = n - 1; disp = disp + 2; 47

Applicazione: somma dei primi n numeri interi dispari import fiji.io.*; /* Applicazione che calcola la somma dei primi n numeri dispari */ class SommaDispari{ public static void main(string[] args){ int n; //numero totale di dispari da sommare e contatore int disp; //numero dispari da sommare int somma; //somma calcolata 48 //pre: n > 0 /* lettura del numero di elementi da sommare */ System.out.println("Scrivi il numero di dispari da sommare (>0)"); n = Lettore.in.leggiInt(); somma = 0; disp = 1; // il primo numero dispari while (n > 0){ /* lettura di un numero ad ogni iterazione */ somma = somma + disp; n = n - 1; disp = disp + 2; System.out.print( La somma dei primi "); System.out.print(n); System.out.print( numeri dispari e "); System.out.println(somma); 48

Escursione dei valori in una sequenza Problema Scrivere un applicazione che calcola l'escursione dei valori di una sequenza di interi letta da tastiera Esempio Dati i valori 3-1 2 4-2 l escursione e 7 (da -2 a 4) Dati di ingresso una sequenza di numeri interi Pre-condizione La sequenza è non vuota Dati di uscita Massimo, minimo ed escursione Post-condizione 49 49

Algoritmo: escursione dei valori in una sequenza Inizializzo max e min: Leggo il primo elemento della sequenza e lo memorizzo in num max = num min = num Finche non sono terminati gli elementi sulla linea di input leggo un numero e lo memorizzo in num se num > max allora aggiorno max con num se num < min allora allora aggiorno min con num L escursione è data da (max-min+1) Se la sequenza e composta tutta da valori negativi? 50 50

51 Codifica: escursione dei valori in una sequenza System.out.println( Scrivi una sequenza non vuota di numeri interi "); num = Lettore.in.leggiInt(); max = num; min = num; /* finche' non viene dato invio */ while (!Lettore.in.eoln()){ /*lettura di un numero ad ogni iterazione */ num = Lettore.in.leggiInt(); /* se num e' maggiore del max, aggiorno max */ if (num > max) max = num; /* se num e' minore di min aggiorno min */ if (num < min) min = num; System.out.print("L'escursione della sequenza e' "); System.out.println(Math.abs(max-min+1)); 51

Applicazione: escursione dei valori in una sequenza import fiji.io.*; /* Applicazione che calcola l'escursione dei valori di una sequenza di interi letta da input */ class Escursione{ public static void main(string[] args){ int num; int max,min; //precondizioni sequenza non vuota System.out.println("Scrivi una sequenza non vuota di numeri interi"); num = Lettore.in.leggiInt(); max=num; min=num;... 52 52

Escursione dei valori in una sequenza... /* finche' non viene dato invio */ while (!Lettore.in.eoln()){ /* lettura di un numero ad ogni iterazione */ num = Lettore.in.leggiInt(); /* se num e' maggiore del max, aggiorno max */ if (num > max) max = num; /* se num e' minore di min aggiorno min */ if (num < min) min = num; System.out.print("valore massimo "); System.out.println(max); System.out.print("valore minimo "); System.out.println(min); System.out.print("L'escursione della sequenza e' "); System.out.println(Math.abs(max-min+1)); 53 53

Calcolo dei divisori di un numero Problema Dato un numero num intero positivo calcolare e visualizzare tutti i suoi divisori (1 e num esclusi) Esempio I divisori di 28 sono 2, 4, 7, e 14 Dati di ingresso num Pre-condizione num intero positivo Dati di uscita Una sequenza di interi 54 Post-condizione La sequenza in uscita è composta dai divisori di num 54

Algoritmo per il calcolo dei divisori di un numero Dato un numero intero num, verifico che tutti i valori div compresi tra 2 e num/2 dividano o meno num Se il risultato della divisione di num per div da' resto 0 allora div e' un divisore di num e lo visualizzo inizializza lim a num/2 Inizializza div a 2 Finché il divisore div è < lim Se il resto della divisione di num per div è 0 allora visualizza div incrementa div di 1 55 55

Codifica: calcolo dei divisori di un numero /* lettura del numero */ System.out.println("Scrivi un intero positivo"); num = Lettore.in.leggiInt(); /* inizializzo il limite massimo dei divisori */ lim = num/2; /* inizializzo il divisore */ div = 2; /* spiegazione delle stampe che verranno prodotte all'interno del ciclo while */ System.out.println("I suoi divisori sono: "); /* verifico da 2 fino a div */ while (div <= lim){ if (num%div == 0) System.out.println(div); div = div + 1; 56 56

Applicazione per il calcolo dei divisori di un numero import fiji.io.*; /* Applicazione che calcola e visualizza i divisori di un * numero intero letto da tastiera */ class Divisori{ public static void main(string[] args){ int num; //numero letto int lim; //limite massimo dei divisori int div; //divisore //precondizioni: num e' intero positivo (>=1) /* dato num, verifico che tutti i valori div compresi * tra 2 e num/2 dividano o meno num. Se il risultato * della divisione di num per div da' resto 0 allora * div e' un divisore di num e lo visualizzo */ 57 /*lettura del numero*/ System.out.println("Scrivi un intero positivo"); num = Lettore.in.leggiInt();... 57

Calcolo e stampa dei divisori di un numero... /* inizializzo il limite massimo dei divisori */ lim = num/2; /* inizializzo il divisore */ div = 2; /* spiegazione delle visualizzazioni che verranno * prodotte all'interno del ciclo while */ System.out.println("I suoi divisori sono: "); 58 /* verifico i divisori da 2 fino a lim */ while (div <= lim){ if (num%div == 0) System.out.println(div); div = div + 1; 58

Generazione di n numeri random Problema Scrivere un applicazione per generare e visualizzare sullo schermo N numeri interi random compresi tra 0 e 99 Dati di ingresso un intero N Pre-condizione N >= 0 Dati di uscita Una sequenza di numeri Post-condizione Nessuna 59 59

Algoritmo per la generazione di n numeri random Il metodo Math.random() calcola un numero pseudo-casuale di tipo double compreso nell intervallo [0,1). Bisogna trasformarlo in un numero di tipo int compreso in [0,100) Moltiplicandolo per 100 Leggi un intero n Inizializza un contatore i a 0, che permette di contare il numero di volte che deve essere richiamato il metodo Math.random() per generare gli n numeri random Mentre i < n Genera un numero random, moltiplicalo per 100, trasformalo in un intero e visualizzalo sullo schermo Incrementa il contatore i 60 60

Codifica: generazione di n numeri random //pre: n>=0 int res; // numero generato int n; // numero di elementi da generare int i; // contatore per l'istr. ripetitiva /*lettura del valore di N */ System.out.println("quanti numeri vuoi generare? "); n = Lettore.in.leggiInt(); i=0; while(i <n ){ /* calcolo del numero random */ res = (int)(math.random()*100); System.out.print(res); System.out.print(" "); i=i+1; 61 61

Applicazione per la generazione di n numeri random import fiji.io.*; /* Applicazione che genera n numeri random tra 0 e 99 */ class NumeriRandom{ public static void main(string[] args){ //pre: n>=0 int res; // numero generato int n; // numero di elementi da generare int i; // contatore per l'istr. ripetitiva /*lettura del valore di N */ System.out.println("quanti numeri vuoi generare? "); n = Lettore.in.leggiInt(); i=0; while( i<n ){ /* calcolo del numero random */ res = (int)(math.random()*100); System.out.print(res); System.out.print(" "); i=i+1; System.out.println(); 62 62

Esercizi Definire una classe applicazione per calcolare e visualizzare il valore massimo di una sequenza di N numeri interi Definire una classe applicazione per generare N numeri interi random nell intervallo [0,100) e per calcolare e visualizzare il valore massimo degli N numeri interi generati in modo random Scrivere un applicazione che verifica se un numero intero letto da tastiera e primo Scrivere un applicazione che calcola e visualizza i primi 10 numeri primi 63 63