
20.03.2011, 16:50
|
|
Новичок
|
|
Регистрация: 20.03.2011
Сообщений: 18
|
|
|
Умножение полиномов
суть задачи такова- нужно перемножить два многочлена, отдельно вводимые в один из двух эдитов, но дальше введения самих многочленов дойти не смог.
вот сам код (всё работает)
procedure PrintPolinom(var B:link; var Ed:TEdit);
var S:string;
t:Link;
begin
S:='';
t:=B;
While t<>nil do
begin
S:=S+'+'+IntToStr(t^.coef)+'x^'+Int ToStr(t^.st);
t:=T^.next;
end;
ed.Text:=S;
end;
procedure AddToEnd (var B:link; var w:link);
var t :Link;
begin
t:=B;
if B<>nil
then
begin
While T^.next<>nil do
t:=t^.next;
t^.next:=w;
end
else
B:=w;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
p:=nil; Q:=nil;
end;
procedure TForm1.Button1Click(Sender: TObject);
var w:link;
begin
new(w);
W^.coef:=StrToInt(edit1.Text);
W^.st:=StrToInt(edit2.Text);
W^.next:=nil;
AddToEnd(P,w);
PrintPolinom(P,edit3);
end;
procedure TForm1.Button2Click(Sender: TObject);
var w:link;
begin
new(w);
W^.coef:=StrToInt(edit4.Text);
W^.st:=StrToInt(edit5.Text);
W^.next:=nil;
AddToEnd(Q,w);
PrintPolinom(Q,edit6);
end;
вообще, каждый множитель у меня вбивается отдельно, т.е. сначала вбивается коэффициент перед ИКС, потом его степень, нажатием на баттон он переходит в эдит уже в готовом виде (например "+7x^5"), и так далее.
нужна процедура перемножения...
|
|

20.03.2011, 18:35
|
|
|
Пусть  - первый многочлен и  - второй многочлен.
Тогда их произведение равно  , где  .
Замечания по коду:
связные списки - в топку, здесь нужны массивы
делфи - в топку, давно морально устарел
|
|

20.03.2011, 18:55
|
|
Новичок
|
|
Регистрация: 20.03.2011
Сообщений: 18
|
|
|
согласен так-то. проблема в том, что мы работаем в дельфи.
можете помочь, написав хотя бы часть кода на умножение?
|
|

20.03.2011, 19:17
|
|
Местный
|
|
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,368
|
|
|
Перейдите, как уже сказали, на массивы, и вопрос решится с помощью пары простых циклов.
|
|

20.03.2011, 19:45
|
|
Новичок
|
|
Регистрация: 20.03.2011
Сообщений: 18
|
|
|
то есть неважно, что предыдущая часть программы сделана на списках?
просто уже сделать ее массивами, да?
|
|

20.03.2011, 21:37
|
|
|
|
да, тут гораздо проще хранить коэффициенты в массиве и переписать ваш существующий код, его и так мало
можно конечно, и со списками все делать, но, боюсь, сортировку списков слиянием, чтобы собирать коэффициенты при одинаковых степенях, вы не осилите. так что лучше делайте все с нуля и с массивами
|
|

21.03.2011, 21:46
|
|
Местный
|
|
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,368
|
|
|
>то есть неважно, что предыдущая часть программы сделана на списках?
Да можно и на списках сделать, только их для умножения удобнее, видимо, сделать двунаправленными (поскольку степени одного из полиномов обходятся в обратном порядке).
В таком случае будет преимущество для полиномов высоких степеней (в которых лишь часть коэфф. ненулевые), например, (x^100 - 1) * (x^1000 + x)
|
|

23.03.2011, 18:33
|
|
Новичок
|
|
Регистрация: 20.03.2011
Сообщений: 18
|
|
|
а как можно реализовать это с помощью списков?
просто посмотрел, как находится сумма, немного испугало
|
|

24.03.2011, 01:29
|
|
|
В прошлом году написал подобную задачу. Тема была: работа с полиномами. Там можно было производить простейшие операции с многочленами. Кого интересует, пишите на rayaz@list.ru.
|
|

24.03.2011, 01:30
|
|
|
|
реализация на delphi.
|
|
| Опции темы |
Поиск в этой теме |
|
|
|
| Опции просмотра |
Линейный вид
|
|
| |