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.