Creare una classe Espressione

di il
3 risposte

Creare una classe Espressione

Salve a tutti, devo creare una classe ed ho dei problemi nell'impostarla. Il testo è questo:

Si parla di espressione frazionaria semplice quando di parla di una espressione basata sugli operatori +,-,*,/ tra frazioni senza la presenza delle parentesi.
Una espressione viene rappresentata dalla classe Java Espressione e si trova nel package di default e contiene, oltre ai campi privati necessari a memorizzare le informazioni richieste ed i seguenti metodi pubblici:
• un costruttore ad un argomento di tipo Frazione che rappresenta la frazione di partenza associata all’espressione
• un metodo di istanza void aggiungi(Operatore o, Frazione f) che aggiunge una nuova operazione all’espressione, specificando l’operazione da fare e la frazione corrispondente.
o Per la memorizzazione delle frazioni e delle operazioni si consiglia l’uso di due array.
• il metodo di istanza Frazione calcola() che calcola il risultato dell’espressione svolgendo i calcoli secondo le priorità degli operatori +,-,*,/. Il metodo non deve fare side effect sull’oggetto
Espressione.

3 Risposte

  • Re: Creare una classe Espressione

    sammy6 ha scritto:


    Si parla di espressione frazionaria semplice quando di parla di una espressione basata sugli operatori +,-,*,/ tra frazioni senza la presenza delle parentesi.
    Il fatto di non dover gestire raggruppamenti "espliciti" chiaramente rende più semplice la logica ma .... devi gestire la precedenza tra gli operatori? (* e / più prioritari di + e -)

    Detto con un esempio: 1/2 + 4/5 * 3/4

    Devi considerare le precedenze, ovvero come se fosse: 0,5 + (0,8 * 0,75) ?
    Oppure senza precedenze, come si farebbe con una normale calcolatrice: 0,5 + 0,8 = 1,3 poi 1,3 * 0,75 ?

    sammy6 ha scritto:


    • un costruttore ad un argomento di tipo Frazione che rappresenta la frazione di partenza associata all’espressione
    Ok

    sammy6 ha scritto:


    • un metodo di istanza void aggiungi(Operatore o, Frazione f) che aggiunge una nuova operazione all’espressione, specificando l’operazione da fare e la frazione corrispondente.
    Ok ma cosa è Operatore? Una enum? O una normale classe?

    sammy6 ha scritto:


    Per la memorizzazione delle frazioni e delle operazioni si consiglia l’uso di due array.
    Due array possono anche andare bene. Si potrebbe fare con uno solo ma bisognerebbe modellare l'insieme di frazione+operatore con una apposita classe (che potrebbe essere una nested class privata dentro Espressione).

    Tieni presente che gli array non si espandono, bisogna istanziare un nuovo array più grande e ricopiare gli elementi dal vecchio al nuovo e "buttare" via l'array vecchio.
    Quindi:
    - vuoi istanziare un nuovo array di dimensione +1 ad ogni aggiunta.
    oppure
    - vuoi gestire un array a "capacità maggiore" come fanno ad esempio le collezioni ArrayList/Vector?

    sammy6 ha scritto:


    • il metodo di istanza Frazione calcola() che calcola il risultato dell’espressione svolgendo i calcoli secondo le priorità degli operatori +,-,*,/. Il metodo non deve fare side effect sull’oggetto
    Espressione.
    Ok, qui è solo più logica matematica.
  • Re: Creare una classe Espressione

    Per il fatto delle precedenze si, devo rispettarle. poi ti incollo qui sotto l'altra parte dell'esercizio che io ho svolto, e che precedeva la classe espressione.

    2.1 Frazione
    Ogni frazione (determinata) è rappresentata da una classe Java che si trova nel package frazioni di nome Frazione. La classe deve essere progettata per essere immutabile e contiene i campi privati necessari a memorizzare i dati indicati di seguito ed implementare i seguenti metodi pubblici:
    • Un costruttore a due argomenti che, presi rispettivamente numeratore e denominatore (interi) memorizza tali informazioni su opportune variabili di istanza private.
    • I metodi di istanza accessori int getNumeratore() e int getDenominatore() che restituisco rispettivamente il numeratore e il denominatore della frazione in valore assoluto
    • Il metodo di istanza int segno() che ritorna 1 se la frazione è positiva o nulla e -1 se negativa
    • il metodo di istanza Frazione riduciAiMinimiTermini() che ritorna una nuova frazione ottenuta da quella corrente che risulta essere ai minimi termini cioè numeratore e denominatore sono primi fra
    loro.
    • il metodo boolean equals(Object o) che ritorna true se le frazioni sono identiche.
    • il metodo boolean equivalente(Frazione f) che ritorna true se la frazione this e la frazione f
    passata per parametro sono equivalenti cioè rappresentano lo stesso valore.
    • il metodo double valore() che ritorna il valore decimale associato alla frazione
    • il metodo String toString() che ritorna una stringa nella forma “<SEGNO><NUMERATORE-
    ASSOLUTO>/<DENOMINATORE-ASSOLUTO>” in cui numeratore e denominatore sono in valore assoluto e il segno (+ o -) e’ posto davanti la frazione. Per il valore 0 indicare il segno ‘+’

    2.2 Operatore
    Alle frazioni è possibile applicare le classiche operazioni aritmetiche (somma, prodotto, sottrazione, divisione). Tali operazioni sono rappresentate in Java attraverso la classe Operatore immutabile che si trova nel package operatori. La classe contiene i campi privati necessari a memorizzare le informazioni richieste ed i seguenti metodi pubblici:
    • un costruttore ad un argomento di tipo carattere che definisce l’operazione (i valori valido sono ‘+’, ‘-‘, ‘*’, ‘/’) e memorizza il valore in opportuno campo privato.
    • il metodo di istanza char getOperatore () che restituisce il simbolo dell’operazione svolta
    • il metodo di istanza Frazione calcola(Frazione , Frazione f2) che restituisce il risultato
    dell’operazione applicata alle frazioni specificate come parametro.
  • Re: Creare una classe Espressione

    E vorrei usare le array list..
Devi accedere o registrarti per scrivere nel forum
3 risposte