Путевые машины |
Страница 9 из 9
ПРИЛОЖЕНИЕ { головной модуль программы - обеспечивает ввод, вывод и проверку данных } unit Srez; interface { интерфейсная часть модуля } uses { стандартные модули подключаются автоматически } SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, { вычислительный модуль} Srezcalc; { описание главной формы приложения - генерируется автоматически } type TForml = class(TForm) Edith TEdit; { строки ввода } Edit2: TEdit; Edit3: TEdit; Button1: TButton; { кнопка запуска вычислений } PaintBux1: TPaintBox; { поле для вывода результатов в виде графика } Labell: 'TLabel; {пояснительные надписи} Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; { объявление процедуры обработки нажатия на кнопку запуска вычислений } procedure Button 1Click(Sender: TObject); private { внутренние процедуры и переменные класса - нет} public { внешние процедуры и переменные класса - нет } end; var Form 1: TForml; implementation {$R *.DFM} { подключение файла ресурсов } procedure TForml.Button l CIick(Sender: TObject); { определение служебных переменных } Var i: integer; buffer.real; begin { преобразование текстовых строк в числа } try { защищенный от сбоев фрагмент программы } p:=StrToFloat(Editl.Text); n:=StrToFloal(Kdit2.Text); l:=StrToFloat(Edit3.Text); except { обработка исключительных ситуаций } on EConvertError do { действия в случае ошибки ввода } begin ShowMessage('Bведены не числа'); { вывод сообщения об ошибке } exit; { возврат управления системе } end; end; { проверка корректности исходных данных } if not CheckN(p.n.l) then begin ShowMessage('He выполнено условие п<l); exit; end; if not Checkp(p,n,l) then begin S!iowMessage('He выполнено условие р<(1-1)'); exit; end; { подготовка графического объекта к рисованию} with PaintBoxl.Canvas do begin FillRect(ClipRect); { очистка поля рисования } Pen.Color:=clRed; { установка цвета пера } MoveTo(0,0); { установка пера в левый верхний угол поля} end; { очистка поля вывода текста } ListBoxl. Clear; { основной цикл вычислений} for i:=l to 4 do begin buffer:=MainCalc(p,n,l,i); { вывод результата в цифровом виде } LisiBoxl.Items.Add(FloatToStr(buffer)); { рисование линии } with PaintBoxl.Canvas do begin lineto((i-1 )*50,trunc(buffer/50)); ellipse((i-l)*50,tranc(buffer/50), (i-l)*50-l+4,trunc(buifer/50)4+4); end; end; end; end. unit SrezCalc; interface { интерфейсная часть модуля } const { объявления констант и переменных, доступных из других модулей } Bo:array[1..4] of real = (700,1400,1600,1700); { mm } S= 1546; {mm} D= 1487; { mm } K2= 2.5; { mm/m2 } K3=180; {mm} Sp= 1530; {mm} QW=25; {mm} { QW=Q+W } var { определения переменных } p,n,l:real; function CheckP(p,n,l:rea!):boolean; { функция проверки входных данных } function CheckN(p,n,l:real):boolean; { функция проверки входных данных } function MainCalc(p,n,l:real;i:integer):real; { главная расчетная функция } implementation { реализация объявленных функций } function CheckN(p.n,l:real):boolean; begin CheckN:=(n<l); end; function CheckP(p,n,l:real):boolean; begin CheckP:=(p<(l-l)); end; function MainCalc(p,n,I:real;i:integer):real; var Kl,a,Eb:real; { локальные переменные } begin Kl:=0.625*p*p; a:=K2*(l-n)*n+Kl-K3; if a<=0 then Eb:=0.5*(Sp-D)+QW { проверка условия } else Eb:=0.5*(S D)+QW+a; MainCalc:=2*(Bo[i]-Eb); end; end. |