Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.26;
Скачать: CL | DM;

Вниз

Умножение полиномов (многочленов)   Найти похожие ветки 

 
neitrosha   (2011-03-21 17:34) [0]

суть задачи такова- нужно перемножить два многочлена, отдельно вводимые в один из двух эдитов, но дальше введения самих многочленов дойти не смог.

вот сам код (всё работает)

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"), и так далее.

нужна процедура перемножения...понимаю, что нужно как-то с помощью массивов, но вообще не знаю, как сделать. напишите процедуру по этому коду, пожалуйста


 
oldman ©   (2011-03-21 17:55) [1]


> нужна процедура перемножения


a*b?

разбить многочлен на одночлены и перемножить по правилам арифметики религия запрещает?


 
han_malign   (2011-03-21 18:24) [2]

У тебя есть два множества пар {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 - и будет радоваться как дитя наблюдая крах программы...


 
Sha ©   (2011-03-21 21:26) [3]

Тема: умножение разреженных матриц (векторов).
Искать в гугле (яндексе).


 
Sha ©   (2011-03-21 21:27) [4]

Сделать по аналогии.



Страницы: 1 вся ветка

Текущий архив: 2011.06.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1300262871
fred
2011-03-16 11:07
2011.06.26
AV


2-1300718256
Scott Storch
2011-03-21 17:37
2011.06.26
разбить массив


3-1261456991
d@nger
2009-12-22 07:43
2011.06.26
2 таблицы Firebird


4-1227677945
Саня
2008-11-26 08:39
2011.06.26
Перехват названий окон и приложений


15-1299249466
OW
2011-03-04 17:37
2011.06.26
Спрошу, а вдруг..