Upload
ciriaco-morandi
View
217
Download
0
Embed Size (px)
Citation preview
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
Raffaele Nicolussi ([email protected])Stefano Paolozzi ([email protected])
ProgrammazioneIngegneria TLC
Esercitazione 210/03/2009
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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); } }
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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); } }
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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); }
}
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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 + "'"); }}
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
Esercizio 2
Scrivere un programma Java che legga in input un numero intero e restituisca il quadrato di tale numero.
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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); }}
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
Istruzioni condizionali
if (condizione) { istruzione1; istruzione2; istruzione3; ...}[else { istruzioneA; istruzioneB; ...}]
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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!"); } }}
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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.
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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); }}
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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); }}
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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; } }
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
Esercizio 4 – Soluzione (dado.java)
public class dado { public static int lancia() { return (int)(Math.random()*6)+1; } }
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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);
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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); }}
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
Istruzioni condizionali annidate
if (condizione) { istruzione1; istruzione2; istruzione3; ...}else if{ istruzioneA; istruzioneB; ...}else{ istruzioneAA; istruzioneBB; ...}
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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)
02 cbxaxa
acbbx
2
42
2,1
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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"); } }}
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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"); } }}
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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.
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
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.
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE
Informazioni
Ricevimento: da concordare con lo studente a molte domande possiamo rispondere per
email usate anche la mailing-list del corso
E-mail: Raffaele Nicolussi [email protected] Stefano Paolozzi [email protected]
Web: http://tibur.dis.uniroma1.it/%7Esetlc/AA_07_08/
Mailing-list: istruzioni sul sito (in allestimento)