L'obiettivo di questa esercitazione è l'approfondimento dei sottoprogrammi, o metodi (illustrati nel capitolo 5).
Raccomandazioni: Ove non altrimenti indicato, rispondete alle domande prima ragionando su carta e poi provando a editare, compilare ed eseguire. Gli esercizi etichettati con l'asterisco (*) sono più difficili: affrontateli dopo aver risolto gli altri.
Obiettivo: Comprendere il funzionamento dei parametri di tipo array, e in generale dei metodi che lavorano su array.
Attività:
inverti()
per l'inversione di un array.
class Inverti { public static void main(String[] args) { int[] a; int n; System.out.print("Inserisci il numero di elementi dell'array: "); n = EasyIn.readInt(); a = new int[n]; for (int i = 0; i < a.length; i++) { System.out.print("a[" + i + "] = "); a[i] = EasyIn.readInt(); } inverti(a); System.out.println("L'array invertito e': "); for (int i = 0; i < a.length; i++) System.out.println("a[" + i + "] = " + a[i]); } static void inverti(int[] array) { // COMPLETARE!! } }Come vedete, gli array vengono passati per riferimento. O meglio, il riferimento all'array viene passato per valore. Insomma, il risultato è che le modifiche sul parametro formale si ripercuotono sul parametro attuale.
inverti()
con altri due argomenti, entrambi di tipo
int
, inizio
e fine
che indicano
la porzione dell'array da invertire (inizio
è il
primo elemento della porzione e fine
è
l'ultimo). In questo modo, il metodo inverti()
è
sovraccarico. Collaudate la correttezza del programma
invocando entrambi i metodi inverti()
. Gestite anche, con
modalità decise da voi, il caso in cui inizio
è più grande di fine
.inverti()
(ossia quello
con un unico argomento) usando il secondo. (il corpo di questa nuova
versione del primo metodo deve essere di una riga di
codice!)inizio
e fine
. Potete usare un metodo
sovraccarico, quindi sempre con nome inverti()
?
Perché?Obiettivo: Comprendere il funzionamento dei metodi che lavorano su matrici (array bidimensionali).
Attività:
sommaMatrice()
e
sottraiMatrice()
.leggiMatrice()
,
prodottoMatrice()
, sommaMatrice()
e
sottraiMatrice()
da funzioni a procedure. Confrontate i
due approcci (intestazione del metodo, istruzione return
,
invocazione).int[][] copiaMatrice(int[][] m)
che crea una
copia nuova (quindi, senza alias) della matrice
m
ricevuta in input. void copiaMatrice(int[][] mIn, int[][]
mOut)
che crea una copia nuova (quindi, senza alias)
della matrice m
ricevuta in input. Confrontate questa
soluzione con la precedente. azzeraArray(int[] a)
che
azzera gli elementi di un array. Poi usatela per definire altre due
procedure: azzeraMatrice(int[][] m)
che azzerare tutti
gli elementi di una matrice bidimensionale e
azzeraRigaMatrice(int[][] m, int riga)
che azzera la riga
indicata dal parametro formale riga
dell'array array
bidimensionale m
. N.B. Le procedure
azzeraMatrice()
e azzeraRigaMatrice()
devono usare (chiamare) la procedura
azzeraArray()
, con i parametri opportuni. ParametriArray2
a pag. 129-130), cosa possiamo
dire degli elementi di array che sono array? Vengono passati per
valore o per riferimento? Quindi qual è la regola
generale?azzeraArray(int[]
a)
precedente per azzerare gli elementi di una colonna
di un array bidimensionale? Perché?
Suggerimento: Riguardate la figura 4.3 a
pag. 87...Obiettivo: Cominciare a progettare un insieme di metodi di utilità generale per lavorare sugli array unidimensionali.
Attività:
Obiettivo: Imparare a progettare un metodo.
Attività: