Блок-схема тела основной программы

 

Рисунок А.1 – блок-схема тела основной программы.

nn1,nn2,nn3 – показатели преломления, исходные данные, вводимые пользователем;

dd – толщина волновода, вводится пользователем;

wll – длина волны используемого света, вводится пользователем.

Блок-схема Процедуры «OnChanging».

Рисунок А.2 – блок-схема процедуры «OnChanging».

AllowChange – свойство объекта TPageControl, отвечающее за разрешение/неразрешение смены закладки;

mtInformation – информационное окно, уведомляющее пользователя о том, что он ввёл не все исходные данные.

 

Блок-схема Процедуры «OnChange».

Рисунок А.3 – блок-схема процедуры «OnChange».

i – переменная типа boolean, которая отвечает за то, будет ли при смене закладки осуществлён пересчёт;

chart1 – график, отображающий дисперсионную характеристику волновода;

chart2 – график, отображающий профили ТЕ-мод;

stringgrid1 – таблица, которая по ходу выполнения программы заполняется значениями направляющих углов;

n – переменная типа byte, соответствующая порядку моды;

a, b – переменные, задающие диапазон, на котором производится уточнение направляющих углов;

dwl – функция, задающая дисперсионную характеристику волновода (численно равна правой части уравнения (3.1));

dix – процедура, осуществляющая одну итерацию метода дихотомии;

k – вспомогательная переменнная типа integer, используемая для построения графика;

f(k), g(k) – функции от k, выступающие в роли аргумента для других функций;

e1, e2, e3 – функции, определяющие профиль моды в различных средах.

 

Блок-схема процедуры «dix».

 

Рисунок А.4 – блок схема процедуры «dix».

х1, х2, хm – крайние и среднее значения интервала, на котором производится уточнение корня;

y1, y2 ym – значения уточняемой функции от x1, x2 и xm соответственно;

xx1, xx2, xxm – новые крайние и среднее значения интервала, полученные после его уменьшения вдвое.



Приложение В.

Модуль формы Form1.

 

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, jpeg, ComCtrls, TeEngine, Series, TeeProcs,

Chart,math, Grids, Menus;

 

type

TForm1 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Image1: TImage;

Image2: TImage;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

TabSheet3: TTabSheet;

Chart1: TChart;

TabSheet4: TTabSheet;

Chart2: TChart;

StringGrid1: TStringGrid;

MainMenu1: TMainMenu;

File1: TMenuItem;

Exit1: TMenuItem;

Help1: TMenuItem;

About1: TMenuItem;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

Label12: TLabel;

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

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

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

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

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

procedure PageControl1Changing(Sender: TObject;

var AllowChange: Boolean);

procedure PageControl1Change(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure Exit1Click(Sender: TObject);

procedure About1Click(Sender: TObject);

   

private

{ Private declarations }

public

i:boolean;

nn1,nn2,nn3,dd,wll:real;

{ Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

uses Unit4;

 

{$R *.dfm}

 

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

begin

case key of

'0'..'9', chr(8):;

'-': if length(edit1.text)<>0 then key:=chr(0) else key:=chr(45);

'.': if pos(',',edit1.text)<>0 then key:=chr(0) else key:=chr(44);

',': if pos(',',edit1.text)<>0 then key:=chr(0) else key:=chr(44);

else key:=chr(0);

end;

end;

 

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9', chr(8):;

'-': if length(edit2.text)<>0 then key:=chr(0) else key:=chr(45);

'.': if pos(',',edit2.text)<>0 then key:=chr(0) else key:=chr(44);

',': if pos(',',edit2.text)<>0 then key:=chr(0) else key:=chr(44);

else key:=chr(0);

end;

end;

 

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9', chr(8):;

'-': if length(edit3.text)<>0 then key:=chr(0) else key:=chr(45);

'.': if pos(',',edit3.text)<>0 then key:=chr(0) else key:=chr(44);

',': if pos(',',edit3.text)<>0 then key:=chr(0) else key:=chr(44);

else key:=chr(0);

end;

end;

 

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9', chr(8):;

'-': if length(edit4.text)<>0 then key:=chr(0) else key:=chr(45);

'.': if pos(',',edit4.text)<>0 then key:=chr(0) else key:=chr(44);

',': if pos(',',edit4.text)<>0 then key:=chr(0) else key:=chr(44);

else key:=chr(0);

end;

end;

 

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);

begin

case key of

'0'..'9', chr(8):;

'-': if length(edit5.text)<>0 then key:=chr(0) else key:=chr(45);

'.': if pos(',',edit5.text)<>0 then key:=chr(0) else key:=chr(44);

',': if pos(',',edit5.text)<>0 then key:=chr(0) else key:=chr(44);

else key:=chr(0);

end;

end;

 

 

procedure TForm1.PageControl1Changing(Sender: TObject;

var AllowChange: Boolean);

 

begin

allowchange:= tschng(strtofloat(edit1.text),strtofloat(edit2.text),strtofloat(edit3.text),strtofloat(edit4.text),strtofloat(edit5.text));

end;

 

procedure TForm1.PageControl1Change(Sender: TObject);

//основная процедура программы, привязанная к смене закладки

//по её ходу и осуществляются все вычисления и построение графиков

var

n:byte;

k:integer;

a,b,c,f:real;

begin

nn1:=strtofloat(edit1.text);

nn2:=strtofloat(edit2.text);

nn3:=strtofloat(edit3.text);

dd:=strtofloat(edit4.text)/1000000;

wll:=strtofloat(edit5.text)/1000000000;

if pagecontrol1.activepage=(tabsheet1) then

begin

i:=false;

chart1.RemoveAllSeries;

chart2.RemoveAllSeries;

stringgrid1.rowcount:=(2);

stringgrid1.Height:=(52);

stringgrid1.Cells[0,1]:=(' ');

stringgrid1.Cells[1,1]:=(' ');

end

else

begin

 

   if i=false then

 

   begin

           n:=0;

           while dwl(n,(arcsin(nn1/nn2)+0.00005),nn1,nn2,nn3)<(dd/wll) do

           begin

                   a:=(arcsin(nn1/nn2)+0.001);

                   b:=(pi/2-0.001);

                   c:=(a+b)/2;

                   while (abs(dwl(n,a,nn1,nn2,nn3)-dwl(n,b,nn1,nn2,nn3))>0.001) or (abs(a-b)>0.001) do

                   begin

                   dix(a,b,c,(dwl(n,a,nn1,nn2,nn3)-(dd/wll)),(dwl(n,b,nn1,nn2,nn3)-(dd/wll)),(dwl(n,c,nn1,nn2,nn3)-(dd/wll)),a,b,c);

                   end;

 

 

           stringgrid1.Cells[0,n+1]:=floattostr(n);

           stringgrid1.Cells[1,n+1]:=floattostr(a);

           stringgrid1.RowCount:=(stringgrid1.RowCount+1);

           if n<14 then stringgrid1.Height:=(stringgrid1.Height+26);

           n:=n+1;

           end;

 

   stringgrid1.RowCount:=(stringgrid1.RowCount-1);

   stringgrid1.Height:=(stringgrid1.Height-26);

 

   for n:=0 to (stringgrid1.RowCount-2) do

   begin

           Chart1.AddSeries(TlineSeries.Create(Self));

           chart1.Serieslist[n].SeriesColor:=chart1.getfreeseriescolor(false);

           for k:=0 to 269 do

           begin

           f:=(arcsin(nn1/nn2)+k*(((pi/2)-0.001-arcsin(nn1/nn2))/300));

           chart1.Series[n].AddXY(k,dwl(n,f,nn1,nn2,nn3),'',clteecolor);

           end;

   end;

   Chart1.AddSeries(TlineSeries.Create(Self));

   for k:=1 to 269 do

   begin

   chart1.Series[chart1.SeriesCount-1].AddXY(k,(dd/wll),'',clteecolor);

   end;

 

   for n:=0 to (stringgrid1.RowCount-2) do

   begin

          Chart2.AddSeries(TlineSeries.Create(Self));

           chart2.Serieslist[n].SeriesColor:=chart2.getfreeseriescolor(false);

           for k:=(-99) to 0 do

           begin

                   chart2.Series[n].AddXY(k,e1(wll,dd,nn1,nn2,nn3,strtofloat(stringgrid1.Cells[1,n+1]),(k*dd/100)),'',clteecolor);

           end;

           for k:=0 to 99 do

           begin

                   chart2.Series[n].AddXY(k,e2(wll,dd,nn1,nn2,nn3,strtofloat(stringgrid1.cells[1,n+1]),(k*dd/100)),'',clteecolor);

           end;

           for k:=100 to 199 do

           begin

                   chart2.Series[n].AddXY(k,e3(wll,dd,nn1,nn2,nn3,strtofloat(stringgrid1.Cells[1,n+1]),(k*dd/100)),'',clteecolor);

           end;

 

   end;

 

 

label7.Caption:=floattostrf(arcsin(nn1/nn2),ffgeneral,3,3);

label8.caption:=floattostrf((pi/2-0.001-(pi/2-arcsin(nn1/nn2))/300),ffgeneral,3,3);

label10.Caption:=floattostr(-dd*1000000);

label11.Caption:=floattostr(2*dd*1000000);

i:=true;

end;

end;

end;

 

procedure TForm1.FormActivate(Sender: TObject);

begin

i:=false;

stringgrid1.Cells[0,0]:=('Порядок');

stringgrid1.Cells[1,0]:=('Угол (рад)');

end;

 

procedure TForm1.Exit1Click(Sender: TObject);

begin

close;

end;

 

procedure TForm1.About1Click(Sender: TObject);

begin

messagedlg('Курсовая работа по информатике, ТУСУР,'

+#13+'         1 курс, специальность 210405.'

+#13+'        Выполнил студент группы 164'

+#13+'                   Филатов Александр.', mtinformation, [mbOK],0);

end;

 

end.

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: