Programmazione Ingegneria TLC Esercitazione 2 10/03/2009
Input/Output su finestra import javax.swing.JOptionPane; public class FinestraOutput { public static void main(String[] args) { String nome = JOptionPane.showInputDialog("Come ti chiami?"); nome = nome.toUpperCase(); String stringaVisualizzata = "Ciao " + nome + ", come stai?"; JOptionPane.showMessageDialog(null,stringaVisualizzata); System.exit(0); } }
Esercizio 1 Scrivere un programma Java che legga in input da tastiera una stringa e restituisca in output su video la stringa ottenuta concatenando la stringa ottenuta dalla stringa inserita trasformando tutti i caratteri della stringa in maiuscolo e la stringa ottenuta dalla stringa inserita trasformando tutti i caratteri in minuscolo. Ad esempio, se viene inserita da tastiera la stringa "Ciao", il risultato dovrà essere "CIAOciao". Effettuare l'input da tastiera usando la finestra di dialogo della classe JOptionPane e e l'output usando il metodo println
Esercizio 1 - Soluzione import javax.swing.JOptionPane; public class Ese1 { public static void main(String[] args) { String leggi = JOptionPane.showInputDialog ("inserisci una stringa:"); String maiuscola = leggi.toUpperCase(); String minuscola = leggi.toLowerCase(); System.out.println("La stringa soluzione e' " + maiuscola + minuscola ); System.exit(0); } }
Esercizio 1 – Soluzione (con meno variabili…) import javax.swing.JOptionPane; public class Ese1 { public static void main(String[] args) { String leggi = JOptionPane.showInputDialog ("inserisci una stringa:"); System.out.println("La stringa soluzione e' " + leggi.toUpperCase() + leggi.toLowerCase()); System.exit(0); } }
Input/Output da tastiera – La classe Scanner import java.util.Scanner; public class ClassScanner{ public static void main(String[] args) { System.out.print("Inserisci un numero: "); Scanner s = new Scanner(System.in); int num = s.nextInt(); s = new Scanner(System.in); System.out.print("Inserisci una stringa: "); String str = s.nextLine(); s.close(); System.out.println("Hai inserito il numero " + num + " e la stringa '" + str + "'"); } }
Esercizio 2 Scrivere un programma Java che legga in input un numero intero e restituisca il quadrato di tale numero.
Esercizio 2 – Soluzione import java.util.Scanner; public class Ese2{ public static void main(String[] args) { System.out.print("Inserisci un numero: "); Scanner s = new Scanner(System.in); int num = s.nextInt(); s.close(); System.out.println("la radice quadrata e' " + num*num); } }
Istruzioni condizionali if (condizione) { istruzione1; istruzione2; istruzione3; ... } [else { istruzioneA; istruzioneB; }]
Condizioni = assegnazione == uguaglianza != differenza > maggiore < minore && (AND logico) || (OR logico) E' possibile concatenare tra loro diversi Operatori per avere significati differenti: >= maggiore e uguale <= minore e uguale += assegna e aggiunge un valore -= assegna e sottrae un valore
Esempio istruzione if public class Negativo { public static void main(String[] args) { int a=-4; if( a<0 ) { System.out.println("Attenzione! Il valore di a e' negativo!"); } } }
Esercizio 3 Si vuole fare il calcolo dell'inverso di una variabile reale a. L'inverso 1/a è definito solo se a è diverso da zero. Per questa ragione, si vuole che il programma stampi un messaggio di errore se a è pari a zero, e calcoli l'inverso se la variabile è diversa da zero.
Esercizio 3 - Soluzione import javax.swing.JOptionPane; public class Inverso { public static void main(String[] args) { double a = Double.parseDouble( JOptionPane.showInputDialog("Inserire il numero: ")); if( a==0 ) { System.out.println("La variabile vale zero."); else { System.out.println("L'inverso vale " + 1/a); } System.exit(0); } }
Esercizio 3 – Soluzione 2 import java.util.Scanner; public class Inverso { public static void main(String[] args) { System.out.print("Inserisci un numero: "); Scanner s = new Scanner(System.in); Double a = s.nextDouble(); s.close(); if( a==0 ) System.out.println("La variabile vale zero."); else System.out.println("L'inverso vale " + 1/a); } }
Esercizio 4 Scrivere una classe che simuli il lancio simultaneo di tre dadi con sei facce. Se il punteggio complessivo ottenuto è superiore a 12 il “giocatore” vince, altrimenti perde. Stampare a video una stringa che identifichi la vittoria o la sconfitta del giocatore. Si supponga di avere a disposizione la seguente classe dado public class dado { public static int lancia() { return (int)(Math.random()*6)+1; } }
Esercizio 4 – Soluzione (dado.java) public class dado { public static int lancia() { return (int)(Math.random()*6)+1; } }
Esercizio 4 – Soluzione (LancioDadi.java) import javax.swing.JOptionPane; public class LancioDadi { public static void main(String[] args) { gioco(); System.exit(0); } public static void gioco() { // Il metodo restituisce 1 se vince il giocatore, 0 se vince il computer int primoNumero=dado.lancia(); System.out.println("Primo Numero: " + primoNumero); int secondoNumero=dado.lancia(); System.out.println("Secondo Numero: " + secondoNumero);
Esercizio 4 - Soluzione int terzoNumero=dado.lancia(); System.out.println("Terzo Numero: " + terzoNumero); int totale=primoNumero+secondoNumero+terzoNumero; System.out.println("Totale: " + totale); String esito; if (totale<=12) esito="perso!!!"; else esito="vinto!!!"; JOptionPane.showMessageDialog(null, "Il giocatore ha " + esito); } }
Istruzioni condizionali annidate if (condizione) { istruzione1; istruzione2; istruzione3; ... } else if { istruzioneA; istruzioneB; else istruzioneAA; istruzioneBB;
Esercizio 5 Si scriva una classe per risolvere equazioni di secondo grado con il calcolo del discriminante, utilizzando istruzioni condizionali Suggerimento: si considerino 3 casi: soluzioni reali e distinte, soluzioni reali e coincidenti, soluzioni complesse, in base al valore del discriminante (>0, =0, <0)
Esercizio 5 - Soluzione public class SecondoGrado { public static void main (String args[]) { double a=2, b=5, c=3; double d; double s1, s2; d=b*b-4*a*c; if( d==0 ) { s1=(-b - Math.sqrt( d ))/(2*a); s2=s1; System.out.println("Soluzioni coincidenti: " + s1); } else if( d>0 ) { s1=(-b - Math.sqrt( d ))/(2*a); s2=(-b + Math.sqrt( d ))/(2*a); System.out.println("Soluzioni reali: " + s1 + " " + s2); } else { System.out.println("Soluzioni complesse"); } } }
Esercizio 5 - Soluzione public class SecondoGrado { public static void main (String args[]) { double a=2, b=5, c=3; double d; double s1, s2; d=b*b-4*a*c; if( d==0 ) { s1=(-b - Math.sqrt( d ))/(2*a); s2=s1; System.out.println("Soluzioni coincidenti: " + s1); } else if( d>0 ) { s1=(-b - Math.sqrt( d ))/(2*a); s2=(-b + Math.sqrt( d ))/(2*a); System.out.println("Soluzioni reali: " + s1 + " " + s2); } else { System.out.println("Soluzioni complesse"); } } }
Calcolo del Massimo Comun Divisore (MCD) Vogliamo realizzare un metodo pubblico statico che, presi come parametri due interi positivi x ed y, calcoli e restituisca il massimo comun divisore mcd(x,y). Es.: mcd(12, 8) = 4 mcd(12, 6) = 6 mcd(12, 7) = 1
MCD: sfruttando direttamente la definizione Cerchiamo il massimo tra i divisori comuni di x ed y Osservazione: 1 <= mcd(x,y) <= min(x,y) Quindi, si provano i numeri compresi tra 1 e min(x,y). Conviene iniziare da min(x,y) e scendere verso 1. Appena si è trovato un divisore comune di x ed y, lo si restituisce.
MCD usando il metodo di Euclide Il metodo di Euclide permette di ridursi più velocemente a numeri più piccoli, sfruttando la seguente proprietà: mcd(x,y) = x (oppure y), se x = y mcd(x,y) = mcd(x-y, y), se x > y mcd(x,y) = mcd(x, y-x), se x < y Questa proprietà si dimostra facilmente, mostrando che i divisori comuni di x e y sono anche divisori di x-y (nel caso in cui x>y). Es. mcd(12,8) = mcd(12-8,8) = mcd(4, 8-4) = 4 Per ottenere un algoritmo si applica ripetutamente il procedimento fino a che non si ottiene che x=y.
Informazioni Ricevimento: E-mail: Web: Mailing-list: da concordare con lo studente a molte domande possiamo rispondere per email usate anche la mailing-list del corso E-mail: Raffaele Nicolussi rnicolussi@fub.it Stefano Paolozzi stefano.paolozzi@gmail.com Web: http://tibur.dis.uniroma1.it/%7Esetlc/AA_07_08/ Mailing-list: istruzioni sul sito (in allestimento)