Форум: "Начинающим";
Текущий архив: 2011.06.26;
Скачать: [xml.tar.bz2];
ВнизУмножение полиномов (многочленов) Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c