Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- int NWD(int a, int b)
- {
- while(a!=b)
- if(a>b)
- a-=b;
- else
- b-=a;
- return a;
- }
- class Ulamek {
- public:
- int licznik, mianownik;
- Ulamek(int licz = 0, int mian = 1){
- licznik = licz;
- mianownik = mian;
- }
- Ulamek skroc(Ulamek ul){
- int nwdUlamka = NWD(ul.licznik, ul.mianownik);
- ul.licznik /= nwdUlamka;
- ul.mianownik /= nwdUlamka;
- return ul;
- }
- void setLicznik(int l){
- licznik = l;
- }
- void setMianownik(int m){
- mianownik = m;
- }
- Ulamek operator + (Ulamek const &prawy){
- Ulamek wynik;
- int ujemne = 0;
- wynik.licznik = licznik * prawy.mianownik + prawy.licznik * mianownik;
- wynik.mianownik = mianownik * prawy.mianownik;
- if( wynik.licznik < 0 ){
- wynik.licznik *= -1;
- ujemne = 1;
- }
- if( wynik.mianownik < 0 ){
- wynik.mianownik *= -1;
- ujemne = 1;
- }
- if( wynik.mianownik < 0 && wynik.licznik < 0 ){
- wynik.mianownik *= -1;
- wynik.licznik *= -1;
- }
- wynik = skroc(wynik);
- if( ujemne == 1 ) wynik.licznik *= -1;
- return wynik;
- }
- Ulamek operator - (Ulamek const &prawy){
- Ulamek wynik;
- int ujemne = 0;
- wynik.licznik = licznik * prawy.mianownik - prawy.licznik * mianownik;
- wynik.mianownik = mianownik * prawy.mianownik;
- if( wynik.licznik < 0 ){
- wynik.licznik *= -1;
- ujemne = 1;
- }
- if( wynik.mianownik < 0 ){
- wynik.mianownik *= -1;
- ujemne = 1;
- }
- if( wynik.mianownik < 0 && wynik.licznik < 0 ){
- wynik.mianownik *= -1;
- wynik.licznik *= -1;
- }
- wynik = skroc(wynik);
- if( ujemne == 1 ) wynik.licznik *= -1;
- return wynik;
- }
- Ulamek operator * (Ulamek const &prawy){
- Ulamek wynik;
- wynik.licznik = licznik * prawy.licznik;
- wynik.mianownik = mianownik * prawy.mianownik;
- wynik = skroc(wynik);
- return wynik;
- }
- Ulamek operator / (Ulamek const &prawy){
- Ulamek wynik;
- wynik.licznik = licznik * prawy.mianownik;
- wynik.mianownik = mianownik * prawy.licznik;
- wynik = skroc(wynik);
- return wynik;
- }
- int operator == (Ulamek const &prawy){
- if( licznik == prawy.licznik && mianownik == prawy.mianownik ){
- return 1;
- }else{
- return 0;
- }
- }
- friend ostream & operator<<(ostream &out, const Ulamek &ul){
- out << ul.licznik << "/" << ul.mianownik << endl;
- return out;
- }
- friend istream & operator>>(istream &in, Ulamek &ul){
- char slash = 0;
- int total = 0;
- int licznik= 0;
- int mianownik = 0;
- if (in >> total) {
- if (!(in >> licznik)) {
- in.clear();
- licznik = total;
- total = 0;
- }
- while (in >> slash && std::isspace(slash));
- if (in && slash == '/') {
- if (in >> mianownik) {
- ul.setLicznik(mianownik * total + licznik);
- ul.setMianownik(mianownik);
- return in;
- }
- }
- }
- }
- };
- int main(int argc, char** argv) {
- Ulamek u1, u2;
- cin >> u1;
- cout << u1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement