Исходник:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, math;
type
TForm2 = class(TForm)
Button1: TButton;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
LabeledEdit5: TLabeledEdit;
LabeledEdit6: TLabeledEdit;
LabeledEdit7: TLabeledEdit;
LabeledEdit8: TLabeledEdit;
LabeledEdit9: TLabeledEdit;
LabeledEdit10: TLabeledEdit;
Memo1: TMemo;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure LabeledEdit1KeyPress(Sender: TObject; var Key: Char);
procedure LabeledEdit4KeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function SetLenKanat() : real;
function SetQntVitki() : integer;
function SetDBoxB(m : integer) : real;
function SetLenKanatEx(d : real; a : integer) : real;
function SetTM(d, n : real) : real;
function Start : boolean;
public
{ Public declarations }
end;
var
Form2: TForm2;
const Digit: Set of Char = ['0' .. '9'];
const pi = 3.1415;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Close;
end;
//Определяем длину каната, навиваемого на бочку барабана lk
function TForm2.SetLenKanat() : real;
var l : real;
i : integer;
begin
l := StrToFloat(LabeledEdit1.Text);
i := StrToInt(LabeledEdit4.Text);
Result := (l + 0.5) * i;
end;
procedure TForm2.LabeledEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in Digit) and not (Key = ',') and not (Key = #8) then Key:=#0;
end;
//Определяем число витков талевого каната в одном слое а
function TForm2.SetQntVitki() : integer;
var lb, b : real;
begin
lb := StrToFloat(LabeledEdit2.Text);
b := StrToFloat(LabeledEdit5.Text);
Result := Round(lb/b) - 1;
end;
procedure TForm2.LabeledEdit4KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in Digit) and not (Key = #8) then Key:=#0;
end;
//Определяем диаметр бочки барабана с учетом навиваемых слоев каната, di
function TForm2.SetDBoxB(m : integer) : real;
var db, b : real;
begin
db := StrToFloat(LabeledEdit3.Text);
b := StrToFloat(LabeledEdit5.Text);
Result := db + b + 1.87 * b * m;
end;
//Определяем длину каната в каждом слое барабана
function TForm2.SetLenKanatEx(d : real; a : integer) : real;
begin
Result := pi * d * a;
end;
//7. Находим машинное время подъема лебедки
function TForm2.SetTM(d, n : real) : real;
var l , k: real;
i : integer;
begin
l := StrToFloat(LabeledEdit1.Text);
i := StrToInt(LabeledEdit4.Text);
k := StrToFloat(LabeledEdit10.Text);
Result := (l * i * k)/(pi * d * n);
end;
//Производим полный рассчет
procedure TForm2.Button1Click(Sender: TObject);
var i, a: integer;
ls, lk, l, ds, d : real;
begin
if Start = true then
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('1. Длина каната:');
lk := roundto(SetLenKanat(), -2);
Memo1.Lines.Add(' lк=' + FloatToStr(lk) + ' м');
a := SetQntVitki();
Memo1.Lines.Add('2. Число витков талевого каната в одном слое:');
Memo1.Lines.Add(' a=' + IntToStr(a));
Memo1.Lines.Add('3. Диаметр бочки барабана с учетом навиваемых слоев каната:');
Memo1.Lines.Add('4. Длина каната в каждом слое барабана:');
ds := 0;
ls := 0;
i := 1;
repeat
d := roundto(SetDBoxB(i), -2);
Memo1.Lines.Insert(Memo1.Lines.Count - 1 *i, ' d' + IntToStr(i) + '=' + FloatToStr(d) + ' м');
ds := ds + d;
l := roundto(SetLenKanatEx(SetDBoxB(i), a), -2);
Memo1.Lines.Add(' lк' + IntToStr(i) + '=' + FloatToStr(l) + ' м');
ls := ls + l;
Inc(i);
until ls > lk;
i := i - 1;
Memo1.Lines.Add('Общая длина навитого каната:');
Memo1.Lines.Add(' l0=' + FloatToStr(ls) + ' м');
ds := roundto(ds/i, -2);
Memo1.Lines.Add('5. Средний диаметр бочки барабана лебедки:');
Memo1.Lines.Add(' dср=' + FloatToStr(ds) + ' м');
Memo1.Lines.Add('6. Машинное время подъема на каждой скорости лебедки:');
d := roundto(SetTM(ds, StrToFloat(LabeledEdit6.Text)), -2);
Memo1.Lines.Add(' при n1 tм=' + FloatToStr(d) + ' мин.');
d := roundto(SetTM(ds, StrToFloat(LabeledEdit7.Text)), -2);
Memo1.Lines.Add(' при n2 tм=' + FloatToStr(d) + ' мин.');
d := roundto(SetTM(ds, StrToFloat(LabeledEdit8.Text)), -2);
Memo1.Lines.Add(' при n3 tм=' + FloatToStr(d) + ' мин.');
d := roundto(SetTM(ds, StrToFloat(LabeledEdit9.Text)), -2);
Memo1.Lines.Add(' при n4 tм=' + FloatToStr(d) + ' мин.');
end
else
begin
ShowMessage('Введены не все данные!!!');
end;
end;
function TForm2.Start : boolean;
var res : boolean;
begin
res := true;
if LabeledEdit1.Text = '' then res := false;
if LabeledEdit2.Text = '' then res := false;
if LabeledEdit3.Text = '' then res := false;
if LabeledEdit4.Text = '' then res := false;
if LabeledEdit5.Text = '' then res := false;
if LabeledEdit6.Text = '' then res := false;
if LabeledEdit7.Text = '' then res := false;
if LabeledEdit8.Text = '' then res := false;
if LabeledEdit9.Text = '' then res := false;
if LabeledEdit10.Text = '' then res := false;
Result := res;
end;
end.
|