16213

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

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

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

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

Русский

2013-06-20

80.5 KB

19 чел.

Лабораторная работа №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


 

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

66031. Российская модель бюджетного федерализма 15.31 KB
  Основы бюджетного федерализма. Особенностью российского бюджетного федерализма является наличие значительного разрыва в уровне бюджетной обеспеченности субъектов Федерации. Модели бюджетного федерализма Существует несколько приоритетных моделей построения...
66034. Разработка и оптимизация конструкции регулирующего клапана (РК) DN125 для системы САОЗ ВД энергоблока АЭС с ВВЭР-1000 малой серии 7.73 MB
  Цель работы: обеспечение безопасности работы реакторных установок В-320 и В-338 при речах 1 контура, компенсируемых работой САОЗ ВД на основе подхода управляемого снижения давления 1 контура с регулированием расхода впрыска борного расхода...
66035. Глобализация финансов 17.21 KB
  В глобализации финансов часто усматривают причину роста спекуляций и отвлечения со спекулятивными целями капитала от производства и создания новых рабочих мест. Процесс финансовой глобализации сконцентрирован прежде всего в трех основных центрах мировой экономики...
66036. Бюджетный дефицит. Виды и меры по его ликвидации в России 52 KB
  Виды дефицита бюджета В тех случаях когда имеющиеся у бюджета доходы недостаточны для осуществления расходов говорят о возникновении бюджетного дефицита.Бюджетный дефицит не обязательно свидетельствует о каком-то чрезвычайном положении в экономике страны.
66038. НАЛОГОВЫЕ СИСТЕМЫ ЗАРУБЕЖНЫХ СТРАН 18.27 KB
  Отличительная черта налоговой системы Франции высокая доля взносов в фонды социального назначения ФСН. Эластичность налоговой системы заключается в том что ежегодно в соответствии с изменениями политической и экономической конъюктуры законодательно уточняются ставки налогов.