Programmi interattivi

Scrivi il programma FarfallinatoreInterattivo che chiede all’utente di inserire una frase e poi la codifica in alfabeto farfallino (se non conosci l’alfabeto farfallino vedi wikipedia).

Esempio:

Inserire una frase: Il mattino ha l'oro in bocca
Ifil mafattifinofo hafa l'oforofo ifin bofoccafa

Oppure:

Inserire una frase: ciao come va
cifiafaofo cofomefe vafa

Scrivi il programma Saluto che chiede all’utente di inserire il proprio nome e in seguito stampa a terminale: Buongiorno <nome>, benvenuto!.

Inserisci il tuo nome per continuare: Luca

Buongiorno Luca, benvenuto!

Scrivi il programma SimpleInterest utile per calcolare l’interesse semplice di un prestito. Il programma deve funzionare nel modo seguente:

  1. Chiede di inserire il capitale iniziale (C=M0)
  2. Se il valore inserito non è un numero valido stampa il messaggio:

     Valore C non valido "<valore>"   e ricomincia dal punto 1.
    
  3. Se il valore inserito è inferiore o uguale 0 stampa:

     C deve essere maggiore di 0   e ricomincia dal punto 1.
    
  4. Chiede di inserire il tasso di interesse (i)
  5. Se il valore inserito non è un numero stampa:

     Valore i non valido "<valore>"   e ricomincia dal punto 4.
    
  6. Chiede di inserire il periodo (n)
  7. Se il valore inserito non è un numero intero stampa:

     Valore n non valido "<valore>"   e ricomincia dal punto 6.
    
  8. Se il valore inserito è inferiore a 0 stampa:

     Il periodo deve deve essere positivo  e ricomincia dal punto 6.
    
  9. Stampa il montante (Mn) del prestito

Esempio 1:

Inserire il capitale iniziale (C): 1000
Inserire il tasso di interesse (i): 5
Inserire il periodo (n): 2
M2 = 1100.0

Esempio 2:

Inserire il capitale iniziale (C): -1
Il capitale deve essere maggiore di 0
Inserire il capitale iniziale (C): bau
Valore C non valido "bau"
Inserire il capitale iniziale (C): 1000
Inserire il tasso di interesse (i): miao
Valore i non valido "miao"
Inserire il tasso di interesse (i): 7
Inserire il periodo (n): -1
Il periodo deve essere positivo
Inserire il periodo (n): cucu
Valore n non valido "cucu"
Inserire il periodo (n): 5
M5 = 1350.0

Scrivi il programma ArithmeticProgression utile per calcolare i termini di una progressione aritmetica. Il programma deve funzionare nel modo seguente:

  1. Chiede di inserire il valore del primo termine (a1)
  2. Se il valore inserito non è un numero intero stampa il messaggio:

     Valore a1 non valido "<valore>"   e ricomincia dal punto 1.
    
  3. Chiede di inserire la ragione (r)
  4. Se il valore inserito non è un numero intero stampa:

     Valore r non valido "<valore>"   e ricomincia dal punto 3.
    
  5. Chiede di inserire il numero di termini da stampare (N)
  6. Se il valore inserito non è un numero intero stampa:

     Valore N non valido "<valore>"   e ricomincia dal punto 5.
    
  7. Se il valore inserito è inferiore a 1 stampa:

     Il numero di termini deve essere maggiore di 0   e ricomincia dal punto 5.
    
  8. Stampa i primi N termini della progressione aritmetica

Esempio 1:

Inserire primo termine (a1): 1
Inserire ragione (r): 2
Inserire numero di termini (N): 10
1, 3, 5, 7, 9, 11, 13, 15, 17, 19.

Esempio 2:

Inserire primo termine (a1): bau
Valore a1 non valido "bau"
Inserire primo termine (a1): 1
Inserire ragione (r): miao
Valore r non valido "miao"
Inserire ragione (r): 2
Inserire numero di termini (N): muhh
Valore N non valido "muhh"
Inserire numero di termini (N): 0
Il numero di termini deve essere maggiore di 0
Inserire numero di termini (N): 5
1, 3, 5, 7, 9.

