16213

ПРИНЦИПЫ ПОСТРОЕНИЯ МОДУЛЬНОЙ ПРОГРАММЫ

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа №1 Принципы построения модульной программы Цель лабораторной работы: изучить возможность создания Unit в Delphi. Постановка задачи: Разработать программу состоящую из главной формы и отдельного Unit. Unit должен содержать набор процедур и функций для

Русский

2013-06-20

80.5 KB

32 чел.

Лабораторная работа №1

Принципы построения модульной программы

Цель лабораторной работы: изучить возможность создания Unit в Delphi. Постановка задачи:

Разработать программу, состоящую из главной формы и отдельного Unit. Unit должен содержать набор процедур и функций, для вычисления определенного интеграла. Главная форма обеспечивает интерфейсную поддержку. Предусмотреть вывод графика подынтегральной функции.

Текст программы:

unit UDisplayForm;

interface

uses

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

 Dialogs, Series, ExtCtrls, StdCtrls, TeEngine, TeeProcs, Chart, Buttons, UCalc;

type

 TForm1 = class(TForm)

   Edit2: TEdit;

   Edit1: TEdit;

   MethodSelector: TRadioGroup;

   DisplayChart: TChart;

   SeriesFunction: TLineSeries;

   Label1: TLabel;

   Label2: TLabel;

   Label4: TLabel;

   SeriesPatterned: TAreaSeries;

   FunctionFormula: TImage;

   Label3: TLabel;

   Edit3: TEdit;

   SpeedButton1: TSpeedButton;

   SpeedButton2: TSpeedButton;

   Edit4: TEdit;

   Panel1: TPanel;

   Label5: TLabel;

   Panel2: TPanel;

   CheckBox1: TCheckBox;

   procedure FormCreate(Sender: TObject);

   procedure BitBtn1Click(Sender: TObject);

   procedure BitBtn2Click(Sender: TObject);

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

   procedure SpeedButton1Click(Sender: TObject);

   procedure SomeEditChange(Sender: TObject);

   procedure SpeedButton2Click(Sender: TObject);

   procedure MethodSelectorClick(Sender: TObject);

   procedure CheckBox1Click(Sender: TObject);

   procedure FormShow(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 valueMin: real=0;

 valueMax: real=1;

 valueN: integer=10;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var b: TBitmap;

begin

 init_calc_functions;

 init_draw_functions;

 b:=TBitmap.Create;

 b.LoadFromResourceName(hInstance, 'INTEGRAL');

 b.Transparent:=true;

 b.TransparentColor:=clWhite;

 FunctionFormula.Width:=b.Width;

 FunctionFormula.Height:=b.Height;

 FunctionFormula.Canvas.Brush.Color:=$00BAEDEF;

 FunctionFormula.Canvas.FillRect(Rect(0, 0, b.Width, b.Height));

 FunctionFormula.Canvas.StretchDraw(Rect(0, 0, b.Width-1, b.Height-1), b);

 b.Free;

 Panel1.Left:=FunctionFormula.Left+FunctionFormula.Width;

 Panel1.Height:=FunctionFormula.Height;

 Panel1.Top:=FunctionFormula.Top;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

 if ((Edit1.Text='') or (Edit1.Text='') or (Edit1.Text='')) then

 begin

   MessageDlg('Ââåäèòå ÂÑÅ òðåáóåìûå çíà÷åíèÿ!', mtWarning, [mbOK], 0);

 end;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

 Application.Terminate;

end;

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

var i: integer;

   s: string;

begin

  // Application.MessageBox('Press', '');

 if (((Key>='0') and (Key<='9')) or (ord(Key)=VK_BACK) or ((Key=',') and (Sender<>Edit3))) then

 begin

   if Key=',' then

   begin

     s:=(Sender as TEdit).Text;

     for i:=1 to length(s) do

       if (s[i]=',') then

       begin

         Application.MessageBox(PChar(inttostr(i)), '');

         Key:=chr(0);

         break;

       end;

   end;

 end

 else

   Key:=chr(0);

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

 Application.Terminate;

end;

procedure TForm1.SomeEditChange(Sender: TObject);

var r: real;

begin

 //  Application.MessageBox('Change', '');

 if Sender=Edit3 then

 begin

   if ((Sender as TEdit).Text<>'') then

     valueN:=StrToInt((Sender as TEdit).Text);

 end

 else if ((Sender=Edit1) or (Sender=Edit2)) then

 begin

   if (Sender as TEdit).Text<>'' then

   begin

       try

         r:=StrToFloat((Sender as TEdit).Text);

       except

         on EConvertError do begin

                               if Sender=Edit1 then

                                 (Sender as TEdit).Text:=FloatToStr(valueMin)

                               else if Sender=Edit2 then

                                 (Sender as TEdit).Text:=FloatToStr(valueMax);

                               exit;

                             end;

       end;

       if Sender=Edit2 then

       begin

         valueMax:=r;

         FunctionFormula.Canvas.TextRect(Rect(0, 0, 155, 18), 87-FunctionFormula.Canvas.TextWidth((Sender as TEdit).Text) div 2, 2, (Sender as TEdit).Text)

       end

       else

       begin

         valueMin:=r;

         FunctionFormula.Canvas.TextRect(Rect(0, 58, 155, 74), 87-FunctionFormula.Canvas.TextWidth((Sender as TEdit).Text) div 2, 60, (Sender as TEdit).Text);

       end;

   end

   else

   begin

       FunctionFormula.Canvas.Font.Size:=10;

       if Sender=Edit2 then

         FunctionFormula.Canvas.TextRect(Rect(0, 0, 155, 18), 87-FunctionFormula.Canvas.TextWidth('') div 2, 2, '')

       else

         FunctionFormula.Canvas.TextRect(Rect(0, 58, 155, 74), 87-FunctionFormula.Canvas.TextWidth('') div 2, 60, '');

   end;

 end;

 if ((Edit1.Text<>'') and (Edit2.Text<>'') and (Edit3.Text<>'') and (valueMax>valueMin) and (valueN>0)) then

 begin

   drawArray[MethodSelector.ItemIndex+1](DisplayChart, valueMin, valueMax, valueN);

 end

 else

 begin

   SeriesFunction.Clear;

   DisplayChart.LeftAxis.Maximum:=0;

   SeriesPatterned.Clear;

 end;

end;

procedure TForm1.SpeedButton2Click(Sender: TObject);

var s: string;

label

 calc;

begin

// MyIntegral.init_calc_functions;

 calc:

 if ((Edit1.Text<>'') and (Edit2.Text<>'') and (Edit3.Text<>'') and (valueMax>valueMin) and (valueN>0)) then

 begin

   //Calculate our function

   Edit4.Text:=FloatToStr(calcArray[MethodSelector.ItemIndex+1](valueMin, valueMax, valueN));

 end

 else if ((Edit1.Text<>'') and (Edit2.Text<>'') and (Edit3.Text<>'') and (valueMax<valueMin) and (valueN>0)) then

 begin

   if MessageDlg('Âåðõíÿÿ ãðàíèöå ìåíüøå íèæíåé!'#13#10'Ïîìåíÿòü èõ ìåñòàìè?', mtInformation, [mbYes, mbNo], 0)=mrYes then

   begin

     s:=Edit2.Text;

     Edit2.Text:=Edit1.Text;

     Edit1.Text:=s;

     goto calc;

   end;

 end

 else if ((Edit1.Text<>'') or (Edit2.Text<>'') or (Edit3.Text<>'')) then

   MessageDlg('Çàïîëíèòå ÂÑÅ ïîëÿ!', mtInformation, [mbOK], 0)

 else

   MessageDlg('Îøèáêà â äàííûõ!', mtError, [mbOK], 0);

end;

procedure TForm1.MethodSelectorClick(Sender: TObject);

begin

 drawArray[MethodSelector.ItemIndex+1](DisplayChart, valueMin, valueMax, valueN);

end;

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

 SeriesPatterned.AreaLinesPen.Visible:=(Sender as TCheckBox).Checked;

end;

procedure TForm1.FormShow(Sender: TObject);

begin

 SomeEditChange(Edit1);

 SomeEditChange(Edit2);

end;

end.

unit UCalc;

interface

uses Chart;

const funcCount=4;

type TCalcFunc=function (a, b: extended; n: integer): extended;

    TDrawFunc=procedure (chart: TChart; a, b: extended; n: integer);

var calcArray: array[1..funcCount] of TCalcFunc;

   drawArray: array[1..funcCount] of TDrawFunc;

procedure init_calc_functions;

procedure init_draw_functions;

function f(x: extended): extended;

function calc_trapezium(a, b: extended; n: integer): extended;

function calc_rectangle_left(a, b: extended; n: integer): extended;

function calc_rectangle_right(a, b: extended; n: integer): extended;

function calc_rectangle_media(a, b: extended; n: integer): extended;

procedure draw_trapezium(Chart: TChart; valueMin, valueMax: extended; valueN: integer);

procedure draw_rectangle_left(Chart: TChart; valueMin, valueMax: extended; valueN: integer);

procedure draw_rectangle_right(Chart: TChart; valueMin, valueMax: extended; valueN: integer);

procedure draw_rectangle_media(Chart: TChart; valueMin, valueMax: extended; valueN: integer);

implementation

procedure init_calc_functions;

begin

 calcArray[1]:=calc_trapezium;

 calcArray[2]:=calc_rectangle_left;

 calcArray[3]:=calc_rectangle_right;

 calcArray[4]:=calc_rectangle_media;

end;

procedure init_draw_functions;

begin

 drawArray[1]:=draw_trapezium;

 drawArray[2]:=draw_rectangle_left;

 drawArray[3]:=draw_rectangle_right;

 drawArray[4]:=draw_rectangle_media;

end;

function calc_trapezium(a, b: extended; n: integer): extended;

var d: extended;

   i: integer;

   h1, h2, hA: extended;

begin

 d:=(b-a)/n;

 Result:=0;

 for i:=1 to n do

 begin

   h1:=f(a);

   h2:=f(a+d);

   hA:=(h1+h2)/2;

   Result:=Result+hA*d;

   a:=a+d;

 end;

end;

function calc_rectangle_left(a,b:extended;n:integer):extended;

var i:integer;

h,x:extended;

begin

 Result:=0;

 h:=(b-a)/n;

 for i:=1 to n do

   begin

     x:=h*f(a);

     Result:=Result+x;

     a:=a+h;

   end;

end;

function calc_rectangle_right(a,b:extended;n:integer):extended;

var i:integer;

h,x:extended;

begin

 Result:=0;

 h:=(b-a)/n;

 for i:=1 to n do

   begin

     x:=h*f(a+h);

     Result:=Result+x;

     a:=a+h;

   end;

end;

function calc_rectangle_media(a,b:extended;n:integer):extended;

var i:integer;

h,x:extended;

begin

 Result:=0;

 h:=(b-a)/n;

 for i:=1 to n do

   begin

     x:=h*f(a+h/2);

     Result:=Result+x;

     a:=a+h;

   end;

end;

procedure draw_f(Chart: TChart; valueMin, valueMax: extended; valueN: integer);

var rightRange, i, h: extended;

begin

   Chart.Series[1].Clear;

   rightRange:=valueMax+(valueMax-valueMin)*0.1;

   h:=(valueMax-valueMin)*1.2/50;

   i:=valueMin-(valueMax-valueMin)*0.1;

   while i<=rightRange do

   begin

     Chart.Series[1].AddXY(i, f(i));

     i:=i+h;

   end;

   Chart.LeftAxis.Maximum:=f(i)*1.05;

end;

procedure draw_trapezium(Chart: TChart; valueMin, valueMax: extended; valueN: integer);

var i, h: extended;

   i2: integer;

begin

   draw_f(Chart, valueMin, valueMax, valueN);

   Chart.Series[0].Clear;

   h:=(valueMax-valueMin)/valueN;

   i:=valueMin;

   for i2:=0 to valueN do

   begin

     Chart.Series[0].AddXY(i, f(i));

     i:=i+h;

   end;

end;

procedure draw_rectangle_left(Chart: TChart; valueMin, valueMax: extended; valueN: integer);

var i, h: extended;

   i2: integer;

begin

   draw_f(Chart, valueMin, valueMax, valueN);

   Chart.Series[0].Clear;

   h:=(valueMax-valueMin)/valueN;

   i:=valueMin;

   for i2:=1 to valueN do

   begin

     Chart.Series[0].AddXY(i, f(i));

     Chart.Series[0].AddXY(i+h, f(i));

     i:=i+h;

   end;

end;

procedure draw_rectangle_right(Chart: TChart; valueMin, valueMax: extended; valueN: integer);

var i, h: extended;

   i2: integer;

begin

   draw_f(Chart, valueMin, valueMax, valueN);

   Chart.Series[0].Clear;

   h:=(valueMax-valueMin)/valueN;

   i:=valueMin;

   for i2:=1 to valueN do

   begin

     Chart.Series[0].AddXY(i, f(i+h));

     Chart.Series[0].AddXY(i+h, f(i+h));

     i:=i+h;

   end;

end;

procedure draw_rectangle_media(Chart: TChart; valueMin, valueMax: extended; valueN: integer);

var i, h: extended;

   i2: integer;

begin

   draw_f(Chart, valueMin, valueMax, valueN);

   Chart.Series[0].Clear;

   h:=(valueMax-valueMin)/valueN;

   i:=valueMin;

   for i2:=1 to valueN do

   begin

     Chart.Series[0].AddXY(i, f(i+h/2));

     Chart.Series[0].AddXY(i+h, f(i+h/2));

     i:=i+h;

   end;

end;

function f(x: extended): extended;

begin

 f:=Exp(sqr(x));

end;

end.


Результаты работы программы:

Вывод: В результате выполнения данной лабораторной работы были  изучены возможности создания Unit в Delphi


 

А также другие работы, которые могут Вас заинтересовать

41896. Emissions of combustive-lubricating materials stocks 32.01 KB
  146; Gross emissions: M=PT103 ton yer P emission per hour P is P1 or P2 T ctive time of source which cn be clculted for litting up: T=V p103 hour yer Where p= 300 m3 hour for gs; p=30 m3 hour for petrol; p=30 m3 hour for diesel fuel Min chrcteristics of wsters ccording to prgrph 17 of the lw On wstes producer determines composition nd chrcteristics of production wstes nd degree of their dnger for environment nd mn's helth. The dnger degree is coordinted with executive uthorities. Degree of dnger is chrcterized by the clss of...
41897. ДОСЛІДЖЕННЯ ПРОГРАМНОГО СЕРЕДОВИЩА РОЗРОБКИ ТА НАЛАГОДЖЕННЯ ПРИКЛАДНОГО ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ СИСТЕМ КЕРУВАННЯ ТА ОБРОБКИ ІНФОРМАЦІЇ, ВИКОНАНИХ НА БАЗІ МІКРОПРОЦЕСОРІВ СІМЕЙСТВА MCS-51 2.48 MB
  Провести асемлеювання програми. Текст програми.1 ; надання імені vr_3 першому біту регістру RM 20H ; ; Програма ; ORG H ; адреса вектора розгалуження після початкового пуску RJMP _BEGIN ; мікропроцесора ; ORG H...
41898. ИТЕРАЦИОННЫЕ МЕТОДЫ РЕШЕНИЯ НЕЛИНЕЙНЫХ УРАВНЕНИЙ 251.24 KB
  Метод Ньютона. В качестве начального приближения здесь выбирается правый или левый конец отрезка в зависимости от того в котором выполняется достаточное условие сходимости метода Ньютона вида: Условие выполняется на обоих концах отрезка следовательно в качестве начального приближения разрешено выбрать любой из них. Рабочая формула метода Ньютона для данного уравнения запишется так: Условия выхода итерационного процесса аналогичны условиям метода простых итераций: и . Модифицированный метод Ньютона.
41899. ИТЕРАЦИОННЫЕ МЕТОДЫ РЕШЕНИЯ СИСТЕМ НЕЛИНЕЙНЫХ УРАВНЕНИЙ. МЕТОД НЬЮТОНА 213.45 KB
  Цель работы: научиться решать системы нелинейных уравнений СНУ методом простых итераций МПИ и методом Ньютона с помощью ЭВМ. Изучить МПИ и метод Ньютона для решения систем нелинейных уравнений. На конкретном примере усвоить порядок решения систем нелинейных уравнений МПИ и методом Ньютона с помощью ЭВМ. Построить рабочие формулы МПИ и метода Ньютона для численного решения системы при начальном приближении: .
41900. ИТЕРАЦИОННЫЕ МЕТОДЫ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ 244.14 KB
  Цель работы: научиться решать системы линейных алгебраических уравнений СЛАУ методом простых итераций МПИ и методом Зейделя с помощью ЭВМ. Изучить метод простых итераций и метод Зейделя для решения СЛАУ. Сравнить скорости сходимости метода простых итераций и метода Зейделя. Построить рабочие формулы МПИ и метода Зейделя для численного решения системы.
41901. Знакомство со средой разработки Oracle Application Express. Создание исходного приложения 1.09 MB
  Знакомство со средой разработки Orcle ppliction Express. Каковы основные компоненты среды разработки Orcle ppliction Express ppliction Builder собственно среда разработки webстраниц и бизнесправил. Что такое рабочая область workspce Рабочая область workspce это виртуальная частная база данных которая позволяет множеству пользователей работать с одной инсталляцией Orcle ppliction Express обеспечивая при этом приватность пользовательских объектов и приложений.
41902. Построение графиков в среде программирования MATLAB 354.21 KB
  Цель работы: научиться строить графики различных типов в программной среде MATLAB. Изучить основные операторы построения графиков в среде программирования MATLAB; освоить принципы построения различных типов графиков в среде программирования MATLAB.
41904. Проверка выборочного распределения 54.6 KB
  По критерию Пирсона гипотеза о нормальности изучаемого распределения принимается. Основные статистические характеристики: Среднее выборочное значение (математическое ожидание)