[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.html Wię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=2d2ef696780ad947f1b163511274e85d Proszę 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 |