×

Esercizi sugli array in Java

Questa sezione contiene una raccolta dei principali esercizi sugli array svolti a lezione, o assegnati per lo svolgimento a casa, o in laboratorio.
L'elenco sarà aggiornato sulla base delle esigenze didattiche e/o delle osservazioni/considerazioni che emergeranno durante l'interazione con gli allievi.

Nota:
Attenzione, la numerazione degli esercizi non è definitiva e può cambiare nel tempo, man mano che vengono inseriti nuovi esercizi, o riorganizzati quelli esistenti.
Fare riferimento al titolo per individuare, nel tempo, esercizi specifici.

1) Vettore 1 - 10

Realizzare un programma in Java che inizializzi un vettore di 10 elementi con i numeri da 1 a 10 e successivamente ne stampi il contenuto. Utilizzare due funzioni, una per il caricamento ed una per la stampa.

Soluzione

2) Vettore tabellina del 2

Realizzare un programma in Java che inizializzi un vettore di 10 elementi con i valori della tabellina del 2 e successivamente ne stampi il contenuto. Utilizzare due funzioni, una per il caricamento ed una per la stampa.

Soluzione

3) Vettore decrescente

Realizzare un programma in Java che chieda all'utente di inserire un numero intero positivo n (>0), dichiari ed allochi un vettore di n elementi interi e lo inizializzi con i valori numerici interi decrescenti da n ad 1. Successivamente stampi il contenuto del vettore.

Esempio:
Input n = 5
Output: 5 - 4 - 3 - 2 - 1

4) Multipli di 5 in ordine decrescente

Realizzare un programma in Java che carichi un vettore di 10 elementi con i multipli di 5 in ordine decrescente. Terminato il caricamento, il programma deve stampare il contenuto del vettore dal primo all'ultimo elemento. Il risultato è mostrato nell'esempio che segue.
Cercare di trovare anche la soluzione che non utilizzi variabili aggiuntive, oltre all'indice del vettore, nella funzione di caricamento.

Esempio:
Output: 50 - 45 - 40 - 35 - 30 - 25 - 20 - 15 - 10 - 5

5) Vettore di numeri casuali

Realizzare un programma in Java che, utilizzando le funzioni, carichi un vettore di 10 elementi con valori interi casuali compresi tra 1 e 100 e, terminato il caricamento, stampi il contenuto di tale vettore, sia dal primo all'ultimo elemento, che dall'ultimo al primo. Un esempio di risultato è mostrato di seguito.

Esempio:
Output: Dal primo all'ultimo: 10 - 7 - 45 - 90 - 28 - 14 - 31 - 72 - 45 - 19
Dall'ultimo al primo: 19 - 45 - 72 - 31 - 14 - 28 - 90 - 45 - 7 - 10

6) Potenze di 2

Realizzare un programma in Java che, utilizzando le funzioni, carichi un vettore di 10 elementi con i valori delle potenze di 2 e, terminato il caricamento, stampi il contenuto di tale vettore dal primo all'ultimo elemento. Il risultato è mostrato nell'esempio che segue.
Cercare di trovare anche la soluzione che non utilizzi variabili aggiuntive, oltre all'indice del vettore, nella funzione di caricamento.

Esempio:
Output: 1 - 2 - 4 - 8 - 16 - 32 - 64 - 128 - 256 - 512 - 1024

7) Incremento crescente di un vettore

Realizzare un programma in Java che chieda all'utente di inserire un numero intero positivo n (>0) e carichi un vettore di n elementi, con valori interi inseriti dall'utente. Terminato il caricamento del vettore, stampi il suo contenuto e, successivamente, ne incrementi ogni elemento, partendo dal primo, di un valore che parte da 1 e cresce di 1 ogni volta che si avanza di un elemento. Alla fine stampi nuovamente il contenuto del vettore. Implementare tutte le funzioni ritenute opportune.

Esempio:
vettore inserito dall'utente = 3 - 5 - (-6) - 9 - 15 - 0 - 4 - 8 - 2
Output: 4 - 7 - (-3) - 13 - 20 - 6 - 11 - 16 - 11

8) Elemento maggiore di un vettore

Realizzare un programma in Java che carichi e stampi un vettore di 50 elementi con dei numeri casuali tra -100 e +100. Successivamente cerchi l'elemento maggiore del vettore e stampi l'indice della sua prima occorrenza.

9) Somma di due vettori

