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