Читать реферат по математике: "Разложение рациональной дроби на простейшие." Страница 6

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

Функция "чтения" служит для ознакомления с работой. Разметка, таблицы и картинки документа могут отображаться неверно или не в полном объёме!

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];


Интересная статья: Основы написания курсовой работы