Scrivi il programma ScegliNumero che chiede all’utente di inserire un numero. Se il valore immesso è compreso tra i due interi passati come argomenti da linea di comando, il programma stampa Bravo! e termina. Altrimenti ripete la richiesta.

Ad esempio:

$ java ScegliNumero 5 1

Inserisci un numero: 15
Numero non valido, riprova!

Inserisci un numero: 6
Numero non valido, riprova!

Inserisci un numero: 3
Bravo!

Scrivi la classe ImcCalculator che calcola l’indice di massa corporea (IMC) dell’utente. L’IMC si calcola secondo la formula seguente:

BMI = peso altezza 2 kg m 2

Il programma deve richiedere interattivamente all’utente i dati necessari per effettuare il calcolo; prima viene richiesto il peso espresso in kg e poi l’altezza espressa in cm.

Nota bene: La formula funziona solo per un peso compreso tra 40.0 e 130.0 kg e un’altezza compresa tra 140.0 e 200.0 cm; se vengono introdotti valori al di fuori di questi intervalli o valori di tipo non appropriato, il sistema chiede nuovamente il dato, fino a quando il valore è accettabile.

Alla fine il programma stampa a terminale il IMC calcolato come nell’esempio seguente:

Questo programma calcola il tuo indice di massa corporea (IMC).
PREMI ENTER PER CONTINUARE...

Inserisci il tuo peso in kg (min: 40.0kg - max: 130.0kg): 20
Il peso deve essere compreso tra 40.0 e 130.0 kg, riprova.
Inserisci il tuo peso in kg (min: 40.0kg - max: 130.0kg): 78 
Inserisci la tua altezza in cm (min: 140.0cm - max: 200.0cm): 350
l'altezza deve essere compresa tra 140.0 e 200.0 cm, riprova.
Inserisci la tua altezza in cm (min: 140.0cm - max: 200.0cm): 180
Il tuo peso: 78.0 kg
La tua altezza: 180.0 cm
Il tuo IMC: 24.074076

Scrivi il programma BinSum che chiede all’utente di inserire due valori interi espressi in notazione esadecimale e poi ne stampa la somma in base 2. I valori binari devono essere stampati a 32 bit.

Esempio:

>java BinSum
Inserire primo addendo (in esadecimale): AA
Inserire secondo addendo (in esadecimale): 5

00000000000000000000000010101010
00000000000000000000000000000101 +
--------------------------------
00000000000000000000000010101111

Oppure:

>java BinSum
Inserire primo addendo (in esadecimale): 1
Inserire secondo addendo (in esadecimale): -1

00000000000000000000000000000001
11111111111111111111111111111111 +
--------------------------------
00000000000000000000000000000000

Scrivi il programma HexSum che chiede all’utente di inserire due valori interi espressi in notazione esadecimale e poi ne stampa (sempre in base 16) il risultato della somma.

Qualche esempio:

>java HexSum
Inserire primo addendo (in esadecimale): 9
Inserire secondo addendo (in esadecimale): 1

       9
       1 +
--------
       A
>java HexSum
Inserire primo addendo (in esadecimale): AA55
Inserire secondo addendo (in esadecimale): 55AA

    AA55
    55AA +
--------
    FFFF

Scrivere la classe Asciigator che chiede all’utente di digitare un stringa di testo e poi stampa ogni carattere contenuto nella stringa introdotta e il relativo codice Unicode (in decimale e in esadecimale).

Ad esempio per ABCDEF1234567890 il programma produce l’output seguente:

Introdurre un testo:
ABCDEF1234567890

char:	'A'	'B'	'C'	'D'	'E'	'F'	'1'	'2'	'3'	'4'	'5'	'6'	'7'	'8'	'9'	'0'	
dec:	65	66	67	68	69	70	49	50	51	52	53	54	55	56	57	48	
hex:	41	42	43	44	45	46	31	32	33	34	35	36	37	38	39	30	

Mentre per Hello world!:

Introdurre un testo:
Hello world!

char:	'H'	'e'	'l'	'l'	'o'	' '	'w'	'o'	'r'	'l'	'd'	'!'	
dec:	72	101	108	108	111	32	119	111	114	108	100	33	
hex:	48	65	6c	6c	6f	20	77	6f	72	6c	64	21

Scrivi il programma Hex2Float che chiede all’utente di introdurre un valore esadecimale e lo converte in un numero a virgola mobile a precisione singola (float).

Il programma stampa i 32 bit del valore inserito e il corrispondente valore secondo il formato IEEE754. Qualche esempio:

>java Hex2Float
Introdurre un valore esadecimale (32bit): 3fc00000
00111111110000000000000000000000 -> 1,50000
>java Hex2Float
Introdurre un valore esadecimale (32bit): -7F000001
10000000111111111111111111111111 -> -2,35099e-38
>java Hex2Float
Introdurre un valore esadecimale (32bit): bf800000
10111111100000000000000000000000 -> -1,00000
>java Hex2Float
Introdurre un valore esadecimale (32bit): FFFFFFFF
11111111111111111111111111111111 -> NaN

Puoi verificare la bontà dei risultati ottenuti confrontandoli con quelli prodotti da un convertitore IEEE754.

Scrivi il programma Scacchiera che:

  1. Chiede all’utente di introdurre il numero di righe e il numero di colonne di una matrice
  2. Crea una matrice con le dimensioni definite dall’utente
  3. Riempie la matrice disponendo i valori 1 e 0 altrenati come su una scacchiera.

Esempio, per una matrice 5 x 5:

Inserire numero di righe: 5
Inserire numero di colonne: 5

0 1 0 1 0 
1 0 1 0 1 
0 1 0 1 0 
1 0 1 0 1 
0 1 0 1 0

Il programma deve funzionare correttamente anche per matrici rettangolari. Esempio:

Inserire numero di righe: 6
Inserire numero di colonne: 8

0 1 0 1 0 1 0 1 
1 0 1 0 1 0 1 0 
0 1 0 1 0 1 0 1 
1 0 1 0 1 0 1 0 
0 1 0 1 0 1 0 1 
1 0 1 0 1 0 1 0

MenuCreator

Devi realizzare un’applicazione utile per redigere il menu di un ristorante. Un menu è costituito dall’elenco delle pietanze servite. Per ogni pietanza viene indicato il nome e il prezzo.

Per realizzare l’applicazione devi procedere in 2 fasi.

Food

Creare la classe Food, che rappresenta il modello di pietanza. La classe Food deve possedere due attributi privati utili per la memorizzazione del nome e del prezzo della pietanza (e i relativi metodi getter e setter). Il nome è costituito da una stringa (valore di default "NO NAME"), mentre il prezzo è un numero reale a precisione doppia (valore di default 5.0). Inoltre la classe deve esportare il costruttore vuoto e un costruttore personalizzato che permetta di inizializzare entrambi gli attributi della pietanza.

Realizzare l’applicazione MenuCreator. È una semplice applicazione che serve a generare il menu (la carta delle pietanze) di un ristorante. Quando viene eseguita, propone all’utente 2 possibilità: Aggiungi pietanza e Esci.

Scegliendo Aggiungi pietanza, l’utente può aggiungere una pietanza fornendone il nome ed il prezzo. Il nome della pietanza non può essere vuoto o nullo e deve avere una lunghezza massima di 50 caratteri. Il prezzo fornito deve essere un numero positivo.

[1 Aggiungi pietanza | 2 Esci] Scelta: 1

Aggiungi pietanza
-----------------
Nome pietanza: Insalata verde
Prezzo pietanza: 6.50
Aggiunto Insalata verde, CHF 6.50
---------------------------~~ MENU ~~---------------------------
| Insalata verde                                     CHF  6.50 |
----------------------------------------------------------------
[1 Aggiungi pietanza | 2 Esci] Scelta:

Se un valore fornito dall’utente non è accettabile, il programma stampa un messaggio e ripropone la richiesta come mostrato nell’esempio seguente:

[1 Aggiungi pietanza | 2 Esci] Scelta: 1

