Rozkład ułamka zwykłego na ułamki proste
Kod był wyświetlany 2953 razy.
    /*
Name:Rozkład ułamka zwykłego na ułamki proste
Copyright: GPL GNU
Author Przemek Pastuszka
Date:27-01-2009 22:03:54
Description: Rozkład ułamka zwykłego na ułamki proste
*/

#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
class Ulamek
{
private:
        int licznik,mianownik;
        int NWD(int a, int b);
        int NWW(int a, int b)
        {
                return abs(a)*b/NWD(a,b);
        }
        void Skroc()
        {
                int dziel=NWD(licznik,mianownik);
                licznik/=dziel;
                mianownik/=dziel;
        }
public:
        Ulamek(int a,int b)
        {
                licznik=a;
                mianownik=abs(b);
                Skroc();
        }
        Ulamek operator+(Ulamek &dwa);
        Ulamek operator-();
        Ulamek operator-(Ulamek &dwa);
        int PodajLicznik() { return licznik; }
        int PodajMianownik() {return mianownik;}
        void Wypisz() { cout<<licznik<<"/"<<mianownik;}
};
Ulamek Ulamek::operator -(Ulamek &dwa)
{
        int wielo=NWW(mianownik,dwa.mianownik);
        int licznikJeden=licznik*(wielo/mianownik);
        int licznikDwa=dwa.licznik*(wielo/dwa.mianownik);
        Ulamek wynik(licznikJeden-licznikDwa,wielo);
        return wynik;
}
Ulamek Ulamek::operator -()
{
        Ulamek wynik(-licznik,mianownik);
        return wynik;
}
//Ulamek Ulamek::operator -(Ulamek &dwa)
//{
//        return *this+(-dwa);
//}
int Ulamek::NWD(int a, int b)
{
        a=abs(a);
        while(a!=b)
        {
                if(a>b)
                        a-=b;
                else
                        b-=a;
        }
        return a;
}

void Rozloz(Ulamek a)
{
        if(a.PodajLicznik()==1)
        {
                a.Wypisz();
                return;
        }
        Ulamek najwiekszy(1,a.PodajMianownik()/a.PodajLicznik()+1);
        najwiekszy.Wypisz();
        cout<<" + ";
        Rozloz(a-najwiekszy);
}
int main()
{
        cout<<"Podaj licznik: ";
        int a,b;
        cin>>a;
        cout<<"Podaj mianownik: ";
        cin>>b;
        Ulamek q(a,b);
        q.Wypisz();
        cout<<" = ";
        Rozloz(q);
        cout<<endl;
        system("pause");
        return 0;
}
    
Pobierz plik tekstowy
Administrator WJL
PHP&SQL coded by NOVA-IT