Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.03.2011, 17:50
Новичок

Отправить личное сообщение для neitrosha Посмотреть профиль Найти все сообщения от neitrosha
 
Регистрация: 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"), и так далее.

нужна процедура перемножения...
  #2  
Старый 20.03.2011, 19:35
гocть

 
Сообщений: n/a

Пусть P(x) = a0 + a1 x + a2 x^2 + ... a_n x^n - первый многочлен и Q(x) = b0 + b1 x + ... + b_m x^m - второй многочлен.

Тогда их произведение равно P(x) * Q(x) = c0 + c1 x + ... + c_{n+m} x^{n+m}, где c_i = \sum_{j=0}^i a_j b_{i-j}.


Замечания по коду:
связные списки - в топку, здесь нужны массивы
делфи - в топку, давно морально устарел
  #3  
Старый 20.03.2011, 19:55
Новичок

Отправить личное сообщение для neitrosha Посмотреть профиль Найти все сообщения от neitrosha
 
Регистрация: 20.03.2011
Сообщений: 18

согласен так-то. проблема в том, что мы работаем в дельфи.
можете помочь, написав хотя бы часть кода на умножение?
  #4  
Старый 20.03.2011, 20:17
MBo MBo вне форума
Местный

Отправить личное сообщение для MBo Посмотреть профиль Найти все сообщения от MBo
 
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,374

Перейдите, как уже сказали, на массивы, и вопрос решится с помощью пары простых циклов.
  #5  
Старый 20.03.2011, 20:45
Новичок

Отправить личное сообщение для neitrosha Посмотреть профиль Найти все сообщения от neitrosha
 
Регистрация: 20.03.2011
Сообщений: 18

то есть неважно, что предыдущая часть программы сделана на списках?
просто уже сделать ее массивами, да?
  #6  
Старый 20.03.2011, 22:37
гocть

 
Сообщений: n/a

да, тут гораздо проще хранить коэффициенты в массиве и переписать ваш существующий код, его и так мало

можно конечно, и со списками все делать, но, боюсь, сортировку списков слиянием, чтобы собирать коэффициенты при одинаковых степенях, вы не осилите. так что лучше делайте все с нуля и с массивами
  #7  
Старый 21.03.2011, 22:46
MBo MBo вне форума
Местный

Отправить личное сообщение для MBo Посмотреть профиль Найти все сообщения от MBo
 
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,374

>то есть неважно, что предыдущая часть программы сделана на списках?
Да можно и на списках сделать, только их для умножения удобнее, видимо, сделать двунаправленными (поскольку степени одного из полиномов обходятся в обратном порядке).
В таком случае будет преимущество для полиномов высоких степеней (в которых лишь часть коэфф. ненулевые), например, (x^100 - 1) * (x^1000 + x)
  #8  
Старый 23.03.2011, 19:33
Новичок

Отправить личное сообщение для neitrosha Посмотреть профиль Найти все сообщения от neitrosha
 
Регистрация: 20.03.2011
Сообщений: 18

а как можно реализовать это с помощью списков?
просто посмотрел, как находится сумма, немного испугало
  #9  
Старый 24.03.2011, 02:29
Rayaz

 
Сообщений: n/a

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

 
Сообщений: n/a

реализация на delphi.
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение :) Named Реализация, исходники, языки 4 05.01.2011 00:16
СЛОЖЕНИЕ рвзность произведение ПОЛИНОМОВ гость Реализация, исходники, языки 5 29.11.2009 18:38
графическое умножение persicum Математические алгоритмы 4 28.01.2007 22:43
графическое умножение persicum Математические алгоритмы 0 14.01.2007 18:23
быстрое умножение на дельфи persicum Реализация, исходники, языки 0 11.01.2007 14:26