Prova di valutazione 10:
Definizione di metodi e test

Questa prova di valutazione consiste nella scrittura di alcuni metodi Java, nonché nella scrittura di alcuni metodi di test.

Lo scopo di questa prova di valutazione è di verificare la capacità di scrivere metodi, e in particolare di tipo iterativo.

Ulteriore scopo di questa prova di valutazione è di verificare la capacità di scrivere metodi test e di utilizzare JUnit. Per un'introduzione all'uso di JUnit, si veda la dispensa Uso di JUnit.

Nella parte finale del modulo è possibile scrivere eventuali problemi che sono stati riscontrati nello svolgimento di questa prova.


Esercizio 1: Fattoriale.

Definire una classe Fattoriale che definisce un metodo di classe int fattoriale(int n) che, dato un numero naturale n, calcola il fattoriale di n (che è il prodotto dei primi n numeri interi positivi).

Poi, copia e incolla la definizione della classe Fattoriale nella seguente casella di testo.


Esercizio 2: Test del metodo fattoriale.

Definire una classe di test JUnit TestFattoriale per verificare la correttezza del metodo fattoriale della classe Fattoriale. Si veda la dispensa Uso di JUnit.

Poi, copia e incolla la definizione della classe TestFattoriale nella seguente casella di testo.


Esercizio 3: Calcolo combinatorio.

Premessa: per un'introduzione al calcolo combinatorio è possibile consultare, ad esempio, queste fonti: http://it.wikipedia.org/wiki/Calcolo_combinatorio, oppure Calcolo_combinatorio, oppure  Calcolo combinatorio.

Definire una classe CalcoloCombinatorio che definisce i seguenti metodi di classe:

Per degli esempi, vedere Calcolo_combinatorio oppure Esempi di applicazioni del calcolo combinatorio.

Per il test della classe CalcoloCombinatorio è possibile utilizzare la classe di test JUnit TestCalcoloCombinatorio.java.
In pratica, per incorporare questo test in un proprio progetto Eclipse, è possibile procedere come segue: (1) creare con Eclipse un test case JUnit di nome TestCalcoloCombinatorio; (2) aprire nel browser la classe  TestCalcoloCombinatorio.java; (3) nel browser, fare seleziona-e-copia del testo di questa classe; (4) in Eclipse, incollare il testo di questa classe nella classe TestCalcoloCombinatorio

Poi, copia e incolla la definizione della classe CalcoloCombinatorio nella seguente casella di testo.


Esercizio 4: Monete.

Premessa: in Europa viene usato l'euro, in circolazione con banconote e monete. Qui ci concentriamo esclusivamente sulle monete, ignorando le banconote.

Le monete sono di diversi valori: 1 centesimo, 2 centesimi, 5 centesimi, 10 centesimi, 20 centesimi, 50 centesimi, 1 euro e 2 euro.

Dato un importo monetario, questo può essere di solito corrisposto mediante uno o più insiemi equivalenti di monete. Ad esempio, l'importo di 1.50 € può essere corrisposto con 1 moneta da 1 euro e 1 moneta da 50 centesimi (usando 2 monete) - oppure, in modo equivalente, con 1 moneta da 50 centesimi, 4 monete da 20 centesimi, 1 moneta da 10 centesimi , 4 monete da 2 centesimi e 2 monete da 1 centesimi (usando 12 monete).

In generale, però, dato un importo monetario, questo può essere corrisposto in uno e un solo modo usando un numero minimo di monete. Ad esempio, l'importo di 1.50 € può essere corrisposto con un numero minimo di monete usando 2 monete: 1 moneta da 1 euro e 1 moneta da 50 centesimi. L'importo di 41.73 € può essere corrisposto con un numero minimo di monete usando: 20 monete da 2 euro, 1 moneta da 1 euro, 1 moneta da 50 centesimi, 1 moneta da 20 centesimi, 1 moneta da 2 centesimi e 1 moneta da 1 centesimi, per un totale di 25 monete.

Definire una classe Monete che definisce il metodo di classe int numeroMinimoMonete(int euro, int cent) che, dati due numeri naturali euro e cent, con cent minore di 100, che rappresentano un importo monetario di euro euro e cent centesimi, calcola il numero minimo di monete che può essere utilizzato per corrispondere quell'importo monetario.

Poi, copia e incolla la definizione della classe Monete nella seguente casella di testo.


Esercizio 5: Test della classe Monete.

Definire una classe di test JUnit per la classe Monete.

Poi, copia e incolla la definizione della classe TestMonete nella seguente casella di testo.


Esercizio 6: Amicizia.

Due numeri interi positivi A e B sono amici (o amicabili) quando la somma dei divisori di A (A escluso) è uguale a B ed inoltre la somma dei divisori di B (B escluso) è uguale ad A.
In questo caso si dice che A è amico di B e che B è amico di A.
Per esempio sono amici i numeri 220 e 284:

Definire una classe Amicizia che definisce il metodo di classe int amico(int n) che, dato un numero intero positivo n, calcola e restituisce il numero amico di n (se n ha un numero amico) oppure il numero -1 (se n non ha un numero amico) che indica proprio il fatto che n non ha un numero amico.

Per esempio:

Suggerimento: un numero N ha un amico se la somma dei divisori di N (N escluso) vale M e la somma dei divisori di M (M escluso) vale proprio N.

Poi, copia e incolla la definizione della classe Amicizia nella seguente casella di testo.


Esercizio 7: Test della classe Amicizia.

Definire una classe di test JUnit per la classe Amicizia.

Poi, copia e incolla la definizione della classe TestAmicizia nella seguente casella di testo.


Difficoltà e problemi

Riporta nella seguente casella di testo eventuali difficoltà e problemi riscontrati nello svolgimento di questa prova di autovalutazione.


Invio della soluzione proposta

Scrivi chi sei nei seguenti campi

Cognome
Nome
Email

Premi Invia messaggio per inviare il messaggio, oppure Cancella per cancellare il contenuto del modulo.

Qualche secondo dopo aver premuto Invia messaggio, ti apparirà una pagina che riporta il testo del messaggio inviato.