-
Wykorzystując opracowaną strukturę spróbuj rozwiązać elementarnie proste problemy na SPOJ:
-
W ramach nowego projektu, opracuj strukturę
BigRational
(wariant immutable). Twój kod będzie wymagał tylko kilku drobnych modyfikacji. Dowiesz się w praktyce, jaka jest różnica między strukturą a klasą. -
W ramach nowego projektu opracuj strukturę
BigRational
(wariant immutable), ale bazującą na wewnętrznej reprezentacji ułamka w formie niedokładnej - jako wartość typudecimal
.class Ulamek { private readonly decimal value; public long Licznik => throw new NotImplementedException(); // get public long Mianownik => throw new NotImplementedException(); // get // konstruktory public Ulamek( long licznik, long mianownik ) { ... } // ... }
W zasadzie zadanie to polega na opakowaniu (ang. wrapping, wrapper class) typu
decimal
tak, aby przez odbiorcę widziany był jako typ ułamka (pary liczb: licznik i mianownik, o określonych właściwościach i operacjach). Oczywiście trzeba bezie wykonać pracę związaną z przeciążeniami operatorów i - w szczególności - poprawnym zdefiniowaniemEquals
. Ponieważ reprezentacja jest niedokładna, prawdopodobnie wprowadzisz parametr określający dokładność reprezentacji (i dokładność obliczeń). Np. pytając się, czyu == v
oczekujesz odpowiedzi, że są równe z dokładnością do np. 10 miejsc po przecinku. Zastosowaniedecimal
wobecdouble
zdecydowanie poprawia dokładność reprezentacji i obliczeń. -
Wyzwanie: Wiedząc, co to są ułamki, jak się je reprezentuje i jak wykonuje się na nich obliczenia, spróbuj rozwiązać klasyczne problemy na SPOJ: