16213

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

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

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

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

Русский

2013-06-20

80.5 KB

22 чел.

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


 

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

54392. Міжнародний географічний поділ праці. Міжнародна економічна інтеграція 95.5 KB
  Країни як люди. Бо від правильності вибору професії від того наскільки він раціональний залежить добробут народу тієї чи іншої країни в тому числі і нашої. Як природні умови і забезпеченість країни природними ресурсами впливають на її спеціалізацію Наведіть дватри приклади. Фактори формування міжнародної спеціалізації а Географічне положення приморські країни як правило мають флот ловлять рибу континентальні ні.
54393. Многогранники. Тіла обертання 813.5 KB
  Триєдина мета: ввести поняття призми піраміди циліндра конуса кулі елементів цих фігур; формули для обчислення бічної повної поверхонь об’єму; розвивати просторову уяву логічне мислення математичне мовлення; уміння працювати з додатковою літературою довідковим матеріалом комп’ютером. Розв’язання. Розв’язання. Розв’язання.
54394. Правильні многогранники урок 51.5 KB
  Мета проекту: сформувати в учнів поняття про елемент правильних многогранників; виробляти вміння знаходити математичні закономірності в навколишньому світі; розвивати компетентності саморозвитку і самоосвіти інформаційні та комунікативні компетентності продуктивної творчої діяльності. Домогтися засвоєння учнями означення правильного многогранника та п’яти видів правильних многогранників; сформувати в учнів поняття про елементи правильних многогранників; вдосконалювати навички розв’язування задач про правильні многогранники на основі...
54395. Правильні многокутники 114 KB
  Впізнай мене Встановіть вид даного правильного многокутника якщо відомо величину його кута: а 90; квадрат; б 60; правильний трикутник; в 135; правильний восьмикутник; г150 правильний дванадцятикутник. Будьякий правильний многокутник є випуклим Так. Будьякий правильний чотирикутник є квадратом. Правильний п’ятикутник.
54396. Множення натуральних чисел 35.5 KB
  Мета уроку: сформувати в учнів поняття дії множення вміння множити натуральні числа усно і в стовпчик розвивати логічне мислення математичну мову виховувати прагнення до успіху стійкий інтерес до математики.
54397. Розподільна властивість множення 94.5 KB
  Мета: Ознайомити учнів з формулюванням і застосуванням розподільної властивості множення та запису її в загальному вигляді. Виконай множення.
54399. Множення. Переставна властивість множення 115 KB
  Переставна властивість множення. Мета: узагальнити і систематизувати знання учнів про зміст дії множення натуральних чисел про переставну властивість множення; властивості нуля і одиниці під час множення;формувати навички множення багатоцифрових чисел; розвивати пам’ять увагу мислення; виховувати наполегливість старанність акуратність під час виконання записів у зошитах. Яке ж слово зашифроване по вертикалі Множення.