Realizzare un programma in Java che, utilizzando le funzioni, carichi due vettori di 10 valori interi casuali da 0 a 50, crei un terzo vettore con la somma degli elementi corrispondenti dei primi due e stampi i tre vettori ottenuti.
Un esempio di risultato è mostrato di seguito.

Esempio:
Primo vettore: 10 - 15 - 8 - 0 - 27 - 45 - 2 - 33 - 50 - 1
Secondo vettore: 20 - 7 - 4 - 11 - 41 - 50 - 0 - 30 - 12 - 9
Vettore somma: 30 - 22 - 12 - 11 - 68 - 95 - 2 - 63 - 62 - 10

10) Vettore e dollari/asterischi

Realizzare un programma in Java che chieda all'utente di inserire 10 numeri interi e li memorizzi in un vettore. Successivamente stampi i valori del vettore, uno per riga, e, per ciascuno di essi, stampi, sulla stessa riga, una sequenza di dollari pari al valore, se positivo, oppure una sequenza di asterischi pari al valore assoluto del numero, se negativo.

Esempio:
vettore inserito dall'utente = 3 - -2 - 4 - ....
Output:
3 - $ $ $
-2 - **
4 - $ $ $ $
...

11) Vettore divisori di N

Realizzare un programma in Java che acquisisca un numero intero positivo tra 1 e 10000, memorizzi in un vettore tutti i suoi divisori ed infine stampi il numero di divisori trovati ed il vettore nel quale sono stati memorizzati.

12) Numero binario

Realizzare un programma in Java che acquisisca un numero compreso tra 0 e 255, calcoli e memorizzi le 8 cifre della sua rappresentazione binaria in un vettore di tale dimensione ed infine stampi il valore in binario del numero inserito, utilizzando il contenuto del vettore.

13) Shift degli elementi di un vettore

Realizzare un programma in Java che inizializzi e stampi un vettore di 10 elementi con dei numeri casuali (>=0).
Successivamente chieda all'utente di inserire un numero intero positivo compreso tra 1 e 10 e generi un nuovo vettore ottenuto traslando verso destra ciascun elemento del vettore iniziale di un numero di celle pari al valore inserito dall'utente.
Gli elementi che fuoriescono a destra del vettore devono rientrare a sinistra, come se l'ultima cella del vettore fosse collegata alla prima.
Infine stampi il vettore risultante.

Esempio:
valori del vettore: 5 7 3 0 1 12 9 2 4 8
valore numerico inserito dall'utente: 3
vettore traslato: 2 4 8 5 7 3 0 1 12 9

Soluzione

14) Numeri senza ripetizioni

Realizzare un programma in Java che acquisisca un vettore di 20 numeri interi e, successivamente, stampi il contenuto del vettore senza stampare più volte i valori ripetuti.

Esempio:
valori del vettore: 5 10 3 -5 9 6 10 -3 -5 9 2 5 7 0 7 18 25 18 95 6
Output: 5 10 3 -5 9 6 -3 2 7 0 18 25 95 6

15) Media aritmetica di N numeri

Realizzare un programma in Java che inizializzi un vettore di dimensione N con dei numeri interi. Tutti i dati necessari (dimensione del vettore N e gli N numeri interi) devono essere richiesti all'utente.
Successivamente calcoli la media aritmetica degli elementi presenti nel vettore e stampi sia il contenuto del vettore che il valore della media calcolata.

Soluzione

16) Caricamento di un vettore con i numeri di Fibonacci

Realizzare un programma in Java che chieda all'utente di inserire un numero intero positivo n (>0) ed inizializzi un vettore di n elementi con i primi n numeri di Fibonacci.
Successivamente stampi il contenuto del vettore. Utilizzare, in aggiunta alla funzione main, una funzione per acquisire il valore di n, una funzione per caricare il vettore ed una funzione per la stampa.

17) Inversione di un vettore

Realizzare un programma in Java che inizializzi e stampi un vettore di 20 elementi con dei numeri casuali compresi tra 1 e 100. Successivamente inverta il vettore, ossia scambi il primo elemento con l'ultimo, il secondo con il penultimo, il terzo con il terzultimo e così via fino a completare l'inversione del vettore. Infine stampi il vettore invertito.

Esempio:
Vettore prima dell'inversione:

5  10  3  4  25  56  70  12  44  6  13  25  47  60  17  18  35  28  7  72

Vettore dopo l'inversione:

