Многочлен
имеет разложение в виде .Я составила программу для разложения многочлена на кратные множители.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
SGd1: TStringGrid;
Label2: TLabel;
Button1: TButton;
Label3: TLabel;
SGd2: TStringGrid;
SGd3: TStringGrid;
SGd4: TStringGrid;
Edit6: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
c,i,st1,st2,stiz,n_iz,n_nod,n,m,d_st,step,f:integer;
k,d,s:string;
kof1,kof2,k1,k2,izubst,a,b,a2,b2,buf,est,fxst:array[0..15] of integer;
izub,e,fx:array[0..50,0..50] of integer;
first:boolean;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i,j,k_1,st3,l:integer;
sokr:boolean;
k2_2,k1_1:array[0..10] of integer;
begin
st1:=StrToInt(Edit1.Text);
for i:=0 to st1 do begin
SGd4.Cells[i,0]:=SGd1.Cells[i,0];
end;
repeat
n_iz:=n_iz+1;
st2:=st1-1;
for i:=0 to st1 do begin
if SGd1.Cells[i,0]<>'' then
kof1[st1-i]:=StrToInt(SGd1.Cells[i,0])
elseMessageDlg('Внимание! Не введены значения коэффициентов!',mtWarning,[mbOK],0);
end;
s:='f(x)=';
for i:=st1 downto 0 do begin
if kof1[i]<>0 then begin
if(kof1[i-1]<0)or(i=0) then begin
str(kof1[i],d);
str(i,k);
s:=s+d+'x^'+k;
end
else begin
str(kof1[i],d);
str(i,k);
s:=s+d+'x^'+k+'+';
end;
end;
kof2[i-1]:=kof1[i]*i;
end;
//Edit2.Text:=s;
s:='f1(x)=';
for i:=st2 downto 0 do begin
SGd2.Cells[st2-i,0]:=inttostr(kof2[i]);
if kof2[i]<>0 then begin
if(kof2[i-1]<0)or(i=1) then begin
str(kof2[i],d);
str(i-1,k);
s:=s+d+'x^'+k;
end
else begin
str(kof2[i],d);
str(i-1,k);
s:=s+d+'x^'+k+'+';
end;
end;
//Edit3.Text:=s;
end;
for i:=0 to st1 do begin
kof1[i]:=StrToInt(SGd1.Cells[i,0]);
k1[i]:=StrToInt(SGd1.Cells[i,0]);
end;
for i:=0 to st2 do begin
kof2[i]:=StrToInt(SGd2.Cells[i,0]);
k2[i]:=StrToInt(SGd2.Cells[i,0]);
end;
while kof2[0]<>0 do begin
repeat
//Edit4.Text:='';
stiz:=0;
k_1:=k1[0];
if k1[0]<>kof2[0] then begin
if (k1[0] mod kof2[0])=0 then begin
for j:=0 to st2 do
k2[j]:=(k1[0] div kof2[0])*kof2[j];
end
else begin
if k2[0]<>1 then
for j:=0 to st1 do
k1[j]:=kof2[0]*k1[j];
if k_1<>1 then begin
for j:=0 to st2 do
k2[j]:=k_1*kof2[j];
end;
end;
end;
for i:=1 to st1 do begin
k1[i-1]:=k1[i]-k2[i];
end;
st1:=st1-1;
until st1<st2;
if k1[0]<>0 then begin //Сокращение
sokr:=true;
for i:=1 to st1 do
if k1[i]<>0 then begin
if (k1[i] mod k1[0])<>0 then sokr:=false;
end;
k_1:=k1[0];
if sokr=true then
for i:=0 to st1 do
k1[i]:=k1[i] div k_1;
end;
for i:=0 to st2 do //Замена многочленов
k2_2[i]:=kof2[i];
for i:=0 to st1 do
k1_1[i]:=k1[i];
for i:=0 to 10 do begin
SGd3.Cells[i,0]:='';
SGd1.Cells[i,0]:='';
kof1[i]:=0;
k1[i]:=0;
kof2[i]:=0;
k2[i]:=0;
izub[n_iz,i]:=0;
end;
izubst[n_iz]:=st2;
for i:=0 to st2 do begin
k1[i]:=k2_2[i];
SGd1.Cells[i,0]:=inttostr(k1[i]);
izub[n_iz,i]:=k1[i];
if k1[i]<>0 then begin
//Edit4.Text:=Edit4.Text+IntToStr(k1[i])+'x^'+IntToStr(st2-i);
end;
if (k2_2[i+1]>0)and(i<st2) then //Edit4.Text:=Edit4.Text+'+';
end;
for i:=0 to st1 do begin
k2[i]:=k1_1[i];
kof2[i]:=k1_1[i];
end;
st3:=st1;
st1:=st2;
st2:=st3;
end;
until (st1=0);
d_st:=StrToInt(Edit1.Text);
for i:=d_st+1 downto 1 do begin
kof1[i]:=StrToInt(SGd4.Cells[d_st-(i-1),0]);
end;
//Нахождение Е
first:=true;
for n_nod:=1 to n_iz do begin
n:=d_st;
m:=izubst[n_nod];
d_st:=m;
for i:=n+1 downto 1 do begin
a[i]:=kof1[i];
end;
for i:=m+1 downto 1 do begin
b[i]:=izub[n_nod,m-(i-1)];
kof1[i]:=b[i];
end;
s:='f1(x)=';
for i:=n+1 downto 1 do begin
if a[i]<>0 then begin
if(a[i-1]<0)or(i=1) then begin
str(a[i],d);
str(i-1,k);
s:=s+d+'x^'+k;
end
else begin
str(a[i],d);
str(i-1,k);
s:=s+d+'x^'+k+'+';
end;
end;
end;
//Edit3.Text:=s;
s:='f2(x)=';
for i:=m+1 downto 1 do begin
if b[i]<>0 then begin
if(b[i-1]<0)or(i=1) then begin
str(b[i],d);
str(i-1,k);
s:=s+d+'x^'+k;
end
else begin
str(b[i],d);
str(i-1,k);
s:=s+d+'x^'+k+'+';
end;
end;
end;
//Edit4.Text:=s;
for j:=n+1 downto 1 do begin
a2[j]:=a[j];
b2[j]:=0;
end;
step:=n-m;
f:=n+2;
for i:=step+1 downto 1 do begin
f:=f-1;
buf[i]:=a2[f];
for j:=m+1 downto 1 do begin
b2[j]:=buf[i]*b[j];
end;
for j:=f downto 1 do begin
a2[j]:=a2[j]*b[m+1];
end;
for j:=f downto 1 do begin
a2[j]:=a2[j]-b2[j+1-i];
b2[j]:=0;
end;
end;
s:='h(x)=';
for i:=f+1 downto 1 do begin
e[n_nod,i]:=buf[i];
if buf[i]<>0 then begin
if(buf[i-1]<0)or(i=1) then begin
str(buf[i],d);
str(i-1,k);
s:=s+d+'x^'+k;
end
else begin
str(buf[i],d);
str(i-1,k);
s:=s+d+'x^'+k+'+';
end;
buf[i]:=0;
end;
end;
est[n_nod]:=f;
//Edit5.Text:=s;
s:='r(x)=';
for i:=n downto 0 do begin
if a2[i]<>0 then begin
if(a2[i-1]<0)or(i=1) then begin
str(a2[i],d);
str(i-1,k);
s:=s+d+'x^'+k;
end
else begin
str(a2[i],d);
str(i-1,k);
s:=s+d+'x^'+k+'+';
end;
end;
end;
Edit6.Text:=s;
first:=false;
end;
for n_nod:=1 to n_iz-1 do begin
n:=est[n_nod];
m:=est[n_nod+1];
d_st:=m;
for i:=n+1 downto 1 do begin
a[i]:=e[n_nod,i];
end;
for i:=m+1 downto 1 do begin
b[i]:=e[n_nod+1,i];
kof1[i]:=b[i];
if n_nod=n_iz-1 then fx[n_iz,i]:=b[i];
end;
s:='f1(x)=';
for i:=n+1 downto 1 do begin
if a[i]<>0 then begin if(a[i-1]<0)or(i=1) then begin
str(a[i],d);
str(i-1,k);
s:=s+d+'x^'+k;
end
else begin
str(a[i],d);
str(i-1,k);
s:=s+d+'x^'+k+'+';
end;
end;
end;
//Edit3.Text:=s;
s:='f2(x)=';
for i:=m+1 downto 1 do begin
if b[i]<>0 then begin if(b[i-1]<0)or(i=1) then begin
str(b[i],d);
str(i-1,k);
s:=s+d+'x^'+k;
end
else begin
str(b[i],d);
str(i-1,k);
s:=s+d+'x^'+k+'+';
end;
end;
end;
//Edit4.Text:=s;
for j:=n+1 downto 1 do begin
a2[j]:=a[j];
b2[j]:=0;
end;
step:=n-m;
f:=n+2;
for i:=step+1 downto 1 do begin
f:=f-1;
buf[i]:=a2[f];
for j:=m+1 downto 1 do begin
b2[j]:=buf[i]*b[j];
end;
for j:=f downto 1 do begin
a2[j]:=a2[j]*b[m+1];
end;
for j:=f downto 1 do begin
a2[j]:=a2[j]-b2[j+1-i];
b2[j]:=0;
end;
end;
s:='h(x)=';
for i:=f+1 downto 1 do begin
fx[n_nod,i]:=buf[i];
if buf[i]<>0 then begin if(buf[i-1]<0)or(i=1) then begin
str(buf[i],d);
str(i-1,k);
s:=s+d+'x^'+k;
end
else begin
str(buf[i],d);
str(i-1,k);
s:=s+d+'x^'+k+'+';
end;
buf[i]:=0;
end;
end;
//Edit5.Text:=s;
fxst[n_nod]:=f;
s:='r(x)=';
for i:=n downto 0 do begin
if a2[i]<>0 then begin if(a2[i-1]<0)or(i=1) then begin
str(a2[i],d);
str(i-1,k);
s:=s+d+'x^'+k;
end
else begin
str(a2[i],d);
str(i-1,k);
s:=s+d+'x^'+k+'+';
end;
end;
end;
Edit6.Text:=s;
end;
fxst[n_iz]:=est[n_iz]+1;
Edit6.Text:='';
s:='';
for i:=1 to n_iz do begin
s:=s+'(';
for j:=fxst[i] downto 0 do begin
if fx[i,j]<>0 then begin
if(fx[i,j-1]<0)or(j=1) then begin
str(fx[i,j],d);
str(j-1,k);
s:=s+d+'x^'+k;
end
else begin
str(fx[i,j],d);
str(j-1,k);
s:=s+d+'x^'+k+'+';
end;
end;
end;
s:=s+')^'+IntToStr(i)+' ';
Edit6.Text:=Edit6.Text+s;
s:='';
end;
for i:=0 to 10 do begin
SGd1.Cells[i,0]:=SGd4.Cells[i,0];
end;
end;
end.
При выполнении дипломной работы я рассмотрела следующие вопросы:
– делимость многочленов;
– деление многочленов с остатком;
– наибольший общий делитель, алгоритм Евклида;
– кратные корни;
– кратные множители, выделение кратных множителей;
– производные от многочленов.
Составила программы для нахождения частного и остатка при делении многочленов; наибольшего общего делителя двух многочленов; производной многочлена.
1. Алгебра и теория чисел. Под ред. Н.Я. Виленкина. Москва: Просвещение, 1984.
2. Архангельский А. Я. Программирование в Delphi 6. Москва: ЗАО Бином, 2003.
3. Архангельский А. Я. Delphi 7. Справочное пособие. Москва: ООО Бином-Пресс, 2004.
4. Курош А. Г. Курс высшей алгебры. Москва: Наука, 1971.
5. Ляпин Е. С., Евсеев А. Е. Алгебра и теория чисел. Часть II. Линейная алгебра и полиномы. Москва: Просвещение, 1978.
6. Мантуров О. В. и др. Математика в понятиях, определениях и терминах. Часть 2. Москва: Просвещение, 1982.
7. Попов В.Б. TurboPascal. Москва: Финансы и статистика, 2000.
8. Потапов М. К., Александров В. В., Пасиченко П. И. Алгебра и анализ элементарных функций. Москва: Наука, 1980.
9. Сабинина Л. В. Математика в понятиях, определениях и терминах. Часть I. Москва: Просвещение, 1978.
10. Сборник задач по алгебре. Под ред. А. И. Кострикина. Москва: Наука, 1987.
11. Смолин Ю. Н. Алгебра и теория чисел. Перемь:1996.
12. Солодовников А. С., Родина М. А. Задачник-практикум по алгебре. Часть IV. Москва: Просвещение, 1985.
13. Фадеев Д. К. Лекции по алгебре. Москва: Наука, 1984.
14. Фадеев Д. К., Соминский И. С. Сборник задач по высшей алгебре. Москва: Наука, 1968.
15. Шварцбурд С. И. Избранные вопросы математики. Москва: Просвещение, 1980.