Aggiungi pietanza
-----------------
Nome pietanza: Specialità della casa con il nome trooooppo lunghissimo
Nome non valido Specialità della casa con il nome trooooppo lunghissimo
Nome pietanza: Sorbetto
Prezzo pietanza: -12
Prezzo non valido -12.0
Prezzo pietanza: 6
Aggiunto Sorbetto, CHF 6.00
---------------------------~~ MENU ~~---------------------------
| Insalata verde                                     CHF  5.50 |
| Insalata mista                                     CHF  6.50 |
| Spaghetti aglio olio e peperoncino                 CHF  9.00 |
| Spaghetti alla carbonara                           CHF 12.50 |
| Lasagne fatte in casa                              CHF 14.00 |
| Bistecca di manzo con contorno                     CHF 23.25 |
| Polenta e brasato                                  CHF 22.00 |
| Torta della nonna                                  CHF  6.40 |
| Gelato                                             CHF  2.40 |
| Sorbetto                                           CHF  6.00 |
----------------------------------------------------------------
[1 Aggiungi pietanza | 2 Esci] Scelta: 

Dopo aver aggiunto una pietanza all’elenco il programma stampa un messaggio di conferma (es. Aggiunto Sorbetto, CHF 9.00) e il menu formattato correttamente. Poi propone nuovamente la possibilità di aggiungere una pietanza o di terminare il programma.

Scrivi il programma Rotator che chiede all’utente di disegnare una figura bidimensionale e poi la stampa ruotandola (applica un rotazione di 90° in senso orario e una simmetria speculare verticale) come mostrato negli esempi seguenti.

La figura introdotta può avere una dimensione massima di 10 x 10 (10 righe e 10 colonne).

L’introduzione della figura termina con successo quando l’utente introduce una riga vuota e preme enter oppure quando la dimensione verticale della figura raggiunge le 10 righe.

Se durante l’introduzione l’utente introduce una riga più lunga di 10 caratteri il programma stampa il messaggio Linea troppo lunga, riprova: e l’introduzione ricomincia da capo.

Qualche esempio:

Inserire un disegno (enter per terminare): 
abcd
efgh

Rotazione:

ae
bf
cg
dh

Oppure:

Inserire un disegno (enter per terminare): 
     *
     ***
*********
     ***
     *

Rotazione:

  *  
  *  
  *  
  *  
  *  
*****
 *** 
 *** 
  *  

Oppure per un riga troppo lunga:

Inserire un disegno (enter per terminare): 
abcdefghjkklm
Linea troppo lunga, riprova:
12345
6   7
89ABC

Rotazione:

168
2 9
3 A
4 B
57C

Scrivi la classe Patternizer che chiede all’utente di inserire un pattern che servirà da modello per disegnare una figura bidimensionale. L’utente introduce la sequenza di caratteri da stampare su di una sola riga utilizzando il carattere 'g' per indicare i punti in cui andare a capo.

Ad esempio la sequenza " /\g/ \g|__|" produce il disegno seguente:

 /\
/  \
|__|

Il programma stampa il disegno in uno spazio cartesiano in cui devono comparire le coordinate orizzontali e verticali come mostrato negli esempi seguenti:

Inserire pattern (g per new line):
****g*  *g*  *g****
 0123
0****
1*  *
2*  *
3****

Oppure:

Inserire pattern (g per new line):
*********g.*.....*.g..*...*..g...*.*...g....*....
 012345678
0*********
1.*.....*.
2..*...*..
3...*.*...
4....*....

La figura contenuta nel pattern deve avere una larghezza massima di 10 caratteri. Se il pattern fornito non rispetta questa regola, il programma stampa il messaggio Riga <riga> troppo lunga (max 10 char), indicando il numero della riga non valida e poi ripete la richiesta iniziale. Esempio:

Inserire pattern (g per new line):
*.*.*.*.*.*g***g---*g
Riga 0 troppo lunga (max 10 char)
Inserire pattern (g per new line):
/\/\/\g\/\/\/
 012345
0/\/\/\
1\/\/\/

Scrivi il programma Filler che chiede all’utente di disegnare una figura bidimensionale chiusa composta di asterischi ('*'). L’introduzione della figura termina quando l’utente introduce una riga vuota e preme enter. Il programma stampa poi la figura riempiendone le cavità orizzontali, come mostrato negli esempi seguenti. Qualche esempio:

Disegnare figura chiusa (enter per terminare): 
********
*      *
*      *
********

Figura piena:

********
********
********
********

Oppure:

Disegnare figura chiusa (enter per terminare): 
      *
  *       *
*           *
  *       *
      *

Figura piena:
      *
  *********