72  7  28  35  18  17  60  47  25  13  6  44  12  70  56  25  4  3  10  5

Soluzione

18) Vettori numeri pari/dispari

Realizzare un programma in Java che inizializzi e stampi un vettore di 20 elementi con dei numeri casuali compresi tra 1 e 100.
Successivamente generi due ulteriori vettori, il primo con i numeri pari ed il secondo con i numeri dispari del primo vettore.
Infine stampi anche i due vettori ottenuti ed il numero di elementi in essi contenuti.

19) Concatenazione di due Vettori

Realizzare un programma in Java che inizializzi e stampi due vettori, uno di 10 e l'altro di 20 elementi con dei numeri casuali compresi tra -50 e +50.
Successivamente generi un terzo vettore ottenuto inserendo gli elementi del primo vettore, seguiti dagli elementi del secondo.
Infine stampi il vettore risultante.

Esempio:
se i due vettori contenessero i valori:
Vettore1: 19 -11 -36 22 17
Vettore2: -25 16 -10 -37 50 23 30
il vettore risultante dalla concatenazione dovrà contenere i valori che seguono:
Vettore concatenazione: 19 -11 -36 22 17 -25 16 -10 -37 50 23 30

Soluzione

20) Fusione di due Vettori

Realizzare un programma in Java che inizializzi due vettori, uno di 10 e l'altro di 20 elementi con dei numeri casuali interi positivi (>0), in ordine crescente.
Successivamente stampi i due vettori e generi un terzo vettore inserendo gli elementi del primo e del secondo vettore, in modo che questo terzo vettore sia in ordine crescente.
Infine stampi il vettore risultante.

Esempio:
se i due vettori contenessero i valori:
Vettore1: 9 11 16 22 27
Vettore2: 5 6 10 17 25 33 40
il vettore risultante dalla fusione dovrà contenere i valori che seguono:
Vettore fusione: 5 6 9 10 11 16 17 22 25 27 33 40

Soluzione

21) Caricamento per righe di una matrice (valori crescenti)

Realizzare un programma in Java che inizializzi una matrice di N righe ed M colonne, N ed M fissati come costanti (>0), per righe con i numeri naturali crescenti a partire dal valore 1.
Stampare, successivamente, la matrice.

Cercare la soluzione del problema che non utilizzi altre variabili aggiuntive oltre quelle necessarie per gli indici di riga e colonna.

Esempio:
se N = 3 ed M = 5 la matrice contenere i valori:

  1  2  3  4  5
6 7 8 9 10
11 12 13 14 15


Soluzione

22) Caricamento per colonne di una matrice (valori crescenti)

Realizzare un programma in Java che inizializzi una matrice di N righe ed M colonne, N ed M fissati come costanti (>0), per colonne con i numeri naturali crescenti a partire dal valore 1.
Stampare, successivamente, la matrice.

Cercare la soluzione del problema che non utilizzi altre variabili aggiuntive oltre quelle necessarie per gli indici di riga e colonna.

Esempio:
se N = 3 ed M = 5 la matrice contenere i valori:

  1  4  7 10 13
2 5 8 11 14
3 6 9 12 15


Soluzione

23) Caricamento per righe di una matrice (valori decrescenti)

Realizzare un programma in Java che inizializzi una matrice di N righe ed M colonne, N ed M fissati come costanti (>0), per righe con i numeri naturali decrescenti a partire dal valore N*M.
Stampare, successivamente, la matrice.

Cercare la soluzione del problema che non utilizzi altre variabili aggiuntive oltre quelle necessarie per gli indici di riga e colonna.

Esempio:
se N = 3 ed M = 5 la matrice contenere i valori:

15 14 13 12 11
10 9 8 7 6
5 4 3 2 1


Soluzione

24) Caricamento per colonne di una matrice (valori decrescenti)

Realizzare un programma in Java che inizializzi una matrice di N righe ed M colonne, N ed M fissati come costanti (>0), per colonne con i numeri naturali decrescenti a partire dal valore N*M.
Stampare, successivamente, la matrice.

Cercare la soluzione del problema che non utilizzi altre variabili aggiuntive oltre quelle necessarie per gli indici di riga e colonna.

Esempio:
se N = 3 ed M = 5 la matrice contenere i valori:

15 12  9  6  3
14 11 8 5 2
13 10 7 4 1


Soluzione

25) Matrice quadrata diagonale con valori casuali

