università degli studi la sapienza – corso di programmazione raffaele nicolussi...

26
Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE Raffaele Nicolussi ([email protected]) Stefano Paolozzi ([email protected]) Programmazione Ingegneria TLC Esercitazione 2 10/03/2009

Upload: ciriaco-morandi

Post on 01-May-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE

Raffaele Nicolussi ([email protected])Stefano Paolozzi ([email protected])

ProgrammazioneIngegneria TLC

Esercitazione 210/03/2009

Page 2: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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);     } }

Page 3: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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

Page 4: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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);     }    }

Page 5: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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);     }    

}

Page 6: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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 + "'");      }}

Page 7: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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.

Page 8: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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);      }}

Page 9: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE

Istruzioni condizionali

if (condizione) { istruzione1; istruzione2; istruzione3; ...}[else { istruzioneA; istruzioneB; ...}]

Page 10: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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

Page 11: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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!");    }  }}

Page 12: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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.

Page 13: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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);  }}

Page 14: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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);  }}

Page 15: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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;    }  }

Page 16: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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;        }               }

Page 17: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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);

Page 18: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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);        }}

Page 19: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

Università degli Studi “La Sapienza” – Corso di PROGRAMMAZIONE

Istruzioni condizionali annidate

if (condizione) { istruzione1; istruzione2; istruzione3; ...}else if{ istruzioneA; istruzioneB; ...}else{ istruzioneAA; istruzioneBB; ...}

Page 20: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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

Page 21: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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");    }  }}

Page 22: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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");    }  }}

Page 23: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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

Page 24: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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.

Page 25: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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.

Page 26: Università degli Studi La Sapienza – Corso di PROGRAMMAZIONE Raffaele Nicolussi (rnicolussi@fub.it) Stefano Paolozzi (stefano.paolozzi@gmail.com) Programmazione

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)