*************
  *********
      *

Se viene immessa una riga non vuota che non contiene nemmeno un asterisco, viene stampato il messaggio Linea non valida! e poi ripete la richiesta iniziale. Esempio:

Disegnare figura chiusa (enter per terminare): 
kasdjfnkasfd
Linea non valida! Disegnare figura chiusa (enter per terminare): 
   *
  * *
 *****  
   * 

Figura piena:
   *
  ***
 *****  
   * 

Scrivi la class Coordinator che:

  1. Chiede all’utente di inserire la coordinata di riga (intero, valore minimo 0, valore massimo 4).

  2. Se il valore non è valido stampa un messaggio di errore e ricomincia dal punto 1.

  3. Chiede di inserire la coordinata di colonna (intero, valore minimo 0, valore massimo 4).

  4. Se il valore non è valido stampa un messaggio di errore e ricomincia dal punto 3.

  5. Stampa a terminale un piano cartesiano (dimensione 5 x 5) con una X alla coordinata immessa (vedi esempi).

I messaggi di errore da stampare (ai punti 2. e 4.) sono i seguenti:

  • Se il valore immesso è troppo basso: "Valore troppo piccolo <valore>"
  • Se il valore immesso è troppo alto: "Valore troppo grande <valore>"
  • Se il valore non è un numero: "Inserire solo numeri interi"

Esempio di output:

Inserire coordinata riga [0;4]: 2
Inserire coordinata colonna [0;4]: 2
 01234
0     
1     
2  X  
3     
4             

Oppure:

Inserire coordinata riga [0;4]: -1
Valore troppo piccolo -1
Inserire coordinata riga [0;4]: 0
Inserire coordinata colonna [0;4]: 100
Valore troppo grande 100
Inserire coordinata colonna [0;4]: zero
Inserire solo numeri interi
Inserire coordinata colonna [0;4]: 0
 01234
0X    
1     
2     
3     
4 

Un costruttore di automobili desidera un applicativo utile per gestire la configurazione dei veicoli che produce.

Parte 1: Car

Devi innanzitutto creare una classe rappresenti un modello astratto di un automobile e tutti i suoi optional.

Le caratteristiche di un’auto sono le seguenti:

  • tipo di carrozzeria: può essere una decappottabile o un pick-up
  • dimensione delle ruote: può avere ruote piccole o grandi
  • gancio di traino: può avere un gancio di traino opzionale

Devi quindi creare la classe Car con gli attributi privati descritti in seguito e i relativi metodi getter e setter:

  • type: intero che definisce il tipo di carrozzeria (1: CABRIO, 2: PICKUP)
  • wheelsSize: intero che definisce la dimensione delle ruote (1: SMALL_WHEELS, 2: BIG_WHEELS)
  • hook: booleano che definisce la presenza del gancio opzionale (true: con gancio, false: senza gancio)

La classe deve esportare due costruttori:

  • public Car(): instanzia una macchina con i valori di default (decappottabile, ruote piccole e senza gancio)
  • public Car(int type, int wheelsSize, boolean hook): istanzia una macchina personalizzata

Inoltre deve esportare il metodo public void draw() che stampa la rappresentazione grafica della macchina nei modo seguenti:

                 ruote		 ruote		 ruote		 ruote
                 piccole	 grandi		 piccole	 grandi
						 + traino	 + traino
                    __   	    __   	    __   	    __   
                 ___|_\__	 ___|_\__	 ___|_\__	 ___|_\__
Pickup           -o----o-	 -O----O-	J-o----o-	J-O----O-

                 ____\___	 ____\___	 ____\___	 ____\___
Cabrio           -o----o-	 -O----O-	J-o----o-	J-O----O-

Parte 2: CarConfigurator

Ora scrivi il programma interattivo CarConfigurator che permette all’utente di configurare un autoveicolo da acquistare.

Il programma funziona nel modo seguente:

  1. Chiede di scegliere il tipo di carrozzeria (1: Pickup, 2: Cabriolet). Se l’utente introduce un valore non appropriato, stampa il messaggio "Scelta non valida <valore>" e ricomincia dal punto 1.
  2. Chiede di scegliere il tipo di ruote (1: piccole, 2: grandi). Se l’utente introduce un valore non appropriato, stampa il messaggio "Scelta non valida <valore>" e ricomincia dal punto 2.
  3. Chiede se si desidera il gancio di traino opzionale (1: si, 2: no). Se l’utente introduce un valore non appropriato, stampa il messaggio "Scelta non valida <valore>" e ricomincia dal punto 3.
  4. Stampa il disegno del veicolo configurato e termina.

