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

[C++] Dzielenie wielomianów - problem z reszta

Ostatnio zmodyfikowano 2014-02-24 20:32
Autor Wiadomość
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:
C/C++
#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; //potega
    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;
    } // do 1
    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ę.
P-105158
lemos
Temat założony przez niniejszego użytkownika
» 2014-02-24 07:27:41
Proszę o pomoc
P-105171
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
P-105172
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.
P-105203
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.
P-105209
lemos
Temat założony przez niniejszego użytkownika
» 2014-02-24 19:00:02
Jak to poprawić :/? Mógł bym prosić o pomoc?
P-105217
szymeczek31
Pomoglem?
» 2014-02-24 20:18:17
Poprawiony kod:
C/C++
#include <iostream>
#include <conio.h>
#include <cmath>
#include <iomanip>
#include <ctime>
#include <cstdlib>
using namespace std;


/*Zadeklaruj |CALE| funkcje za nim ich uzyjesz*/
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;
    } // do 1
    wynik = liczba * wynik + 0;
    cout << endl << "Reszty : " << wynik << endl;
}
//—————————————————————————
//void zamien( int liczba );    //Nie uzywaj odnosniow do funkcji ktore sa za main'em!
//—————————————————————————
//void oblicz( int p, int liczba ); //to sa puste funkcje
//—————————————————————————


int main()
{
    cout << "Podaj najwyzsza potege wielomianu : ";
    int p; //potega
    //int i a ta zmienna to wogule jej nie ma w programie!!!!
    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;
}

//funkcje ktore TU deklarowales sa za funkcja 'main' wiec ta funkcja ich nie zna! [/cpp]
P-105221
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.
C/C++
#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; //wcztytanie stopnia wielomianu
    int tab[ n + 1 ], tab1[ n + 1 ];
   
    for( i = 0; i <= n; i++ ) {
        tab[ i ] = 0; //zerowanie tablic
        tab1[ i ] = 0;
    }
   
    for( i = 0; i <= n; i++ ) {
        cout << "\n\tPodaj liczbe przy potedze: " << i << ": ";
        cin >> tab[ i ]; //współczynniki
    }
   
    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 << ")"; //wyświetlenie wyników
   
    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 ]; //wyświetlenie reszty
    cout << "\n\n";
}
P-105224
« 1 » 2
  Strona 1 z 2 Następna strona