Esercizi proposti

Lezioni 1 e 2

1) Scrivere un programma che produca il seguente output:
     *
    * *
   * * *


2) Scrivere un programma che produca il seguente output:

    + - - - +
    | CIAO! |
    + - - - +


3) Scrivere un programma che produca il seguente output:

        +--+
        |  |
     +--+--+
     |  |  |
  +--+--+--+
  |  |  |  |
  +--+--+--+

Lezione 3 e 4

1) Scrivere un programma che calcola il seno, il coseno, la tangente e la cotangente di un numero scelto a caso. Curare un po' l'output.

2) Scrivere un programma che verifichi che, per tre numeri x scelti a caso tra 0 e 100, vale:

sen(x)^2 + cos(x)^2 = 1;
sen(2x) = 2 sen(x) * cos(x);
cos(2x) = cos(x)^2 - sen(x)^2.
Curare l'output.

3) Scrivere un programma che calcola le soluzioni dell'equazione x^2+2x-9 = 0.

4) Scrivere un programma che calcola, per un numero dato x, il seno di x usando il polinomio di Taylor con  valore iniziale x0=0 e di grado 9 (il polinomio in questione è quindi: 1*x-1/6*x^3+1/120*x^5-1/5040*x^7+1/362880*x^9).

Lezione 5 e 6 (Uso delle strutture di controllo).

1) Un numero intero positivo N si dice perfetto se la somma di tutti i suoi divisori, escluso N, coincide con N. Ad esempio 6 è perfetto, in quanto i divisori di 6 (diversi da 6) sono: 1, 2, 3 e la loro somma è 1+2+3 = 6. Scrivere un programma che calcola tutti i numeri interi perfetti < 10000.

2) Scrivere un programma che calcoli tutte le terne pitagoriche (x, y, z) con x, y, z tra 0 e 100 (una terna pitagorica è una terna di numeri interi positivi (x, y, z) tali che x^2 + y^2 = z^2; ad esempio (3, 4, 5) è una terna pitagorica).

3) Scrivere un programma che calcoli la radice intera di un numero scelto a caso tra 1 e 500. (La radice intera di un numero positivo N è il più grande intero positivo M tale che M^2 <= N).

4) Trovare quali valori interi di x, y, z ( con x, y, z  compresi tra -100 e 100) soddisfano all'equazione: x^2 + y^2 + z^2 = 1400. (Per i matematici: trovare tutte le soluzioni intere dell'equazione).

5) Scrivere un programma che assegna ad una variabile un numero a caso L tra 1 e 15 e stampa un quadrato di "*" di lato L, come il seguente (caso L= 4):
* * * *
* * * *
* * * *
* * * *

6) Scrivere un programma che assegna ad una variabile un numero a caso L tra 1 e 15 e stampa una scala di L gradini, come la seguente (caso L=5):
         _
       _|
     _|
   _|
 _|
|

7) Scrivere un programma che inverte una stringa data. Ad esempio, se la stringa data è "Antonio", il programma deve scrivere: "oinotna".

8) Scrivere un programma che inverte un numero dato. Ad esempio, se il numero dato è 12345, il programma deve scrivere: 54321.

9) Scrivere un programma che ogni volta che viene "fatto girare" stampa a caso una delle 52 carte di un mazzo da poker. L'output deve essere del seguente tipo:
Carta scelta: asso di cuori oppure: Carta scelta: 3 di picche o, ancora: Carta scelta: re di fiori.

Lezioni 7 e 8 (leggere dati dalla finestra di console - utilizzo procedure)

N.B. Per la lettura di dati da console, si faccia riferimento alle classi LeggiDati1 o LeggiDati2, inserite in "esempi trattati a lezione".
1) Scrivere un programma che chiede all'utente un numero intero e stampa il messaggio:
Il numero che mi hai dato e': ...
Il suo doppio e': ...

2) Scrivere un programma che chiede all'utente un numero intero positivo e stampa tutti i suoi fattori primi.

3) Scrivere un programma che chiede all'utente due numeri interi e calcola il loro massimo comun divisore (usando l'algoritmo di Euclide).
 

Lezioni 9 e 10 (classi e oggetti)

1) Scrivere una classe che simula il comportamento di un orologio. La classe deve contenere un metodo per aggiornare l'ora e un metodo per visionare l'ora. Scrivere poi un semplice esempio di utilizzo della classe.

2) Modificare la classe Formica.java (cfr. esempi trattati a lezione) in modo che ogni oggetto della classe Formica si sposti esclusivamente nel rettangolo costituito dai punti a coordinate intere (x, y) con 0 <= x <= 20, 1 <= y <= 5 (il metodo muoviUnPasso() deve quindi essere modificato in modo che la formica possa muovere un passo solo rimanendo nel rettangolo assegnato). Scrivere un programma che fa partire due formiche dal punto (0,0) e le fa muovere di al massimo 100 passi. La prima formica che raggiunge (viva) il lato destro del rettangolo vince la gara.

Lezioni 11 e 12 (costruttori, esempi di alcune classi delle API)

1) Modificare la classe Formica.java (cfr. esempi trattati a lezione) aggiungendo tre costruttori: il primo, senza argomenti, posiziona la formica in (0, 0), il secondo costruttore posiziona la formica nel punto di coordinate (x, y) passate come argomento del costruttore, il terzo posiziona la formica in un punto e assegna un nome alla formica.

2) Riscrivere la classe dell'esercizio 1) delle lezioni 9 e 10 aggiungendo opportuni costruttori.

