Programmazione per TWM: Esercitazione di laboratorio #6 (5/02)

L'obiettivo di questa esercitazione è familiarizzare con i seguenti concetti, illustrati nel capitolo 3 del libro:

Raccomandazioni: Prima di risolvere questi esercizi, terminate quelli dell'esercitazione scorsa. 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. Non è importante risolvere tutti gli esercizi di questa esercitazione: cercate piuttosto di fare bene quello che fate. Quando opportuno, usate gli operatori di incremento i++ e decremento i-- invece delle istruzioni i = i + 1 e i = i - 1.

Esercizio 1

Obiettivo: Familiarizzare con le istruzioni break e continue.

Attività:

  1. Completate il programma seguente inserendo le opportune istruzioni break e continue (e le opportune parentesi graffe!) in modo che:
    class Break {
      public static void main(String[] args) {
        int n = 0;
        while (true) {
          System.out.print("Inserisci un numero: ");
          n = EasyIn.readInt();
          if (n%2==0)
            System.out.println("Il numero " + n + " e' pari.");
          if (n%3==0)
            System.out.println("Il numero " + n + " e' multiplo di 3.");
          if (n%4==0)
            System.out.println("Il numero " + n + " e' multiplo di 4.");
          if (n == 100) 
            System.out.println("Il numero " + n + " e' 100 e quindi termino.");
        }
      }
    }
    
  2. Che cosa succede se si inserisce un continue nel corpo del primo if?

Esercizio 2

Obiettivo: Approfondire i cicli for, i cicli annidati e gli operatori di incremento e decremento.

Attività:

  1. Si consideri il seguente frammento di programma
    for (int r = 1; r <= n; r++) { // r e' la riga
        for (int c = 1; c <= r; c++) // c e' la colonna
            System.out.print("*");
        System.out.println();
    } 
    
    che visualizza il triangolo di asterischi
    *     
    **    
    ***   
    ****  
    ***** 
    ******
    
    (e n, il numero di righe/colonne può essere scelto durante l'esecuzione). Completate le versioni seguenti, molto meno comprensibili ma comunque funzionanti. (N.B. Dovete solo sostituire i tre punti di domanda ???, non serve modificare niente altro)
    for (int r = 1; r <= n; r++) { 
        for (int c = r; c >= 1; ???) 
            System.out.print("*");
        System.out.println();
    } 
    
    for (int r = n; r >= 1; r--) { 
        for (int c = r; c <= ???; c++) 
            System.out.print("*");
        System.out.println();
    } 
    
    for (int r = n; r >= 1; r--) { 
        for (int c = n; c >= ???; ???) 
            System.out.print("*");
        System.out.println();
    } 
    
  2. Confrontate le quattro versioni precedenti, analizzandone la comprensibilità. Che commenti mettereste nelle ultime tre versioni? Nota: ovviamente, più un programma è comprensibile, meglio è...

Esercizio 3

Obiettivo: Approfondire la tecnica di sviluppo incrementale dei programmi.

Attività:

  1. Scrivete un programma che calcola la parte intera della radice quadrata di un numero n letto in input (senza usare i metodi delle librerie Java). Suggerimento: cercate il più grande numero x tale che x*x<=n
  2. Scrivete un programma che calcola la parte intera della radice cubica di un numero n letto in input. Suggerimento: basta una minima modifica alla soluzione dell'esercizio precedente...
  3. Scrivete un programma che visualizza le coppie (n,x) tali che n è la radice quadrata di x, ordinate per valori crescenti di n da 1 a 40. Suggerimento: basatevi sugli esercizi precedenti e aggiungete un ciclo.
  4. Scrivete un programma che visualizza le coppie (n,x) tali che n è la radice quadrata di x, ordinate per valori decrescenti di n da 100 a 70.

Esercizio 4

Obiettivo: Approfondire i cicli annidati e la tecnica di sviluppo incrementale dei programmi.

Attività:

  1. Scrivete un programma che visualizza il seguente quadrato usando due cicli annidati:
    11111111
    22222222
    33333333
    44444444
    55555555
    66666666
    77777777
    88888888
    
  2. Modificate il programma per fargli visualizzare il seguente quadrato:
    12345678
    12345678
    12345678
    12345678
    12345678
    12345678
    12345678
    12345678
    
  3. (*) Modificate il programma per fargli visualizzare il seguente quadrato:
    12345678
    23456781
    34567812
    45678123
    56781234
    67812345
    78123456
    81234567
    
  4. (*) Modificate il programma per far in modo che la dimensione e il tipo del quadrato vengano letti in input durante l'esecuzione. Se ad esempio l'input è:
    3
    1
    
    si deve visualizzare un quadrato di dimensione 3 del tipo 1, ossia
    111
    222
    333
    
    se invece l'input è
    2
    2
    
    si deve visualizzare un quadrato di dimensione 2 del tipo 2, ossia
    12
    12
    
    se infine l'input è
    4
    3
    
    si deve visualizzare un quadrato di dimensione 4 del tipo 3
    1234
    2341
    3412
    4123
    
    Suggerimento: Si deve usare un if o uno switch?
  5. Scrivete un programma che letti due numeri minori di 10 da tastiera scriva la sequenza palindroma che va dal minore fino al maggiore e poi decresce di nuovo fino al minore (palindromo significa che leggerlo da sinistra a destra è la stessa cosa che leggerlo da destra a sinistra). Ad esempio, se l'input è 2 6 l'output sarà 234565432 se l'input è 8 6 l'output sarà 67876.
  6. Modificate il programma precedente per fare in modo che la sequenza palindroma vada dal maggiore al minore.
  7. (**) Modificate il programma precedente per fare in modo che vengano accettati anche numeri maggiori di 10. In questo caso vanno scritti in verticale. Ad esempio, se l'input è 3 12 l'output sarà
           11111
    3456789012109876543 
    
  8. (*) Scrivete un programma che visualizza la seguente "piramide":
            1
           121
          12321
         1234321
        123454321
       12345654321
      1234567654321
     123456787654321
    12345678987654321 
    
    Suggerimento: per ogni riga, dovete visualizzare prima un certo numero di spazi, poi un certo numero di cifre crescenti e poi un certo numero di cifre decrescenti. Tutti e tre questi numeri dipendono dal numero di riga...
  9. Modificate il programma precedente per far sì che il numero di righe (e quindi di cifre) visualizzate sia letto in input durante l'esecuzione. Ad esempio, se l'input è 5, la piramide da visualizzare è:
        1
       121
      12321
     1234321
    123454321
    
  10. Modificate il programma precedente per far sì che la piramide venga visualizzata rovesciata. Ad esempio, se l'input è 6, la piramide da visualizzare è:
    12345654321
     123454321
      1234321
       12321
        121
         1
    
  11. Modificate i programmi precedenti per far sì che la piramide venga visualizzata ruotata. Ad esempio, se l'input è 6, la piramide da visualizzare è:
    1
    21
    321
    4321
    54321
    654321
    54321
    4321
    321
    21
    1
    
  12. Modificate il programma precedente per far sì che la piramide venga visualizzata ruotata e rovesciata. Ad esempio, se l'input è 5, la piramide da visualizzare è:
        1
       21
      321
     4321
    54321
     4321
      321
       21
        1
    

Valid XHTML 1.1! Stefano Mizzaro Last modified: Sat Jul 10 11:31:53 ora legale Europa occidentale 2004