Dall analisi alla codifica (2)

Documenti analoghi
Dall analisi alla codifica (2)

Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007

Dall analisi alla codifica (1)

Problemi, algoritmi e oggetti

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

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

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

Corso di Laurea Ingegneria Elementi di Informatica. Iterazione. C. Limongelli. Iterazione

Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E06. C. Limongelli Dicembre 2011

Fondamenti di Informatica T-1. Variabili, costanti e operazioni Selezione

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 18. Iterazione. Maggio Iterazione

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 15 Definizione di metodi. Carla Limongelli Maggio Definizione di metodi 1

Costrutto if. Come utilizzare il costrutto condizionale if

Costrutto switch. Come utilizzare il costrutto switch

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

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

Metodi statici. Dichiarazione e chiamata di metodi statici

Istruzioni Condizionali

Laboratorio di Informatica 4 Novembre 2005

Metodi statci. Dichiarazione e chiamata di metodi statci

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Richiami di Fondamenti di Informatica - 1

Fondamenti di Informatica

Laboratorio di Python

Formalismi per la descrizione di algoritmi

Definizione di classi

Esercitazione Laboratorio di Informatica 2 Novembre 2005

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

Sviluppo di programmi

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

Istruzioni Condizionali

Sviluppo di programmi

Esempi di Problemi Iterativi

Capitolo 16 Iterazione

Iterazione (introduzione)

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Fondamenti di Informatica T-1. Introduzione al linguaggio Java Input/output, variabili, tipi

Lezione 6 programmazione in Java

Esempi di Problemi Iterativi

Laboratorio di Matematica e Informatica 1

Introduzione al MATLAB c Parte 2

Programmazione in Java e gestione della grafica. Lezione 6

Informatica (A-K) 5. Algoritmi e pseudocodifica

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

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

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

Esercizi su array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E08. C. Limongelli Gennaio 2012

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

Fondamenti di Informatica T-1

ESEMPIO 1. #include <math.h> void eq2gr(float a, float b, float c, int* reali, float* x1,float* x2)

Esercizi su Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E09. C. Limongelli Novembre 2007

Risoluzione di un problema

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

PROBLEMI E ALGORITMI

Array. Definizione e utilizzo di vettori

Laboratorio di Python

Laboratorio di programmazione

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

Fondamenti di Informatica

Lab 04 Programmazione Strutturata"

Istruzioni Ripetitive

Fondamenti di Informatica T1 Introduzione al linguaggio Java Input/Output-Variabili-Tipi

PROGRAMMAZIONE: Le strutture di controllo

Costrutti iterativi. Utilizzo dei costrutti iterativi

Introduzione agli Algoritmi

Laboratorio di Programmazione Laurea in Bioinformatica

Laboratorio di Programmazione Laurea in Bioinformatica

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

Decomposizione per scelta

Istruzioni Ripetitive

Sintassi e semantica delle istruzioni strutturate in Java

INFORMATICA. Strutture iterative

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Laboratorio di Python

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

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Sintassi Java PA RTE 1 FONDAMEN TI DI I N FORMAT ICA PER IL CORSO DI LAUREA I N M AT EMAT ICA PA O L A L E C C A

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

Algoritmi di Ricerca. Esempi di programmi Java

Un oggetto per la lettura dalla tastiera

Istruzioni decisionali

Strutture di Controllo

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

Esercizi. Espressioni. ESERCIZIO 1 Determinare le precedenze e quindi l ordine di esecuzione delle operazioni a*(b+-(c/d)/e)*(f-g%h)

TIPI DI DATO. T = { D, {F 1,...,F n }, {P 1,...,P m } } Un tipo di dato T è definito come:

Esempi. Esempio utilizzo di classi

Sviluppo di programmi

Transcript:

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

Contenuti Problemi di ingresso e uscita - esercizi Lunghezza di una sequenza di numeri interi Perimetro di un triangolo Equazioni di primo e secondo grado Elevamento a potenza Dall analisi alla codifica (2) 2

Esercizi Per tutti gli esercizi che seguono svolgere i seguenti passi: 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 e/o 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 eseguire il programma su diversi dati di input 3

Lunghezza di una sequenza Si consideri il seguente problema di ingresso-uscita si vuole leggere dalla tastiera una sequenza non vuota 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 A1, A2,..., AN 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 A1, A2,..., AN 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 num = 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 Si consideri il seguente problema di ingresso-uscita leggere dalla tastiera le coordinate dei vertici di un triangolo, calcolare il perimetro del triangolo e visualizzarlo sullo schermo Scrivi le coordinate del primo vertice: 2 2 Scrivi le coordinate del secondo vertice: 4 6 Scrivi le coordinate del terzo vertice: 8 2 Il perimetro del triangolo è 16.1289 Dall analisi alla codifica (2) 10

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 nessuna Output Un numero P Post-condizioni P è il perimetro del triangolo di vertici x1,y1 x2,y2 x3,y3 Dall analisi alla codifica (2) 11

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 12

Perimetro di un triangolo import fiji.io.*; /* Applicazione che calcola e visualizza * il perimetro di un triangolo. */ class PerimetroTriangolo { public static void main(string[] args) { A che serve? Indica che la classe usa classi del package fiji.io, in particolare int x1, y1; // coordinate primo vertice int x2, y2; // coordinate secondo vertice int 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) 13... 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) 14

Equazioni di 1 e 2 grado Si consideri il seguente problema di ingresso-uscita Leggere da tastiera i coefficienti di un equazione di primo o secondo grado, calcolare la/e radice/i dell equazione e visualizzarla/e sullo schermo Scrivi i coefficienti dell equazione 1 5 4 Le radici dell equazione sono -4 e -1 Dall analisi alla codifica (2) 15

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 2 +bx+c Pre-condizioni a e b non entrambi nulli Output le radici dell equazione, x1 e x2, oppure segnalazione di non esistenza di radici Post-condizioni a*x1 2 + b*x1 + c = 0 e a*x2 2 + b*x2 + c = 0 Dall analisi alla codifica (2) 16

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 Scrivi no soluzione delta < 0 No x1 =(-b + sqrt(delta))/2*a x2 =(-b - sqrt(delta))/2*a Scrivi x1 e x2 Fine Dall analisi alla codifica (2) 17

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) 18

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) 19

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) 20

Elevamento a potenza Si consideri il seguente problema di ingresso-uscita Leggere da tastiera due numeri naturali positivi (o nulli), base ed esponente, calcolare l elevamento a potenza, base esp, e visualizzare il risultato sullo schermo Scrivi la base: 10 Scrivi l esponente: 2 La potenza è 100 Dall analisi alla codifica (2) 21

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

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) 23

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) 24

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) 25

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) 26

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) 27