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


 

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

66615. Разработка программного обеспечения автоматизированной системы проектирования операций сверления отверстий 198 KB
  Ввод исходных данных о материале детали и режущей части инструмента; геометрии, погрешности заточки и размерах инструмента; об условиях обработки (осевая подача, точность оборудования, размеры и погрешность заготовки и др.).
66616. Характеристика выпрямителя и сглаживающего фильтра блока питания ПК 5.21 MB
  Классификация источников питания СВТ В зависимости от характера преобразования энергии в источнике питания выполняемого при получении на его выходе требуемого напряжения источники питания подразделяются на: Первичные источники питания; Вторичные источники питания.
66617. Порядок проведения аудиторской проверки по основным участкам бухгалтерского учета и налогообложения хозяйственных операций 319.92 KB
  Ознакомиться с учетной политикой организации и внутренними нормативными документами изучить: организацию бухгалтерского учета; построение учетного аппарата; формы бухгалтерского учета; первичный учет и документооборот; взаимосвязь аналитического и синтетического учета.
66618. Канали QPSK з Rayleigh Fading та AWGN 804.45 KB
  Звернути увагу на сузір’я блоку Rayleigh Output та на лічильних помилкових бітів.(другий рядок в блоці Display1). Коли точки на діаграмі розміщені в відповідних квадрантах кількість помилок на змінюється. При переміщенні (повороті) діаграми...
66619. Виды АРУ приемных устройств РЛС. Работа АРУ с обратной связью 371.16 KB
  Мощность отраженного радиолокационного сигнала принимаемого от отражающего объекта, изменяется прямопропорционально четвертой степени дальности или удвоенного времени распространения энергии зондирующего радиолокационного сигнала до этого объекта.
66620. Дирижерская интерпретация музыкального произведения (генезис и эволюция) 196.5 KB
  В истории научной мысли дирижирование, как деятельность и вид музыкального исполнительства, является своеобразным «оплотом» творческого лагеря, правила и особенности существования в котором, казалось бы, не подвластны объяснению. Действительно, количество парадоксальных и взаимоисключающих явлений...