Автор: Пользователь скрыл имя, 25 Декабря 2010 в 14:09, курсовая работа
При выполнении работы можно использовать следующее понимание полинома. Полином состоит из мономов. Каждый моном характеризуется коэффициентом Coef и степенями переменных A, B, C: Coef*xAyBzC. Величину степеней переменных можно ограничить значением 9. При таком предположении максимально возможное количество мономов в полиноме - 1000. Полином разрежен, если по сравнению с максимально возможным количеством мономов он имеет относительно небольшое количество отличных от нуля коэффициентов. Например, у полинома P(x,y,z) отличных от нуля коэффициентов всего 4.
Любое поле представляет собой область единственного разложения на множители, в которой каждый ненулевой элемент обратим и в которой не существует простых элементов. Целые числа образуют область единственного разложения, в которой обратимые элементы +1 и —1, а простые —±2, ±3, ±5, ±7, ±11 и т. д. Случай, когда S содержит все целые числа, принципиален, поскольку зачастую предпочтительнее работать с целыми коэффициентами, а не с произвольными рациональными.
Одним из ключевых фактов, связанных с полиномами, является то, что полиномы над областью единственного разложения образуют область единственного разложения. Полином, который является простым в этой области, обычно называется неприводимым. Многократно используя теорему о единственности разложения, можно доказать, что полиномы от нескольких переменных над множеством целых чисел или над любым полем с любым числом переменных могут быть единственным образом разложены на неприводимые полиномы. Например, полином от трех переменных 90x^3 — 120х^2у + l8x^2yz - 24xy^2z над целыми числами представляет собой произведение пяти неприводимых полиномов 2*3*х*(3х—4у)*(5х+yz). Тот же полином над рациональными числами является произведением трех неприводимых полиномов (6х) (3х — 4у) • (5х + yz). Это разложение может быть записано как х • (90x - 120у) • (х + (1/5)yz) и еще бесконечным числом способов, хотя разложение, по существу, единственно.
Как обычно, мы говорим, что u(х) кратен полиному v(x), a v(x) является делителем u(х), если u(х) = v(x)q(x) для некоторого полинома q(x). Если есть алгоритм, который определяет, является ли и кратным v для произвольных ненулевых элементов u и v некоторой области единственного разложения S, и позволяет определить w, если u = v * w, то алгоритм дает метод для выяснения, является ли u(х) кратным v(x) для произвольных ненулевых полиномов u(х) и v(x) над S. Если u(х) кратно v(x), легко увидеть, что un+k должно быть кратно vn при переходе к шагу D2; отсюда будет найдено частное u(x)/v(x). Применяя это наблюдение рекурсивно, получим алгоритм, который отвечает на вопрос, является ли данный полином над S от любого числа переменных кратным другому полиному над S, а также алгоритм, который будет находить частное, если таковое существует.
Множество
элементов области
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, Grids, Menus;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
Label2: TLabel;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
Label3: TLabel;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Label4: TLabel;
procedure FormCreate(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const n=5;
type mas1=array [1..n] of integer;
type mas2=array [1..n,1..n]of integer;
type mas3=array [1..n*2] of integer;
type mas4=array [1..n*2,1..n*2] of integer;
var
Form1: TForm1;
x1,x2,y1,y2:mas1;
x1y1,x2y2:mas2;
s1,s2:string;
xr,yr:mas1;
xyr:mas2;
xr1,yr1:mas3;
xyr1:mas4;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=1 to n do
begin
stringgrid1.Cells[i-1,0]:=
stringgrid2.Cells[i-1,0]:=
stringgrid3.Cells[i,0]:=
stringgrid3.Cells[0,i]:=
end;
end;
procedure TForm1.N5Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var k,i:integer;
begin
randomize;
s1:='';
for i:=1 to n do
begin
k:=random(2);
if k=1 then x1[i]:=random(10)-4
else x1[i]:=0;
stringgrid1.Cells[i-1,1]:=
end;
for i:=1 to n do
if x1[i]<>0
then s1:=s1+'+('+inttostr(x1[i])+'*
end;
procedure TForm1.Button2Click(Sender: TObject);
var k,i:integer;
begin
randomize;
s2:='';
for i:=1 to n do
begin
k:=random(2);
if k=1 then x2[i]:=random(10)-4
else x2[i]:=0;
stringgrid1.Cells[i-1,2]:=
end;
for i:=1 to n do
if x2[i]<>0
then s2:=s2+'+('+inttostr(x2[i])+'*
end;
procedure TForm1.Button3Click(Sender: TObject);
var k,i:integer;
begin
randomize;
for i:=1 to n do
begin
k:=random(2);
if k=1 then y1[i]:=random(10)-4
else y1[i]:=0;
stringgrid2.Cells[i-1,1]:=
end;
for i:=1 to n do
if y1[i]<>0
then s1:=s1+'+('+inttostr(y1[i])+'*
end;
procedure TForm1.Button4Click(Sender: TObject);
var k,i:integer;
begin
randomize;
for i:=1 to n do
begin
k:=random(2);
if k=1 then y2[i]:=random(10)-4
else y2[i]:=0;
stringgrid2.Cells[i-1,2]:=
end;
for i:=1 to n do
if y2[i]<>0
then s2:=s2+'+('+inttostr(y2[i])+'*
end;
procedure TForm1.Button5Click(Sender: TObject);
var k,i,j:integer;
begin
memo1.Lines.Add('Первый многочлен');
randomize;
for i:=1 to n do
for j:=1 to n do
begin
k:=random(2);
if k=1 then x1y1[i,j]:=random(10)-4
else x1y1[i,j]:=0;
stringgrid3.Cells[i,j]:=
end;
for i:=1 to n do
for j:=1 to n do
if x1y1[i,j]<>0
then s1:=s1+'+('+inttostr(x1y1[i,j]
memo1.Lines.Add(s1);
end;
procedure TForm1.Button6Click(Sender: TObject);
var k,i,j:integer;
begin
memo1.Lines.Add('Второй многочлен');
randomize;
for i:=1 to n do
for j:=1 to n do
begin
k:=random(2);
if k=1 then x2y2[i,j]:=random(10)-4
else x2y2[i,j]:=0;
stringgrid3.Cells[i,j]:=
end;
for i:=1 to n do
for j:=1 to n do
if x2y2[i,j]<>0
then s2:=s2+'+('+inttostr(x2y2[i,j]
memo1.Lines.Add(s2);
end;
procedure TForm1.N2Click(Sender: TObject);
var i,j:integer;
begin
memo1.Lines.Add('Сложение');
s1:='';
for i:=1 to n do
begin
xr[i]:=x1[i]+x2[i];
yr[i]:=y1[i]+y2[i];
end;
for i:=1 to n do
for j:=1 to n do
xyr[i,j]:=x1y1[i,j]+x2y2[i,j];
for i:=1 to n do
if xr[i]<>0 then
s1:=s1+'+('+inttostr(xr[i])+'
for i:=1 to n do
if yr[i]<>0 then
s1:=s1+'+('+inttostr(yr[i])+'
for i:=1 to n do
for j:=1 to n do
if xyr[i,j]<>0 then
s1:=s1+'+('+inttostr(xyr[i,j])
memo1.Lines.Add(s1);
end;
procedure TForm1.N3Click(Sender: TObject);
var i,j:integer;
begin
memo1.Lines.Add('Вычитание');
s1:='';
for i:=1 to n do
begin
xr[i]:=x1[i]-x2[i];
yr[i]:=y1[i]-y2[i];