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


 

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

64382. ГЕОМЕТРИЧНЕ МОДЕЛЮВАННЯ РОЗПОДІЛУ ВІДБИТОЇ СОНЯЧНОЇ ЕНЕРГІЇ НА ПРИЙМАЧІ 229 KB
  Кількісна оцінка інтенсивності відбитого потоку дозволяє визначати зони розрідження і концентрації енергії. Розробити алгоритм побудови точкового каркаса поверхні розподілу ступеню концентрації відбитої енергії на приймачі з комп'ютерною реалізацією.
64383. ЕНЕРГОЗБЕРЕЖЕННЯ В ТЕПЛОМАСООБМІННИХ ПРОЦЕСАХ ОЧИЩЕННЯ ВИКИДІВ ВІД ПРОМИСЛОВИХ ОБЄКТІВ 782.14 KB
  В Україні й світовому співтоваристві однією з найгостріших проблем сучасності є зниження енергетичних витрат на системи очищення шкідливих викидiв об’єктів промислової теплоенергетики.
64384. РОЗРОБКА БЛОКОВОЇ ЗЕРНОСУШАРКИ НА ОСНОВІ АВТОНОМНИХ ВИПАРЮВАЛЬНО-КОНДЕНСАЦІЙНИХ СИСТЕМ 872.5 KB
  Для сучасного зерносушіння характерні дві проблеми: високі енерговитрати й забруднення зерна продуктами згоряння. Витрати енергії на зерносушіння вище ніж енерговитрати при виробництві зерна. Досвід застосування у світовій практиці теплових труб і термосифонів...
64385. КОЛОЇДНО-ХІМІЧНА ХАРАКТЕРИСТИКА ГУМУСОВО-АКУМУЛЯТИВНОГО ҐРУНТОТВОРЕННЯ І РОДЮЧОСТІ ПРИРОДНИХ Й АГРОГЕННИХ ЧОРНОЗЕМІВ ЛІВОБЕРЕЖНОГО ЛІСОСТЕПУ ТА СТЕПУ УКРАЇНИ 441.5 KB
  Обробіток ґрунтів часто обумовлює мінералізацію органічних речовин значне зниження загальних запасів гумусу в ґрунтах. Тому дослідження органічної складової ґрунту визначення шляхів збереження і накопичення гумусу у ґрунті...
64386. ФІНАНСОВИЙ МЕХАНІЗМ РЕГУЛЮВАННЯ МІЖБЮДЖЕТНИХ ВІДНОСИН В УКРАЇНІ 217.5 KB
  Однією з важливих передумов забезпечення комплексного розвитку бюджетної системи є формування дієвого фінансового механізму регулювання міжбюджетних відносин. У першу чергу це суперечливі політичні економічні та соціальні перетворення відсутність...
64387. Обґрунтування раціональних параметрів і конструкцій шпурових зарядів для зниження розміцнення гірських порід при спрямованому розколі 6.3 MB
  Для цього розроблено спеціальні конструкції зарядів що дозволяють одержати спрямований розкол блока з мінімальним розміцненням породи поблизу бічних поверхонь установити не тільки зниження її міцності але й її зміну із часом після вибухового впливу залежно...
64388. ЗАБЕЗПЕЧЕННЯ ПРАВ ЮРИДИЧНОЇ ОСОБИ В АДМІНІСТРАТИВНИХ ПРОВАДЖЕННЯХ 142.5 KB
  Забезпечення прав юридичної особи в адміністративних провадженнях є однією з найгостріших проблем сучасної української правової науки та практики. Саме права і свободи особи та їхні гарантії визначають зміст і спрямованість державної діяльності...
64389. ПІДГОТОВКА ВИКЛАДАЧІВ АГРАРНИХ ДИСЦИПЛІН У ВИЩИХ НАВЧАЛЬНИХ ЗАКЛАДАХ КРАЇН ПОЧАТКОВОГО ЕТАПУ ЗАХІДНОЄВРОПЕЙСЬКОЇ ІНТЕГРАЦІЇ І ВЕЛИКОБРИТАНІЇ 348 KB
  На кожному етапі він наповнюється новим змістом, новими організаційно-педагогічними формами і методами, новими потребами та відповідними підходами до інтегрування індивідуальних, професійних, соціальних аспектів життєдіяльності.
64390. ІНФОРМАЦІЙНА ТЕХНОЛОГІЯ ДЛЯ МОДЕЛЮВАННЯ ТА РОЗПІЗНАВАННЯ МІМІЧНИХ ПРОЯВІВ ЕМОЦІЙ НА ОБЛИЧЧІ ЛЮДИНИ 26.74 MB
  Методи і алгоритми аналізу й синтезу емоційного стану обличчя людини є складовою частиною систем і засобів штучного інтелекту спрямованих на дослідження створення та впровадження алгоритмічних та програмноапаратних систем і комплексів...