![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Умножение полиномов (многочленов) [D7]
neitrosha © (2011-03-21 17:34:00)суть задачи такова- нужно перемножить два многочлена, отдельно вводимые в один из двух эдитов, но дальше введения самих многочленов дойти не смог.
вот сам код (всё работает)
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"), и так далее.
нужна процедура перемножения...понимаю, что нужно как-то с помощью массивов, но вообще не знаю, как сделать. напишите процедуру по этому коду, пожалуйста
Sha (2011-03-21 21:27:00) [1]Сделать по аналогии.
Sha (2011-03-21 21:26:00) [2]Тема: умножение разреженных матриц (векторов).
Искать в гугле (яндексе).
han_malign (2011-03-21 18:24:00) [3]У тебя есть два множества пар
{P=(p, a)}(размеры N1 и N2) упорядоченных поp, по операцииP1*P2 = (p1+p2,a1*a2)- получаешь декартово произведение(каждый элемент с каждым) множеств размером N1*N2 - сортируешь поp- и все элементы с одинаковымp- объединяешь, суммируяа...
Можно заранее вычислить результирующую степень полинома и посчитать на прямых массивах (for i:= 0 to N1 do for j:= 0 to N2 do inc(a[i+j], a1[i]*a2[j]);) - но не удивлюсь если препод вобъёт степень 100500 - и будет радоваться как дитя наблюдая крах программы...
oldman (2011-03-21 17:55:00) [4]
> нужна процедура перемножения
a*b?
разбить многочлен на одночлены и перемножить по правилам арифметики религия запрещает?