...

Link Esercizi specifici

by user

on
Category: Documents
16

views

Report

Comments

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.
Fly UP