Dzielenie Wielomianow
Ostatnio zmodyfikowano 2010-06-06 17:47
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 #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 ); 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; }
|
|
lenrokskate |
» 2010-06-06 17:46:23 zamiast [code][/code] daj [code src="C++" zwin][/code] |
|
lenrokskate |
» 2010-06-06 17:47:10 delete |
|
« 1 » |