20 ГОСТ 12.0.003-74. Опасные и вредные производственные факторы. Классификация. – М.: Издательство стандартов, 1975.
21СНиП 2.01.02-85. Противопожарные нормы. – М.: Стройиздат, 1986.
22 НПБ 105-95. Определение категорий помещений и зданий по взрывопожарной и пожарной опасности. М.:МВД РФ. Государственная противопожарная служба, 1995.
23 ГОСТ 12.1.030-81. Электробезопасность. Защитное заземление. Зануление. - М.: Издательство стандартов, 1981.
24 СанПиН 2.2.542-96. Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организации работы. – М.: Госкомсанэпиднадзор России, 1996.
25 Учебное пособие по разделам «Безопасность жизнедеятельности» и «Охрана окружающей природной среды» в дипломной работе / под ред. проф. Б.С.Мастрюкова – М.: мисис, 2000.
unit datamodul;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ExtCtrls, ComCtrls, Spin, Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
SpinEdit1: TSpinEdit;
Label3: TLabel;
Edit1: TEdit;
StringGrid1: TStringGrid;
Label4: TLabel;
StringGrid2: TStringGrid;
Label5: TLabel;
StringGrid3: TStringGrid;
CheckBox1: TCheckBox;
StringGrid4: TStringGrid;
Label6: TLabel;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
Label7: TLabel;
Edit2: TEdit;
N5: TMenuItem;
N9: TMenuItem;
GroupBox1: TGroupBox;
Label8: TLabel;
Edit3: TEdit;
Label9: TLabel;
Edit4: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid2KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid3KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid4KeyPress(Sender: TObject; var Key: Char);
procedure CheckBox1Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure N5Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i,j,n,nRt : integer; {циклич.пер-е, кол-воПУП,кол-воПУПдлярассчета Rt}
Ir,G : real; {соб.кап вложения для Rt, критерий эффективности}
Ip : array[1..3] of real; {макс. и мин-е значение первонач.кап.вложений}
RSvar,Rdvar,Vt : array[1..20] of real;{реальное значение Si и di для подсчета Rt, кр.риска}
dvar : array[1..3,1..20] of real; {безриск.%ставка 1-я строка - мин, 2 - макс.}
Svar,NPVvar,Rt : array[1..3,1..20] of real; {интервалы ден.потоков 1 строка - мин,2 - сред.зн.,3 - макс,NPV-массив,кр.ликвидности}
At,Zt,Ct : array[1..2,1..20] of real; {соб,заем средства, кр.покрытия 1- мин, 2- макс}
mCt,mVt,mRt : array[1..4,1..20] of real; {массивы функций принадлежностей к риску}
kCt,kVt,kRt,kre : array[1..3] of real; {массивы верхних границ весов для оценки риска, 1- минимальный, 4 - недопустимый}
implementation
uses Rtmodul, Rezaltmodul, Formirmodul, mmodul, Rulermodul;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
n:=SpinEdit1.Value;
StringGrid1.ColCount:=n;
StringGrid2.ColCount:=n;
StringGrid3.ColCount:=n;
StringGrid4.ColCount:=n;
Checkbox1.Checked:=false;
kCt[1]:=0.25;kCt[2]:=0.5;kCt[3]:=0.75;
kRt[1]:=0.25;kRt[2]:=0.5;kRt[3]:=0.75;
kVt[1]:=0.05;kVt[2]:=0.1;kVt[3]:=0.2;
kre[1]:=0.25;kre[2]:=0.5;kre[3]:=0.75;
for j:=0 to n-1 do begin
StringGrid1.Cells[j,0]:=IntToStr(j+1);
StringGrid2.Cells[j,0]:=IntToStr(j+1);
StringGrid3.Cells[j,0]:=IntToStr(j+1);
StringGrid4.Cells[j,0]:=IntToStr(j+1);
RSvar[j+1]:=0;Rdvar[j+1]:=0;
end;
Rtkey:=false; Ir:=0;nRt:=0;
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
n:=SpinEdit1.Value; CheckBox1.Checked:=false;
Form4.StringGrid1.ColCount:=n+1; Form4.StringGrid2.ColCount:=n+1; Form2.SpinEdit1.Value:=n;
Form3.StringGrid1.RowCount:=n+1; Form3.StringGrid2.RowCount:=n+1;
StringGrid1.ColCount:=n; StringGrid2.ColCount:=n; StringGrid3.ColCount:=n; StringGrid4.ColCount:=n;
for j:=0 to n-1 do begin
StringGrid1.Cells[j,0]:=IntToStr(j+1); StringGrid2.Cells[j,0]:=IntToStr(j+1); StringGrid3.Cells[j,0]:=IntToStr(j+1);
StringGrid4.Cells[j,0]:=IntToStr(j+1);
Form3.StringGrid1.Cells[0,j+1]:=IntToStr(j+1);Form3.StringGrid2.Cells[0,j+1]:=IntToStr(j+1);
Form4.StringGrid1.Cells[j+1,0]:=IntToStr(j+1); Form4.StringGrid2.Cells[j+1,0]:=IntToStr(j+1);
end;
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
Case key of
chr(45),chr(48),chr(49),chr(50),chr(51),chr(52),chr(53),chr(54), chr(55),chr(56),chr(57),chr(59),chr(44),chr(8):;
else key:=chr(0); end;
end;
procedure TForm1.StringGrid2KeyPress(Sender: TObject; var Key: Char);
begin
Case key of
chr(45),chr(48),chr(49),chr(50),chr(51),chr(52),chr(53),chr(54), chr(55),chr(56),chr(57),chr(59),chr(44),chr(8):;
else key:=chr(0); end;
end;
procedure TForm1.StringGrid3KeyPress(Sender: TObject; var Key: Char);
begin
Case key of
chr(48),chr(49),chr(50),chr(51),chr(52),chr(53),chr(54), chr(55),chr(56),chr(57),chr(59),chr(44),chr(8):;
else key:=chr(0);end;
end;
procedure TForm1.StringGrid4KeyPress(Sender: TObject; var Key: Char);
begin
Case key of
chr(45),chr(48),chr(49),chr(50),chr(51),chr(52),chr(53),chr(54), chr(55),chr(56),chr(57),chr(59),chr(44),chr(8):;
else key:=chr(0);end;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
case CheckBox1.State of
cbChecked: begin
StringGrid4.ColCount:=1; Stringgrid4.RowCount:=1; StringGrid4.FixedCols:=0; StringGrid4.FixedRows:=0;
end;
cbUnchecked: begin
StringGrid4.ColCount:=n; Stringgrid4.RowCount:=2; StringGrid4.FixedCols:=0; StringGrid4.FixedRows:=1;
For j:=1 to n do begin StringGrid4.Cells[j-1,0]:=IntToStr(j); end;
end;
end;
end;
procedure TForm1.N8Click(Sender: TObject);
var
str,str2,str3 : string;
k,ii,iv,re : integer;
Cto,Rto : array[1..20] of real; // массивы обобщенных значений Ct и Rt
smax,smin,sav,min,A1,A2,B1,B2,C1,C2,K1,K2,vr,vrz,vrch,mvr1,mvr2,mvr3,mvr4 : real;
begin
//-------------------------------вводкритерияэффективности
try G:=StrToFloat(Edit2.Text);
Except G:=0;Edit2.Text:=IntToStr(0); end;
//-------------------------------вводпервонач. денкап
str:=Edit1.Text;
if pos(';',str)<>0 then begin str2:=''; k:=1;
for i:=1 to Length(str) do begin
if (str[i]<>';') then str2:=str2+str[i]
else begin
Ip[k]:=StrToFloat(str2);
str2:='';
k:=k+1;
end;
if i=Length(str) then Ip[k]:=StrToFloat(str2);
end;
end else begin
try
Ip[1]:=StrToFloat(str); Ip[2]:=StrToFloat(str); Ip[3]:=StrToFloat(str);
except
showmessage('Ошибка при вводе значения первоначальных капиталовложений!'); FocusControl(Edit1);
end;
end;
//------------------------------ввод массива денежных потоков:
for j:=0 to n-1 do begin
str:=StringGrid1.Cells[j,1];
if pos(';',str)<>0 then begin str2:='';k:=1;
for i:=1 to Length(str)do begin
if (str[i]<>';') then str2:=str2+str[i]
else begin
Svar[k,j+1]:=StrToFloat(str2);
k:=k+1;str2:='';
end;
if i=Length(str) then Svar[k,j+1]:=StrToFloat(str2);
end;
end else try
Svar[1,j+1]:=StrToFloat(str); Svar[2,j+1]:=StrToFloat(str); Svar[3,j+1]:=StrToFloat(str);
except
showmessage('Ошибкапривводезначенийинтерваловденежныхпотоков!'); FocusControl(Stringgrid1);
end;
end;
//----------------------------ввод массива соб.и заем. средств
for j:=0 to n-1 do begin
str:=StringGrid2.Cells[j,1];
str3:=StringGrid3.Cells[j,1];
if pos(';',str)<>0 then begin str2:='';k:=1;
for i:=1 to Length(str)do begin
if (str[i]<>';') then str2:=str2+str[i]
else begin
At[k,j+1]:=StrToFloat(str2);
k:=k+1;str2:='';
end;
if i=Length(str) then At[k,j+1]:=StrToFloat(str2);
end;
end else try
At[1,j+1]:=StrToFloat(str);
At[2,j+1]:=StrToFloat(str);
except
showmessage('Ошибка при вводе значений собственных средств!');
FocusControl(StringGrid2);
end;
if pos(';',str3)<>0 then begin str2:='';k:=1;
for i:=1 to Length(str3)do begin
if (str3[i]<>';') then str2:=str2+str3[i]
else begin
Zt[k,j+1]:=StrToFloat(str2);
k:=k+1;str2:='';
end;
if i=Length(str3) then Zt[k,j+1]:=StrToFloat(str2);
end;
end else try
Zt[1,j+1]:=StrToFloat(str3);
Zt[2,j+1]:=StrToFloat(str3);
except
showmessage('Ошибкапривводезначенийзаемныхсредств!');
FocusControl(StringGrid3);
end;
end;
//------------------------Вводмассивабезриск.% ставки
case CheckBox1.State of
cbChecked: begin
str:=StringGrid4.Cells[0,0];
if pos(';',str)<>0 then begin str2:='';k:=1;
for i:=1 to Length(str)do begin
if (str[i]<>';') then str2:=str2+str[i]
else begin
dvar[k,1]:=StrToFloat(str2);
k:=k+1;str2:='';
end;
if i=Length(str) then dvar[k,1]:=StrToFloat(str2);
end;
end else begin try
dvar[1,1]:=StrToFloat(str);
dvar[2,1]:=StrToFloat(str);
dvar[3,1]:=StrToFloat(str);
except
showmessage('Ошибка при вводе значения безрисковой процентной ставки!');
FocusControl(Stringgrid4);
end; end;
for i:=2 to n do begin
dvar[1,i]:=dvar[1,1];
dvar[2,i]:=dvar[2,1];
dvar[3,i]:=dvar[2,1];
end;
end;
cbUnchecked: begin
for j:=0 to n-1 do begin
str:=StringGrid4.Cells[j,1];
if pos(';',str)<>0 then begin str2:='';k:=1;
for i:=1 to Length(str)do begin
if (str[i]<>';') then str2:=str2+str[i]
else begin
dvar[k,j+1]:=StrToFloat(str2);
k:=k+1;str2:='';
end;
if i=Length(str) then dvar[k,j+1]:=StrToFloat(str2);
end;
end else try
dvar[1,j+1]:=StrToFloat(str);
dvar[2,j+1]:=StrToFloat(str);
dvar[3,j+1]:=StrToFloat(str);
except
showmessage('Ошибка при вводе значений безрисковой процентной ставки!');
FocusControl(Stringgrid4);
end;
end;
end;end;
//------------------------------Рассчет значения коэф-та покрытия Сt
for i:=1 to n do begin
Ct[1,i]:=1;
Ct[2,i]:=1;
end;
for i:=1 to n do begin
if Zt[2,i]<>0 then Ct[1,i]:=At[1,i]/Zt[2,i];
if Zt[1,i]<>0 then Ct[2,i]:=At[2,i]/Zt[1,i];
j:=3;
if (Ct[1,i]*Ct[2,i])<=(kCt[1]*kCt[1]) then Cto[i]:=(Ct[1,i]*Ct[2,i])/(kCt[1]*kCt[1]);
if ((Ct[1,i]*Ct[2,i])>(kCt[1]*kCt[1]))and (Ct[1,i]*Ct[2,i]<=(kCt[2]*kCt[2]))then j:=0;
if ((Ct[1,i]*Ct[2,i])>(kCt[2]*kCt[2]))and (Ct[1,i]*Ct[2,i]<=(kCt[3]*kCt[3])) then j:=1;
if ((Ct[1,i]*Ct[2,i])>(kCt[3]*kCt[3]))and (Ct[1,i]*Ct[2,i]<1) then j:=2;
if (Ct[1,i]*Ct[2,i]>=1) then Cto[i]:=1;
if (j = 0) or (j = 1) then
Cto[i]:=kCt[1+j]+((((Ct[1,i]*Ct[2,i])-(kCt[1+j]*kCt[1+j]))*(kCt[2+j]-kCt[1+j]))/((kCt[2+j]*kCt[2+j])-(kCt[1+j]*kCt[1+j])));
if j = 2 then
Cto[i]:=kCt[1+j]+((((Ct[1,i]*Ct[2,i])-(kCt[1+j]*kCt[1+j]))*(1-kCt[1+j]))/(1-(kCt[1+j]*kCt[1+j])));
end;
for i:=1 to n do begin
for j:=1 to 3 do begin
NPVvar[j,i]:=0;
end;
end;
//------------------------------Рассчетинервалов NPVt
if Rtkey=false then begin
for ii:=1 to n do begin
for i:=1 to ii do begin
smin:=1;smax:=1;sav:=1;
for j:=1 to i do begin smax:=smax*dvar[1,i];
smin:=smin*dvar[3,i];
sav:=sav*dvar[2,i];
end;
NPVvar[3,ii]:=NPVvar[3,ii]+(Svar[3,i]/smax);
NPVvar[1,ii]:=NPVvar[1,ii]+(Svar[1,i]/smin);
NPVvar[2,ii]:=NPVvar[2,ii]+(Svar[2,i]/sav);
end;
NPVvar[1,ii]:=NPVvar[1,ii]-Ip[3];
NPVvar[2,ii]:=NPVvar[2,ii]-Ip[2];
NPVvar[3,ii]:=NPVvar[3,ii]-Ip[1];
end;
end else begin
for ii:=1 to nRt do begin
for i:=1 to ii do begin
smax:=1;
for j:=1 to i do begin smax:=smax*Rdvar[i];end;
NPVvar[3,ii]:=NPVvar[3,ii]+(RSvar[i]/smax);
end;
NPVvar[1,ii]:=NPVvar[3,ii]-Ir;
NPVvar[2,ii]:=NPVvar[3,ii]-Ir;
NPVvar[3,ii]:=NPVvar[3,ii]-Ir;
end;
for ii:=nRt+1 to n do begin
for i:=1 to nRt do begin
smax:=1;
for j:=1 to i do begin smax:=smax*Rdvar[i];end;
NPVvar[3,ii]:=NPVvar[3,ii]+(RSvar[i]/smax);
end;
NPVvar[2,ii]:=NPVvar[3,ii];
NPVvar[1,ii]:=NPVvar[3,ii];
for i:=nRt+1 to ii do begin
smin:=1;smax:=1;sav:=1;
for j:=1 to i do begin smax:=smax*dvar[1,i];
smin:=smin*dvar[3,i];
sav:=sav*dvar[2,i];
end;
NPVvar[3,ii]:=NPVvar[3,ii]+(Svar[3,i]/smax);
NPVvar[1,ii]:=NPVvar[1,ii]+(Svar[1,i]/smin);
NPVvar[2,ii]:=NPVvar[2,ii]+(Svar[2,i]/sav);
end;
NPVvar[1,ii]:=NPVvar[1,ii]-Ir;
NPVvar[2,ii]:=NPVvar[2,ii]-Ir;
NPVvar[3,ii]:=NPVvar[3,ii]-Ir;
end;
end;
//------------------------------Рассчет значения коэффициента риска Vt
for i:=1 to n do begin
if (NPVvar[3,i]=NPVvar[1,i]) or (NPVvar[2,i]=NPVvar[1,i]) or (NPVvar[3,i]=NPVvar[2,i]) then begin
if (NPVvar[1,i]>G) then Vt[i]:=0;
if (NPVvar[1,i]<=G) and (NPVvar[3,i]>=G) then Vt[i]:=(G-NPVvar[1,i])/(NPVvar[3,i]-NPVvar[1,i]);
if (NPVvar[3,i]<G) then Vt[i]:=1;
end else begin
smin:=(G-NPVvar[1,i])/(NPVvar[3,i]-NPVvar[1,i]);
if G<NPVvar[1,i] then Vt[i]:=0;
if (G>=NPVvar[1,i]) and (G<NPVvar[2,i]) then begin
smax:=(G-NPVvar[1,i])/(NPVvar[2,i]-NPVvar[1,i]);
Vt[i]:=smin*(1+((1-smax)/smax)*Ln(1-smax));
end;
if (G>=NPVvar[2,i]) and (G<NPVvar[3,i]) then begin
if G=NPVvar[2,i] then smax:=1 else smax:=(NPVvar[3,i]-G)/(NPVvar[3,i]-NPVvar[2,i]);
Vt[i]:=1-((1-smin)*(1+((1-smax)/smax)*Ln(1-smax)));
end;
if G>=NPVvar[3,i] then Vt[i]:=1;
end;
end;
//-----------------------------Рассчет значения коэ-та ликвидности Rt
For i:=1 to n do begin
Rt[1,i]:=1;Rto[i]:=1;