Приветствую Вас Гость | RSS

ПРАКТИКУМ ПО ТЕХНОЛОГИЯМ СОЗДАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННЫХ ПРОЕКТОВ РЕШЕНИЯ МАТЕМАТИЧЕСКИХ ЗАДАЧ В DELPHI

Суббота, 20.12.2025, 21:52
Меню сайта
Наш опрос
Как вы попали к нам на сайт?
Всего ответов: 140
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Модуль реализации данных выше задач аналитической геометрии с применением классов TMas – TMatr

unit Uses_Massiv;

interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, Grids, StdCtrls, Buttons, ExtCtrls; type

TForm2 = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

StringGrid1: TStringGrid;

Label1: TLabel;

Edit1: TEdit;

Panel1: TPanel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Label3: TLabel;

Label2: TLabel;

N7: TMenuItem;

Label4: TLabel;

procedure FormActivate(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure Edit1Change(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure N7Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form2: TForm2;

implementation

Uses Massiv, Matrisa;

var x,y,z,m:TMas; M1,M2,M3:TMatr;

n,k,nz:integer;

{$R *.dfm}

procedure z1(sgr1:TStringGrid;label3:TLabel);

var i:Integer;

s,d:Real;

begin

try

x:=TMas.Create(1,3);

y:=TMas.Create(1,3);

for i:=1 to 3 do x.Elem[i]:=strtofloat(Sgr1.cells[i-1,1]);

for i:=1 to 3 do y.Elem[i]:=strtofloat(Sgr1.cells[i-1,2]);

y.Sub(x);

S:=0;

for i:=1 to 3 do s:=s+sqr(y.Elem[i]);

d:=sqrt(s);

label3.caption:='Расстояние между двумя точками:=

'+floattostrf(d,ffFixed,5,1);

except

on EConvertError do ShowMessage ('Ошибка в записи числа);

on EOverflow do ShowMessage ('Переполнение');

on EMathError do ShowMessage ('Ошибка при вычислениях);

end;

x.Free;

y.Free;

end;

procedure z2(sgr1:TStringGrid;lbl3:TLabel);

var i:integer;

a:array[1..3]of real;

begin

try

x:=TMas.Create(1,3);

y:=TMas.Create(1,3);

for i:=1 to 3 do x.Elem[i]:=strtofloat(Sgr1.cells[i-1,1]);

for i:=1 to 3 do y.Elem[i]:=strtofloat(Sgr1.cells[i-1,2]);

x.Add(y);

for i:=1 to 3 do a[i]:=x.Elem[i]/2;

lbl3.caption:= 'Координаты середины отрезка'+chr(13);

lbl3.caption:=lbl3.caption+'x='+floattostrf(a[1],ffFixed,5,1)+'

y='+floattostrf(a[2],ffFixed,5,1)+' z='+floattostrf(a[3],ffFixed,5,1)

except

on EConvertError do ShowMessage('Ошибка в записи числа');

on EOverflow do ShowMessage ('Переполнение');

on EMathError do ShowMessage ('Ошибка при вычислениях');

end;

x.Free;

y.Free;

end;

procedure z3(sgr1:TStringGrid;lbl3:TLabel);

var i:Integer;

sm,cx,cy,cz:Real;

begin

try

x:=TMas.Create(1,n);

y:=TMas.Create(1,n);

z:=TMas.Create(1,n);

m:=TMas.Create(1,n);

for i:=1 to n do x.Elem[i]:=strtofloat(Sgr1.cells[0,i]);

for i:=1 to n do y.Elem[i]:=strtofloat(Sgr1.cells[1,i]);

for i:=1 to n do z.Elem[i]:=strtofloat(Sgr1.cells[2,i]);

for i:=1 to n do m.Elem[i]:=strtofloat(Sgr1.cells[3,i]);

x.Mul(m); y.Mul(m); z.Mul(m);

sm:=m.Sum();

cx:=x.Sum()/sm; cy:=y.Sum()/sm; cz:=z.Sum()/sm;

lbl3.caption:= Координаты центра тяжести'+floattostr(n)+ ' точек+ chr(13);

lbl3.caption:=lbl3.caption+'x=' +floattostrf(cx,ffFixed,5,1)+'

y='+floattostrf(cy,ffFixed,5,1)+ ' z='+floattostrf(cz,ffFixed,5,1)

except

on EConvertError do ShowMessage('Ошибка в записи числа);

on EOverflow do ShowMessage ('Переполнение');

on EMathError do ShowMessage ('Ошибка при вычислениях с плавающей

точкой');

end;

x.Free; y.Free;

z.Free; m.Free;

end;

procedure z4(sgr1:TStringGrid;lbl3:TLabel);

var i:integer;

sp:Real;

begin

try

x:=TMas.Create(1,n);

y:=TMas.Create(1,n);

for i:=1 to n do x.Elem[i]:=strtofloat(Sgr1.cells[0,i]);

for i:=1 to n do y.Elem[i]:=strtofloat(Sgr1.cells[1,i]);

sp:=x.PMn(x,y);

lbl3.caption:= 'Площадь многоугольника:= '+floattostr(sp);

except

on EConvertError do ShowMessage('Ошибка в записи числа');

on EOverflow do ShowMessage ('Переполнение');

on EMathError do ShowMessage ('Ошибка при вычислениях');

end;

x.Free;

y.Free;

end;

procedure z5(sgr1:TStringGrid;lbl3:TLabel);

var i:integer; chis,znam,rast: Real;

begin

try

x:=TMas.Create(1,3);

y:=TMas.Create(1,3);

z:=TMas.Create(1,3);

M1:=TMatr.Create(1,2,1,2);

M2:=TMatr.Create(1,2,1,2);

M3:=TMatr.Create(1,2,1,2);

for i:=1 to 3 do x.Elem[i]:=strtofloat(Sgr1.cells[i-1,1]);

for i:=1 to 3 do y.Elem[i]:=strtofloat(Sgr1.cells[i-1,2]);

for i:=1 to 3 do z.Elem[i]:=strtofloat(Sgr1.cells[i-1,3]);

M1[1,1]:=y[1]-x[1];

M1[1,2]:=y[2]-x[2];

M1[2,1]:=z[1];

M1[2,2]:=z[2];

 

M2[1,1]:=y[2]-x[2];

M2[1,2]:=y[3]-x[3];

M2[2,1]:=z[2];

M2[2,2]:=z[3];

 

M3[1,1]:=y[3]-x[3];

M3[1,2]:=y[1]-x[1];

M3[2,1]:=z[3];

M3[2,2]:=z[1];

chis:=sqr(M1.Det2)+sqr(M2.Det2)+sqr(M3.Det2);

znam:=sqr(z[1])+sqr(z[2])+sqr(z[3]);

rast:=sqrt(chis/znam);

lbl3.caption:= 'Расстояние от точки до прямой:=

'+floattostrf(rast,ffFixed,5,1);

except

on EConvertError do ShowMessage('Ошибка в записи числа');

on EOverflow do ShowMessage ('Переполнение');

on EMathError do ShowMessage ('Ошибка при вычислениях');

end;

x.Free; y.Free; M1.Free;

z.Free; M2.Free; M3.Free;

end;

procedure TForm2.FormActivate(Sender: TObject);

begin

StringGrid1.fixedrows:=1;

StringGrid1.colCount:=4;

StringGrid1.cells[0,0]:='X';

StringGrid1.cells[1,0]:='Y';

StringGrid1.cells[2,0]:='Z';

StringGrid1.cells[3,0]:='m';

StringGrid1.Enabled:=False;

StringGrid1.Visible:=False;

Label1.visible:=False;

Label2.visible:=False;

Label3.visible:=False;

edit1.Enabled:=False;

edit1.Visible:=False;

Bitbtn1.Enabled:=False;

Bitbtn2.Enabled:=False;

Label4.visible:=false;

end;

procedure TForm2.N3Click(Sender: TObject);

begin

StringGrid1.RowCount:=3;

StringGrid1.colCount:=3;

nz:=1; n:=3; k:=3;

Bitbtn1.Enabled:=true;

Label1.visible:=true;

Label3.visible:=true;

Label1.caption:= 'ВВЕДИТЕ КООРДИНАТЫ ДВУХ ТОЧЕК';

StringGrid1.Enabled:=true;

StringGrid1.Visible:=true;

Label4.caption:= 'Расстояние между двумя точками';

Label4.visible:=true;

Label4.Enabled:=true;

end;

procedure TForm2.N4Click(Sender: TObject);

begin

StringGrid1.RowCount:=3;

StringGrid1.colCount:=3;

nz:=2; n:=3; k:=3;

Label1.visible:=True;

Label3.visible:=true;

Label1.caption:= 'ВВЕДИТЕ КООРДИНАТЫ ДВУХ ТОЧЕК';

Bitbtn1.Enabled:=True;

StringGrid1.Enabled:=true;

StringGrid1.Visible:=true;

Label4.Caption:= 'Координаты середины отрезка';

Label4.visible:=true;

Label4.Enabled:=true;

end;

procedure TForm2.N5Click(Sender: TObject);

begin

StringGrid1.colCount:=4;

Label2.Caption:= 'ВВЕДИТЕ ЧИСЛО ТОЧЕК';

Label4.Caption:= 'Координаты центра тяжести матер-х точек';

Label4.visible:=true;

Label4.Enabled:=true;

Label2.visible:=true;

Label2.Enabled:=true;

Edit1. Enabled:=True;

Label3.Visible:=True;

Edit1. Visible:=True;

nz:=3; k:=4;

end;

procedure TForm2.N6Click(Sender: TObject);

var

sp:Real;i:integer;

begin

StringGrid1.colCount:=2;

Label2.Caption:= 'ВВЕДИТЕ ЧИСЛО ВЕРШИН';

Label2.visible:=true;

Label2.Enabled:=true;

Label3.Visible:=True;

Edit1.Enabled:=True;

Edit1.Visible:=True;

Label4.Caption:= 'Площадь многоугольника';

Label4.visible:=true;

Label4.Enabled:=true;

nz:=4; k:=2;

end;

procedure TForm2.N7Click(Sender: TObject);

begin

StringGrid1.RowCount:=4;

StringGrid1.colCount:=3;

nz:=5; n:=4; k:=3;

Bitbtn1.Enabled:=true;

Label1.visible:=true;

Label3.visible:=true;

Label1.caption:= 'Введите координаты 2-х точек и вектора прямой';

StringGrid1.Enabled:=true;

StringGrid1.Visible:=true;

label4.Caption:= 'Расстояние от точки до прямой';

Label4.visible:=true;

Label4.Enabled:=true;

end;

 

procedure TForm2.N2Click(Sender: TObject);

begin

Close;

end;

 

procedure TForm2.BitBtn1Click(Sender: TObject);

begin

Bitbtn1.Enabled:=False;

Bitbtn2.Enabled:=true;

case nz of

1:z1(stringGrid1,label3);

2:z2(stringGrid1,label3);

3:z3(stringGrid1,label3);

4:z4(stringGrid1,label3);

5:z5(stringGrid1,label3);

end;

end;

procedure TForm2.BitBtn2Click(Sender: TObject);

var i,j:Integer;

begin

Label2.caption:='';

Label3.caption:='';

Label1.caption:='';

Edit1.Text:='';

for i:=1 to n do

for j:=0 to k-1 do

StringGrid1.cells[j,i]:='';

StringGrid1.Enabled:=false;

StringGrid1.Visible:=false;

Bitbtn2.Enabled:=False;

Label1.visible:=false;

Label4.visible:=false;

Label4.Enabled:=false;

end;

procedure TForm2.Edit1Change(Sender: TObject);

begin

if strlen(PAnsiChar(Edit1.text))<>0 then

begin

n:=strtoint(edit1.text);

ShowMessage(inttostr(n));

StringGrid1.RowCount:=n+1;

StringGrid1.Enabled:=true;

StringGrid1.Visible:=true;

Label1.visible:=true;

bitbtn1.Enabled:=True;

end;

end;

 

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

try

n:=strtoint(edit1.text);

StringGrid1.RowCount:=n+1;

StringGrid1.Enabled:=true;

StringGrid1.Visible:=true;

Label1.visible:=true;

if nz=3 then Label1.caption:= 'ВВЕДИТЕ КООРДИНАТЫ И МАССЫ

'+inttostr(n)+' ТОЧЕК';

if nz=4 then Label1.caption:= 'ВВЕДИТЕ КООРДИНАТЫ '+inttostr(n)+'

ТОЧЕК';

bitbtn1.Enabled:=true;

Edit1.Visible:=False;

label2.Visible:=False;

Edit1.Enabled:=false;

label2.Enabled:=False;

except

on EConvertError do ShowMessage('Ошибка в записи числа');

end;

end;

end.

Вход на сайт
Поиск
Календарь
«  Декабрь 2025  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031

Copyright MyCorp © 2025
Сделать бесплатный сайт с uCoz