Смекни!
smekni.com

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

keyw:=false;

PageControl1.ActivePage:=TabSheet3;

FocusControl(StringGrid6);

end;

For j:=1 to f do begin

for i:=1 to n do begin

Pf[i,j]:=StrToFloat(Stringgrid7.Cells[j,i]);

end;

end;

Except

ShowMessage('Неправильнозаполненыполя!');

keyw:=false;

end;

if keyw=true then begin

// --------------------------------вычисление мат. ож. NPV

ENPV:=0;

For i:=1 to n do begin NPV:=0;

For j:=1 to i do begin

NPV:=NPV+Sij[j];

end;

NPV:=NPV/i;s:=1;

for j:=1 to i do begin s:=s*d;end;

ENPV:=ENPV+(NPV/s);

end;

ENPV:=ENPV-Ip;

//----------------------------------вычисление критерия покрытия Ct

For i:=1 to n do begin

if Zt[i]<>0 then Ct[i]:=At[i]/Zt[i] else Ct[i]:=0;

end;

For i:=0 to Form2.StringGrid1.ColCount-1 do begin

Form2.StringGrid1.ColWidths[i]:=Form2.Header1.SectionWidth[i]-1;

end;

//-----------------------------------вычисление критерия ликвидности Rt в том числе

//-----------------------------------и NPVt

NPV:=0;s:=d;

For i:=1 to n do begin

For j:=1 to i-1 do begin s:=s*d;end;

NPV:=NPV+(Simd[i]/s); s:=d;

end;

NPV:=NPV-Ip; // прогнозное NPV

For i:=1 to n-1 do begin

NPVi:=0;NPVj:=0;s:=d;

for j:=1 to i do begin

For l:=1 to j-1 do begin s:=s*d; end;

NPVi:=NPVi+(Sij[j]/s);s:=d; //то NPV, которое получаем по имеющ. данным

end;

s:=d;

for j:=i+1 to n do begin

For l:=1 to j-1 do begin s:=s*d; end;

NPVj:=NPVj+(Simd[j]/s);s:=d;

end;

NPVj:=NPVj-Ip; //то, что осталось от прогногзного NPV

Rt[i]:=(NPVi+NPVj)/NPV;

Form2.StringGrid1.Cells[2,i-1]:=FloatToStr(NPVi);

end;

NPVi:=0;s:=d;

for i:=1 to n do begin

For l:=1 to i-1 do begin s:=s*d; end;

NPVi:=NPVi+(Sij[i]/s);s:=d;

end;

Rt[n]:=NPVi/NPV;Form2.StringGrid1.Cells[2,n-1]:=FloatToStr(NPVi);

Form2.StringGrid1.RowCount:=n;

For i:=0 to n-1 do begin

Form2.StringGrid1.Cells[0,i]:=IntToStr(i+1);

Form2.StringGrid1.Cells[1,i]:=FloatToStr(Ct[i+1]);

Form2.StringGrid1.Cells[3,i]:=FloatToStr(Rt[i+1])

end;

Form2.Memo1.Lines.Clear;

Form2.Memo1.Lines.Add('E(NPV) = ' + FloatToStr(ENPV) + ';');

// Оценка общего риска проекта

Forj:=1 tofdobegin

Pfsr:=0;

For i:=1 to n do begin

Pfsr:=Pfsr+Pf[i,j];

end;

Pfsr:=Pfsr/n;

if Pfsr>Pkrit[j] then

Form2.Memo1.Lines.Add('Покупка ' + IntToStr(j) + '-горесурсаневыгодна');

end;

for i:=1 to n do begin

sum:=0;s:=1;

For j:=1 to i do begin

For l:=1 to 2*j do begin s:=s*d; end;

sum:=sum+(Covar[j,j]/s);s:=1;

end;

sum2:=0;sum3:=0;

for l:=1 to i-1 do begin

for j:=l+1 to i do begin

s:=1;

For ii:=1 to l+j do begin s:=s*d; end;

