Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dzielenie Wielomianow

Ostatnio zmodyfikowano 2010-06-06 17:47
Autor Wiadomość
Rantrave
Temat założony przez niniejszego użytkownika
Dzielenie Wielomianow
» 2010-06-06 17:42:49
Witam, program ma dzielić dwa dowolnie duże wielomiany, i podać wynik, jednakże przy samym dzieleniu łapie tylko pierwszą cześć wyniku a przy reszcie wypisuje same 0, i nie wiem w którym momencie, jeśli ktoś da radę wyszukać błąd niech wskaże go.

Pozdrawiam

C/C++
#include<iostream>

using namespace std;

struct liczba
{
    float wspolczynnik;
    float potega;
};


class czynnik
{
public:
    int wspolczynnik;
    int potega;
    czynnik();
   
};

czynnik * przepisz_wielomian( int wielkosc, czynnik * wielomian );
czynnik * wpisz_wielomian( int wielkosc, czynnik * wielomian );
czynnik * sortuj_potegi_wielomianu( int wielkosc, czynnik * wielomian );
void wypisz_wielomian( int wielkosc, czynnik * wielomian );
czynnik * odejmowanie_wielomianow( int wielkosc, czynnik * pozostale, int wielkosc_2, czynnik * wielomian_2, czynnik * wynik );
czynnik * dzielenie_wielomianow( int wielkosc, czynnik * wielomian_1, int wielkosc_2, czynnik * wielomian_2 );


int main()
{
    czynnik * wielomian_1;
   
    cout << "Podaj wielkosc pierwszego wielomianu:";
    int wielkosc;
    cin >> wielkosc;
    wielomian_1 = new czynnik[ wielkosc ];
   
    wpisz_wielomian( wielkosc, wielomian_1 );
    sortuj_potegi_wielomianu( wielkosc, wielomian_1 );
   
    wypisz_wielomian( wielkosc, wielomian_1 );
   
    cout << "Podaj wielkosc drugiego wielomianu:";
   
    czynnik * wielomian_2;
   
    int wielkosc_2;
    cin >> wielkosc_2;
    wielomian_2 = new czynnik[ wielkosc ];
   
    wpisz_wielomian( wielkosc_2, wielomian_2 );
    sortuj_potegi_wielomianu( wielkosc_2, wielomian_2 );
   
    wypisz_wielomian( wielkosc_2, wielomian_2 );
   
    czynnik * po_dzieleniu;
    po_dzieleniu = dzielenie_wielomianow( wielkosc, wielomian_1, wielkosc_2, wielomian_2 );
    wypisz_wielomian( wielkosc, po_dzieleniu );
   
   
    return 0;
}

czynnik * dzielenie_wielomianow( int wielkosc, czynnik * wielomian_1, int wielkosc_2, czynnik * wielomian_2 )
{
    czynnik * bufor;
   
    for( int i = 0; i < wielkosc; i++ )
    {
        if(( wielomian_1 + i )->wspolczynnik > 0 )
        {
            bufor->potega =( wielomian_1 + i )->potega;
            bufor->wspolczynnik =( wielomian_1 + i )->wspolczynnik;
            break;
        }
    }
   
    czynnik * pozostale;
    pozostale = new czynnik[ wielkosc ];
    pozostale = przepisz_wielomian( wielkosc, wielomian_1 );
    // wypisz_wielomian(wielkosc, pozostale);
    czynnik * wynik;
    wynik = new czynnik[ wielkosc + 1 ];
   
    if(( pozostale + 0 )->potega >( wielomian_2 + 0 )->potega )
    {
       
        int i = 0;
       
        do
        {
           
           
            ( wynik + i )->potega =( bufor )->potega -( wielomian_2 + 0 )->potega;
            ( wynik + i )->wspolczynnik =( bufor )->wspolczynnik /( wielomian_2 + 0 )->wspolczynnik;
            pozostale = odejmowanie_wielomianow( wielkosc, pozostale, wielkosc_2, wielomian_2, wynik + i );
           
           
            for( int w = 0; i < wielkosc; i++ )
            {
                if(( pozostale + w )->wspolczynnik > 0 )
                {
                    bufor->potega =( pozostale + w )->potega;
                    bufor->wspolczynnik =( pozostale + w )->wspolczynnik;
                    break;
                }
            }
           
            i++;
           
        } while(( bufor )->potega <( wielomian_2 + 0 )->potega );
       
       
    }
   
    return wynik;
}

