Scrivi la classe Cylinder
contenente i metodi seguenti:
public static double getCircumference(double radius)
: ritorna la circonferenza di un cilindro di raggio radius
public static double getBaseArea(double radius)
: ritorna l’area di base di un cilindro di raggio radius
public static double getSideArea(double radius, double height)
: ritorna la superficie laterale di un cilindro di raggio radius
e altezza height
public static double getArea(double radius, double height)
: ritorna l’area totale di un cilindro di raggio radius
e altezza height
public static double getVolume(double radius, double height)
: ritorna il volume di un cilindro di raggio radius
e altezza height
Nel metodo main
verifica il buon funzionamento di ogni metodo.
Nota: per ottenere il valore di pi-greco puoi utilizzare la costante Math.PI
.
Vedi anche wikipedia.
Scrivi la classe Triangolo
contenente il metodo:
public static double calcolaAreaTriangolo(double base, double altezza)
Tale metodo ritorna un numero che rappresenta l’ area di un triangolo di base base
e di altezza altezza
.
Scrivi la classe Cerchio
contenente il metodo:
public static double calcolaCirconferenza(double raggio)
Tale metodo ritorna un numero che rappresenta la circonferenza di un cerchio di raggio raggio
.
Scrivi la classe Trenino
che contiene i seguenti metodi:
public static void stampaLocomotiva()
public static void stampaPasseggeriPiccolo()
public static void stampaPasseggeriGrande()
public static void stampaMerciPiccolo()
public static void stampaMerciGrande()
public static void stampaGancio()
Nel metodo main
utilizza i metodi che hai scritto per comporre un treno (non dimenticare i ganci tra le carrozze). Utilizza a piacimento i vagoni creati tramite i metodi, come ad esempio (locomotiva, passeggeriPiccolo, passeggeriGrande, merciGrande, merciPiccolo):
/T\
/|||\
| O |
LLLLL
LLLLL
|
PPPPP
P P
PPPPP
|
PPPPP
P P
P P
P P
PPPPP
|
MMMMM
M M
M M
M M
MMMMM
|
MMMMM
M M
MMMMM
Scrivi il programma Randomizer
che, dati tre numeri interi passati come argomenti da linea di comando, genera una serie di numeri casuali (separata ','
e terminata da '.'
).
I primi due argomenti determinano il range dei valori casuali che verranno generati. Il valore più piccolo non sarà compreso nel range mentre il più grande si.
Il terzo argomento determina il numero di valori da generare.
Ad esempio:
$ java Randomizer 0 4 5
1, 3, 1, 2, 4.
Oppure:
$ java Randomizer 5 1 6
2, 4, 5, 3, 5, 2.
Se il numero di argomenti non è sufficiente il programma deve stampare un messaggio di errore e terminare:
$ java Randomizer 5
Argomenti insufficienti
Se gli argomenti non sono validi il programma dovrà stampare un messaggio di errore indicando il primo valore errato e terminare:
$ java Randomizer 1 4 b
Argomento non valido: b
java.util.Random
.Scrivi la classe MathTool
contenente i metodi:
public static int pow(int base, int exp)
Tale metodo calcola l’elevazione a potenza (base
elevato exp
).
public static int factorial(int n)
Che ritorna il fattoriale di n
. Ad esempio il fattoriale di 3 è 6 (3 * 2 * 1 = 6
).
public static int digitAt(long number, int index)
Che ritorna il valore della cifra alla posizione index
dentro a number
. Ad esempio digitAt(123456, 0)
ritorna 1
, mentre digitAt(123456, 3)
ritorna 4
. Per risolvere questo problema è vietato ricorrere alla trasformazione di number
in una stringa.
Scrivi la classe IntTool
contenente il metodo int getDigits(int n)
che ritorna il numero digits (cifre) necessario per la rappresentazione decimale di n
. Ad esempio getDigits(11)
ritorna 2
mentre getDigits(12435)
ritorna 5
.
Scrivi la classe SumTool
contenente i metodi seguenti:
int sommaUnivoca(int a, int b, int c)
: Tale metodo ritorna la somma di a
, b
e c
ma i valori duplicati vengono tralasciati nel calcolo del totale. Ad esempio sommaUnivoca(1,2,3)
ritorna 6
mentre sommaUnivoca(1,2,1)
ritorna 3
.int sommaTonda(int a, int b, int c)
: ritorna la somma di a
, b
e c
arrotondata al multiplo di 10 più vicino.Il codice noto come Alfabeto farfallino consiste nel modificare ogni parola aggiungendo dopo ogni vocale una f
seguita dalla vocale stessa ripetuta. Ad esempio:
casa
diventa cafasafa
canile
diventa cafanifilefe
luccicante
diventa lufuccificafantefe
Scrivi la classe AlfabetoFarfallino
che contenga due metodi utili rispettivamente per codificare e decodificare una stringa secondo il codice Alfabeto Farfallino.
public static String codifica(String testo)
public static String decodifica(String codice)
Nel Blackjack vince il giocatore che totalizza un punteggio che:
Scrivi La classe BlackJack
contenente il metodo:
public static int blackjackWinner(int score1, int score2)
che, dati due punteggi score1
e score2
, ritorna un numero intero secondo le seguenti regole:
0
score1
ritorna 1
score2
ritorna 2
Qualche esempio:
blackjackWinner(16,19)
ritorna 2
blackjackWinner(21,17)
ritorna 1
blackjackWinner(22,17)
ritorna 2
blackjackWinner(1,0)
ritorna 1
blackjackWinner(0,23)
ritorna 0
Scrivi la classe Repeater
contenente il metodo:
public static String repeat(String text, int times)
Tale metodo ritorna una stringa contenente il testo text
ripetuto times
volte. Ad esempio l’invocazione repeat("X",5)
ritorna la stringa XXXXX
.
Ora utilizza il metodo repeat
per produrre il disegno seguente:
----****
----****
----****
----****
****----
****----
****----
****----
Quante righe di codice hai scritto? Una dovrebbe bastare…
Scrivi la classe Calcolatrice
contenente il metodo:
public static int calcola(int a, int b, char operatore)
Tale metodo esegue un’operazione matematica di base sui due numeri a
e b
. Il valore operatore
('+'
, '-'
, '*'
, '/'
) definisce l’operazione da eseguire.
Ad esempio l’invocazione calcola(5,2,'+')
ritornerà 7
(5+2
) mentre l’invocazione calcola(5,2,'*')
ritornerà 10
(5*2
). Se il parametro operatore
contiene un carattere non valido, il metodo ritorna 0.
Scrivi la classe PoTre
contenente il metodo:
public static int pow3(int n)
Il metodo riceve un valore intero n
e ritorna il valore di 3 elevato n
. Ad esempio pow3(2)
ritorna 9
.
La classe dovrà anche contenere un metodo main
in cui verificare se il metodo pow3
funziona correttamente.
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.
Da Wikipedia:
“Il cifrario di Cesare è uno dei più antichi algoritmi crittografici di cui si abbia traccia storica. È un cifrario a sostituzione monoalfabetica in cui ogni lettera del testo in chiaro è sostituita nel testo cifrato dalla lettera che si trova un certo numero di posizioni dopo nell’alfabeto. Questi tipi di cifrari sono detti anche cifrari a sostituzione o cifrari a scorrimento a causa del loro modo di operare: la sostituzione avviene lettera per lettera, scorrendo il testo dall’inizio alla fine.” … ” In particolare, Cesare utilizzava uno spostamento di 3 posizioni (la chiave era dunque 3” …
Ad esempio, applicando la chiave 3: 'a'
diventa 'd'
, 'b'
diventa 'e'
, 'c'
diventa 'f'
e via dicendo:
Carattere originale | 'a' |
'b' |
'c' |
'd' |
'e' |
… | 'x' |
'y' |
'z' |
---|---|---|---|---|---|---|---|---|---|
Codifica con chiave 3 | 'd' |
'e' |
'f' |
'g' |
'h' |
… | 'a' |
'b' |
'c' |
Applicando invece la chiave 5 'a'
diventa 'f'
, 'b'
diventa 'g'
… eccetera:
Carattere originale | 'a' |
'b' |
'c' |
'd' |
'e' |
… | 'x' |
'y' |
'z' |
---|---|---|---|---|---|---|---|---|---|
Codifica con chiave 5 | 'f' |
'g' |
'h' |
'i' |
'j' |
… | 'c' |
'd' |
'e' |
Scrivi la classe Java CifrarioDiCesare
che contenga due metodi utili rispettivamente per codificare e decodificare una stringa:
public static String codifica(String testo, int chiave)
public static String decodifica(String codice, int chiave)
Scrivi la classe CharTool
contenente i metodi seguenti:
char toLower(char c)
: se c
è un carattere alfabetico maiuscolo, ritorna il corrispondente carattere minuscolo. Altrimenti ritorna c. Ad esempio:
toLower('A')
ritorna 'a'
toLower('b')
ritorna 'b'
toLower(';')
ritorna ';'
String sortCharacters(char a, char b, char c)
: ritorna una stringa contenente i caratteri a
, b
e c
disposti in ordine alfabetico e separati da una virgola. Nell’ordinamento, il caso dei caratteri alfabetici deve essere ignorato ('a'
e 'A'
, hanno lo stesso ordine). Qualche esempio:
sortCharacters('c','A','b')
ritorna la stringa "A,b,c"
,sortCharacters('M','m','G')
ritorna la stringa "G,M,m"
.Scrivi la classe StringTool
contenente i metodo seguenti:
public static String longest(String a, String b)
Ritorna la stringa più lunga tra a
, b
. Ad esempio longest("cane","gatto")
ritorna la stringa gatto
, mentre longest("abcdef","gatto")
ritorna abcdef
.
public static String alternate(String a, String b, int times)
Ritorna una stringa di testo contenente le stringhe a
e b
alternate times
volte. Ad esempio alternate("*","-",5)
ritorna la stringa *-*-*-*-*-
, mentre alternate("va","Ja",2)
ritorna la stringa vaJavaJa
.
public static String concatenate(int a, int b, int c, char separator, char terminator)
Ritorna una stringa contenente l’elenco dei valori dei parametri a
, b
e c
. I valori sono separati dal carattere separator
e la lista è terminata dal carattere terminator
. Ad esempio concatenate(1,2,3,';','.')
ritorna la stringa 1;2;3.
, mentre concatenate(10,20,30,'_','!')
ritorna la stringa 10_20_30!
.w
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 AdvancedStringTool
contenente i metodi desctitti in seguito:
public static boolean isLetter(char c)
Ritorna true
se il carattere c
è una lettera, mentre ritorna false
In caso contrario.
public static boolean isConsonant(char c)
Ritorna true
se il carattere c
è una consonante, false
altrimenti.
public static boolean isVowel(char c)
Ritorna true
se c
è una vocale, mentre ritorna false
in tutti gli altri casi.
public static int countVowels(String text)
Ritorna il numero di vocali presenti nella stringa text
. Ad esempio countVowels("NOOOOOO")
ritorna 6.
public static int countConsonants(String text)
Tale metodo ritorna il numero di consonanti presenti nella stringa text
. Ad esempio countConsonants("NOOOOOO")
ritorna 1.
public static String vowelize(String text)
Ritorna una stringa contenente solamente le vocali della stringa text
. Ad esempio vowelize("casa")
ritorna "aa"
, mentre vowelize("lunotto")
ritorna "uoo"
.
public static boolean isAlternative(String s)
Tale metodo ritorna true se la stringa s
contiene consonanti e vocali alternate (es. isAlternative("patata")
ritorna true
).
public static int countInString(String text, char c)
Tale metodo conta quante volte il carattere c
è presente nella stringa text
.
public static boolean isAnagram(String firstWord, String secondWord)
Ritorna true
se firstWord
è un anagramma di secondWord
, altrimenti ritorna false
. Esempio isAnagram("calendario","locandiera")
ritorna true
.
Scrivi la classe NameFramer
contenente il metodo:
pubic static String frameName(String name, char c, int width)
che ritorna una stringa contenente la stringa name
incorniciata nel carattere c
utilizzato con uno spessore width
.
Ad esempio frameName("Piero",'*',2)
ritorna la stringa:
*********
*********
**Piero**
*********
*********
mentre frameName("Andrea",'$',1)
ritorna la stringa:
$$$$$$$$
$Andrea$
$$$$$$$$
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