sum2:=sum2+(Covar[l,j]/s);

end;

end;

for l:=1 to i do begin

for j:=1 to i do begin

sum3:=sum3+(Xf[l]*Xf[j]*PCovar[l,j])

end;

end;

Vt[i]:=sum+(2*sum2)+sum3;

form2.StringGrid1.Cells[4,i-1]:=FloatToStr(Vt[i]);

end;

Form2.Show;

end;

end;

procedure TForm8.N4Click(Sender: TObject);

Var

Myfile : Textfile;

Date : String;

begin

If (OpenDialog1.Execute) then begin

AssignFile(Myfile,Opendialog1.FileName);

Try Reset(myFile);

Except

Showmessage('Ошибкапричтениифайла!'); Exit;

end;

With Form1 do begin

ReadLn(MyFile,Date);SpinEdit1.Value:=StrToInt(Date);n:=StrToInt(Date);

ReadLn(MyFile,Date);SpinEdit2.Value:=StrToInt(Date);f:=StrToInt(Date);

ReadLn(MyFile,Date);Edit1.Text:=Date;d:=StrToFloat(Date);

ReadLn(MyFile,Date);Edit2.Text:=Date;Ip:=StrToFloat(Date);

For i:=0 to n-1 do begin

ReadLn(MyFile,Date);

StringGrid1.Cells[i,1]:=Date;

end;

For i:=0 to n-1 do begin

ReadLn(MyFile,Date);

StringGrid2.Cells[i,1]:=Date;

End;

For i:=0 to n-1 do begin

ReadLn(MyFile,Date);

StringGrid3.Cells[i,1]:=Date;

End;

For i:=0 to n-1 do begin

ReadLn(MyFile,Date);

StringGrid4.Cells[i,1]:=Date;

End;

For i:=0 to f-1 do begin

ReadLn(MyFile,Date);

StringGrid6.Cells[i,1]:=Date;

End;

For i:=1 to n do begin

For j:=1 to f do begin

ReadLn(MyFile,Date);

StringGrid7.Cells[i,j]:=Date;

end;

end;

For i:=0 to f-1 do begin

ReadLn(MyFile,Date);

StringGrid8.Cells[i,1]:=Date;

End;

end;

With Form3 do begin

For i:=1 to n do begin

For j:=1 to n do begin

ReadLn(MyFile,Date);

StringGrid1.Cells[i,j]:=Date;

end;

End;

BitBtn1Click(Sender);

end;

With Form4 do begin

For i:=1 to n do begin

For j:=1 to n do begin

ReadLn(MyFile,Date);

StringGrid1.Cells[i,j]:=Date;

end;

End;

BitBtn1Click(Sender);

end;

Closefile(myFile);

end

else Begin Showmessage('Файлненайден!'); Exit;end;

end;

procedure TForm8.N5Click(Sender: TObject);

Var

Myfile : Textfile;

Date : String;

begin

If (saveDialog1.Execute) then begin

AssignFile(Myfile,Savedialog1.FileName);

Try Rewrite(myFile);

Except

Showmessage('Ошибкапричтениифайла!'); Exit;

end;

With Form8 do begin

Date:=IntToStr(SpinEdit1.Value);WriteLn(MyFile,Date);

Date:=IntToStr(SpinEdit2.Value);WriteLn(MyFile,Date);

Date:=Edit1.Text;WriteLn(MyFile,Date);

Date:=Edit2.Text;WriteLn(MyFile,Date);

For i:=0 to n-1 do begin

Date:=StringGrid1.Cells[i,1];

WriteLn(Myfile,Date);

end;

For i:=0 to n-1 do begin

Date:=StringGrid2.Cells[i,1];

WriteLn(Myfile,Date);

End;

For i:=0 to n-1 do begin

Date:=StringGrid3.Cells[i,1];

WriteLn(Myfile,Date);

End;

For i:=0 to n-1 do begin

Date:=StringGrid4.Cells[i,1];