3) Scrivere un programma che misura il tempo impiegato dal vostro calcolatore per effettuare 100000 volte la moltiplicazione di due numeri interi compresi tra 100 e 200, presi a caso.
 

Lezione 13

La già vista benemerita "Banca dell'Onestà" vuole assumere del personale che può essere di tre tipi: diplomati, laureati, stagisti. Per ogni individuo assunto la banca prende nota del nome, dell'anno di nascita e del sesso. Inoltre per i laurati, si vuol prendere nota della materia in cui si sono laureati e del voto, per i diplomati si vuol prendere nota del loro voto all'esame di maturità, per gli stagisti si vuol prendere nota del nome della persona che li ha raccomandati. Scrivere una classe (Impiegato) che riassuma i metodi comuni ai tre tipi di persone assunte e poi la classe ImpiegatoDiplomato, la classe ImpiegatoLaureato e la classe ImpiegatoStagista, ognuna sottoclasse di Impiegato, in modo che ciascuna classe implementi le specifiche caratteristiche dei vari impiegati. Testare le classi. Non è richiesto che le 4 classi abbiano costruttori espliciti, devono limitarsi a contenere dei metodi per definire e ottenere i dati specifici.
 

Lezioni 14 e 15

Riprendere le classi dell'esercizio precedente, in modo da aggiungere ad ogni classe uno o più costruttori.
 

Lezioni 16 e 17

Riprendere ancora le classi dell'esercizio precedente, aggiungendo a ciascuna classe un metodo per il calcolo dello stipendio a fine mese. Il calcolo deve essere fatto in questo modo:
- per un ImpiegatoDiplomato deve essere 1000 euro più 5 euro se il voto ottenuto alla maturità è massimo.
- per un ImpiegatoLaureato deve essere 1500 euro più 3 euro per ogni punto superiore al 100 ottenuto al voto di laurea.
- per un ImpiegatoStagista deve essere di 50 euro se maschio, 100 euro se femmina.
Scrivere poi una classe che testi il comportamento del polimorfismo.
 

Lezione 18

Ripetere l'esempio fatto a lezione (nella lezione 18, dove sono state definite le classi FormaGeometrica, Quadrato, Rettangolo e Cerchio) nel caso in cui si vogliano trattare oggetti geometrici solidi. Più precisamente, scrivere una classe astratta di nome SolidoGeometrico e tre sottoclassi: Sfera, Cubo, Parallelepipedo. La classe astratta deve avere i metodi: dammiArea() e dammiVolume() che devono essere riscritti (e implementati nel modo corretto) nelle sottoclassi. Inoltre le tre sottoclassi Sfera, Cubo, Parallelepipedo devono sovrascrivere il metodo toString() in modo che fornisca alcune informazioni dettagliate sugli oggetti della classe (come il raggio nel caso di una sfera, il lato nel caso del cubo e i 3 lati nel caso del parallelepipedo). Ognuna delle tre classi Sfera, Cubo, Parallelepipedo deve avere un costruttore opportuno (ad esempio nel caso della sfera, nel costruttore si deve dare il raggio, nel caso del parallelepipedo, nel costruttore si deve mettere i 3 lati...).
 

Lezione 19

Scrivere un applet che disegna i 5 cerchi del simbolo delle olimpiadi, ognuno di colore defferente. Scrivere un altro applet che disegna 3 locomotive stilizzate, la prima deve occupare uno spazio di 20 x 40 pixel, la seconda uno spazio di 30 x 60, la terza uno spazio di 90 x 180. (Si consiglia di fare una classe a parte per definire un oggetto di tipo "Locomotiva" con un costruttore in cui si mettono le dimensioni desiderate).
 

Lezione 20

Scrivere un applet che traccia il grafico della funzione f(x) = sin(x) + cos(2*x) con x tra 0 e 2*PI. Scrivere poi un applet che traccia il grafico della funzione g(x) = cos(x) (con x tra 0 e 2*PI) e disegna la retta tangente al grafico nel punto di coordinate (1, cos(1)). La retta tangente deve essere di colore differente dal colore del grafico.
 

Lezioni 21 e 22

Scrivere un applet che divide la finestra in 4 settori. Quando sull'applet viene fatto scorrere il mouse il settore in cui e' entrato il mouse deve colorarsi in modo diverso dagli altri.
Scrivere un applet che disegna un quadrato 30 x 30 nel suo centro. Quando si preme con il mouse sul quadrato e si trascina, il quadrato deve muoversi in modo solidare con il mouse, finché non viene rilasciato il tasto del mouse.
Stesso esercizio del precedente, ma con un cerchio di raggio 20, anzicché con un quadrato.
 

Lezione 23 e 24

Scrivere un applet con due bottoni. Quando viene premuto il primo bottone, lo sfondo dell'applet deve colorarsi di rosso, quando viene premuto il secondo bottone, lo sfondo deve colorarsi di blu.
Trasformare l'applet in un JApplet.
Scrivere un JApplet con un pulsante e un disegno di un pentagono regolare nel centro. Quando viene premuto il pulsante, il pentagono deve cominciare a ruotare attorno al suo centro. Quando viene premuto nuovamente il pulsante, il pentagono deve fermarsi, e così via. Si consiglia di guardare i metodi drawPolygon() e fillPolygon() della classe Graphics per sapere come disegnare un pentagono regolare.

Fare esempi a volontà di propria fantasia.