Смекни!
smekni.com

Разработка инвестиционного проекта ОАО Завод по производству труб большого диаметра (стр. 15 из 18)

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;