WriteLn(Myfile,Date);

End;

{For i:=0 to n-1 do begin

Date:=StringGrid5.Cells[i,1];

WriteLn(Myfile,Date);

End; }

For i:=0 to f-1 do begin

Date:=StringGrid6.Cells[i,1];

WriteLn(Myfile,Date);

End;

For i:=1 to n do begin

for j:=1 to f do begin

Date:=StringGrid7.Cells[i,j];

WriteLn(Myfile,Date);

end;

end;

For i:=0 to f-1 do begin

Date:=StringGrid8.Cells[i,1];

WriteLn(Myfile,Date);

End;

end;

With Form3 do begin

For i:=1 to n do begin

For j:=1 to n do begin

Date:=StringGrid1.Cells[i,j];

WriteLn(Myfile,Date);

end;

end;

end;

With Form4 do begin

For i:=1 to n do begin

For j:=1 to n do begin

Date:=StringGrid1.Cells[i,j];

WriteLn(Myfile,Date);

end;

end;

end;

Closefile(myFile);

end

else Begin Showmessage('Ошибка!'); Exit;end;

end;

procedure TForm8.N9Click(Sender: TObject);

begin

Form7.show;

end;

procedure TForm8.CheckBox2Click(Sender: TObject);

begin

if checkBox2.Checked then Form3.Showmodal;

end;

