Próbowałem napisać program liczący pierwiastek wielomianu W(x).
Chyba wiecie co to takiego^^
Dla niekumatych:
Pierwiastek wielomianu to taki dzielnik wyrazu wolnego tego wielomianu, który podstawiony w miejsce x, sprawi że cały wielomian będzie miał wartość 0.
No i mam pytanie...
Co tu musze poprawić, aby to działało;)
uses CRT;
var
x:array[1..10] of integer; {tablica z 'liczbami przed x;)' kolejnych poteg}
z:array[1..10] of shortint; {znaki + -}
wyraz:integer; {wyraz wolny}
zwyraz:integer; {znak wyrazu wolnego}
p:integer; {zmienna pomocnicza do wczytania wartosci z tablicy}
o:integer; {zmienna dla funkcji for}
i:integer; {zmienna dla funkcji for}
k:integer; {zmienna pomocnicza dla potegowania}
wynik:integer; {zmienna przechowywujaca aktualny wynik}
dzielnik:integer; {zmienna przechowywujaca aktualny dzielnik}
procedure wielomian; {procedura wyswietlajaca wielomian}
begin
for o:=10 downto 1 do {licznik kolejnych poteg}
begin
if x[o]=0 then
continue; {jesli dana potega nie wystepuje przejscie do kolejnej}
if z[o]=0 then
write('-'); {wypisanie znaku}
if z[o]=1 then
write('+'); {j.w.}
write(x[o],'x^',o); {wypisanie wartosci wyrazu}
end;
if zwyraz=0 then
write('-'); {wypisanie znaku wyrazu wolnego}
if zwyraz=1 then
write('+'); {j.w.}
write(wyraz); {wypisanie wartosci wyrazu wolnego}
end;
procedure licz; {funkcja liczaca wartosc wielomianu dla podanego dzielnika} {!!!}
begin
wynik:=0; {wyzerowanie wyniku}
for i:=10 downto 1 do
begin
p:=x[i]; {pobranie 'liczby przed x'}
if z[i]=0 then
p:=p*(-1); {zmiana jej znaku jesli jest ujemna}
k:=dzielnik; {przypisanie do zmiennej k wartosci dzielnika}
if i>1 then {jesli potega jest wieksza niz 1 wykonac potegowanie}
begin
for o:=2 to i do
k:=k*k; {cos jakby potegowanie}
p:=p*k; {pomnozenie wyniku potegowania dzielnika i 'liczby przed x'}
end;
if k=1 then {jesli potega = 1 to tylko wykonanie mnozenia}
p:=p*k;
wynik:=wynik+p; {dodanie wyniku poprzednich dzialan do calkowitego wyniku}
write(wynik); {wypisanie wyniku}
writeln('Nacisnij enter');
readln;
end;
end;
begin
for o:=10 downto 1 do {pobranie 'liczby przed x' oraz jej znaku dla wszystkich poteg od 10 do 1}
begin
writeln('Podaj wartosc wyrazu z potega ',o,' jesli nie istnieje wpisz 0');
readln(p);
x[o]:=p;
if p=0 then
continue;
writeln('Podaj znak wyrazu ktorego wartosc podales przed chwila;p');
writeln('dla - wpisz 0, a dla + 1');
readln(z[o]);
end;
writeln('Podaj wartosc wyrazu wolnego'); {pobranie wartosci wyrazu wolnego}
readln(wyraz);
writeln('Podaj znak wyrazu wolnego + = 1, - = 0'); {i jego znaku}
readln(zwyraz);
writeln;
wielomian; {wypisanie wielomianu}
writeln;
writeln('Nacisnij enter');
readln;
clrscr;
for i:=1 to wyraz do {dla kazdej liczby od 1 do wyrazu wolnego}
begin
if (wyraz mod i)=0 then {jesli reszta z dzielenia wyrazu przez i wynosi 0 to i jest dzielnikiem wyrazu wolnego}
begin
writeln('Dzielnikiem wyrazu ',wyraz,' jest liczba ',i, ' oraz -',i);
dzielnik:=i; {ustawienie zmiennej dzielnik dla procedury licz}
write('Wartosc wyrazenia ');
wielomian; {wypisanie wartosci wyrazenia}
write(' dla x rownego ',i,' wynosi');
licz; {wypisanie wyniku wyrazenia}
if wynik=0 then {jesli wynik jest rowny 0, a wiec i jest pierwiastkiem wielomianu to program przerywa dalsze szukanie}
break;
writeln;
writeln;
end;
end;
writeln;
writeln('Nacisnij enter');
readln;
end.