Soluzione Esercizio 6 dell'Esercitazione #2

Esercizio 6

Obiettivo: Familiarizzare con l'operatore di modulo "%" (il resto della divisione intera).

Attività:

  1. Qual è il valore assunto dalla variabile x, di tipo int, dopo ognuno degli assegnamenti seguenti?
    x = 16 / 2;
    x = 15 / 2;
    x = 16 % 2;
    x = 15 % 2;
    
    Scrivete un breve programma per verificare che la vostra risposta è corretta. Suggerimento: È sufficiente scrivere un programma contenente la dichiarazione della variabile x e poi i 4 assegnamenti a x dei 4 valori, ognuno seguito dall'istruzione di visualizzazione del valore di x (System.out.println).
  2. Scrivete l'istruzione di assegnamento che assegna alla variabile intera y il valore 0 se la variabile intera x è pari, 1 se x è dispari. Scrivete un breve programma per verificare che la vostra soluzione è corretta. Suggerimento: ripensate al risultato delle ultime due operazioni dell'esercizio precedente e completate (ed eseguite più volte su più valori di x) il programma seguente:
    /* Programma per  "..." */
    class PariDispari {
      public static void main (String[] args) {
        int y;
        int x;
        x = "..."; // valore di prova
        y = "..."; //espressione da trovare...
        System.out.println(y);
      }
    }
    

Soluzione

  1. I valori visualizzati sono 8 (16 diviso due), 7 (15 diviso 2, con la divisione intera, fa 7 con resto 1), 0 (il resto della divisione di 16 per 2) e 1 (il resto della divisione di 15 per 2). Il programma per verificare la risposta è il seguente:
    class ValoriDiX {
      public static void main (String[] args) {
        int x;
        x = 16 / 2;
        System.out.println(x);
        x = 15 / 2;
        System.out.println(x);
        x = 16 % 2;
        System.out.println(x);
        x = 15 % 2;
        System.out.println(x);
      }
    }
    
    In questo programma viene usata una variabile x di tipo int; ad essa vengono assegnati in sequenza i 4 valori risultanti dalle 4 espressioni, e questi valori vengono via via visualizzati con l'istruzione System.out.println(x). Compilando ed eseguendo il programma si ottiene:
    >javac ValoriDiX.java
    >java ValoriDiX
    8
    7
    0
    1
    
  2. Generalizzando le ultime due espressioni aritmetiche del programma precedente, si osserva che la divisione per due di un numero pari dà resto zero, quella di un numero dispari dà resto uno. Ma questo è proprio ciò che ci serve: se dividiamo x per due e ne prendiamo il resto (con l'operatore di modulo %), otteniamo il valore da assegnare a x. Quindi l'espressione cercata è x % 2 e il programma va completato così:
    class PariDispari {
      public static void main (String[] args) {
        int y;
        int x;
        x = 17; 
        y = x % 2;
        System.out.println(y);
      }
    }
    
    Assegnando a x un valore, ricompilando ogni volta ed eseguendo si otterrà in output 0 se il valore assegnato a x è pari e 1 se è dispari. Ad esempio, compilando ed eseguendo il programma precedente si ottiene:
    >javac PariDispari.java
    >java PariDispari
    1
    
    È necessario ricompilare perché per assegnare un valore a x si deve modificare il sorgente Java; in realtà, come vedremo nelle prossime esercitazioni, sarebbe possibile determinare durante l'esecuzione il valore da assegnare a x, e questo eviterebbe di dover modificare e ricompilare il programma ogni volta.

Fate l'amore e non la guerra! Valid HTML 4.01! Valid CSS! Stefano Mizzaro
Last modified: 2003-03-11