procedure TForm8.StringGrid1KeyPress(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(44):;

else key:=chr(0);end;

end;

procedure TForm8.StringGrid2KeyPress(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(44):;

else key:=chr(0); end;

end;

procedure TForm8.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(44):;

else key:=chr(0); end;

end;

procedure TForm8.StringGrid4KeyPress(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(44),chr(45):;

else key:=chr(0); end;

end;

procedure TForm8.StringGrid6KeyPress(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(44):;

else key:=chr(0); end;

end;

procedure TForm8.StringGrid7KeyPress(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(44):;

else key:=chr(0);end;

end;

procedure TForm8.StringGrid8KeyPress(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(44):;

else key:=chr(0); end;

end;

end.

unit normgenerator;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, ExtCtrls, ComCtrls, Buttons, Menus;

procedure normgen(var num1,num2 : real);

type

TForm7 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

GroupBox1: TGroupBox;

Label2: TLabel;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

Label1: TLabel;

TabSheet2: TTabSheet;

StringGrid3: TStringGrid;

SaveDialog1: TSaveDialog;

OpenDialog1: TOpenDialog;

procedure FormCreate(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure StringGrid1Exit(Sender: TObject);

procedure StringGrid2Exit(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form7: TForm7;

i,j, ndvar : integer; {числодтерм. перем-хпроекта}

Svar : array[1..500,1..20] of real;{массив значений сгенерированных сл.вел}

Xvar : array[1..40,1..20] of real; {массив сл.перемен-х проекта}

Dvar : array[1..20,1..20] of real; {массив детермиированных перем-х ден. потоков}

implementation

uses Risk, Cov;

{$R *.dfm}

procedure normgen(var num1,num2 : real);

var

r1,r2,svar : real;

begin

Repeat

r1:=2*random-1;

r2:=2*random-1;

svar:=Sqr(r1)+Sqr(r2);

Until (svar<1);

svar:=sqrt((-2*ln(svar))/svar);

num1:=r1*svar;

num2:=r2*svar;

end;

procedure TForm7.N2Click(Sender: TObject);

Var

Myfile : Textfile;

Date : String;

begin

If (OpenDialog1.Execute) then begin

AssignFile(Myfile,Opendialog1.FileName);

Try Reset(myFile);

Except

Showmessage('Ошибкапричтениифайла!'); Exit;

end;

ReadLn(MyFile,Date);StringGrid1.ColCount:=StrToInt(Date);

ReadLn(MyFile,Date);StringGrid1.RowCount:=StrToInt(Date);

ReadLn(MyFile,Date);StringGrid2.ColCount:=StrToInt(Date);

ReadLn(MyFile,Date);StringGrid2.RowCount:=StrToInt(Date);

For i:=0 to StringGrid1.ColCount do begin

For j:=0 to StringGrid1.RowCount do begin

ReadLn(MyFile,Date);

StringGrid1.Cells[i,j]:=Date;

end;

end;

For i:=0 to StringGrid2.ColCount do begin

For j:=0 to StringGrid2.RowCount do begin

ReadLn(MyFile,Date);

StringGrid2.Cells[i,j]:=Date;

end;

End;

Closefile(myFile);

end

else Begin Showmessage('Файлненайден!'); Exit;end;

end;

procedure TForm7.FormCreate(Sender: TObject);

begin

StringGrid1.Cells[0,1]:='+'; StringGrid1.Cells[0,3]:='-'; StringGrid1.Cells[0,5]:='-';

StringGrid2.Cells[0,1]:='+'; StringGrid2.Cells[0,2]:='+'; StringGrid2.Cells[0,3]:='-'; StringGrid2.Cells[0,4]:='-';

StringGrid1.Cells[1,1]:='Доходы от реализации продукции';

StringGrid1.Cells[1,3]:='Эксплутационные затраты';

StringGrid1.Cells[1,5]:='Налоги';

StringGrid2.Cells[1,1]:='Возмещение НДС по инвестициям';

StringGrid2.Cells[1,2]:='Амортизация';

StringGrid2.Cells[1,3]:='Инвестиции';

StringGrid2.Cells[1,4]:='Прирост оборотных средств';

StringGrid1.Cells[1,0]:='Название';

StringGrid1.Cells[2,0]:='Инт-л';

StringGrid2.Cells[1,0]:='Название';

i:=1;

While (i<=StringGrid1.ColCount) do begin

StringGrid1.Cells[2,i]:='Мин.';

StringGrid1.Cells[2,i+1]:='Макс.';

i:=i+2;

end;

For i:=3 to StringGrid1.ColCount do begin

StringGrid1.Cells[i,0]:=IntToStr(i-2);

StringGrid2.Cells[i-1,0]:=IntToStr(i-2);

StringGrid3.Cells[i-2,0]:=IntToStr(i-2);

end;

For i:=1 to 500 do begin

Stringgrid3.Cells[0,i]:=IntToStr(i);

end;

end;

procedure TForm7.N7Click(Sender: TObject);

var

nvar,nn1,nn2,sv1,sv2 : real; //число стох.пер-х проекта,сл.числа,коэф-ты для прироста об.ср-в.

kvar : integer;

begin

nvar:=StringGrid1.RowCount-1;

For j:=1 to 20 do begin

Simd[j]:=0;

end;

For i:=1 to 500 do begin

For j:=1 to 20 do begin

Svar[i,j]:=0;

end;

end;

For i:=1 to 20 do begin

For j:=1 to 20 do begin

Covar[i,j]:=0;

end;

end;

for i:=1 to (StringGrid1.ColCount-3) do begin

j:=1;

While j<=(nvar-1) do begin

kvar:=1;

While kvar<=500 do begin

normgen(nn1,nn2);

nn1:=Xvar[j,i]+nn1*Xvar[j+1,i];

nn2:=Xvar[j,i]+nn2*Xvar[j+1,i];

if StringGrid1.Cells[0,j]='-' then begin

nn1:=-nn1;

nn2:=-nn2;

end;

if j=5 then begin

if Xvar[j,i]<>0 then begin

sv1:=nn1/Xvar[j,i];

sv2:=nn2/Xvar[j,i];

end else begin sv1:=0; sv2:=0; end;

Svar[kvar,i]:=Svar[kvar,i]+sv1*Dvar[4,i];

Svar[kvar+1,i]:=Svar[kvar+1,i]+sv2*Dvar[4,i];

end;

Svar[kvar,i]:=Svar[kvar,i]+nn1;

Svar[kvar+1,i]:=Svar[kvar+1,i]+nn2;

kvar:=kvar+2;

end;

j:=j+2;

end;

for j:=1 to 500 do begin

For kvar:=1 to ndvar do begin

if kvar <>4 then Svar[j,i]:=Svar[j,i]+Dvar[kvar,i];

end;

end;

end;

For i:=1 to StringGrid1.Colcount-3 do begin

For j:=1 to 500 do begin

StringGrid3.Cells[i,j]:=FloatToStr(Svar[j,i]);

Simd[i]:=Simd[i]+Svar[j,i];

end;

Simd[i]:=Simd[i]/500;

Form8.StringGrid3.Cells[i-1,1]:=FloatToStrF(Simd[i],ffFixed,9,2);

end;

For i:=1 to StringGrid1.ColCount-3 do begin

For j:=i to StringGrid1.ColCount-3 do begin

For kvar:=1 to 500 do begin

Covar[i,j]:=Covar[i,j]+((Svar[kvar,i]-Simd[i])*(Svar[kvar,j]-Simd[j]));

end;

Covar[i,j]:=Covar[i,j]/500;

Form3.StringGrid1.Cells[j,i]:=FloatToStrF(Covar[i,j],ffFixed,12,2);

Form3.StringGrid1.Cells[i,j]:=FloatToStrF(Covar[i,j],ffFixed,12,2);

end;

end;

end;

procedure TForm7.StringGrid1Exit(Sender: TObject);

begin

Try

For j:=3 to StringGrid1.ColCount-1 do begin

i:=1;

While i<=StringGrid1.RowCount-1 do begin

Xvar[i,j-2]:=StrToFloat(StringGrid1.Cells[j,i]);

Xvar[i,j-2]:=(Xvar[i,j-2]+StrToFloat(StringGrid1.Cells[j,i+1]))/2;

Xvar[i+1,j-2]:=Xvar[i,j-2]-StrToFloat(StringGrid1.Cells[j,i]);

i:=i+2;

end;

end;

except

ShowMessage('Неправельныйвводданных!');

FocusControl(StringGrid1);

end;

end;

procedure TForm7.StringGrid2Exit(Sender: TObject);

var

nn1 : real;

begin

Try

For j:=2 to StringGrid2.ColCount-1 do begin

For i:=1 to StringGrid2.RowCount-1 do begin

Dvar[i,j-1]:=StrToFloat(StringGrid2.Cells[j,i]);

If StringGrid2.Cells[0,i]='-' then Dvar[i,j-1]:=-Dvar[i,j-1]

end;

end;

Except

ShowMessage('Неправельныйвводданных!');

FocusControl(StringGrid2);

end;

ndvar:=StringGrid2.RowCount-1;

end;

procedure TForm7.N3Click(Sender: TObject);

Var

Myfile : Textfile;

Date : String;

begin

If (saveDialog1.Execute) then begin

AssignFile(Myfile,Savedialog1.FileName);

Try Rewrite(myFile);

Except

Showmessage('Ошибкапричтениифайла!'); Exit;

end;

Date:=IntToStr(StringGrid1.ColCount);WriteLn(MyFile,Date);

Date:=IntToStr(StringGrid1.RowCount);WriteLn(MyFile,Date);

Date:=IntToStr(StringGrid2.ColCount);WriteLn(MyFile,Date);

Date:=IntToStr(StringGrid2.RowCount);WriteLn(MyFile,Date);

For i:=0 to StringGrid1.ColCount do begin

for j:=0 to StringGrid1.RowCount do begin

Date:=StringGrid1.Cells[i,j];

WriteLn(Myfile,Date);

end;

end;

For i:=0 to StringGrid2.ColCount do begin

For j:=0 to StringGrid2.RowCount do begin

Date:=StringGrid2.Cells[i,j];

WriteLn(Myfile,Date);

end;

end;

Closefile(myFile);

end

else Begin Showmessage('Ошибка!'); Exit;end;

end;

end.