Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пример курсовой работы по Delphi (Кафедра)

.pdf
Скачиваний:
70
Добавлен:
06.02.2016
Размер:
870.51 Кб
Скачать

41

N_min: TMenuItem;

N_all: TMenuItem; ToolButton3: TToolButton; ToolButton5: TToolButton; ScrollBox1: TScrollBox; Image1: TImage;

procedure ToolButton1Click(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure TB_exitClick(Sender: TObject); procedure mmexitClick(Sender: TObject); procedure N_risClick(Sender: TObject); procedure N_newClick(Sender: TObject); procedure ToolButton5Click(Sender: TObject); procedure mmssaveClick(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

var

Form_graph: TForm_graph; risunok:tbitmap; implementation

uses unit_global; {$R *.DFM}

procedure TForm_graph.ToolButton1Click(Sender: TObject); begin

ToolButton1.Enabled:=true;

Image1.width:=round(Image1.width*0.8);

Image1.height:=round(Image1.height*0.8);

Image1.Stretch:=true;

end;

procedure TForm_graph.ToolButton2Click(Sender: TObject); begin

ToolButton2.Enabled:=true;

Image1.width:=round(Image1.width*1.25);

Image1.height:=round(Image1.height*1.25);

Image1.Stretch:=true;

end;

procedure TForm_graph.FormCreate(Sender: TObject); begin

Showmodal;

end;

procedure TForm_graph.TB_exitClick(Sender: TObject); begin

close;

end;

procedure TForm_graph.mmexitClick(Sender: TObject); begin

TB_exitClick(Sender); end;

PDF created with pdfFactory Pro trial version www.pdffactory.com

42

procedure TForm_graph.N_risClick(Sender: TObject); begin

if OpenPictureDialog1.Execute then begin

Form_graph.Width:=520; image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); w:=image1.Picture.Width;

h:=image1.Picture.height; end else

showmessage('Работа прервана пользователем!'); end;

procedure TForm_graph.N_newClick(Sender: TObject); var

i:integer; x,y:vect_double; x_ris,y_ris:vect_int; //f_n:shortstring; f_tip: file of double;

x_min,y_min,x_max,y_max:double; n_t:vect_string; width_ish,height_ish:double; width_ris,height_ris:integer; m_x,m_y:real;

pt:tpoint; mb :integer; begin

Form_graph.Width:=647; opendialog1.InitialDir:=extractfilepath(Application.exename)+'\file_data'; if opendialog1.Execute then

begin mmssave.Enabled:=true; TB_savegrf.Enabled:=true;

file_name:=opendialog1.FileName; assignfile(f_tip,file_name); reset(f_tip);

for i:=1 to 5 do begin read(f_tip,x[i]); read(f_tip,y[i]); n_t[i]:=inttostr(i); end; closefile(f_tip);

edit_xa.Text:= FloatToStrF(x[1],ffFixed,14,3); edit_ya.Text:= FloatToStrF(y[1],ffFixed,14,3); edit_xb.Text:= FloatToStrF(x[2],ffFixed,14,3); edit_yb.Text:= FloatToStrF(y[2],ffFixed,14,3); edit_xc.Text:= FloatToStrF(x[3],ffFixed,14,3); edit_yc.Text:= FloatToStrF(y[3],ffFixed,14,3); edit_xd.Text:= FloatToStrF(x[4],ffFixed,14,3); edit_yd.Text:= FloatToStrF(y[4],ffFixed,14,3); edit_xm.Text:= FloatToStrF(x[5],ffFixed,14,3); edit_ym.Text:= FloatToStrF(y[5],ffFixed,14,3);

//Найдем максимальные и минимальные значения координат x_max:=x[1];

x_min:=x[1]; y_max:=y[1]; y_min:=y[1]; for i:=2 to 5 do begin

if x_max<x[i] then x_max:=x[i]; if x_min>x[i] then x_min:=x[i]; if y_max<y[i] then y_max:=y[i];

PDF created with pdfFactory Pro trial version www.pdffactory.com

43

if y_min>y[i] then y_min:=y[i]; end;

//Найдем исходнве размеры рамки, описывающей точки width_ish:=y_max-y_min;

height_ish:=x_max-x_min; width_ris:=image1.Width-60; height_ris:=image1.Height-60; m_x:=width_ris/width_ish; m_y:=height_ris/height_ish; if m_x>m_y then m_x:=m_y; mb:=round(1/(m_x*0.00024));

//Пересчитаем геодезические координаты в координаты графика for i:=1 to 5 do

begin x_ris[i]:=round((y[i]-y_min)*m_x)+30;

y_ris[i]:=height_ris-round((x[i]-x_min)*m_x)+30;

end; {$R-}

risunok:=TBitmap.Create; risunok.Height:=height_ris+60; risunok.Width:=width_ris+60; w:= risunok.Width; h:=risunok.Height;

risunok.Canvas.Brush.Color:=clWhite;

risunok.Canvas.Pen.Color:=clBlack;

risunok.Canvas.Pen.Style:=psSolid;

risunok.Canvas.Font.Color:=clBlack;

risunok.Canvas.Font.Size:=14; risunok.Canvas.Font.Name:='Times new roman'; risunok.Canvas.Font.Style:=[fsItalic]; risunok.Canvas.Pen.Width:=3;

risunok.Canvas.TextOut(5,5,'Схема обратной однократной геодезической засечки '); risunok.Canvas.TextOut(250,25,'1:'+IntToStr(mb)); risunok.Canvas.Polyline([point(x_ris[1],y_ris[1]),

point(x_ris[2],y_ris[2]), point(x_ris[3],y_ris[3]), point(x_ris[4],y_ris[4])]);

risunok.Canvas.Pen.Width:=1; risunok.Canvas.Polyline([point(x_ris[1],y_ris[1]),

point(x_ris[5],y_ris[5]), point(x_ris[2],y_ris[2])]);

risunok.Canvas.Polyline([point(x_ris[3],y_ris[3]), point(x_ris[5],y_ris[5]), point(x_ris[4],y_ris[4])]);

for i:=1 to 5 do begin

risunok.Canvas.Pen.Color:=clGreen; risunok.Canvas.TextOut(x_ris[i]+5,y_ris[i]-5,n_t[i]); risunok.Canvas.Ellipse(x_ris[i]-3,y_ris[i]-3,x_ris[i]+3,y_ris[i]+3);

end; {$R+}

image1.Picture.Assign(risunok); end else

showmessage('Файл не был открыт!'); end;

procedure TForm_graph.ToolButton5Click(Sender: TObject); begin

Image1.width:=w;

Image1.height:=h;

PDF created with pdfFactory Pro trial version www.pdffactory.com

44

Image1.Stretch:=true;

end;

procedure TForm_graph.mmssaveClick(Sender: TObject); begin

file_name:=changefileext(file_name,'.bmp'); image1.Picture.SaveToFile(file_name); ShowMessage('Файл сохранен с именем '+file_name); mmssave.Enabled:=false;

TB_savegrf.Enabled:=false; end;

end

PDF created with pdfFactory Pro trial version www.pdffactory.com

45

ПРИЛОЖЕНИЕ Г - ЛИСТИНГ МОДУЛЯ UNIT_RESULT

unit Unit_result;

interface uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls;

type

TForm_result = class(TForm) OpenDialog_result: TOpenDialog; SaveDialog1: TSaveDialog; Label_x1: TLabel;

Label_y1: TLabel; Edit_x1: TEdit; Edit_y1: TEdit; Edit_x2: TEdit; Label_x2: TLabel; Label_y2: TLabel; Edit_y2: TEdit; Label_x3: TLabel; Label_y3: TLabel; Edit_x3: TEdit; Edit_y3: TEdit; Label_x4: TLabel; Label_y4: TLabel; Edit_x4: TEdit; Edit_y4: TEdit; Image1: TImage; Label_ug2: TLabel; Label_ug1: TLabel; Label_ug3: TLabel; Edit_ug1_deg: TEdit; Edit_ug2_deg: TEdit; Edit_ug3_deg: TEdit; Edit_ug1_min: TEdit; Edit_ug1_sec: TEdit; Edit_ug2_min: TEdit; Edit_ug2_sec: TEdit; Edit_ug3_min: TEdit; Edit_ug3_sec: TEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; Label1: TLabel; Label2: TLabel; Edit_xm: TEdit; Edit_ym: TEdit; Label3: TLabel; Edit_ug3k_deg: TEdit; Edit_ug3k_min: TEdit; Edit_ug3k_sec: TEdit;

procedure FormCreate(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure Edit_x1Change(Sender: TObject); procedure Edit_y1Change(Sender: TObject); procedure Edit_x2Change(Sender: TObject); procedure Edit_y2Change(Sender: TObject); procedure Edit_x3Change(Sender: TObject); procedure Edit_y3Change(Sender: TObject);

PDF created with pdfFactory Pro trial version www.pdffactory.com

46

procedure Edit_x4Change(Sender: TObject); procedure Edit_y4Change(Sender: TObject); procedure Edit_ug1_degChange(Sender: TObject); procedure Edit_ug1_minChange(Sender: TObject); procedure Edit_ug1_secChange(Sender: TObject); procedure Edit_ug2_degChange(Sender: TObject); procedure Edit_ug2_minChange(Sender: TObject); procedure Edit_ug2_secChange(Sender: TObject); procedure Edit_ug3_degChange(Sender: TObject); procedure Edit_ug3_minChange(Sender: TObject); procedure Edit_ug3_secChange(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

var

Form_result: TForm_result;

implementation

uses unit_global, Unit_view_result; {$R *.DFM}

procedure TForm_result.FormCreate(Sender: TObject); var

file_name_txt, file_name_tip:shortstring ;

f_txt

:textfile;

f_tip

:file;

 

x1,x2,x3,y1,y2,y3,x4,y4

:double;

ug1_gr,ug1_min,ug1_sec,

 

ug2_gr,ug2_min,ug2_sec,

 

ug3_gr,ug3_min,ug3_sec

:integer;

kod

:byte;

 

begin

 

 

if kod_open_result <>0 then begin OpenDialog_result.InitialDir:=directories+'file_data\'; if OpenDialog_result.Execute then begin file_name:=OpenDialog_result.FileName;

kod:=0;

if (ExtractFileExt( File_Name)='.tip') or (ExtractFileExt( File_Name)='.TIP')or (ExtractFileExt( File_Name)='.Tip') then begin

kod:=1; file_name_tip:=file_name; assignFile(f_tip,file_name_tip); Reset(f_tip,1); blockread(f_tip,x1,8); blockread(f_tip,y1,8); blockread(f_tip,x2,8); blockread(f_tip,y2,8); blockread(f_tip,x3,8); blockread(f_tip,y3,8); blockread(f_tip,x4,8); blockread(f_tip,y4,8); blockread(f_tip,ug1_gr,4); blockread(f_tip,ug1_min,4); blockread(f_tip,ug1_sec,4); blockread(f_tip,ug2_gr,4); blockread(f_tip,ug2_min,4); blockread(f_tip,ug2_sec,4); blockread(f_tip,ug3_gr,4);

PDF created with pdfFactory Pro trial version www.pdffactory.com

47

blockread(f_tip,ug3_min,4); blockread(f_tip,ug3_sec,4); closefile(f_tip);

edit_x1.Text:=FloatToStrF(x1,ffFixed,14,3); edit_y1.Text:=FloatToStrF(y1,ffFixed,14,3); edit_x2.Text:=FloatToStrF(x2,ffFixed,14,3); edit_y2.Text:=FloatToStrF(y2,ffFixed,14,3); edit_x3.Text:=FloatToStrF(x3,ffFixed,14,3); edit_y3.Text:=FloatToStrF(y3,ffFixed,14,3); edit_x4.Text:=FloatToStrF(x4,ffFixed,14,3); edit_y4.Text:=FloatToStrF(y4,ffFixed,14,3); edit_ug1_deg.Text:=inttostr(ug1_gr); edit_ug1_min.Text:=inttostr(ug1_min); edit_ug1_sec.Text:=inttostr(ug1_sec); edit_ug2_deg.Text:=inttostr(ug2_gr); edit_ug2_min.Text:=inttostr(ug2_min); edit_ug2_sec.Text:=inttostr(ug2_sec); edit_ug3_deg.Text:=inttostr(ug3_gr); edit_ug3_min.Text:=inttostr(ug3_min); edit_ug3_sec.Text:=inttostr(ug3_sec);

end else

if (ExtractFileExt( File_Name)='.txt') or (ExtractFileExt( File_Name)='.TXT') or (ExtractFileExt( File_Name)='.Txt') then begin

kod:=2; file_name_txt:=file_name; assignFile(f_txt,file_name_txt); Reset(f_txt); readln(f_txt,x1,y1); readln(f_txt,x2,y2); readln(f_txt,x3,y3); readln(f_txt,x4,y4);

readln(f_txt,ug1_gr,ug1_min,ug1_sec); readln(f_txt,ug2_gr,ug2_min,ug2_sec); readln(f_txt,ug3_gr,ug3_min,ug3_sec); closeFile(f_txt); edit_x1.Text:=FloatToStrF(x1,ffFixed,14,3); edit_y1.Text:=FloatToStrF(y1,ffFixed,14,3); edit_x2.Text:=FloatToStrF(x2,ffFixed,14,3); edit_y2.Text:=FloatToStrF(y2,ffFixed,14,3); edit_x3.Text:=FloatToStrF(x3,ffFixed,14,3); edit_y3.Text:=FloatToStrF(y3,ffFixed,14,3); edit_x4.Text:=FloatToStrF(x4,ffFixed,14,3); edit_y4.Text:=FloatToStrF(y4,ffFixed,14,3); edit_ug1_deg.Text:=inttostr(ug1_gr); edit_ug1_min.Text:=inttostr(ug1_min); edit_ug1_sec.Text:=inttostr(ug1_sec); edit_ug2_deg.Text:=inttostr(ug2_gr); edit_ug2_min.Text:=inttostr(ug2_min); edit_ug2_sec.Text:=inttostr(ug2_sec); edit_ug3_deg.Text:=inttostr(ug3_gr); edit_ug3_min.Text:=inttostr(ug3_min); edit_ug3_sec.Text:=inttostr(ug3_sec);

end;

end;

if kod=0 then

showmessage('Исходные данные не были прочитаны!'); end;

showmodal;

PDF created with pdfFactory Pro trial version www.pdffactory.com

48

end;

procedure TForm_result.BitBtn2Click(Sender: TObject); begin

close;

end;

procedure TForm_result.BitBtn1Click(Sender: TObject);

var

 

 

 

//stroki:string;

 

 

 

XB_XA,XC_XB,YA_YB,YB_YC

:double;

xa,ya,xb,yb,xc,yc,xd,yd,

 

 

xm,ym,x_1,y_1,x_2,y_2

:double;

 

deg1,deg2,deg3,min1,min2,min3,degk,

 

sec1,sec2,sec3,seck,mink

:integer;

 

b1,b2,a,c,s1,s2:real;

 

 

 

Ug_md,ug_mc,beta3,b3

:real;

 

f_tip

:file of double;

 

f_n

:shortstring;

 

begin

 

 

 

{Чтение данных из окон EDIT} xa:=strtofloat(edit_x1.text); xb:=strtofloat(edit_x2.text); xc:=strtofloat(edit_x3.text); xd:=strtofloat(edit_x4.text); ya:=strtofloat(edit_y1.text); yb:=strtofloat(edit_y2.text); yc:=strtofloat(edit_y3.text); yd:=strtofloat(edit_y4.text); deg1:=strtoint (edit_ug1_deg.text); deg2:=strtoint (edit_ug2_deg.text); deg3:=strtoint (edit_ug3_deg.text); min1:=strtoint (edit_ug1_min.text); min2:=strtoint (edit_ug2_min.text); min3:=strtoint (edit_ug3_min.text); sec1:=strtoint (edit_ug1_sec.text); sec2:=strtoint (edit_ug2_sec.text); sec3:=strtoint (edit_ug3_sec.text); {Вычисление по формулам 1 стр.72}

X_Y(xa,ya,xb,yb,deg1,min1,sec1,x_1,y_1); X_Y2(xb,yb,xc,yc,deg2,min2,sec2,x_2,y_2);

b1:=ctg(deg1,min1,sec1);

 

 

b2:=ctg(deg2,min2,sec2);

 

 

stroki[1]:=

'b1=ctg(beta1)

 

'+floattostrf(b1,ffFixed,10,6);

stroki[2]:='b2=ctg(beta2)

'+floattostrf(b2,ffFixed,10,6);

stroki[3]:='X1=XA+(YA-YB)*b1

'+floattostrf(x_1,ffFixed,14,3);

stroki[4]:='Y1=YA+(XB-XA)*b1

'+floattostrf(y_1,ffFixed,14,3);

stroki[5]:='X2=XC+(YB-YC)*b2

'+floattostrf(x_2,ffFixed,14,3);

stroki[6]:='Y2=YC+(XC-XB)*b2

'+floattostrf(y_2,ffFixed,14,3);

stroki[7]:='Контроль правильности вычислений X1,Y1,X2,Y2'; { Контроль по формулам 3 и 4}

kontrol(deg1,min1,sec1,deg2,min2,sec2,x_1,y_1,x_2,y_2,xa,ya,xb,yb,xc,yc, xb_xa,xc_xb,ya_yb,yb_yc);

stroki[8]:='XB-XA= '+floattostrf(xb_xa,ffFixed,9,3)+

'XB-XA= '+floattostrf((XB-XA),ffFixed,14,3); stroki[9]:='XC-XB= '+floattostrf(xc_xb,ffFixed,9,3)+

'XC-XB= '+floattostrf((XC-XB),ffFixed,14,3); stroki[10]:='YA-YB= '+floattostrf(ya_yb,ffFixed,9,3)+

'YA-YB= '+floattostrf((YA-YB),ffFixed,14,3); stroki[11]:='YB-YC= '+floattostrf(yb_yc,ffFixed,9,3)+

'YB-YC= '+floattostrf((YB-YC),ffFixed,14,3); stroki[12]:='Вычисление a,c';

{Вычисление a,c по формулам 5 и 6}

PDF created with pdfFactory Pro trial version www.pdffactory.com

49

a:=tg_bm(x_1,y_1,x_2,y_2); c:=ctg_bm(x_1,y_1,x_2,y_2);

stroki[13]:='a=tg(BM) a='+floattostrf((a),ffFixed,9,6); stroki[14]:='c=ctg(BM) c='+floattostrf((c),ffFixed,9,6); stroki[15]:='Вычисления s1,s2';

{Вычисление S1,S2 по формулам 8} s1:= s(x_1,y_1,xb,yb,a);

s2:= s(x_2,y_2,xb,yb,a);

stroki[16]:='s1= '+floattostrf((s1),ffFixed,9,3); stroki[17]:='s2= '+floattostrf((s2),ffFixed,9,3); stroki[18]:='Вычисление координат точки M'; {Вычисление координат точки M по формулам 9} X_Y_m(s1,xb,yb,a,xm,ym);

stroki[19]:='XM= '+floattostrf((xm),ffFixed,14,3); stroki[20]:='YM= '+floattostrf((ym),ffFixed,14,3); edit_xm.Text:=floattostrf((xm),ffFixed,14,3); edit_ym.Text:=floattostrf((ym),ffFixed,14,3);

{Заключительный контроль решения задачи (вычисление угла beta3)} //Вычисление дирекционного угла в радианах направления MD ug_md:=DIR_UG(Xm,Ym,Xd,Yd);

// Перевод угла из радианной меры в градусную rad_deg(ug_md,degk,mink,seck);

stroki[21]:='Dir_ugol(MD)= '+IntToStr(degk)+' '+IntToStr(mink)+''+IntToStr(seck); //Вычисление дирекционного угла в радианах направления MC ug_mc:=DIR_UG(Xm,Ym,Xc,Yc);

// Перевод угла из радианной меры в градусную rad_deg(ug_mc,degk,mink,seck); stroki[22]:='Dir_ugol(MC)= '+IntToStr(degk)+' '+

IntToStr(mink)+' '+IntToStr(seck); //Вычисление горизонтального угла beta3 if ug_md<ug_mc then beta3:=2*pi+ug_md-ug_mc

else beta3:=ug_md-ug_mc;

// Перевод угла из радианной меры в градусную b3:=deg_rad(deg3,min3,sec3);

//Вычисление разности вычисленного и измеренного угла beta3 в радианах b3:=abs(b3-beta3);

// Перевод угла из радианной меры в градусную

rad_deg(beta3,degk,mink,seck);

 

stroki[23]:='Вычисленный beta3=

'+IntToStr(degk)+' '+

IntToStr(mink)+' '+IntToStr(seck);

stroki[24]:='Исходный beta3=

'+IntToStr(deg3)+' '+

IntToStr(min3)+' '+IntToStr(sec3); rad_deg(b3,degk,mink,seck); stroki[25]:='beta3_исх-beta3_выч= '+IntToStr(degk)+' '+

IntToStr(mink)+' '+IntToStr(seck); stroki[26]:='Доп. значение = 0 0 15'; Edit_ug3k_deg.Text:=IntToStr(degk); Edit_ug3k_min.Text:=IntToStr(mink); Edit_ug3k_sec.Text:=IntToStr(seck);

if savedialog1.Execute then begin f_n:=savedialog1.FileName; assignfile(f_tip,f_n); rewrite(f_tip); Write(f_tip,xa); Write(f_tip,ya); Write(f_tip,xb); Write(f_tip,yb); Write(f_tip,xc); Write(f_tip,yc);

PDF created with pdfFactory Pro trial version www.pdffactory.com

50

Write(f_tip,xd);

Write(f_tip,yd);

Write(f_tip,xm);

Write(f_tip,ym); closefile(f_tip); end else

showmessage('Внимание! Файл для графики не создан!'); Application.CreateForm(TForm_view_result, Form_view_result); end;

procedure TForm_result.Edit_x1Change(Sender: TObject); var

kontrol:string; x1 :real;

kod :integer; begin

kontrol:= Edit_x1.Text; if kontrol<>'' then begin val(kontrol,x1,kod);

if kod<>0 then begin

showmessage('Ошибка при вводе X1! Повторить ввод значения!'); delete(kontrol,length(kontrol),1);

edit_x1.Text:=kontrol; edit_x1.SelLength:=length(kontrol); end;

end;

end;

procedure TForm_result.Edit_y1Change(Sender: TObject); var

kontrol:string; y1 :real;

kod :integer; begin

kontrol:= Edit_y1.Text; if kontrol<>'' then begin val(kontrol,y1,kod);

if kod<>0 then begin

showmessage('Ошибка при вводе Y1! Повторить ввод значения!'); delete(kontrol,length(kontrol),1);

edit_y1.Text:=kontrol; edit_y1.SelLength:=length(kontrol); end;

end;

end;

procedure TForm_result.Edit_x2Change(Sender: TObject); var

kontrol:string; x2 :real;

kod :integer; begin

kontrol:= Edit_x2.Text; if kontrol<>'' then begin val(kontrol,x2,kod);

if kod<>0 then begin

PDF created with pdfFactory Pro trial version www.pdffactory.com