Stampa i valori positivi

Vediamo ora una funzione leggermente più complicata delle precedenti. Supponiamo di avere due variabili intere a e b, a cui assegnamo dei valori. Vogliamo poi calcolare e stampare il valore di alcune espressioni, per esempio a-b, a-b*b, -a/b e a/b. Vogliamo però stampare solo il valore delle espressioni positive (maggiore oppure uguale a zero); in caso contrario si vuole stampare solo la scritta Valore negativo, senza precisare il valore esatto dell'espressione.

Questo tipo di problema si può risolvere anche senza usare le procedure. Per esempio, per stampare il valore della prima espressione, si potrebbe fare:

  int c;

  c=a-b;

  if( c>=0 ) {
    System.out.println(c);
  }
  else {
    System.out.println("Valore negativo");
  }
Questo andrebbe poi ripetuto anche per le altre espressioni da valutare. Il programma completo contiene quindi quattro volte la intera istruzione condizionale, esattamente identica. Si tratta quindi di una situazione in cui una sequenza di istruzioni si ripete più volte in un programma, per cui conviene ``mettere a fattor comune'' e usare una procedura.

In questo caso, la procedura dovrebbe ricevere un valore intero (il valore di una delle espressioni); questo valore viene stampato oppure no a seconda se è positivo oppure no. Dal momento che la procedura riceve un valore intero, occorre specificare un nome di variabile intero in cui il dato che il programma manda viene memorizzato. L'inizio della procedura quindi è:

  static void stampa(int e)
Si è scelto il nome stampa per questa procedura. Le istruzioni associate devono stampare il valore memorizzato in e, ma soltanto se è positivo. In caso contrario, si stampa Valore negativo. La procedura completa è quindi come segue:

  static void stampa(int e) {
    if( e>=0 ) {
      System.out.println(e);
    }
    else {
      System.out.println("Valore negativo");
    }
  }
Per poter eseguire le istruzioni della procedura è necessario che all'interno del programma principale ci siano delle chiamate di procedura, ossia delle istruzioni stampa(...). Fra parentesi ci va il valore che il programma manda alla procedura. È possibile mettere tra parentesi un numero intero (per esempio 12), una variabile (per esempio a), o anche una espressione. Nel nostro caso, dato che vogliamo stampare il valore di una espressione come a-b possiamo semplicemente scrivere stampa(a-b). Questo equivale a calcolare il valore della espressione a-b, mettere il risultato nella variabile e locale della procedura stampa, ed eseguire le istruzioni della procedura. Questo è esattamente quello che serve (calcolare il valore della espressione e stamparlo se positivo).

La stessa cosa va fatta per le altre espressioni da stampare. Il programma completo StampaSePositivo.java è riportato qui sotto.

/*
  Stampa il valore di alcune espressioni, ma solo
  se e' positivo.
*/

class StampaSePositivo {

  static void stampa(int e) {
    if( e>=0 ) {
      System.out.println(e);
    }
    else {
      System.out.println("Valore negativo");
    }
  }

  public static void main(String[] args) {
    int a=12, b=4;

    stampa(a-b);
    stampa(a-b*b);
    stampa(-a/b);
    stampa(a/b);
  }
}