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