Lezione in Aula del 6 Novembre 2001 & lezioni in laboratorio nella stessa settimana e nella settimana successiva

Una classe per i numeri razionali


COSA E' STATO FATTO A LEZIONE

Questo documento contiene un RIASSUNTO degli argomenti presentati a lezione. Per eventuali chiarimenti rivolgersi ai docenti.

Specifica della classe Rational

La classe Rational ha un solo costruttore:
/*
   AI: n rappresenta un numero intero in notazione decimale
         con eventuale segno negativo
       d rappresenta un numero naturale maggiore di 0 in notazione decimale
   AF: crea il numero razionale con n al numeratore e d al denominatore
*/
public Rational (String n, String d)

I metodi pubblici sono i seguenti:

/*
   AF: restituisce una stringa che rappresenta il numeratore
       (numero intero in notazione decimale con eventuale segno negativo)
*/
public String numerator()

/*
   AF: restituisce una stringa che rappresenta il denominatore
       (numero naturale maggiore di 0 in notazione decimale)
*/
public String denominator()

/*
   AI: r != null
   AF: restituisce la somma del ricevente e di r
*/
public Rational add(Rational r)

/*
   AI: r != null
   AF: restituisce la differenza tra il ricevente ed r
*/
public Rational subtract(Rational r)

/*
   AI: r != null
   AF: restituisce il prodotto del ricevente e di r
*/
public Rational multiply(Rational r)

/*
AI: r != null AND r non e' 0
AF: restituisce il quoziente tra il ricevente ed r
*/
public Rational divide(Rational r)

COSA SI DEVE LEGGERE (sul libro di testo)

Questa settimana non vengono assegnate "letture" per la parte di laboratorio. LEGGETE PERO' LE PARTI DI LIBRO INDICATE ALLA PAGINA DEL Programma delle Lezioni tenute dal prof. Martelli .


ESERCIZI DA SVOLGERE (assegnati al termine della Lezione in Aula)

Per eventuali chiarimenti rivolgersi ai docenti.

  1. Creare (nella directory s7) due directory: v1 e v2.
  2. Copiare nella directory v2: i file AConsoleReader.class, TestRational.class, Rational.java.
  3. Modificare (se necessario) le due implementazioni della classe Rational in modo tale che: sia il costruttore, che i metodi corrispondenti alle 4 operazioni restituiscano oggetti Rational nella cui rappresentazione interna numeratore e denominatore sono normalizzati. Ovvero tali che: MCD(numeratore,denominatore) = 1.

    A tal fine utilizzare il seguente algoritmo per calcolo del MCD (tale algoritmo si basa sulle seguenti proprieta' del MCD di due numeri interi positivi:

    ):
    MCD(x,y) = 
    
    {
    // x,y SONO NUMERI INTERI MAGGIORI DI 0
    
    a=x;
    b=y;
    
    // MCD(a,b)=MCD(x,y)
    while (a DIVERSO DA b) 
       if (a>b)
          a=a-b;
       else
          b=b-a;
    
    // a=b=MCD(x,y)
    return a;     
    }
    
    
    ATTENZIONE: in quale classe ritenete sia opportuno codificare l'algoritmo per il calcolo del MCD (notate che servono due codifiche: una per int e una per BigNumber)? Pensate alla soluzione che vi sembra piu' opportuna e, prima di procedere, consultate il docente.
  4. Modificare la classe Rational (entrambe le implementazioni) aggiungendo i metodi:
    /*
       AF: restituisce una stringa che rappresenta il numero razionale
    */
    public String toString()
    
    /*
       AF: restituisce un double che rappresenta il numero razionale
    */
    public doubleValue()
    
    e modificare la classe TestRational (modificare il file TestRational.java in v1, compilare e poi copiare il .class in v2) in modo che usi i due nuovi metodi.
  5. Compilare ed eseguire il programma (illustato a lezione dal Prof. Martelli) contento nelle classi BankAccount.java, AccountController.java, Prova.java. Poi: