Un numero razionale è definito come il quoziente di due numeri interi a e b, chiamati rispettivamente numeratore e denominatore, dove b != 0.
Nota che, matematicamente, il denominatore non può essere zero. Tuttavia, in molte implementazioni dei numeri razionali, troverai che è consentito che il denominatore sia zero, con un comportamento simile a quello dell'infinito positivo o negativo nei numeri in virgola mobile. In quei casi, il denominatore ed il numeratore generalmente non possono comunque essere entrambi zero allo stesso tempo.
Il valore assoluto |r| del numero razionale r = a/b è uguale a |a|/|b|.
La somma di due numeri razionali r₁ = a₁/b₁ e r₂ = a₂/b₂ è r₁ + r₂ = a₁/b₁ + a₂/b₂ = (a₁ * b₂ + a₂ * b₁) / (b₁ * b₂).
La differenza di due numeri razionali r₁ = a₁/b₁ e r₂ = a₂/b₂ è r₁ - r₂ = a₁/b₁ - a₂/b₂ = (a₁ * b₂ - a₂ * b₁) / (b₁ * b₂).
Il prodotto (moltiplicazione) di due numeri razionali r₁ = a₁/b₁ e r₂ = a₂/b₂ è r₁ * r₂ = (a₁ * a₂) / (b₁ * b₂).
Dividere un numero razionale r₁ = a₁/b₁ per un altro r₂ = a₂/b₂ dà r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁) se a₂ non è zero.
L'elevamento a potenza di un numero razionale r = a/b ad una potenza intera non negativa n è r^n = (a^n)/(b^n).
L'elevamento a potenza di un numero razionale r = a/b ad una potenza intera negativa n è r^n = (b^m)/(a^m), dove m = |n|.
L'elevamento a potenza di un numero razionale r = a/b ad un numero reale (in virgola mobile) x è il quoziente (a^x)/(b^x), che è un numero reale.
L'elevamento a potenza di un numero reale x ad un numero razionale r = a/b è x^(a/b) = root(x^a, b), dove root(p, q) è la radice q-esima di p.
Implementa le seguenti operazioni:
L'implementazione dei numeri razionali dovrebbe sempre essere ridotta ai minimi termini.
Per esempio, 4/4 dovrebbe ridursi a 1/1, 30/60 dovrebbe ridursi a 1/2, 12/8 dovrebbe ridursi a 3/2, ecc.
Per ridurre un numero razionale r = a/b, dividi a e b per il massimo comun divisore (gcd) di a e b.
Quindi, per esempio, gcd(12, 8) = 4, per cui r = 12/8 può essere ridotto a (12/4)/(8/4) = 3/2.
La forma ridotta di un numero razionale dovrebbe essere in «forma standard» (il denominatore dovrebbe sempre essere un numero intero positivo).
Se è presente un denominatore con un numero intero negativo, moltiplica sia il numeratore sia il denominatore per -1 per garantire che si raggiunga la forma standard.
Per esempio, 3/-4 dovrebbe essere ridotto a -3/4
Presumi che il linguaggio di programmazione che stai usando non abbia un'implementazione dei numeri razionali.
Le funzioni aritmetiche supportano le normali chiamate di funzione, il dispatch statico (cioè la sintassi di chiamata di metodo) e gli operatori:
| Chiamata di funzione | Chiamata di metodo | Operatore |
|---|---|---|
plus(r1, r2) |
r1.plus(r2) |
r1 + r2 |
minus(r1, r2) |
r1.minus(r2) |
r1 - r2 |
times(r1, r2) |
r1.times(r2) |
r1 * r2 |
div_by(r1, r2) |
r1.div_by(r2) |
r1 / r2 |
Implementa reduce per ridurre un numero razionale ai minimi termini, per esempio da 6 / 8 a 3 / 4.
Iscriviti a Exercism per imparare e padroneggiare Roc con 135 esercizi e il mentoring di persone reali, tutto gratis.