Comments
Description
Transcript
Link Esercizi specifici
LEZIONE 4 ANCORA UN RIPASSO SUI METODI E LE CLASSI USATI PER LE OPERAZIONI DI INPUT/OUTPUT System.out serve a stampare i dati in uscita System.in serve a leggere i dati in ingresso, ma è TRIVIALE perché legge solo un byte per volta!! SOLUZIONE: usate la classe Scanner (contenuta nel package java.util), che elabora i dati letti da System.in in modo che siano più facilmente utilizzabili dal programmatore. Utilizzo di Scanner --------------------------Importazione della classe Scanner dal package java.util: import java.util.Scanner; Dichiarazione e creazione: Scanner in=new Scanner(System.in); Lettura di valori inseriti da tastiera: int val= in.nextInt(); // lettura di un intero double val= in.nextDouble(); // lettura di un double String parola=in.next(); // lettura di una sola parola in tutta la riga digitata dall’utente; la // parola e’ delimitata da 2 spazi bianchi al suo inizio e alla sua // fine String line= in.nextLine(); // lettura di tutto il resto della riga di testo già scritta dall’utente Controlli sui dati di input: boolean nextVal=in.hasnextInt(); // controlla se ci sono altri numeri interi nel flusso di //input boolean nextVal= in.hasnextInt(); // controlla se ci sono altri numeri double nel flusso di //input Esempio di utilizzo nella classe ScannerTest.java. Nelle API di java trovare una descrizione piu’ dettagliata! DATI e VARIABILI Esercizio 1 Integer Overflow - Underflow ====================== Scrivere un programma che assegna un valore numerico da voi scelto a una variabile di tipo int, per poi stampare quest'ultima a video. Eseguite il programma e verificate qual è il più piccolo valore positivo che non viene accettato. Come mai esistono dei valori numerici che non possono essere memorizzati in una variabile int? Che cosa succede se chiedete all'utente di inserire il valore numerico e poi lo assegnate alla variabile? Esercizio 2 Overflow - Underflow ================= Individuare anche per ognuno dei tipi short, long, float e double quale sia l'ordine di grandezza del più piccolo valore positivo e del più grande valore negativo non accettati. Ripetete l'esercizio precedente al fine di determinare dei valori float e double (sia positivi, sia negativi) che vengono automaticamente sostituiti con 0. Tenete presente che potete inserire anche numeri usando la notazione scientifica secondo la qule, per esmpio, 1.0E-3 equivale a uno moltiplicato per dieci elevato alla meno tre (in altre parole 0.001). Se le cose sono andate bene dovreste avere riscontrato qualche difficoltà nello scrivere degli assegnamenti a valori numerici prefissati ad alcuni dei tipi short, int, long, float e double. È vero? Ripetete gli esercizi 1 e 2 utilizzando i campi costanti MAX_VALUE e MIN_VALUE dei wrapper type associati ai tipi considerati. Esercizio 3 Overflow - Underflow ================= Scrivere un programma che chieda in ingresso un valore intero, lo incrementi iterativamente e lo stampi ad ogni incremento. Che cosa succede quando il valore contenuto nella variabile int non è più memorizzabile nella variabile stessa? Cosa succede se si modifica lo stesso programma al fine di decrementare la variabile anziché incrementarla? Che cosa succede se si ripete l'esercizio precedente considerando valori float? Esercizio 4 Uguaglianza tra valori double ======================= Scrivete un programma che riceve in input un valore double x, e calcola la sua radice quadrata che salva in un’altra variabile (double) y. Il programma dovra’ controllare se y*y e’ uguale a x e in tal caso dovra’ stampare la stringa “x equal to y*y” se x=y*y; dovra’ invece stampare la stringa “x different from y*y” se x è diverso da y*y. Esempi d’esecuzione ---------------------------Inserire valore double: 4 4 equal to 2*2 Inserire valore double: 10.89 10.89 equal to 3.3*3.3 Provate a testare il vostro algoritmo con gli stessi valori. Ottenete sempre lo stesso risultato?? Se non e’ così perché? Esercizio 5 Dichiarazione e inizializzazione di variabili ================================ Che cosa succede se si prova a utilizzare una variabile senza averla dichiarata? E che cosa succede se si prova a utilizzare una variabile dichiarata ma non inizializzata? Provate a trovare una risposta, giustificandola, senza scrivere codice. Successivamente realizzate un programma che vi permetta di vedere se avevate ragione o meno. Esercizio 6 ========= Il seguente frammento di codice contiene un errore: int a = 5; int b = 7; if(a = b) System.out.println("Sono uguali"); else System.out.println("Sono diversi"); Trovate l'errore leggendo il codice e, solo successivamente, inserite il frammento di codice in un programma compilabile e verificate se avevate o meno ragione. Considerate il seguente frammento di codice: int a = 7, b = 5, c; c = a = b; Che cosa succede quando queste istruzioni vengono eseguite? Date una risposta e solo dopo inserite il frammento di codice in un programma compilabile ed eseguibile e verificate se avevate o meno ragione. Considerate il seguente frammento di codice: int a = 7, b = 5; c = a == b; Di che tipo deve essere la variabile c affinché questo codice sia compilabile? Che cosa succede quando queste istruzioni vengono eseguite avendo correttamente dichiarato la variabile c? Date una risposta e solo dopo inserite il frammento di codice in un programma compilabile ed eseguibile e verificate se avevate o meno ragione. Considerate il seguente frammento di codice: int a = 7, b = 5, c = 12; System.out.println(a + b * c); In che ordine vengono eseguite le operazioni di somma e moltiplicazione? Come è possibile invertire questo ordine? Considerate il seguente frammento di codice: double zero = 0; System.out.println(zero / zero); Che cosa succede quando questo frammento viene inserito in un programma? Perché? Considerate il seguente frammento di codice: double numero = 0; System.out.println(numero); numero = 1 / numero; System.out.println(numero); numero = 1 / numero; System.out.println(numero); numero = 1 / numero; numero = numero - numero; System.out.println(numero); Giustificate da un punto di vista matematico quello che succede quando questo frammento viene inserito in un programma ed eseguito. Esercizio 7 Differenza tra tipi di dati numerici - arrotondamento ======================================= Scrivete un programma che riceve in input un valore intero e lo assegna a una variabile double. Come viene stampato il valore? Scrivete un programma che riceve in input un valore double e lo assegna a una variabile intera. Come viene stampato il valore? Scrivere un programma che legga un numero decimale e lo TRONCHI alla seconda cifra dopo la virgola (Suggerimento: che cosa succede se moltiplicate il numero per 100 e poi lo convertite in un valore int?). Scrivere un programma che legga un numero decimale e lo ARROTONDI alla seconda cifra dopo la virgola. Riscrivere i programmi precedenti generalizzandoli, in modo che il troncamento e l'arrotondamento avvengano alla n-esima cifra dopo la virgola, dove n è un valore specificato dall'utente. Esercizio 8 Soluzione di equazioni di primo grado ============================= Scrivere un programma che legga in input la descrizione di un'equazione di primo grado espressa nella forma ax+b=0 e stampi la corrispondente radice. Che cosa deve specificare l'utente per individuare univocamente l'equazione? Che cosa deve stampare il programma per specificare correttamente la radice? La soluzione del problema è univoca? La soluzione del problema esiste sempre da un punto matematico? È sempre possibile ottenerla in output dal programma che avete scritto? Esercizio 9 Soluzione di equazioni di secondo grado =============================== Risolvere il problema precedente considerando un'equazione di secondo grado della forma a x^2 + b x + c = 0. Assumete che le radici dell'equazione siano sempre reali e utilizzate il metodo Math.sqrt(v) per calcolare la radice quadrata del valore contenuto nella variabile v. Provate a risolvere l'equazione x^2 + 1 = 0 utilizzando il programma appena. Che cosa succede? Esercizio 10 Soluzione di equazioni di secondo grado =============================== Per ovviare al problema emerso durante l'esercizio precedente dovete tener conto della possibilità che i radicandi siano negativi, e quindi che non sia possibile determinare delle radici reali. In questo caso si usano i numeri complessi che usano il simbolo i per indicare la radice quadrata di -1; un esempio di numero complesso in cui a e b sono numeri reali è: a+ib= a+ sqrt(-1)b. Scrivete la forma delle radici dell'equazione di secondo grado quando il discriminante risulta negativo e tenete conto che il simbolo i non indica il nome di una variabile ma un carattere da visualizzare appositamente. Tenuto conto di questi suggerimenti, realizzare un programma che permetta però di calcolare le radici anche quando il determinante risulta negativo.