Esercizio 1

Si scriva un programma che presa in input una espressione matematica da linea di comando ne calcoli il risultato e lo visualizzi.
Tale espressione dovrà seguire la grammatica:

espressione = numero | numero operatore espressione| (espressione)
operatore = + | *

dove numero è un numero intero decimale positivo.

Esempi:

10+20
15+(12+6+4*(5+8))


Il risultato deve essere calcolato assumendo che tutti gli operatori abbiano la stessa precedenza e che, come di norma, le parentesi eventualmente presenti siano usate per modificare l'associatività.
L'algoritmo implementato per il calcolo dovrà essere ricorsivo (ogni espressione fra parentesi dovrà essere valutata attraverso una chiamata ricorsiva).
Il programma può assumere che l'espressione fornita su linea di comando sia consistente con la grammatica proposta.

Esercizio 2

Si scriva un programma che permetta di esercitarsi a battaglia navale.
Tale programma dovrà leggere il campo di gioco da un file di testo formato da dieci righe di dieci caratteri; tale caratteri sono '.' per reppresentare il mare e i caratteri '2', '3', '4', e '5' per rappresentare le navi di, rispettivamente, due, tre, quattro e cinque unità.
Nel campo di gioco sono presenti tre navi da due e due e da tre unità, due da quattro unità, una da cinque unità; le navi non possono essere in contatto fra loro.

Esempio:

.22......4
.......2.4
333....2.4
.........4
3.........
3.4444....
3........2
.........2
.55555....
.......333

Una volta letta la rappresentazione del campo da gioco dal file il programma richiederà ripetutamente all'utente le coordinate dove colpire e, a seconda dell'esito, visualizzerà 'acqua' o 'colpito', iterando tale operazione sino all'affondamento dell'intera flotta.

Esercizio 3

Scrivere un programma che legga da linea di comando il nome di due file testuali, compari linea per linea tali file e visualizzi infine tutte quelle linee che sono presenti nel primo file ma non siano presenti nel secondo.