А вот и ошибка! А я проглядел.=) Мы из
w в этой функции составляем список, поэтому его (
w) нужно каждый раз заново создавать (память выделять с помощью new() ).
|
Код:
|
procedure TForm1.Button3Click(Sender: TObject);
var
t1, t2, w: link;
x:String;
begin
R := nil;
t1 := P;
while t1 <> nil do
begin
t2 := Q;
while t2 <> nil do
begin
new( w );
w^.next := nil;
w^.coef := t1^.coef * t2^.coef;
w^.st := t1^.st + t2^.st;
AddToend( R, w );
edit7.text := edit7.text + w^.coef + '*x^' + w^.st + ', ';
t2 := t2^.next;
end;
t1 := t1^.next;
end;
PrintPolinom( R, edit7 );
end; |
И до кучи функция, которая сложит коэффициенты при одинаковых степенях.
|
Код:
|
procedure simplify;
var
start, ptr, prev : link
begin
start := R;
while start <> nil do
begin
prev := start;
ptr := start^.next;
while ptr <> nil
begin
if ptr^.st = start^.st then
begin
start^.coef := start^.coef + ptr^.coef;
prev^.next := ptr^.next;
dispose( ptr );
break;
end;
prev := ptr;
ptr := ptr^.next;
end;
start := start^.next;
end;
end; |