Skip to content

Latest commit

 

History

History
33 lines (25 loc) · 2.19 KB

step08.md

File metadata and controls

33 lines (25 loc) · 2.19 KB

Krok 8. Propozycja zadań i problemów do rozwiązania

  1. Wykorzystując opracowaną strukturę spróbuj rozwiązać elementarnie proste problemy na SPOJ:

  2. 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ą.

  3. W ramach nowego projektu opracuj strukturę BigRational (wariant immutable), ale bazującą na wewnętrznej reprezentacji ułamka w formie niedokładnej - jako wartość typu decimal.

    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 zdefiniowaniem Equals. Ponieważ reprezentacja jest niedokładna, prawdopodobnie wprowadzisz parametr określający dokładność reprezentacji (i dokładność obliczeń). Np. pytając się, czy u == v oczekujesz odpowiedzi, że są równe z dokładnością do np. 10 miejsc po przecinku. Zastosowanie decimal wobec double zdecydowanie poprawia dokładność reprezentacji i obliczeń.

  4. 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:

Początek | Krok poprzedni |