Читать реферат по математике: "Разложение рациональной дроби на простейшие." Страница 6
TButton;
Memo1: TMemo;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit4: TEdit;
procedure Button1Click(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure Polinommul(a:polinom;n:byte;b:polinom;m:byte;var ab:polinom;var nm:byte);
procedure GetPolinom(r:fpolinoms;step:byte;flag:boolean;numdrob:byte;var res:polinom);
procedure Calculate(mass1:polinom;n:integer;var formula:string);
end;
const
n10 =10;
var
Form1: TForm1;
n1,n2,s1,s2:shortint;
roots1,roots2,znamen,matr:fpolinoms;
pol1,pol2,chislit:polinom;
matr1,koef:matdouble;
mass1:array of real;
elem:array[0..n10] of string[10];
equation,eq1,eq2,eq3:string;
implementation
{$R *.dfm}
Процедура перемножения объектов типа polinom, т. е. массивов с коэффициентами многочленов и получения результата их перемножения:procedure TForm1.Polinommul(a:polinom;n:byte;b:polinom;m:byte;var ab:polinom;var nm:byte);
var
temp:real;
i,j,t:shortint;
p1:polinom;
begin
setlength(p1,m+n+1);
setlength(ab,m+n+1);
temp:=0;
for i:=0 to m+n do p1[i]:=0;
for i:=0 to n do
for j:=0 to m do
begin
temp:=a[i]*b[j];
p1[i+j]:=p1[i+j]+temp;
end;
nm:=n+m;
ab:=p1;
{ t:=0;
for i:=0 to m+n do
if p1[i]=0 then
begin
t:=i+1;
continue;
end
else break;
setlength(ab,m+n-t);
for i:= 0 to m+n-t+1 do
ab[i]:=p1[i+t];
nm:=m+n-t+1; }
end;
Процедура, которая из массива многочленов делает многочлен – или результат их перемножения – или произведение, но без i-го члена, в зависимости от flag.procedure TForm1.GetPolinom(r:fpolinoms;step:byte;flag:boolean;numdrob:byte;var res:polinom);
var
buffer,buffer1,temp:polinom;
i,j,p,p1:byte;
flag1:boolean;
begin
if not(flag) then
begin
setlength(buffer,2);
setlength(buffer1,2);
setlength(temp,2);
buffer[0]:=r[0,0];
buffer[1]:=r[0,1];
p:=1;
p1:=1;
for i:=1 to step do
begin
setlength(temp,p1+1);
for j:=0 to 1 do buffer1[j]:=r[i,j];
Form1.Polinommul(buffer,p,buffer1,1,temp,p1);
setlength(buffer,p1);
buffer:=temp;
p:=p1;
end;
end
else
begin
setlength(buffer,2);
setlength(buffer1,2);
setlength(temp,2);
buffer[0]:=0;
buffer[1]:=1.0;
p:=0;
p1:=0;
for i:=0 to step do
begin
if numdrob = i then
begin
buffer1[0]:=0;
buffer1[1]:=1.0;
end;
if numdrobi then inc(p);
if numdrobi then for j:=0 to 1 do buffer1[j]:=r[i,j];
if numdrob=i then
begin
Form1.Polinommul(buffer,p,buffer1,1,temp,p1);
continue;
end;
Form1.Polinommul(buffer,p,buffer1,1,temp,p1);
if numdrobi then setlength(buffer,p1);
buffer:=temp;
end;
end;
setlength(res,p1);
res:=buffer;
end;
Основной текст программы, вбирающий в себя процедуры и реализовающий сам процесс разложения на простые множители. Его я повесил на кнопку:procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k:byte;
temp:polinom;
st1,st2,st3,stt:string;
begin
Form1.Edit1.Text:='';
Form1.Edit2.Text:='';
Form1.Edit3.Text:='';
Form1.Edit4.Text:='';
n1:=strtoint(Form1.SpinEdit1.Text);
n2:=strtoint(Form1.SpinEdit2.Text)-1;
setlength(chislit,n1+1);
setlength(roots2,n2+1,2);
setlength(znamen,n2,n2);
for i:=0 to n1 do
begin
chislit[i]:=strtofloat(Form1.StringGrid1.Cells[i,0]);
end;
for i:=0 to n2 do
begin
roots2[i,0]:=1.0;
roots2[i,1]:=-strtofloat(Form1.StringGrid2.Cells[i,0]);
end;
form1.GetPolinom(roots2,n2,false,0,pol2);
setlength(temp,n2+1);
for i:=0 to n2 do
begin
for k:=0 to n2 do temp[k]:=0;
form1.GetPolinom(roots2,n2,true,i,temp);
for j:=0 to n2 do
Form1.Edit3.Text:= Form1.Edit3.Text+getfstring(temp[j+1],1)+' ';
for k:=0 to n2 do temp[k]:=0;
end;
form1.Calculate(chislit,n1+1,st1);
form1.Calculate(pol2,n2+2,st2);
Form1.Edit1.Text:=st1;
Form1.Edit2.Text:=st2;
{for i:=0 to n1 do
Form1.Edit1.Text:=Form1.Edit1.Text+getfstring(chislit[i],1)+' ';
for i:=0 to n2+1 do
Form1.Edit2.Text:=Form1.Edit2.Text+getfstring(pol2[i],1)+' ';}
Setlength(matr,n2+2,n2+1);
for i:=0 to n2 do
begin
form1.GetPolinom(roots2,n2,true,i,temp);
for j:=1 to n2+1 do matr[i,j-1]:=temp[j];
end;
i:=0;
for j:=0 to n2 do
matr[n2+1,j]:=0;
for j:=n2-n1 to n2 do
begin
matr[n2+1,j]:=chislit[i];
inc(i);
end;
setlength(matr1,n2+1,n2+2);
setlength(koef,n2+1,1);
for i:=0 to n2 do
for j:=0 to n2+1 do
matr1[i,j]:=matr[j,i];
Похожие работы
| Тема: Разложение рациональной дроби на простейшие |
| Предмет/Тип: Математика (Реферат) |
| Тема: Сингулярное разложение в линейной задаче метода наименьших квадратов |
| Предмет/Тип: Математика (Диплом) |
| Тема: Термическое разложение и горение полимеров |
| Предмет/Тип: Химия (Статья) |
| Тема: Разложение сигнала в базисе Уолша |
| Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
| Тема: Разложение феодализма и генезис капитализма в западной Европе в XVI-последней трети XVIII в. |
| Предмет/Тип: История (Реферат) |
Интересная статья: Основы написания курсовой работы

(Назад)
(Cкачать работу)