Realizzare un programma in Java che inizializzi una matrice quadrata di N x N elementi, N fissato come costante (>0), in modo da ottenere una matrice diagonale con valori casuali compresi tra 1 e 100.

Cercare la soluzione del problema che utilizzi il minor numero possibile di cicli/variabili.

Esempio:
se N = 3 la matrice potrebbe contenere i valori:

15  0  0
0 55 0
0 0 9


Soluzione

26) Vettori somma delle righe e colonne di una matrice

Realizzare un programma in Java che inizializzi una matrice di N x M elementi, N ed M fissati come costanti (>0), con dei numeri casuali tra 1 e 100, successivamente produca due vettori, il primo contenente la somma delle righe, il secondo la somma delle colonne della matrice.
Infine stampi la matrice ed i due vettori.

Esempio:
se N = 3 ed M = 5 e la matrice contiene i valori:

 7 44  3  6  1
21 9 1 5 1
9 10 7 4 10

allora i due vettori risultanti devono contenere i seguenti valori:
vettore somma delle righe: 61 37 40
vettore somma delle colonne: 37 63 11 15 12

Soluzione

27) Somma della cornice di una matrice

Realizzare un programma in Java che inizializzi una matrice di N x M elementi, N ed M fissati come costanti (>0), con dei numeri casuali tra 1 e 100, successivamente calcoli la somma dei valori presenti sulla cornice della matrice.
La cornice di una matrice è l'insieme delle celle sul perimetro della stessa, ossia le celle appartenenti alla prima ed ultima riga o alla prima ed ultima colonna.
Infine stampi sia la matrice che la somma calcolata.

Esempio:
se N = 3 ed M = 5 e la matrice contiene i valori:

 7 44  3  6  1
21 9 1 5 1
9 10 7 4 10

allora la somma della cornice dovrà valere 123 = 7 + 44 + 3 + 6 + 1 + 21 + 1 + 9 + 10 + 7 + 4 + 10

28) Matrice quadrata simmetrica con valori casuali

Realizzare un programma in Java che inizializzi una matrice quadrata di N x N elementi, N fissato come costante (>0), in modo da ottenere una matrice simmetrica con valori casuali compresi tra 1 e 100.

Esempio:
se N = 3 la matrice potrebbe contenere i valori:

15 30  5
30 55 4
5 4 9

29) Matrice quadrata triangolare superiore con valori casuali

Realizzare un programma in Java che inizializzi una matrice quadrata di N x N elementi, N fissato come costante (>0), in modo da ottenere una matrice triangolare superiore con valori casuali compresi tra 1 e 100.

Esempio:
se N = 3 la matrice potrebbe contenere i valori:

15 30  5
0 55 4
0 0 9

30) Matrice quadrata triangolare inferiore con valori casuali

Realizzare un programma in Java che inizializzi una matrice quadrata di N x N elementi, N fissato come costante (>0), in modo da ottenere una matrice triangolare inferiore con valori casuali compresi tra 1 e 100.

Esempio:
se N = 3 la matrice potrebbe contenere i valori:

15  0  0
30 55 0
5 4 9

31) Ribaltamento di una matrice lungo la riga mediana

Realizzare un programma in Java che inizializzi una matrice di N x M elementi, N ed M fissati come costanti (>0), con valori casuali pari compresi tra 0 e 100 e la stampi.
Successivamente ribalti la matrice (senza utilizzare matrici aggiuntive) lungo la riga mediana e la stampi nuovamente.

Esempio:
se N = 5 ed M = 4 la matrice potrebbe contenere i valori:

16  0  0  6
30 56 0 10
6 4 10 0
8 2 0 2
8 10 0 4

dopo il ribaltamento la matrice dovrà contenere i valori:

 8 10  0  4
8 2 0 2
6 4 10 0
30 56 0 10
16 0 0 6

32) Ribaltamento di una matrice lungo la colonna mediana

Realizzare un programma in Java che inizializzi una matrice di N x M elementi, N ed M fissati come costanti (>0), con valori casuali dispari compresi tra 1 e 99 e la stampi.
Successivamente ribalti la matrice (senza utilizzare matrici aggiuntive) lungo la colonna mediana e la stampi nuovamente.

Esempio:
se N = 5 ed M = 4 la matrice potrebbe contenere i valori:

17  1  1  7
31 57 1 11
7 5 11 1
9 3 1 3
9 11 1 5

