ďťż

Ładny brzuch

czesc mam takie zadanko z calkowitych pierwiastkow wielominau. Z tego wzgledu, ze z matmy nie ejstem zbytnio dobry chociaz o tym czytalem nie wiem w jaki sposob wczytac zestawy liczb jakiej uzyc petli i jak to poprawnie wyswietlic na ekran ? Prosze o dokladniejszy przyklad, ja sprobowalnym to zlowzyc jakos. Z gory dzieki wszystkim ekspertom za pomoc <piwo>
1938. Całkowite pierwiastki wielomianu Kod zadania: KC012 Napisz program, który wyznacza całkowite pierwiastki podanego wielomianu. Wejście Na wejście programu podana zostanie pewna ilość zestawów danych rozdzielonych znakiem nowej linii. Pojedyńczy zestaw składa się z ciągu liczb całkowitych, rozdzielonych spacjami. Pierwsza z liczb to stopień wielomianu, a następne liczby to jego współczynniki (podawane w kolejności od współczynnika przy najwyższej potędze do współczynnika przy najniższej potędze). Uwaga! Stopień wielomianu jest liczbą z zakresu 1-8, a współczynniki liczbami z zakresu -99 - 99. Można przyjąć, że ostatni współczynnik jest niezerowy. Wyjście Dla każdego z wczytanych z wejścia wielomianów należy wypisać liczbę całkowitych pierwiastków oraz wszystkie całkowite pierwiastki, uporządkowane od najmniejszego do największego. Poszczególne liczby należy oddzielić spacjami, a po ostatnim z pierwiastków należy wypisać znak nowej linii. Przykład Wejście: 2 1 2 1 3 1 1 1 1 4 1 0 0 0 -1 Wyjście: 1 -1 1 -1 2 -1 1



Spoko, to może ustawimy się jutro napiwo przed cyfrą w kwadracie? Ech, trochę ruszyć głową a nie od razu na forum walić. Rozwiązanie? Horner i lecisz siłowo :). Pętla?
"Na wejście programu podana zostanie pewna ilość zestawów" - pętla while scanf() != EOF
Potem skoro znasz stopień wielomianu to np. for.

całkowite pierwiastki wielomianu są dzielnikami współczynika wielomianu przy zerowej potędze
wystarczy ze wyznaczysz dzielniki ostatniego wczytanego współczynika a następnie i tutaj dopiero schemat hornera sprawdzasz czy dany dzielnik jest pierwiastkiem. Sprawdzanie dzielników zacznij od najmniejszego to otrzymasz od razu ciag posortowany
Użytkownik Artur Menc edytował ten post 18 listopad 2007, 22:35

wystarczy ze wyznaczysz dzielniki ostatniego wczytanego współczynika a następnie i tutaj dopiero schemat hornera sprawdzasz czy dany dzielnik jest pierwiastkiem.
Jak najbardziej. Tylko pytanie - co program wykona szybciej - sprawdzi wszystkie pierwiastki od -|c| do |c| (gdzie c to wyraz wolny) czy znajdzie wszystkie dzielniki i sprawdzi czy są pierwiastkami? Bo mi się nie udało wymyślić nic szybkiego co by szybko wyszukiwało dzielniki. Można przecież dla każdej iteracji sprawdzić przed hornerem czy x % c. Chyba tak będzie najwydajniej, ale to trzebaby rozpatrzyć dokładniej, a w świetle zbliżającego się koła z fizy po prostu mi się nie chce ;].
// @Down: niestety na pytania "ja zrobić" nawet jakbym chciał to nie mogę odpowiedzieć bo jeszcze wyjdzie zarzut o plagiat :P.
Użytkownik Ali240 edytował ten post 19 listopad 2007, 01:45


wczytanie bedzie wygladlo tak:
by reVis
#include <iostream> #include <string> #include <sstream> int main() { std::string linia; int wspolczynniki[9]; while(std::getline(std::cin,linia)){ std::sstream ss; ss << linia; int stopien; ss >> stopien; for(int i=0;i<stopien;i++){ ss >> wspolczynniki[i]; } } }
jak zrobic to teraz z funkcja?

prosze o pomoc

moze jakis bug sie wkradł moze nie, wiec sprawdz
napisane w miare przejrzyscie
#include <iostream> #include <vector> #include <string> #include <sstream> float horner( const std::vector< int >& wsp, int x ) { float wynik = wsp[0]; for( int i = 1; i < wsp.size(); ++i ) { wynik*=x; wynik+= wsp[i]; } return wynik; } int abs( int v ) { return ( v < 0 ) ? -v : v; } int main() { int st; std::string linia; while(std::getline(std::cin,linia)){ if( linia.length() < 1 ) break; std::stringstream ss; ss << linia; ss >> st; std::vector < int > wsp ( st+1 ); for(int i=0;i<=st;i++){ ss >> wsp[i]; } std::vector < int > pierwiastkiP; std::vector < int > pierwiastkiM; for( int i = 1; i <= abs( wsp[st] ); ++i ) { if( (wsp[st] % i ) == 0 ) { if( horner( wsp, i ) == 0 ) { pierwiastkiP.push_back( i ); } if( horner( wsp, -i ) == 0 ) { pierwiastkiM.push_back( -i ); } } } std::cout << pierwiastkiP.size() + pierwiastkiM.size() << " "; for( int i = pierwiastkiM.size() -1; i >=0; --i ) { std::cout << pierwiastkiM[i] << " "; } for( int i = 0; i < pierwiastkiP.size() ; ++i ) { std::cout << pierwiastkiP[i] << " "; } std::cout << std::endl; } return 0; }

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •