this is the source code for the section of the program giving me problems...
{--------------------------------}
procedure factor2 (fact1, fact2 : real; var endfact :factortype);
var
f1,
f2 : synthtype;
sum :real;
compare,
s,
l,
l2 :integer;
begin
l := -100;
for l := -200 to 200 do
begin
f1[l] := -998;
f2[l] := 0;
end;
compare := 0;
for l := -200 to -1 do
begin
sum := l;
if fact1/sum = int(fact1/sum)
then if fact1/sum >= compare
then f1[l] := l;
if fact2/sum = int(fact2/sum)
then if fact2/sum >= compare
then f2[l] := l;
end;
for l := 1 to 200 do
begin
sum := l;
if fact1/sum = int(fact1/sum)
then if fact1/sum >= compare
then f1[l] := l;
if fact2/sum = int(fact2/sum)
then if fact2/sum >= compare
then f2[l] := l;
end;
s := 1;
for l := 0 to 200 do
endfact[l] := -999;
for l := -200 to 200 do
for l2 := -200 to 200 do
begin
if f2[l] <> 0
then if f1[l2] <> -998
then begin
endfact[s] := f1[l2]/f2[l];
s := s + 1;
end;
end;
end;
{--------------------------------}
procedure evaluate (low, high : integer; num :real; poly :synthtype; var ans
:real);
var
sub2,
sum :real;
loop :integer;
begin
ans := 0;
for loop := low to high do
begin
sub2 := exp2(num,loop);
sum := poly[loop] * sub2;
ans := ans+sum;
end;
end;
{--------------------------------}
procedure polyeval (num : real; var ans :real; poly :synthtype;low, high
:integer);
var
loop : integer;
begin
ans := 0;
Write ('Enter the highest exponent in the polynomial: ');
readln (high);
write ('Enter the lowest exponent in the polynomial: ');
readln (low);
for loop := high downto low do
begin
write ('Enter the coefficient of X^',loop,': ');
readln (poly[loop]);
end;
evaluate (low,high,num,poly,ans);
end;
{--------------------------------}
procedure synth2 (low,high :integer; num :real; var poly :synthtype);
var
row2,
endcoef : synthtype;
loop :integer;
begin
for loop := -200 to 200 do
endcoef[loop] := 0;
row2[high] := 0;
for loop := high downto low do
begin
endcoef[loop-1] := poly[loop]+row2[loop];
row2[loop-1] := num*endcoef[loop-1]
end;
for loop := -200 to 200 do
poly[loop] := endcoef[loop];
if low = 0
then high := high-1
else begin
high := high-1;
low := low-1;
end;
end;
{--------------------------------}
procedure endzeroes (root :factortype);
var
loop :integer;
begin
writeln ('The Rational roots of this function are: ');
for loop := 0 to 200 do
if root[loop] <> -999
then writeln (root[loop]:1:5);
end;
{--------------------------------}
procedure zeroes2 (var poly :synthtype; count,low,high,loop :integer;endfact
:factortype;ans,num :real;root :factortype);
begin
for loop := 0 to 200 do
begin
if endfact[loop] <> -999
then evaluate (low,high,(-endfact[loop]),poly,ans);
if ans = 0
then begin
num := endfact[loop];
root[count] := endfact[loop];
count := count + 1;
synth2 (low,high,-num,poly);
end;
end;
end;
{--------------------------------}
Procedure Zeroes (poly :synthtype; count,high,low :integer;root
:factortype);
var
loop :integer;
fact1,
fact2,
num,
ans :real;
endfact :factortype;
f,
flag :char;
begin
f := 'n';
while f = 'n'do
begin
flag := 'n';
fact1 := poly[0];
fact2 := poly[high];
factor2 (fact1,fact2,endfact);
for loop := -200 to -1 do
if poly[loop] <> 0
then flag := 'Y';
for loop := 1 to 200 do
if poly[loop] <> 0
then flag := 'Y';
if flag = 'Y'
then zeroes2 (poly,count,low,high,loop,endfact,ans,num,root)
else begin
endzeroes(root);
f := 'y';
end;
end;
end;
{--------------------------------}
procedure getcoef;
var
count,
loop,
high,
low :integer;
poly :synthtype;
root :factortype;
begin
for loop := -200 to 200 do
poly[loop] := 0;
write ('Enter the highest degree in the polynomial: ');
readln (high);
write ('Enter the lowest degree in the polynomial: ');
readln (low);
for loop := high downto low do
begin
Write ('Enter the coefficient of X^',loop,': ');
readln (poly[loop]);
end;
count := 0;
for loop := 0 to 200 do
root[loop] := -999;
Zeroes (poly,count,high,low,root);
end;
{--------------------------------}
for my tpyical test values, starting with the procedure getcoef, high = 2,
low = 0, poly[0] = 6, poly[1] = 5, and poly[2] = 1
it goes through the procedure zeroes fine, but when it comes back to it from
zeroes2, the values are reset to -999. Then, when it comes back from factor2
the second time, thats when the array root gets filled with ludicrous
values. Even if somewher i accidently passed as a value parameter, why would
the values get corrupted? Thank you for your help.