|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.12.2011, 18:39 | #1 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
Деление многочлена на многочлен
Как это сделать?
Многочлен представлен в виде динам списка пар(степень, многочлен). |
10.12.2011, 20:42 | #2 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
Найди на просторах Интернет книжку: Компьютерная алгебра.
Как-то так: coaBook.pdf. Там есть большая часть ответа на поставленный вопрос. В том числе и код на Паскале и не только.
Как-то так, ...
|
10.12.2011, 21:50 | #3 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
А автора или год издания не подскажите, не могу найти.
|
10.12.2011, 22:00 | #4 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
Книгу нашёл... исходника там и близко нет, только для умножения.
|
10.12.2011, 22:42 | #5 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
type pnode=^node;
node=record a:real; q:integer; prev, nextnode; end; var head,tail, head2,tail2, rhead,rtailnode; //деление 1 (head,tail) на второй (head2,tail2) многочлен procedure del; var p,r,z,newnode,one,tone,two,ttwo,otn ,totn,result,tresultnode; a:real; q:integer; begin if ((head<>nil) and (head2<>nil)) then begin one:=nil; tone:=nil; two:=nil; ttwo:=nil; result:=nil; tresult:=nil; p:=head; while p<>nil do begin newnode:=createnode(p^.a,p^.q); addend(one,tone,newnode); p:=p^.next; end; p:=head2; while p<>nil do begin newnode:=createnode(p^.a,p^.q); addend(two,ttwo,newnode); p:=p^.next; end; p:=one; r:=two; while p<>nil do begin if p^.q<r^.q then break; a:=p^.a/r^.a; q:=p^.q-r^.q; newnode:=createnode(a,q); addend(result,tresult,newnode); otn:=nil; totn:=nil; z:=head2; while z<>nil do begin newnode:=createnode(z^.a*a,z^.q+q); addend(otn,totn,newnode); z:=z^.next; end; minus(one,tone,otn,totn); p:=one; end; write('Результат деления: '); print(result,tresult); if p<>nil then begin write('+('); print(one,tone); write(')/('); print(two,ttwo); writeln(')'); end; writeln; end else writeln('Îøèáêà. Îäèí èëè îáà ìíîãî÷ëåíà íå ñîçäàíû.') end; //вычитание из многочлена one многочлен two, запись в one procedure minus(var one,tone,two,ttwonode); var p,q,rhead,rtai,newnodenode; begin rhead:=nil; rtail:=nil; p:=one; while p<>nil do begin newnode:=createnode(p^.a,p^.q); addend(rhead,rtail,newnode); p:=p^.next; end; p:=two; while p<>nil do begin newnode:=createnode(p^.a*-1,p^.q); addend(rhead,rtail,newnode); p:=p^.next; end; preobr(rhead,rtail); one:=rhead; tone:=rtail; rhead:=nil; rtail:=nil; end; |
10.12.2011, 22:42 | #6 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
//преобразование многочлена
procedure preobr(var rhead,rtailnode); var thead,ttail,p,newnode,qnode; tempa:real; begin sort(rhead,rtail); ttail:=nil; thead:=nil; p:=rhead; tempa:=p^.a; p:=p^.next; while p<>nil do begin if p^.q=p^.prev^.q then tempa:=tempa+p^.a else begin if tempa<>0 then begin newnode:=createnode(tempa,p^.prev^. q); addend(thead,ttail,newnode); end; tempa:=p^.a; end; if p^.next=nil then begin if tempa<>0 then begin newnode:=createnode(tempa,p^.q); addend(thead,ttail,newnode); end; end; p:=p^.next; end; q:=rhead; while q<>nil do begin p:=q; q:=q^.next; dispose(p); end; rhead:=thead; rtail:=ttail; end; // сортировка пузырком procedure sort(var head,tailnode); var a:array [1..50] of pnode; p,temp,temp2node; i,j,n:integer; begin if head<>nil then begin p:=head; i:=1; while p<>nil do begin a[i]:=p; p:=p^.next; if p<>nil then i:=i+1; end; head:=nil; tail:=nil; n:=i; for i:=1 to n-1 do begin for j:=n-1 downto i do begin temp:=a[j]; temp2:=a[j+1]; if temp^.q<temp2^.q then begin p:=a[j]; a[j]:=a[j+1]; a[j+1]:=p; end; end; end; for i:=1 to n do addend(head,tail,a[i]); end else writeln('Ошибка.'); end; Работает только если второй(на который делим) многочлен состоит из одного элемента |
11.12.2011, 15:28 | #7 |
Пользователь
Регистрация: 10.12.2011
Сообщений: 32
|
В чём ошибка? Помогите.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
С++ вычислить многочлен | vlas | Помощь студентам | 0 | 24.10.2010 12:45 |
Подстановка в многочлен | pasha92 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 28.05.2010 20:20 |
Многочлен чебышева | Rыся | Помощь студентам | 2 | 11.01.2010 08:37 |
Многочлен. | Chudo4258 | Помощь студентам | 2 | 10.05.2009 14:02 |
Интерполяционный многочлен лагранжа | 3.14oner | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 10.11.2008 17:30 |