Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/michalte/public_html/blog/system-core/connect.php on line 15 Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/michalte/public_html/blog/system-core/connect.php on line 15 Zabawa w ułamki :) | blog.michalt.pl

michalt.pl | blog

Zabawa w ułamki :)

04.09.2013Autor: MichałKategoria: Dev
Jak zapewne wiecie, rozwijam bibliotekę pozwalającą na pracę z ułamkami zwykłymi w języku C++.
Biblioteka nosi nazwę CFract, ściągnąć można ją z tej strony. W dzisiejszym wpisie chciałbym nieco opowiedzieć o pracy z tą bardzo prostą zarówno w budowie jak i w obsłudze biblioteką.
Definiowanie przykładowego pierwiastka jest trywialne:

fract a(1,4);
...gdzie fract to nazwa klasy, "a" nazwa obiektu (tu można go rozumieć nawet jako zmienną), pierwsza liczba (1) to licznik, druga (4) to mianownik.

Tak zdefiniowane ułamki możemy dodawać, odejmować, mnożyć i dzielić:

fract a(1,4);
fract b(2,4);
fract c(3,4);

fract wynik = (a+b)*c;


Warto pamiętać, że każdy ułamek musi mieć zdefiniowany licznik i mianownik.

Możemy także wykorzystywać elementy danego ułamka w innych działaniach:

int x = 7 * (a.denominator-a.numerator);


Możemy także liczbę całkowitą uczynić ułamkiem zwykłym, np. 2 = 2/1:

fract y = (fract) 2;


...to samo można uczynić z liczbą zmiennoprzecinkową, np. 1,5 = 3/2:

fract z = (fract) 1.5;


Wyświetlenie wyniku działania to nieco bardziej pracochłonne zadanie, ale nadal bardzo proste:

fract y = a+b;
std::cout << a.numerator << "/" << a.denominator << "\n";


Przykładowy kod:

#include "cfract.hpp"

int main()
{
fract a(1,4);
fract b(2,4);
fract c(3,4);
fract wynik = (a+b)*c;

std::cout << wynik.numerator << "/" << wynik.denominator << "\n";

wynik = (fract) 2;


std::cout << wynik.numerator << "/" << wynik.denominator << "\n";

wynik = (fract) 1.5;

std::cout << wynik.numerator << "/" << wynik.denominator << "\n";
}


Istnieje także możliwość wykonywania działań z ułamkami na liczbach całkowytych ale tylko jednostronnie!

Przykład:

fract a(1,2);
a = a+2; //działanie a = 2+a spowoduje błąd


Język C++ jest językiem typowanym i warto mieć porządek i jasną sytuację w typach danych. Wykonywanie działań na typach mieszanych nie jest zalecaną praktyką.
Warto pamiętać o tym, że biblioteka nadal jest rozwijana i mogą pojawić się w niej kolejne nowości. Obecnie z jej pomocą można wykonywać proste działania na ułamkach typu: dodawanie, odejmowanie, mnożenie i dzielenie oraz działania programistyczne typu: rzutowanie z liczby zmiennoprzecinkowej do ułamka i rzutowanie z liczby całkowitej do ułamka.