Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двунаправленный линейный список, реал-ия полиномов и операций над ними 
:(
    Опции темы
bip
Дата 6.5.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 15.3.2007

Репутация: нет
Всего: нет



Код


unit unit2;

interface
{---}
procedure InitL2;
procedure WriteL2;
procedure InsertL2(P:PZveno2; z1,z2:intger);
procedure DeleteL2(D:Pzveno2;var z1,z2:values);
{--------------------------------------------------------------}
type
values=record
x,y:integer;
end;
{--------------------------------------------------------------}
type PZveno2=^TZveno2;
TZveno2=receord next,pred:PZveno:info:values;end;
varFirst, Last:PZveno;{ykazateli na pervoe i poslednee zveno}
{--------------------------------------------------------------}
implementation
{---}
procedure InitL2; begin First:=nil;Last:=nil;end;
{--------------------------------------------------------------}
procedure WriteL2;
var P:PZveno;
 begin
 P:=Last;
   while P<>nil do begin
     Write(P^.info.x);
     Write(P^.info.y);
     P:=P^.pred;
   end;
 end;
{---------------------------------------------------------------}
procedure InsertL2(P:PZveno2; z1,z2:intger);
var
N,S:PZveno2;
begin
 new(N); N^.info.x:=z1;N^.info.y:=z2;
 if P=nil then S:=First else S:=P^.next;
 N^.next:=S;
 if P=nil then First:=N else P^.next:=N;
 N^.pred:=P;
 if S=nil then Last:=N else S^.pred:=N;
end;
{-----------------------------------------------------------------}
procedure DeleteL2(D:Pzveno2;var z1,z2:values);
var
P,S:PZveno2;
begin
 P:=D^.pred; S:=D^.next;
 if P=nil then First:=S else P^.next:=S;
 if S=nil then Last:=P else S^.pred:=P;
 z1:=D^.info.x;
 z2:=D^.info.y;
 dispose(D);
end;
{------------------------------------------------------------------}
end.

вот модуль для работы с двунаправленным списком.
Вопрос: как выполнить следующие операции над полиномами:сложение, двух с получением третьего,умножение двух с получением третьего и дифференцирование,  инициализация многочлена по заданной строке, изоб-ей его алгеб-ую запись.
У кого какие мысли? smile 
PM MAIL ICQ   Вверх
XupyprMV
Дата 6.5.2007, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 16.10.2006
Где: Сыктывкар, Россия

Репутация: нет
Всего: нет



В списке храним коэффициенты перед соответствуюзими степениями х начиная с константы (1,x,x^2 и т. д.)

все эти операции реализуются аналогично длинной арифметике для чисел, за исключением того что длинную арифметику обычно на массивах пишут, а тебе нужно со списками...
PM MAIL WWW ICQ   Вверх
bip
Дата 6.5.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 15.3.2007

Репутация: нет
Всего: нет



ок надо  по разбираться, примерчик бы smile 
PM MAIL ICQ   Вверх
XupyprMV
Дата 7.5.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 16.10.2006
Где: Сыктывкар, Россия

Репутация: нет
Всего: нет



Пример длинной арифметики на массивах. Просьба сильно не пинать - код не тестил... но он компилится  smile 

Код

{$APPTYPE CONSOLE}
uses Math;

const MAXN=1000;
type polycoeff=record
      a:array[0..MAXN]of longint;
      len:longint;
     end;

function len(x:polycoeff):longint;
var i:longint;
begin
 i:=MAXN;
 while (i>=0)and(x.a[i]=0) do dec(i);
 len:=i;
end;

function add(x,y:polycoeff):polycoeff;
var i:longint;
    z:polycoeff;
begin
z.len:=max(x.len,y.len);
for i:=0 to z.len do
 begin
  z.a[i+1]:=(x.a[i]+y.a[i])div 10;
  z.a[i]:=z.a[i]+(x.a[i]+y.a[i]) mod 10;
 end;
 z.len:=len(z);
 add:=z;
end;

function mul(x,y:polycoeff):polycoeff;
var i,j:longint;
    z:polycoeff;
begin
for i:=0 to MAXN do z.a[i]:=0;
for i:=0 to x.len do
 for j:=0 to y.len do
 begin
  z.a[i+j]:=z.a[i+j]+x.a[i]*y.a[i];
 end;
 z.len:=len(z);
 mul:=z;
end;

function dif(x:polycoeff):polycoeff;
var i,j:longint;
    z:polycoeff;
begin
for i:=0 to MAXN do z.a[i]:=0;
for i:=1 to x.len do
 z.a[i-1]:=x.a[i]*i;
 z.len:=len(z);
 dif:=z;
end;

begin

end.

PM MAIL WWW ICQ   Вверх
bip
Дата 7.5.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 15.3.2007

Репутация: нет
Всего: нет



 smile  . Я так понимаю надо бежать по двум спискам , по узлам и складывать если их степени одинаковы, да?
PM MAIL ICQ   Вверх
XupyprMV
Дата 8.5.2007, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 16.10.2006
Где: Сыктывкар, Россия

Репутация: нет
Всего: нет



Для суммы можно просто параллельно бежать...

Для умножения придётся повозится...

Дифференцирования ты уже понял - достаточно просто делается...

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.