czynnik * odejmowanie_wielomianow( int wielkosc, czynnik * wielomian, int wielkosc_2, czynnik * wielomian_2, czynnik * mnozacy )
{
    czynnik * odejmowanie;
    odejmowanie = new czynnik[ wielkosc_2 ];
   
    for( int i = 0; i < wielkosc_2; i++ )
    {
        ( odejmowanie + i )->potega = mnozacy->potega +( wielomian_2 + i )->potega;
        ( odejmowanie + i )->wspolczynnik = mnozacy->wspolczynnik *( wielomian_2 + i )->wspolczynnik;
    }
   
    for( int i = 0; i < wielkosc_2; i++ )
    {
        for( int j = 0; j < wielkosc; j++ )
        {
            if(( wielomian + j )->potega ==( odejmowanie + i )->potega )
            {
                ( wielomian + j )->wspolczynnik =( wielomian + j )->wspolczynnik -( odejmowanie + i )->wspolczynnik;
                break;
            }
        }
    }
   
    return wielomian;
   
   
}

czynnik * przepisz_wielomian( int wielkosc, czynnik * wielomian )
{
    czynnik * bufor;
    bufor = new czynnik[ wielkosc ];
   
    for( int i = 0; i < wielkosc; i++ )
    {
        ( bufor + i )->wspolczynnik =( wielomian + i )->wspolczynnik;
        ( bufor + i )->potega =( wielomian + i )->potega;
    }
   
    return bufor;
}

void wypisz_wielomian( int wielkosc, czynnik * wielomian )
{
    for( int i = 0; i < wielkosc; i++ )
    {
        cout <<( wielomian + i )->wspolczynnik;
        cout << "x^";
        cout <<( wielomian + i )->potega;
        cout << "  ";
    }
   
}

czynnik * wpisz_wielomian( int wielkosc, czynnik * wielomian )
{
    for( int w = 0; w < wielkosc; w++ )
    {
        cin >>( wielomian + w )->wspolczynnik;
        cin.get();
        cin.get();
        cin >>( wielomian + w )->potega;
    }
   
    return wielomian;
}

czynnik * sortuj_potegi_wielomianu( int wielkosc, czynnik * wielomian )
{
    czynnik * bufor;
    bufor = new czynnik;
   
    for( int i = 0; i < wielkosc - 1; i++ )
    {
        for( int j = 0; j < wielkosc - 1; j++ )
        {
            if(( wielomian + j )->potega <( wielomian + j + 1 )->potega )
            {
                bufor->wspolczynnik =( wielomian + j )->wspolczynnik;
                bufor->potega =( wielomian + j )->potega;
               
                ( wielomian + j )->wspolczynnik =( wielomian + j + 1 )->wspolczynnik;
                ( wielomian + j )->potega =( wielomian + j + 1 )->potega;
               
                ( wielomian + j + 1 )->wspolczynnik = bufor->wspolczynnik;
                ( wielomian + j + 1 )->potega = bufor->potega;
               
            }
        }
    }
   
    delete bufor;
   
    return wielomian;
}


czynnik::czynnik()
{
    wspolczynnik = 0;
    potega = 0;
}
P-17688
lenrokskate
» 2010-06-06 17:46:23
zamiast [code][/code] daj [code src="C++" zwin][/code]
P-17692
lenrokskate
» 2010-06-06 17:47:10
delete
P-17693
« 1 »
  Strona 1 z 1