[C++] Dzielenie wielomianów - problem z reszta
Ostatnio zmodyfikowano 2014-02-24 20:32
lemos Temat założony przez niniejszego użytkownika |
[C++] Dzielenie wielomianów - problem z reszta » 2014-02-23 19:09:34 Witam. Może od razu powiem o co chodzi. Mam do napisania program c++, który dzieli wielomiany oraz wypisuje resztę. Głowię się z tym cały dzień. Otóż kod znalazłem na pewnej stronie http://polaczek17.blog.pl/2009/07/27/c-dzielenie-wielomianow/ lecz ten kod nie działa wyskakuje pełno niejasnych mi błędów. Więc pozwoliłem sobie trochę go przerobić. Oto mój kod: #include <iostream> #include <conio.h> #include <cmath> #include <iomanip> #include <ctime> #include <cstdlib>
void zamien( int liczba );
void oblicz( int p, int liczba );
using namespace std; int main() { cout << "Podaj najwyzsza potege wielomianu : "; int p; int i; cin >> p; int wielomian = int( p + 1 ); for( int i = 0; i < p + 1; i++ ) { cout << "\nPodaj liczbe przy potedze : " << i << " : "; cin >> wielomian; } cout << "\nPostac wielomiana : " << endl; for( int a = p; a > 0; a-- ) { cout << wielomian << "x^" << a; cout << "+"; } cout << wielomian << " = " << endl; cout << "Podaj dwumian do dzielenia : "; int liczba; cin >> liczba; cout << "(x + " << liczba << ")" << endl; zamien( liczba ); cout << "Wynik : " << endl; oblicz( p, liczba ); system( "pause" ); return 0; }
void zamien( int liczba ) { liczba = liczba * - 1; }
void oblicz( int p, int liczba ) { int wynik; wynik = p * liczba + p - 1; cout << wynik; for( int a = p - 2; a > 0; a-- ) { wynik = liczba * wynik + a; cout << wynik << "x^" << a; } wynik = liczba * wynik + 0; cout << endl << "Reszty : " << wynik; }
A więc program ładnie się kompiluje i wszystko działa jak należy no ale do czasu gdy ma wyświetlić wynik + resztę. Oto screen: zapodaj.net/4a4fca108ed5a.png.htmlWięc przykład wielomianu (2x^4 - 3x^2 + 2x - 1) : (x + 2) Poprawny wynik to 2x^3 - 4x^2 +5x - 8 i reszta 15. Jeszcze znalazłem taki kod ale z nim to w ogóle mi się nie zgadzało to co wypisywał wynik http://algorytmy.info/KodKontroler/kod/1097/?PHPSESSID=2d2ef696780ad947f1b163511274e85dProszę o pomoc i korektę. |
|
lemos Temat założony przez niniejszego użytkownika |
» 2014-02-24 07:27:41 Proszę o pomoc |
|
tookie009 |
» 2014-02-24 07:38:40 przeciez sie pokazuje wynik. Jest niepoprawny? JEzeli ciebie denerwuje, ze po wyniku masz zaraz "aby kontynuowac nacisnij dowolny klawisz" wstaw znak nowje linii po wypianiu wyniku |
|
lemos Temat założony przez niniejszego użytkownika |
» 2014-02-24 17:05:34 Nie przeczytałeś chyba do końca mojego postu. Napisałem tam że wyniki są złe niezgodnie -.- Reszta jest przekłamana. Nie mam pojęcia gdzie jest błąd. A że enter mogę dać by nie zasłaniał mi tekst "dowolnego przycisku" to wiem. |
|
Adik80 |
» 2014-02-24 17:24:07 Zacznij od tego ze potrzebujesz czytac wspolczynniki do tabeli, narazie czytasz do zmiennej, czyli zapamietujesz tylko wspolczynnik przy najwyzszej potedze. Funkcja 'zamien' nic nie robi. Funkcja oblicz liczy generuje smieci. |
|
lemos Temat założony przez niniejszego użytkownika |
» 2014-02-24 19:00:02 Jak to poprawić :/? Mógł bym prosić o pomoc? |
|
szymeczek31 |
Pomoglem? » 2014-02-24 20:18:17 Poprawiony kod: #include <iostream> #include <conio.h> #include <cmath> #include <iomanip> #include <ctime> #include <cstdlib> using namespace std;
void zamien( int liczba ) { liczba = liczba * - 1; }
void oblicz( int p, int liczba ) { int wynik; wynik = p * liczba + p - 1; cout << wynik; for( int a = p - 2; a > 0; a-- ) { wynik = liczba * wynik + a; cout << wynik << "x^" << a; } wynik = liczba * wynik + 0; cout << endl << "Reszty : " << wynik << endl; }
int main() { cout << "Podaj najwyzsza potege wielomianu : "; int p; cin >> p; int wielomian = int( p + 1 ); for( int i = 0; i < p + 1; i++ ) { cout << "\nPodaj liczbe przy potedze : " << i << " : "; cin >> wielomian; } cout << "\nPostac wielomiana : " << endl; for( int a = p; a > 0; a-- ) { cout << wielomian << "x^" << a; cout << "+"; } cout << wielomian << " = " << endl; cout << "Podaj dwumian do dzielenia : "; int liczba; cin >> liczba; cout << "(x + " << liczba << ")" << endl; zamien( liczba ); cout << "Wynik : "; oblicz( p, liczba ); system( "pause" ); return 0; }
|
|
lemos Temat założony przez niniejszego użytkownika |
» 2014-02-24 20:30:55 I tak źle oblicza :/ Ale dzięki za pomoc. Masz ode mnie plusa. Przed chwilą próbowałem to ogarnąć i napisałem całkiem inny program, udało mi się w końcu dobrze wylicza. #include <cstdlib> #include <iostream>
void czysc(); void dzielenie_wielomianow();
using namespace std;
int main() { int w; do { cout << "\nWielomiany!\n\n"; cout << "1) Dzielenie wielomianow\n"; cout << "\nWybieram: "; cin >> w; czysc(); switch( w ) { case 1: { dzielenie_wielomianow(); system( "pause" ); czysc(); } break; default: { return 0; } } } while( w != 0 ); system( "pause" ); return 0; }
void czysc() { system( "cls" ); }
void dzielenie_wielomianow() { int n, a, i; cout << "\n\nPodaj najwyzsza potege wielomianu: "; cin >> n; int tab[ n + 1 ], tab1[ n + 1 ]; for( i = 0; i <= n; i++ ) { tab[ i ] = 0; tab1[ i ] = 0; } for( i = 0; i <= n; i++ ) { cout << "\n\tPodaj liczbe przy potedze: " << i << ": "; cin >> tab[ i ]; } cout << "\n\nPodaj dwumian do dzielenia: "; cin >> a; tab1[ n ] = tab[ n ]; for( i = n - 1; i >= 0; i-- ) { tab1[ i ] =- a * tab1[ i + 1 ] + tab[ i ]; } cout << "\nWynik: "; i = n - 1; if( tab1[ i + 1 ] != 1 ) cout << " (" << tab1[ i + 1 ] << "x^" << i << ")"; else cout << "(x^" << i << ")"; for( i = n - 2; i >= 0; i-- ) { if( tab1[ i + 1 ] != 1 ) cout << "+(" << tab1[ i + 1 ] << "x^" << i << ")"; else cout << "+(x^" << i << ")"; } if( a > 0 ) cout << "*(x+" << a << ")"; else cout << " x-" <<- a << ")"; cout << " Reszta: " << tab1[ 0 ]; cout << "\n\n"; }
|
|
« 1 » 2 |