Esempio:

$ java CarConfigurator
Car configurator
Carrozzeria (1.Pickup, 2.Cabrio):  moto
Scelta non valida moto
Carrozzeria (1.Pickup, 2.Cabrio):  2
Ruote  (1.Piccole, 2.Grandi):  rotonde
Scelta non valida rotonde
Ruote  (1.Piccole, 2.Grandi):  3
Scelta non valida 3
Ruote  (1.Piccole, 2.Grandi):  2
Gancio di traino (1.Si, 2.No):  1
         
 ____\___
J-O----O-
$

Scrivi il gioco interattivo MorraCinese. Il programma chiede di inserire il punteggio massimo, poi il gioco comincia. Vince chi raggiunge prima il punteggio massimo.

  1. Il programma chiede di inserire il punteggio massimo. Sono ammessi solo valori nel range [1;10].
  2. Se l’utente inserisce un valore non valido, ricomincia dal punto 1.
  3. Chiede all’utente di inserire la sua giocata (1 per carta, 2 per sasso, 3 per forbice).
  4. Se l’utente inserisce un valore non valido, ricomincia dal punto 3.
  5. Il programma estrae a sorte la propria giocata (1 per carta, 2 per sasso, 3 per forbice).
  6. Il programma visualizza le due giocate e, se ve ne è uno, il vincitore della mano corrente (player o CPU) e il punteggio attuale dei due giocatori.
  7. Se nessuno ha raggiunto il punteggio massimo il programma prosegue dal punto 3.
  8. Se un giocatore ha raggiunto il punteggio massimo il programma stampa il nome del vincitore (player o CPU) e prosegue dal punto 9.
  9. Il programma chiede se si vuole giocare di nuovo (0 per continuare, 1 per terminare).
  10. Se l’utente inserisce un valore non valido, ricomincia dal punto 9.
  11. Se l’utente inserisce 0 il programma ricomincia dal punto 1.
  12. Se l’utente inserisce 1 il programma termina.

Esempio:

Oppure, se la vostra console supporta Unicode:

Scrivi il programma interattivo Butterflyzer che permetta di codificare e decodificare messaggi in alfabeto farfallino.

  1. Inizialmente il programma propone di scegliere la funzione ('c' per codificare, 'd' per decodificare, 'q' per terminare),
  2. Se la scelta digitata non è valida ricomincia dal punto 1.
  3. Se la scelta è 'q' il programma termina.
  4. Se la scelta è 'c', chiede all’utente di digitare una stringa di testo da codificare e poi stampa il messaggio codificato.
  5. Se la scelta è 'd', chiede all’utente di digitare il messagio da decodificare e poi stampa il testo decodificato.
  6. Il programma ricomincia dal punto 1.

Esempio:

$ java Butterflyzer
Codificatore/decodificatore alfabeto Farfallino
Premi 'c' per codificare un messaggio
Premi 'd' per decodificare un messaggio
Premi 'q' per uscire
Scelta: x
Scelta non valida 'x'

Codificatore/decodificatore alfabeto Farfallino
Premi 'c' per codificare un messaggio
Premi 'd' per decodificare un messaggio
Premi 'q' per uscire
Scelta: c
Inserire testo da codificare: Tanto va la gatta al lardo
Messaggio codificato: Tafantofo vafa lafa gafattafa afal lafardofo

Codificatore/decodificatore alfabeto Farfallino
Premi 'c' per codificare un messaggio
Premi 'd' per decodificare un messaggio
Premi 'q' per uscire
Scelta: d
Messaggio da decodificare: Lefe frafagofolefe sofonofo mafatufurefe
Testo decodificato: Le fragole sono mature

Codificatore/decodificatore alfabeto Farfallino
Premi 'c' per codificare un messaggio
Premi 'd' per decodificare un messaggio
Premi 'q' per uscire
Scelta: q
$