Write an implementation (class Lfraction
) for an abstract data
type "Fraction", where the fraction consists of two long integers:
numerator and denominator. Always convert
fractions to a form, where denominator is strictly positive and
the fraction is reduced. By default all operations (described on webpage
http://www.itcollege.ee/~jpoial/algoritmid/Lfraction/index.html ) must be exact
and use integer arithmetics only (e.g. do not use floating point arithmetics
to compare two fractions).
Remark 1. In addition to public methods listed you may need
a method to find the greatest common divisor of two integers to reduce
the fractions.
Remark 2. Operations must not modify operands, a new fraction must be
created for the result.
Remark 3. Methods toString
and valueOf
must
be dual: method valueOf
must be able to interpret all
strings generated by the method toString
.
Remark 4. If an error occurs (division by zero, illegal string, etc.)
the program must throw an exception of class RuntimeException
(or any appropriate subclass of RuntimeException
).
Remark 5. Sign of a fraction is in numerator and integer numbers
expressed as fractions must have denominator 1, e.g.
3 is 3/1 , -5 is (-5)/1 and 0 is 0/1 .
Realiseerida abstraktne andmetüüp "murd pikkade täisarvude paarina".
Murdu esindab objekt klassist Lfraction
, mis sisaldab murru
lugejat (ingl.k. numerator) ja murru nimetajat (ingl.k. denominator)
pikkade täisarvudena (teha nii, et nimetaja oleks alati rangelt positiivne
ning murd taandatud).
Realiseerida kõik operatsioonid, mis on kirjeldatud programmitoorikus (ja
veebilehel http://www.itcollege.ee/~jpoial/algoritmid/Lfraction/index.html ).
Murdude võrdlus peab olema täpne, s.t. toetuma arvutustele täisarvudega,
mitte reaalarvuliste lähiväärtustega.
Märkus 1. Lisaks loetletud avalikele meetoditele on teil tõenäoliselt
tarvis murru taandamise meetodit ja võib-olla ka kahe täisarvu
suurima ühisteguri leidmise meetodit.
Märkus 2. Reeglina ei tohi meetodid muuta objekti, millele neid rakendatakse
(näit. liitmisel ei tohi muuta liidetavaid, tuleb summa jaoks luua uus murd).
Märkus 3. Sõne teisendamisel murruks peab valueOf
-meetod
olema kooskõlas toString
-meetodiga (peab oskama tõlgendada
niisugust sõnet, mida toString
tagastab).
Märkus 4. Veasituatsioonid (sõne, mida ei saa teisendada; nulliga jagamine
jt.) peavad tekitama erindi klassist RuntimeException
või mõnest
selle klassi sobivast alamklassist.
Märkus 5. Murru märk käib lugeja juurde ning täisarvude nimetaja on 1 (ka
arvu 0 puhul).