Scrivi il programma RantedChessBoard
che riceve N
interi come argomenti da linea di comando e crea una matrice ranted contenente N
righe. Ogni riga possiede la lunghezza definita dal rispettivo argomento. La matrice va poi riempita a scacchiera, ossia con un’alternanza di 0
e 1
.
Ad esempio gli argomenti "1 3 2"
producono una matrice di 3 righe in cui la prima ha dimensione 1, la seconda 3 e la terza 2:
0
1 0 1
0 1
Per "7 5 4 3 2 8"
si ottiene invece:
0 1 0 1 0 1 0
1 0 1 0 1
0 1 0 1
1 0 1
0 1
1 0 1 0 1 0 1 0
E per "1 2 3 4 5 6 7 2 2 2"
:
0
1 0
0 1 0
1 0 1 0
0 1 0 1 0
1 0 1 0 1 0
0 1 0 1 0 1 0
1 0
0 1
1 0
Scrivi il programma MediaArray
che:
Scrivi il programma TrovaMassimo
che:
Scrivi il programma TrovaMinimo
che:
Scrivi il programma Int2Day
che riceve un intero come argomento da linea di comando e stampa il nome del giorno della settimana corrispondente, secondo l’associazione definita nella tabella seguente:
numero | elemento |
---|---|
1 |
"lunedì" |
2 |
"martedì" |
3 |
"mercoledì" |
4 |
"giovedì" |
5 |
"venerdì" |
6 |
"sabato" |
7 |
"domenica" |
Per argomenti non appropriati o al di fuori dell’intervallo consentito, il programma stampa "Valore non valido."
.
Scrivi la classe PerfectNumber
utile per individuare i numeri perfetti. La classe deve esportare i metodi seguenti:
public static boolean isPerfect(int n)
: ritorna true
se n
è un numero perfetto, false
altrimenti
public static boolean isDefective(int n)
: ritorna true
se n
è un numero difettivo, false
altrimenti
public static int[] getDividers(int n)
: ritorna un array contenente l’elenco dei divisori propri di n
public static long getDividersSum(int[] dividers)
: ritorna la somma dei numeri contenuti nell’array dividers
public static int[] getPerfectNumbers(int min, int max)
: ritorna un array contenente l’elenco dei numeri perfetti presenti nell’intervallo [min
, max
]
public static int[] getDefectiveNumbers(int min, int max)
: ritorna un array contenente l’elenco dei numeri difettivi presenti nell’intervallo [min
, max
]
public static int[] getAbundantNumbers(int min, int max)
: ritorna un array contenente l’elenco dei numeri abbondanti presenti nell’intervallo [min
, max
]
Un numero N
è detto perfetto se la somma dei suoi divisori propri (positivi, N
escluso) è pari ad N
. Ad esempio 28
è un numero perfetto perché sommando i suoi divisori propri (1, 2, 4, 7 e 14
) si ottiene 28
.
Invece se la somma dei divisori di N
è inferiore al suo valore, N
è un numero difettivo, mentre se le somma dei divisori è superiore, N
è un numero abbondante.
Scrivi il programma Scacchiera
che, dati due numeri interi forniti come argomenti da linea di comando che rappresentano il numero di righe e il numero di colonne di una matrice:
1
e 0
altrenati come su una scacchiera.Esempio, per una matrice 5 x 5:
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
Il programma deve funzionare correttamente anche per matrici rettangolari. Esempio:
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
Scrivi il programma Scacchiera
che:
1
e 0
altrenati come su una scacchiera.Esempio, per una matrice 5 x 5:
Inserire numero di righe: 5
Inserire numero di colonne: 5
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
1 0 1 0 1
0 1 0 1 0
Il programma deve funzionare correttamente anche per matrici rettangolari. Esempio:
Inserire numero di righe: 6
Inserire numero di colonne: 8
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0
Scrivi il programma MinMax
che:
Esempio:
14 29 59 88 21 27 14 26
19 49 54 76 43 36 76 79
92 71 12 63 8 85 64 43
18 9 53 95 68 55 7 8
97 11 37 8 5 43 2 96
43 76 63 90 94 42 76 98
82 91 3 81 9 48 66 32
56 54 62 35 7 75 12 19
Min: 2
Max: 98
Scrivi la classe ArrayComparator
contenente i metodi seguenti:
public static boolean isLonger(char[] a, char[] b)
Ritorna true
se la dimensione dell’ array a
è superiore a quella di b
, false
altrimenti.
public static char[] append(char c, char[] a)
Aggiunge il carattere c
in coda ad a
e ritorna l’array risultante.
public static boolean onlyContainsVowels(char[] a)
Ritorna true
se l’array a
contiene esclusivamente vocali, altrimenti ritorna false
.
public static char[] compare(char[] a, char[] b)
Ritorna un array contenente l’elenco di vocali di a
che si trovano nella stessa posizione dentro a b
:
a
contiene 'i'
, 'u'
, 'A'
b
contiene 'i'
, 'a'
, 'a'
, 'u'
'i'
, 'A'
Se a
contiene caratteri non validi, solleva una IllegalArgumentException
con il messaggio:
"Array a non valido"
Se b
contiene caratteri non validi, solleva una IllegalArgumentException
con il messaggio:
"Array b non valido"
Se b
è più piccolo di a
, solleva una IllegalArgumentException
con il messaggio:
"Array b troppo piccolo"
Scrivi la classe ArrayDecoder
contenente i metodi seguenti:
public static boolean sizeDiffer(char[] a, char[] b)
Ritorna true
se la dimensione degli array a
e b
è differente, false
altrimenti.
public static int indexOfUnique(char[] a, char c)
Se il carattere c
è presente una sola volta nell’array a
, il metodo ritorna l’indice di c
in a
. Altrimenti ritorna -1
.
public static boolean isPermutation(char[] a, char[] b)
Ritorna true
solo se l’array b
è una permutazione valida dell’array a
, ossia se ogni carattere di b
è presente una sola volta in a
(anche in posizioni diverse).
public static int[] decode(char[] a, char[] b)
Ritorna un array che contiene l’indice in cui ogni carattere di a
è presente dentro a b
. Ad esempio:
a
contiene 'a'
, 'b'
, 'c'
b
contiene 'b'
, 'a'
, 'c'
1
, 0
, 2
Se le dimensioni di a
e b
sono diverse, solleva una IllegalArgumentException
con il messaggio:
"Lunghezze diverse"
Se b
non è una permutazione valida di a
solleva una IllegalArgumentException
con il messaggio:
"Array b non valido"
Scrivi la classe ArrayEncoder
contenente i metodi seguenti:
public static boolean sizeEquals(char[] c, int[] p)
Ritorna true
se la dimensione degli array c
e p
equivale, false
altrimenti.
public static boolean contains(int[] p, int value)
Ritorna true
se l’array p
contiene il valore value
, false
altrimenti.
public static boolean isValid(int[] p)
Ritorna true
solo se l’array p
contiene tutti i numeri compresi nell’intervallo [0;p.length[
.
public static char[] encode(char[] c, int[] p)
Ritorna un array in cui ogni carattere di c
si trova nella posizione specificata dal rispettivo valore in p
. Ad esempio:
c
contiene 'a'
, 'b'
, 'c'
p
contiene 2
, 0
, 1
'b'
, 'c'
, 'a'
Se le dimensioni di c
e p
non sono uguali, solleva una IllegalArgumentException
con il messaggio:
"Dimensione diversa"
Se p
contiene dei valori non validi, solleva una IllegalArgumentException
con il messaggio:
"Indici non validi"
Scrivi il programma VerticalCrossword
contenente i metodi utili per trovare delle parole nascoste nelle colonne di una matrice.
La classe VerticalCrossword
deve contenere i metodi seguenti:
public static int getMaxWidth(char[][] table)
Ritorna la dimensione della riga più larga (con il maggior numero di colonne) contenuta nella matrice table
.
public static String getColAsString(char[][] table, int col)
Ritorna la stringa ottenuta concatenando tutti i caratteri presenti nella colonna col
della matrice table
. Le righe troppo corte per possedere un carattere nella colonna specificata da col
vengono ignorate. Ad esempio, per la matrice seguente e per col
pari a 3
, il metodo ritorna la stringa "CaNe"
:
c | C | e | C | c | |
c | a | n | a | a | |
c | p | a | N | n | E |
a | e | e | |||
a | b | c | e | e |
public static int searchInCols(char[][] table, String word)
Ritorna l’indice della colonna della matrice table
che contiene la parola word
(non sensibile al caso dei caratteri). Se word
è presente in più colonne, ritorna l’indice della prima ricorrenza. Se nessuna colonna di table
contiene word
, ritorna -1
.
Ad esempio per la parola "cane"
e la matrice seguente il metodo ritorna 3
:
c | C | e | C | c | |
c | a | n | a | a | |
c | p | a | N | n | E |
a | e | e | |||
a | b | c | e | e |
Mentre per questa matrice e "BAU"
ritorna 1
:
G | a | t | t | o | ||
r | b | a | u | |||
R | A | p | U | n | Z | |
r | u | p |
main
Contiene il codice utile a verificare e dimostrare il buon funzionamento di tutti i metodi che hai scritto.
Scrivi il programma HorizontalCrossword
contenente i metodi utili per trovare delle parole nascoste nelle righe di una matrice.
La classe HorizontalCrossword
deve contenere i metodi seguenti:
public static String reverse(String word)
Ritorna la stringa word
rovesciata, ad esempio per "cane"
ritorna "enac"
.
public static String getRowAsString(char[][] table, int row)
Ritorna la stringa ottenuta concatenando tutti i caratteri presenti nella riga row
della matrice table
.
public static int searchInRows(char[][] table, String word)
Ritorna l’indice della riga della matrice table
che contiene la parola word
(regolare o rovesciata, non sensibile al caso dei caratteri). Se word
è presente in più righe, ritorna l’indice della prima ricorrenza. Se nessuna riga di table
contiene word
, ritorna -1
.
Ad esempio per la parole “cane” e la matrice seguente il metodo ritorna 1
:
c | C | e | a | c | |
c | A | n | E | a | |
o | N | i | s | N | E |
b | E | e | |||
g | a | t | t | E |
Mentre per questa ritorna 3
:
t | O | p | o | C | a | N |
F | r | o | g | |||
T | a | n | A | r | ||
e | N | A | c | i | o | S |
A | g | u | L | e | B | |
B | o | V | e |
main
Contiene il codice utile a verificare e dimostrare il buon funzionamento di tutti i metodi che hai scritto.
Scrivi il programma MatrixMerger
contenente i metodi utili per combinare tra loro due matrici di interi.
La classe MatrixMerger
deve contenere i metodi seguenti:
public static int getRowWidth(int[][] m, int row)
Ritorna la larghezza (il numero di colonne) della riga row
nella matrice m
. Se la riga specificata è vuota oppure non è valida, ritorna 0
.
public static int getMaxWidth(int[][] a, int[][] b)
Ritorna la dimensione della riga più larga che si otterrebbe combinando ogni riga di a
con la rispettiva riga di b
. Ossia, calcola la somma tra la dimensione di ogni riga della matrice a
con la rispettiva riga della matrice b
e ritorna il valore massimo.
public static int[][] merge(int[][] a, int[][] b)
Ritorna una matrice rettangolare ottenuta combinando le matrici a
e b
. La combinazione avviene concatenando ogni riga di a
con la rispettiva riga di b
. La nuova matrice avrà un numero di righe pari a quello della matrice più alta tra a
e b
ed un numero di colonne pari a quella della riga più larga prodotta dalla concatenazione (larghezza massima di a
e b
). Ad esempio:
1 | 2 | 3 | 4 | 5 | 6 | 1 | 2 | 3 | 4 | 5 | 6 | ||||||||||
1 | 2 | 3 | 4 | + | 5 | 6 | = | 1 | 2 | 3 | 4 | 5 | 6 | ||||||||
1 | 2 | 3 | 4 | 5 | 6 | 1 | 2 | 3 | 4 | 5 | 6 |
Se presenti, le celle in eccesso di ogni riga conterranno il valore 0
, ad esempio:
1 | 1 | 1 | 5 | 5 | 5 | 1 | 1 | 1 | 5 | 5 | 5 | ||||||||
2 | 2 | 2 | + | 6 | 6 | 6 | = | 2 | 2 | 2 | 6 | 6 | 6 | ||||||
3 | 7 | 7 | 7 | 7 | 3 | 7 | 7 | 7 | 7 | 0 | |||||||||
4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 0 | 0 |
main
Contiene il codice utile a verificare e dimostrare il buon funzionamento di tutti i metodi che hai scritto.
Scrivi la classe SearchLast
che applica una ricerca sequenziale per trovare l’ultima ricorrenza di args[0]
in args[1;N]
e ne stampa l’indice (partendo da 0). Ad esempio:
$ java SearchLast 3 1 7 5 9 67 4 7 3 7 9
7
Oppure:
$ java SearchLast 1 1 2 1 3 1 4
4
Se il valore cercato non è presente il programma stampa il messaggio "Valore non trovato"
.
Scrivi la classe SearchFirst
che applica una ricerca sequenziale per trovare la prima ricorrenza di args[0]
in args[1;N]
e ne stampa l’indice (partendo da 0). Ad esempio:
$ java SearchFirst 3 1 7 5 9 67 4 7 3 7 9
7
Oppure:
$ java SearchFirst 1 1 2 1 3 1 4
0
Se il valore cercato non è presente il programma stampa il messaggio "Valore non trovato"
.
Scrivi un programma che:
Esempio, per una matrice di 5 x 5:
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
Il programma deve funzionare correttamente anche per matrici rettangolari. Esempio (7 x 2):
0 1
2 3
4 5
6 7
8 9
10 11
12 13
Quando hai finito, prova a risolvere questo esercizio e i successivi senza usare variabili di supporto per gestire il valore crescente (usando solo le variabili i
e j
).
Scrivi la classe SortMachine
contenente i metodi descritti in seguito.
public static int getRandomInt(int min, int max)
: ritorna un numero intero casuale nel range [min
;max
].public static void randomize(int[] a, int min, int max)
: riempie l’array a
di numeri casuali nel range [min
;max
].public static void swap(int[] a, int i, int j)
: se esistenti, scambia i valori dei due elementi di a
che si trovano in i
e j
.public static boolean isSorted(int[] a)
: ritorna true
se l’array a
è ordinato (crescente), false
altrimenti.public static void bubbleSort(int[] a)
: ordina gli elementi di a
in modo crescente applicando l’algoritmo bubble sort.public static void selectionSort(int[] a)
: ordina gli elementi di a
in modo crescente applicando l’algoritmo selection sort.Poi verifica il buon funzionamento dei metodi e confronta le prestazioni di bubble e selection sort cronometrando quanto tempo impiegano per ordinare un array di 10000 elementi.
Scrivi la classe BinarySearch
che applica una ricerca binaria per trovare args[0]
nell’insieme ordinato rappresentato da args[1;N]
e ne stampa l’indice (partendo da 0). Ad esempio:
$ java BinarySearch 3 1 2 3 5 7 8 10
2
Se il valore cercato non è presente il programma stampa il messaggio "Valore non trovato"
.
Ora prova riempire una matrice colonna per colonna. Scrivi un programma che:
Esempio, per una matrice di 5 x 5:
0 5 10 15 20
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
Il programma deve funzionare correttamente anche per matrici rettangolari. Esempio per 7 x 2:
0 7
1 8
2 9
3 10
4 11
5 12
6 13
Ora proviamo a ribaltare verticalmente e orizzontalmente la disposizione dei valori rispetto a quanto fatto nell’esercizio MatriceLRTD
. Scrivi un programma che:
Esempio, per una matrice di 5 x 5:
24 23 22 21 20
19 18 17 16 15
14 13 12 11 10
9 8 7 6 5
4 3 2 1 0
Il programma deve funzionare correttamente anche per matrici rettangolari. Esempio, per 7 righe e 2 colonne:
13 12
11 10
9 8
7 6
5 4
3 2
1 0
Ora proviamo a ribaltare verticalmente la disposizione dei valori rispetto a quanto fatto nell’esercizio MatriceLRTD
. Scrivi un programma che:
Esempio, per una matrice di 5 x 5:
20 21 22 23 24
15 16 17 18 19
10 11 12 13 14
5 6 7 8 9
0 1 2 3 4
Il programma deve funzionare correttamente anche per matrici rettangolari. Esempio (7 x 2):
12 13
10 11
8 9
6 7
4 5
2 3
0 1
Ora proviamo a ribaltare orizzontalmente la disposizione dei valori rispetto a quanto fatto nell’esercizio MatriceLRTD
. Scrivi un programma che:
Esempio, per una matrice di 5 x 5:
4 3 2 1 0
9 8 7 6 5
14 13 12 11 10
19 18 17 16 15
24 23 22 21 20
Il programma deve funzionare correttamente anche per matrici rettangolari. Esempio (7 x 2):
1 0
3 2
5 4
7 6
9 8
11 10
13 12
NameSorter
Crea la classe NameSorter
che dato un elenco di nomi forniti come argomenti da linea di comando, li ordina alfabeticamente. A tale scopo la classe deve contenere il metodo:
public static void sortNames(String[] names)
Che ordina l’array names
fornito come parametro.
Alla fine il programma deve stampare i nomi in ordine alfabetico, esempio:
$ java NameSorter Zorro Luca Andrea Antonio
Andrea
Antonio
Luca
Zorro
Scrivere il programma PacNum
contenente il metodo:
void step(int[][] m)
Tale metodo, data la matrice m
(di qualsiasi dimensione valida):
X
) siano pari a 0
X
deve avere un valore compreso nel range [1;4]
X
vale 1, lo sposta in alto (in su di una riga), se X
si trova nella prima riga, lo sposta nell’ultimaX
vale 2, lo sposta in basso (in giù di una riga), se X
si trova nella ultima riga, lo sposta nella primaX
vale 3, lo sposta a sinistra (a sinistra di una colonna), se X
si trova nella prima colonna, lo sposta nell’ultimaX
vale 4, lo sposta a destra (a destra di una colonna), se X
si trova nella ultima colonna, lo sposta nella primaEsempio:
0 0 0 0 1 0
0 1 0 -> diventa -> 0 0 0
0 0 0 0 0 0
Oppure:
0 0 0 0 0 0
0 0 3 -> diventa -> 0 3 0
0 0 0 0 0 0
Oppure:
0 0 0 0 0 0
3 0 0 -> diventa -> 0 0 3
0 0 0 0 0 0
Per un app di gestione dei prestiti personali devi implementare le classi seguenti:
Person
Rappresenta una persona (creditore o debitore). Un oggetto Person
è caratterizzato da un nome costituito da una stringa contenente una lettera maiuscola seguita almeno 2 lettere minuscole (ad esempio "Alb"
) e memorizzato nell’attributo name
(read only). La classe Person
deve esportare:
Person(String name)
: è il costruttore, se il nome name
non è valido solleva una IllegalArgumentException
con il messaggio:
"Invalid name <name>"
String toString()
: ritorna la rappresentazione testuale contenente il nome della persona.
boolean equals(Person p)
: ritorna true
se la persona corrente possiede lo stesso nome della persona p
, false
altrimenti.
Inoltre deve contenere il metodo package private:
boolean isNameValid(String name)
: ritorna true
se name
è un nome di persona valido, false
altrimenti.Loan
Rappresenta una voce dell’elenco di prestiti contenuto in un Wallet
. Lo stato di un Loan
è caratterizzato da una persona (Person
, read only) e dal relativo bilancio (double amount
, read-write, default 10
). Un bilancio positivo rappresenta un credito, uno negativo un debito. Inoltre Loan
deve esportare i metodi seguenti:
Loan(Person person, double amount)
: costruttore, istanzia un Loan
associato alla persona person
con una somma definita da amount
. La somma deve essere diversa da 0
, in caso contrario viene applicato il valore di default.
Loan(Person person)
: costruttore, istanzia un Loan
associato alla persona person
con la somma di default.
String toString()
: ritorna la rappresentazione testuale del Loan
nel formato:
"<segno><amount> <name>" ad esempio `"+3.0 Alb"`.
Wallet
Rappresenta un portafoglio dei prestiti e deve esportare i metodi seguenti:
Wallet()
: costruttore, istanzia un portafoglio vuoto.
int indexOf(Person person)
: ritorna l’indice del Loan
associato alla persona person
nell’elenco loans
. Se non ne trova nessuno ritorna -1
.
void addLoan(Person person, double amount)
: se nel portafoglio non è già presente un Loan
associato a person
, aggiunge al portafoglio un nuovo Loan
. In caso contrario ne aggiorna il bilancio. Se il bilancio aggiornato è pari a 0
, il Loan
viene rimosso dal portafogli.
String toString()
: ritorna una stringa contenente l’elenco di Loan
presenti nel portafoglio secondo il formato illustrato nell’esempio seguente:
+2.0 Alb
-1.0 Mike
Inoltre deve contenere il metodo package private:
void removeLoan(int index)
: rimuove dal portafoglio il Loan
all’indice index
.Per un sistema di acquisti online devi implementare le classi seguenti:
Article
Rappresenta un articolo in vendita nel negozio. Un Article
è caratterizzato da un codice di prodotto costituito da una stringa contenente una lettera maiuscola seguita da 4 cifre (ad esempio "A1234"
) e memorizzato nell’attributo code
(read only). La classe Article
deve esportare:
Article(String code)
: è il costruttore, se il codice code
non è valido solleva una IllegalArgumentException
con il messaggio:
"Invalid article code <code>"
String toString()
: ritorna la rappresentazione testuale dell’articolo nel formato:
"Article code <code>"
boolean equals(Article a)
: ritorna true
se l’articolo corrente possiede lo stesso codice dell’articolo a
, false
altrimenti.
Inoltre deve contenere il metodo package private:
boolean isCodeValid(String code)
: ritorna true
se code
è un codice di articolo valido, false
altrimenti.Item
Rappresenta una voce dell’elenco contenuto in un ShoppingCart
. Lo stato di un Item
è caratterizzato da un articolo (Article
, read only) e dalla relativa quantità (int quantity
, read-write, valore minimo 1
, default 1
). Inoltre deve esportare i metodi seguenti:
Item(int quantity, Article article)
: costruttore, istanzia un Item
associato all’articolo article
nella quantità definita da quantity
. La quantità deve essere superiore a 0
, in caso contrario viene applicato il valore di default.
Item(Article article)
: costruttore, istanzia un Item
associato all’articolo article
nella quantità di default.
String toString()
: ritorna la rappresentazione testuale del Item
nel formato:
"Article code <code> (<quantity>)" ad esempio `"Article code A1234 (2)"`.
ShoppingCart
Rappresenta un carrello degli acquisti e deve esportare i metodi seguenti:
ShoppingCart()
: costruttore, istanzia un carrello vuoto.
int indexOf(Article article)
: ritorna l’indice del Item
associato all’articolo article
nell’elenco items
. Se non ne trova nessuno ritorna -1
.
void addArticle(Article article)
: se nel carrello è già presente un Item
associato all’articolo article
, ne incrementa la quantità. In caso contrario aggiunge al carrello un nuovo Item
associato all’articolo article
.
void removeArticle(Article article)
: se nel carrello è presente un Item
associato all’articolo article
, ne decrementa la quantità. Se la quantità decrementata è pari a 0
, l’Item
viene rimosso dal carrello.
String toString()
: ritorna una stringa contenente l’elenco di Item
presenti nel carrello secondo il formato illustrato nell’esempio seguente:
- Article code A1234 (2)
- Article code B7254 (1)