Главная страница
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.47 MB
Время: 0.012 c
15-1294522629
двп
2011-01-09 00:37
2011.06.26
Система удаленного администрирования, потестить


2-1300180531
cross
2011-03-15 12:15
2011.06.26
как корректно заэнаблить контролы


2-1300254324
Andrey_1
2011-03-16 08:45
2011.06.26
DbGrid-ячейка в две строки


15-1299072313
Leon-Z
2011-03-02 16:25
2011.06.26
Создание ИИ.


3-1261465889
Lowlander
2009-12-22 10:11
2011.06.26
Перенос связанных таблиц Paradox на другой комп.