dopo il ribaltamento la matrice dovrà contenere i valori:

 7  1  1 17
11 1 57 31
1 11 5 7
3 1 3 9
5 1 11 9

33) Ribaltamento di una matrice sia lungo la riga che lungo la colonna mediana

Realizzare un programma in Java che inizializzi una matrice di N x M elementi, N ed M fissati come costanti (>0), con valori casuali pari compresi tra 0 e 100 e la stampi.
Successivamente ribalti la matrice (senza utilizzare matrici aggiuntive) sia lungo la riga mediana, che lungo la colonna mediana e la stampi nuovamente.

Esempio:
se N = 5 ed M = 4 la matrice potrebbe contenere i valori:

16  0  0  6
30 56 0 10
6 4 10 0
8 2 0 2
8 10 0 4

dopo i ribaltamenti la matrice dovrà contenere i valori:

 4  0 10  8
2 0 2 8
0 10 4 6
10 0 56 30
6 0 0 16

34) Somma di due matrici

Realizzare un programma in Java che inizializzi due matrici di N x M elementi, N ed M fissati come costanti (>0), con valori casuali compresi tra 0 e 100, le stampi e, successivamente, crei e stampi una terza matrice (matrice somma) con la somma degli elementi corrispondenti delle prime due matrici.

Esempio:
se N = 3 ed M = 5 e le prime due matrici contengono i valori:

7  4  3  6  1
2 9 1 5 1
4 0 1 7 5

e

1  6  3  0  4
5 1 0 2 9
0 3 2 4 1

la matrice somma dovrà contenere:

8 10  6  6  5
7 10 1 7 10
4 3 3 11 6

35) Prodotto di due matrici

Realizzare un programma in Java che inizializzi due matrici, la prima di N x M e la seconda di M x Q elementi, N, M e Q fissati come costanti (>0), con valori casuali compresi tra 0 e 100, le stampi e, successivamente, crei e stampi una terza matrice (matrice prodotto N x Q elementi) ottenuta moltiplicando le prime due matrici.

Si ricorda che il prodotto di due matrici è possibile solo se la seconda matrice ha numero di righe pari al numero di colonne della prima matrice e che ogni elemento (i,j) della matrice prodotto è ottenuto sommando i prodotti degli elementi della riga i della prima matrice per i corrispondenti elementi della colonna j della seconda matrice.

Esempio:
se N = 2, M = 3 e Q = 4 e le due matrici (2 x 3) e (3 x 4) contengono i valori:

7  4  3
2 9 1

e

1  6  0  1
5 0 2 1
0 3 1 0

la matrice prodotto dovrà contenere:

27 51 11 11
47 15 19 11

dove:
27 = 7*1 + 4*5 + 3*0
51 = 7*6 + 4*0 + 3*3
11 = 7*0 + 4*2 + 3*1
11 = 7*1 + 4*1 + 3*0
47 = 2*1 + 9*5 + 1*0
15 = 2*6 + 9*0 + 1*3
19 = 2*0 + 9*2 + 1*1
11 = 2*1 + 9*1 + 1*0

36) Matrice piramide azteca

Una matrice piramide azteca è una matrice quadrata con cornici concentriche riempite con valori interi crescenti (>0). Gli elementi di ciascuna cornice hanno lo stesso valore.
Realizzare un programma in Java che costruisca e stampi una generica matrice piramide azteca di N x N elementi, N fissato come costante (>0)

Esempio:
se N = 6 la matrice piramide azteca sarà:

1  1  1  1  1  1
1 2 2 2 2 1
1 2 3 3 2 1
1 2 3 3 2 1
1 2 2 2 2 1
1 1 1 1 1 1


Soluzione

37) Trasposta di una matrice quadrata

Realizzare un programma in Java che inizializzi una matrice quadrata di N x N elementi, N fissato come costante (>0), con valori casuali compresi tra 1 e 100, la stampi e, successivamente, generi la matrice trasposta, stampandone, alla fine, nuovamente il contenuto.
Si ricorda che la trasposta di una matrice è la matrice ottenuta scambiando tutte le righe con le corrispondenti colonne.
La matrice trasposta deve essere generata nella matrice originaria, senza utilizzare matrici o altre strutture aggiuntive.

Esempio:
se N = 3 la matrice contenesse i valori:

15 30  5
3 8 4
7 2 10

la sua trasposta sarebbe:

15  3  7
30 8 2
5 4 10

Soluzione