C++ Dzielenie ułamków zwykłych.
Ostatnio zmodyfikowano 2013-06-13 19:56
Cariel Temat założony przez niniejszego użytkownika |
C++ Dzielenie ułamków zwykłych. » 2013-06-13 17:43:58 Witajcie. Chciałam prosić was o pomoc, bo sama już nie wiem co zrobić. Chodzi o wynik dzielenie który wychodzi zły. Pewnie jest to jakiś banalny powód, ale ja niestety nie jestem zbytnio zaprzyjaźniona z programowaniem i nie mam pojęcia co właściwie jest źle. #include <iostream> #include <math.h> #include <stdio.h> #include <conio.h>
using namespace std;
class Ulamek { private: int licz, mian; public: Ulamek() { licz = 1; mian = 1; } Ulamek( int x, int y ) : licz( x ) , mian( y ) { } void wypisz(); void skroc(); void operator +( Ulamek a ); void operator -( Ulamek a ); void operator *( Ulamek a ); void operator /( Ulamek a ); };
void Ulamek::skroc() { int a = abs( licz ); int b = abs( mian ); int c; while( b != 0 ) { c = a % b; a = b; b = c; } licz = licz / a; mian = mian / a; }
void Ulamek::wypisz() { skroc(); cout << licz << "/" << mian << endl; }
void Ulamek::operator +( Ulamek a ) { if( mian == a.mian ) { cout <<( licz + a.licz ) << "/" << mian << endl; } else cout <<( licz * a.mian ) +( a.licz * mian ) << "/" <<( mian * a.mian ) << endl; }
void Ulamek::operator -( Ulamek a ) { if( mian == a.mian ) { cout <<( licz - a.licz ) << "/" << mian << endl; } else cout <<( licz * a.mian ) -( a.licz * mian ) << "/" <<( mian * a.mian ) << endl; }
void Ulamek::operator *( Ulamek a ) { licz = licz * a.licz; mian = mian * a.mian; wypisz(); }
void Ulamek::operator /( Ulamek a ) { licz = licz * a.mian; mian = mian * a.licz; wypisz(); }
int main() { Ulamek u1( 4, 8 ); Ulamek u2( 5, 15 ); u1.wypisz(); cout << endl; u2.wypisz(); cout << endl; cout << "Wynik dodawania dwoch ulamkow: "; u1 + u2; cout << "Wynik odejmowania dwoch ulamkow: "; u1 - u2; u2 - u1; cout << "Wynik mnozenia dwoch ulamkow: "; u1 * u2; cout << "Wynik dzielenia dwoch ulamkow: "; u2 / u1; u1 / u2; system( "pause" ); return 0; }
Z góry dziękuję za wszelką pomoc. ;) |
|
killjoy |
» 2013-06-13 18:09:23 void Ulamek::operator *( Ulamek a ) { licz = licz * a.licz; mian = mian * a.mian; wypisz(); }
Przypisujesz wartość mnożenia do ułamka po lewej stronie znaku *, więc dzielenie działa na jego zmodyfikowanej wersji, zresztą w dzieleniu robisz to samo. |
|
Cariel Temat założony przez niniejszego użytkownika |
» 2013-06-13 18:25:04 Dziękuję za wyjaśnienie, ale niestety dalej nie wiem co z tym zrobić. |
|
killjoy |
» 2013-06-13 18:26:03 A co robisz w dodawaniu, że nie modyfikuje wartości, rusz głową. |
|
Cariel Temat założony przez niniejszego użytkownika |
» 2013-06-13 18:29:05 Masz rację, nie ma łatwo. Już myślę ;) |
|
Cariel Temat założony przez niniejszego użytkownika |
» 2013-06-13 18:36:41 Zabij mnie, ale naprawdę nie mam pojęcia.
Już wiem, dzięki wielkie za motywację ;) |
|
killjoy |
» 2013-06-13 18:44:02 Zabijanie jest raczej słabym środkiem dedaktycznym, więc przypatrz się: void Ulamek::operator +( Ulamek a ) { if( mian == a.mian ) { cout <<( licz + a.licz ) << "/" << mian << endl; } else cout <<( licz * a.mian ) +( a.licz * mian ) << "/" <<( mian * a.mian ) << endl; }
void Ulamek::operator *( Ulamek a ) { licz = licz * a.licz; mian = mian * a.mian; wypisz(); }
Daj poprostu cout << licz * a.licz bez przypisywania wyniku do licz |
|
Cariel Temat założony przez niniejszego użytkownika |
» 2013-06-13 18:51:00 Tak właśnie zrobiłam :)
A taka piękna śmierć się szykowała ;) |
|
« 1 » 2 |