Laboratorio 4

Esercizio 0

Questionario di autovalutazione: risposte e statistiche

Esercizio 1

Argomento: gestione delle eccezioni; uso della terminazione di input; reindirizzamento di input e output

  1. Modificare l'esercizio 1 del laboratorio 3 come segue.
    Il programma che calcola il valore medio e la deviazione standard dei dati inseriti dall'utente non dovra` accettare il dato in ingresso quando questo In tali casi, il programma dovra` riproporre all'utente di inserire un numero in virgola mobile, e continuare cosi` finche' cio` non accade.
    Usare il meccanismo di reindirizzamento dell'input standard in maniera tale che il programma riceva in input i dati scritti nel file di testo input_double.txt (contenente un insieme di dati di ingresso, numeri in virgola mobile e non solo, uno per riga) e ne calcoli valore medio e deviazione standard.
  2. Modificare l'esercizio 6 del laboratorio 3 come segue.
    Il programma che segnala all'utente se il numero intero positivo che ha introdotto corrisponde o meno ad un anno bisestile non dovra` accettare il dato in ingresso quando questo In tali casi, il programma dovra` riproporre all'utente di inserire un numero positivo, e continuare cosi` finche' cio` non accade.
    Usare il meccanismo di reindirizzamento dell'input standard in maniera tale che il programma riceva in input i dati scritti nel file di testo input_years.txt (contenente un insieme di dati di ingresso, numeri interi e non solo, uno per riga). e segnali se corrispondono o meno ad anni bisestili.


Soluzione4_1


Esercizio 2

Argomento: Lettura e scrittura di file, gestione delle eccezioni, "tokenizzazione" di stringhe

Scrivere un programma che Provare il programma usando il file vispateresa.txt come file di input.
Approfondimento: modificare il programma in modo che riconosca come due parole distinte anche quelle separate da un apostrofo. Ad esempio, se il file in lettura contiene le parole
LA vispA teresa AVEA tra l'erBETTa
al termine dell'esecuzione il secondo file dovra` contenere il testo
La Vispa Teresa Avea Tra L'Erbetta
Suggerimento: studiare la documentazione di Scanner, e verificare che usando opportuni metodi e` possibile usare un insieme di caratteri delimitatori diverso da quello di default.

Soluzione4_2


Esercizio 3

Argomento: Manipolazione di stringhe e caratteri, cicli annidati

Scrivere un programma che Verificare che il programma gestisca correttamente la situazione in cui s2 e` la stringa vuota (che, in base alla definizione precedente, e` sottostringa di qualsiasi stringa).

Soluzione4_3


Esercizio 4 (impegnativo)

Argomento: Manipolazione di stringhe e caratteri, cicli annidati

Scrivere un programma che Il programma puo` usare, della classe String, i soli metodi charAt e length.
Una stringa s2 e` una sottosequenza di un'altra stringa s1 se e solo se tutti i caratteri di s2 sono presenti in s1 nello stesso ordine (anche se in posizioni diverse). Ad esempio, gatto e` una sottosequenza di gratto e xyz e` una sottosequenza di 2xpppyqz ma non di yxz.
Ovviamente, una sottostringa e` anche una sottosequenza, ma non viceversa.

Soluzione4_4


Esercizio 5 (lungo... ma non troppo impegnativo)

Argomento: Classi e variabili statiche; gestione di input ed eccezioni, "tokenizzazione" di stringhe

Modificare la classe BankAccount vista a lezione, con le seguenti diverse specifiche: Scrivere poi un programma BankAccountTester che crea un conto bancario (esemplare della classe appena progettata) e accetta ripetutamente comandi dall'utente, introdotti da tastiera, finche' l'utente non introduce il comando di terminazione del programma.
I comandi disponibili sono:
Q Quit: termina il programma
B Balance: visualizza il saldo del conto
D x Deposit: versa nel conto la somma x
W x Withdraw: preleva dal conto la somma x
A x Add interest: accredita sul conto gli interessi, calcolati in base alla percentuale x del saldo attuale (x deve essere positivo)
Nei comandi che necessitano di un argomento, questo e` separato dal comando mediante uno o piu` spazi (suggerimento: usare Scanner). La lettera che indica il comando puo` essere maiuscola o minuscola.
Un esempio di esecuzione del programma e` il seguente (in corsivo i comandi introdotti dall'utente, in grassetto cio` che viene scritto dal programma):
Comando? (Q, B, D, W, A)
B
Saldo attuale: 0.0
Comando? (Q, B, D, W, A)
w  10
Prelievo non autorizzato
Comando? (Q, B, D, W, A)
D    10
Versamento effettuato: 10.0
Comando? (Q, B, D, W, A)
D    0
Versamento non corretto
Comando? (Q, B, D, W, A)
W 5
Prelievo effettuato: 5.0
Comando? (Q, B, D, W, A)
b
Saldo attuale: 5.0
Comando? (Q, B, D, W, A)
Z2
Comando? (Q, B, D, W, A)
A 5
Interessi calcolati e accreditati: 0.25
Comando? (Q, B, D, W, A)
B
Saldo attuale: 5.25
Comando? (Q, B, D, W, A)
q  5
Comando? (Q, B, D, W, A)
Q
Arrivederci 

Tale esempio va anche inteso come specifica dei messaggi che devono essere visualizzati dal programma.
Il programma deve gestire tutte le possibili condizioni di dati in ingresso senza essere mai interrotto da eccezioni; nei casi in cui manchino specifiche di comportamento del programma, assumere ipotesi ragionevoli.

Soluzione 4_5


Esercizio 6

Argomento: Progettare e collaudare classi, lanciare e catturare eccezioni

Realizzare una classe FactorGenerator che effettui la scomposizione di un numero intero positivo nei suoi fattori primi, con un comportamento simile a quello della classe Scanner per "tokenizzare" stringhe. La classe deve avere: Scrivere un programma FactorGeneratorTester che:

Soluzione4_6


Esercizio 7

Argomento: Collaudare classi, catturare eccezioni

Usando la classe FactorGenerator sviluppata nell'esercizio precedente, scrivere un programma PrimeNumberTester che: Si faccia attenzione alla gestione del valore 1, che e` accettabile (ed e` un numero primo per definizione) ma che non viene gestito dalla classe FactorGenerator.
Dopo la fase di lettura del dato in ingresso, il programma non deve avere cicli.

Soluzione4_7