Usare funzioni sul programma di ricerca degli zeri è piuttosto complicato da spiegare, dal momento che si utilizzano già tutte le caratteristiche delle funzioni. Per questa ragione, cominciamo con esempî più facili, e rimandiamo la modifica di Nullo.java a un momento successivo.
Supponiamo di voler modificare il programma Espressioni.java in modo che i risultati delle espressioni siano separati fra di loro da una linea composta di asterischi, preceduta e seguita da linee vuote. In altre parole, vogliamo una cosa del tipo:
Risultato della prima espressione: 1.8371900826446281 *********************************************************** Risultato della seconda espressione: 34.460000000000001 *********************************************************** Risultato della terza espressione: 0.01484119916889285 *********************************************************** Risultato della quarta espressione: 7.0408025110778389Per stampare una linea vuota basta dare un comando del tipo System.out.println(" "), che corrisponde a stampare una linea in cui c'è solo uno spazio (la linea appare quindi vuota). Con questo trucco, è possibile scrivere il programma EspressioniSeparate.java che risolve il problema.
/*
Alcuni esempi di espressioni
*/
class EspressioniSeparate {
public static void main(String[] args) {
double a=12.23,b=0.1e+2,c;
c=(a+b)/12.1;
System.out.println("Risultato della prima espressione: "+c);
System.out.println(" ");
System.out.println("***********************************************************");
System.out.println(" ");
c=a*2+b;
System.out.println("Risultato della seconda espressione: "+c);
System.out.println(" ");
System.out.println("***********************************************************");
System.out.println(" ");
c=1/(a-1)/(b-4);
System.out.println("Risultato della terza espressione: "+c);
System.out.println(" ");
System.out.println("***********************************************************");
System.out.println(" ");
c=Math.sqrt(a*a - b*b);
System.out.println("Risultato della quarta espressione: "+c);
}
}
Il programma funziona perfettamente. D'altra parte, è stato necessario riscrivere tre volte la stessa sequenza di istruzioni:
System.out.println(" ");
System.out.println("***********************************************************");
System.out.println(" ");
Sarebbe comodo poter evitare di ripetere la scrittura di queste
tre istruzioni ogni volta. Le procedure servono a questo: scrivere
una sequenza di istruzioni una volta sola, anche se poi vanno
ripetute più volte nel programma.
In particolare, una procedura è un nome che viene
assegnato a una sequenza di istruzioni. In questo modo, quando
nel programma è necessario eseguire quelle istruzioni,
si può utilizzare il nome invece di scrivere le istruzioni
per esteso.Per fare questo è necessario:
static void nome() {
istruzione1;
istruzione2;
...
}
Le istruzioni fra parentesi graffe sono quelle che si vuole ripetere
più volte all'interno del programma. A questa sequenza viene
assegnato il nome dato. Il nome serve a permettere di
richiamare queste istruzioni: in altre parole, si usa ogni
volta che è necessario eseguire la sequenza di istruzioni.Le procedure vanno messa prima della line public stati void main.... Ogni volta che si vogliono eseguire le istruzioni che si trovano in una certa procedura, si scrive nome();. Scrivere il nome (che equivale a eseguire le istruzioni associate al nome) si dice chiamata di procedura.
Il programma che stampa il risultato di espressioni si può quindi riscrivere come segue: EspressioniSeparateProc.java
/*
Alcuni esempi di espressioni
*/
class EspressioniSeparateProc {
static void separa() {
System.out.println(" ");
System.out.println("***********************************************************");
System.out.println(" ");
}
public static void main(String[] args) {
double a=12.23,b=0.1e+2,c;
c=(a+b)/12.1;
System.out.println("Risultato della prima espressione: "+c);
separa();
c=a*2+b;
System.out.println("Risultato della seconda espressione: "+c);
separa();
c=1/(a-1)/(b-4);
System.out.println("Risultato della terza espressione: "+c);
separa();
c=Math.sqrt(a*a - b*b);
System.out.println("Risultato della quarta espressione: "+c);
}
}
Spiegazione riassuntiva: occorre ripetere una sequenza di tre
istruzioni diverse volte nel codice; è quindi vantaggioso
usare una procedura in cui si scrivono queste istruzioni una volta
sola. La prima cosa da fare è scrivere la procedura stessa,
ossia si scrive static void separa(), in cui ``separa''
è il nome che si è scelto per la procedura, seguito
dalle tre istruzioni racchiuse da
parentesi graffe. A questo punto esiste una procedura che si
chiama separa(). Ogni volta che nel resto del programma
appare la istruzione separa(), questo è equivalente
ad eseguire le istruzioni che sono state messe nella procedura.