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.