Metodi

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.

Circular cylinder rh.svg

CC BY-SA 3.0, Link

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.

Trenino methods Livello 9

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
Nota
è vietato utilizzare la classe 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.

IntTool methods Livello 10

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.

DivMul methods math Livello 10

Scrivi la classe DivMul contenente i metodo:

  • public static int calcolaMCD(int a, int b): calcola il massimo comun divisore di 2 numeri (Wiki: MCD).
  • public static int calcolaMcm(int a, int b): calcola il minimo comune multiplo di 2 numeri (Wiki: mcm).

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)

BlackJack methods Livello 11

Nel Blackjack vince il giocatore che totalizza un punteggio che:

  • sia superiore a 0
  • sia il più vicino possibile, ma non superi, il valore 21

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:

  • in caso di pareggio, ritorna 0
  • se vince score1 ritorna 1
  • se vince 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

Repeater methods Livello 11

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.

PoTre math methods Livello 11

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:

  • se a contiene 'i', 'u', 'A'
  • e b contiene 'i', 'a', 'a', 'u'
  • ritorna un array contenente '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:

  • se a contiene 'a', 'b', 'c'
  • e b contiene 'b', 'a', 'c'
  • ritorna un array contenente 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:

  • se c contiene 'a', 'b', 'c'
  • e p contiene 2, 0, 1
  • ritorna un array contenente '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)

CharTool methods Livello 12

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:

longest

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.

alternate

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.

concatenate

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:

isLetter

public static boolean isLetter(char c)

Ritorna true se il carattere c è una lettera, mentre ritorna false In caso contrario.

isConsonant

public static boolean isConsonant(char c)

Ritorna true se il carattere c è una consonante, false altrimenti.

isVowel

public static boolean isVowel(char c)

Ritorna true se c è una vocale, mentre ritorna false in tutti gli altri casi.

countVowels

public static int countVowels(String text)

Ritorna il numero di vocali presenti nella stringa text. Ad esempio countVowels("NOOOOOO") ritorna 6.

countConsonants

public static int countConsonants(String text)

Tale metodo ritorna il numero di consonanti presenti nella stringa text. Ad esempio countConsonants("NOOOOOO") ritorna 1.

vowelize

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".

isAlternative

public static boolean isAlternative(String s)

Tale metodo ritorna true se la stringa s contiene consonanti e vocali alternate (es. isAlternative("patata") ritorna true).

countInString

public static int countInString(String text, char c)

Tale metodo conta quante volte il carattere c è presente nella stringa text.

isAnagram

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):

  1. controlla che i valori contenuti nella matrice rispettino le regole seguenti (altrimenti termina senza fare nulla):
    • controlla che tutti gli elementi di m tranne uno (che chiameremo X) siano pari a 0
    • X deve avere un valore compreso nel range [1;4]
  2. Se la matrice rispetta le regole, ne modifica il contenuto nel modo seguente:
    • se X vale 1, lo sposta in alto (in su di una riga), se X si trova nella prima riga, lo sposta nell’ultima
    • se X vale 2, lo sposta in basso (in giù di una riga), se X si trova nella ultima riga, lo sposta nella prima
    • se X vale 3, lo sposta a sinistra (a sinistra di una colonna), se X si trova nella prima colonna, lo sposta nell’ultima
    • se X vale 4, lo sposta a destra (a destra di una colonna), se X si trova nella ultima colonna, lo sposta nella prima

Esempio:

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