3.2 Розробка програмного забезпечення для моделювання

Програмне забезпечення для моделювання сітьового графіка методом статистичних випробувань базується на ПЗ, розробленому в 2 розділі. Під час моделювання, суть якого описана в попередньому підрозділі, на дісплей виводяться діаграми Гантта для кожної реалізації сітьового графа, також заповнюються масиви Tкр, tр, tп. Після цього проводиться аналіз імовірносних характеристик отриманих випадкових величин. Результати аналізу заносяться до текстового файлу.

3.3 Результати розрахунків

 

Рисунок 1 – Временные параметры для tmin

Рисунок 2 – Диаграмма Ганта для tmin

Рисунок 3 – Временные параметры для tmax

Рисунок 4 – Диаграмма Ганта для tmax

Рисунок 5 – Временные параметры для tavg

Рисунок 6 – Диаграмма Ганта для tavg

Рисунок 7 –Розрахунок імовірностних характеристик L_kp

Рисунок 8 – График статистического распределения T_kp

Данное распределение можно считать нормальным

Результати виконання прогрими зберігаються у файлах.


ВИСНОВКИ

Моделювання сітьового графіка методом статистичних випробувань можна вважати більш достовірним, ніж детерміноване моделювання, бо отримані параметри СГ розгдядаються в ньому як випадкові величини. Такий підхід дозволяє розробити модель, більш наближену до реальних умов процесу створення судна. Також треба відзначити, що метод Монте-Карло враховує зміну не лише довжини критичного шляху, а й списку вершин, через які він проходить.

При моделювання сітьового графіка методом статистичних випробувань за початковими данними було з’ясовано, що Tкр є нормально розподіленою випадковою величиною. Це обумовлено тим, що критичний шлях був постійним в кожній з реалізацій. Проте не всі tр i tп подій розподілені за нормальним законом, це викликано недостатньою кількістю випробувань. Таке допущення підтверджується тим, що зі збільшенням числа випробувань, збільшується і кількість tр та tп, розподілених за Гаусом. Однак використаний компілятор не дозволяє збільшити кількість експериментів через перевищення допустимого розміру сегменту даних. Така сітуація характерна для даного методу, бо кількість даних для обробки при достатньо великій кількості робіт накладає певні вимоги до програмних та апаратних засобів. Такі вимоги і є головним недоліком для застосування методу статистичних випробувань.


СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

1.    Ахо, Альфред, В., Хопкрофт, Джон, Ульман, Джеффи, Д. Структуры данных и алгоритмы.: Пер. с англ.:Уч. пос. – М.: Издательский дом «Вильямс», 2000. – 384 с.: ил. – Парал. тит. англ.

2.    Брехов А. М., Волков В. В. Организация судостроительного производства в условиях рынка. – СПб.: Судостроение, 1992. – 224 с., ил.

3.    Колде Я. К. Практикум по теории вероятностей и математической статистике: Учеб. пособие для техникумов. – М.: Высш. шк., 1991. – 157 с.: ил.

4.    Полковников А.В., Корпоративная система управления проектами, Электронный офис, 1997, Октябрь

5.    Полковников А.В., Линия на которой побеждают время, Электронный офис, 1997, Октябрь


Додаток А – Текст программи

using System;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.IO;

using System.Diagnostics;

namespace WindowsApplication1

{

public class Form1 : System.Windows.Forms.Form

{

private const int mx=5;

private const int ht=8;

private const int zz=130;

private int n,m,k,v;

static int /*nij,*/n_ij;

private double Mx,S2x,Sx,X_2;

private double L_kp_min,L_kp_max,L_kp_avg;

private double L_kp_mat,L_kp_dsp,L_kp_otk;

private System.Windows.Forms.MainMenu mainMenu1;

private System.Windows.Forms.MenuItem menuItem1;

private System.Windows.Forms.MenuItem menuItem2;

private System.Windows.Forms.OpenFileDialog openFileDialog1;

private ArrayList codi,codj,naim,mint,maxt;

private double []tp_min; private double []tp_max; private double []tp_avg;

private double []tn_min; private double []tn_max; private double []tn_avg;

private double []R_min; private double []R_max; private double []R_avg;

private double []r_min; private double []r_max; private double []r_avg;

private double [,]tpn_min; private double [,]tpn_max;

private double [,]tpn_avg;

private double [,]tnn_min; private double [,]tnn_max;

private double [,]tnn_avg;

private double [,]tpo_min; private double [,]tpo_max;

private double [,]tpo_avg;

private double [,]tno_min; private double [,]tno_max;

private double [,]tno_avg;

private double [,]Rn_min; private double [,]Rn_max;

private double [,]Rn_avg;

private double [,]Rcb_min; private double [,]Rcb_max;

private double [,]Rcb_avg;

private double [,]C_min; private double [,]C_max; private double [,]C_avg;

private int [,]P_min; private int [,]P_max; private int [,]P_avg;

private double [,]C_rev_min; private double [,]C_rev_max;

private double [,]C_rev_avg;

private int [,]P_rev_min; private int [,]P_rev_max;

private int [,]P_rev_avg;

private System.Windows.Forms.TabControl tabControl1;

private System.Windows.Forms.TabPage tabPage1;

private System.Windows.Forms.TabPage tabPage2;

private System.Windows.Forms.TabControl tabControl2;

private System.Windows.Forms.TabPage tabPage3;

private System.Windows.Forms.TabPage tabPage4;

private System.Windows.Forms.TabPage tabPage5;

private System.Windows.Forms.TabControl tabControl3;

private System.Windows.Forms.TabPage tabPage6;

private System.Windows.Forms.TabPage tabPage7;

private System.Windows.Forms.TabPage tabPage8;

private System.Windows.Forms.TabControl tabControl4;

private System.Windows.Forms.TabPage tabPage9;

private System.Windows.Forms.TabPage tabPage10;

private System.Windows.Forms.DataGrid dataGrid1;

private System.Windows.Forms.DataGrid dataGrid2;

private System.Windows.Forms.PictureBox pictureBox1;

private System.Windows.Forms.DataGrid dataGrid3;

private System.Windows.Forms.PictureBox pictureBox2;

private System.Windows.Forms.DataGrid dataGrid4;

private System.Windows.Forms.PictureBox pictureBox3;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.Label label2;

private System.Windows.Forms.Label label3;

private System.Windows.Forms.MenuItem menuItem3;

private System.Windows.Forms.MenuItem menuItem4;

private System.Windows.Forms.Label label4;

private System.Windows.Forms.Label label5;

private System.Windows.Forms.Label label6;

private System.Windows.Forms.TabPage tabPage11;

private System.Windows.Forms.Label label7;

private System.Windows.Forms.Label label8;

private System.Windows.Forms.Label label9;

private System.Windows.Forms.PictureBox pictureBox4;

private System.Windows.Forms.Label label10;

private System.Windows.Forms.Button button1;

private System.ComponentModel.Container components = null;

public Form1()

{

InitializeComponent();

}

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

[STAThread]

static void Main()

{

Application.Run(new Form1());

}

static void Read_Data(string FileName,ArrayList codi,ArrayList codj,

ArrayList naim,ArrayList mint,ArrayList maxt)

{

FileStream f = new FileStream(FileName,FileMode.Open);

StreamReader r = new StreamReader(f);

string delimStr = "\t";

char [] delimiter = delimStr.ToCharArray();

string s;

string [] split = null;

codi.Add(0);

codj.Add(0);

naim.Add(0);

mint.Add(0);

maxt.Add(0);

while((s = r.ReadLine())!= null)

{

split = s.Split(delimiter,5);

codi.Add(split[0]);

codj.Add(split[1]);

naim.Add(split[2]);

mint.Add(split[3]);

maxt.Add(split[4]);

}

r.Close();

f.Close();

}

private void ShowGrid1(DataGrid grid,ArrayList codi, ArrayList codj,

ArrayList naim, ArrayList mint, ArrayList maxt)

{

DataTable tab = new DataTable("tabl");

DataColumn c0 = new DataColumn("Код работы i");

DataColumn c1 = new DataColumn("Код работы j");

DataColumn c2 = new DataColumn("Наименование работы");

DataColumn c3 = new DataColumn("Минимальное время t");

DataColumn c4 = new DataColumn("Максимальное время t");

tab.Columns.Add(c0);

tab.Columns.Add(c1);

tab.Columns.Add(c2);

tab.Columns.Add(c3);

tab.Columns.Add(c4);

for(int i=1; i<codi.Count; i++)

{

DataRow row = tab.NewRow();

row["Код работы i"] = codi[i];

row["Код работы j"] = codj[i];

row["Наименование работы"] = naim[i];

row["Минимальное время t"] = mint[i];

row["Максимальное время t"] = maxt[i];

tab.Rows.Add(row);

}

grid.DataSource = tab;

}

private void ShowGrid2(DataGrid grid,double [,]C, double [,]tpn,

double [,]tpo, double [,]tnn, double [,]tno, double [,]Rn, double [,]Rcb)

{

int nn = (int)Math.Sqrt(C_avg.Length)-1;

DataTable tab2 = new DataTable("tabl2");

DataColumn c0 = new DataColumn("Код i,j");

DataColumn c1 = new DataColumn("t(i,j)");

DataColumn c2 = new DataColumn("tpn(i,j)");

DataColumn c3 = new DataColumn("tpo(i,j)");

DataColumn c4 = new DataColumn("tnn(i,j)");

DataColumn c5 = new DataColumn("tno(i,j)");

DataColumn c6 = new DataColumn("Rn(i,j)");

DataColumn c7 = new DataColumn("Rcb(i,j)");

tab2.Columns.Add(c0);

tab2.Columns.Add(c1);

tab2.Columns.Add(c2);

tab2.Columns.Add(c3);

tab2.Columns.Add(c4);

tab2.Columns.Add(c5);

tab2.Columns.Add(c6);

tab2.Columns.Add(c7);

string str;

n_ij=0;

for(int i=1; i<=nn; i++)

for(int j=1; j<=nn; j++)

if(C[i,j]>=0)

{

DataRow row = tab2.NewRow();

row["Код i,j"] = i.ToString()+"-"+j.ToString();

str = String.Format("{0:F2}",C[i,j]);

row["t(i,j)"] = str;

str = String.Format("{0:F2}",tpn[i,j]);

row["tpn(i,j)"] = str;

str = String.Format("{0:F2}",tpo[i,j]);

row["tpo(i,j)"] = str;

str = String.Format("{0:F2}",tnn[i,j]);

row["tnn(i,j)"] = str;

str = String.Format("{0:F2}",tno[i,j]);

row["tno(i,j)"] = str;

str = String.Format("{0:F2}",Rn[i,j]);

row["Rn(i,j)"] = str;

str = String.Format("{0:F2}",Rcb[i,j]);

row["Rcb(i,j)"] = str;

tab2.Rows.Add(row); n_ij++;

}

grid.DataSource = tab2;

}

private void AlgorithmFloyda(double [,]C, int [,]P)

{

int i,j,k;

int nn = (int)Math.Sqrt(C.Length)-1;

double [,]A = new double[nn+1,nn+1];

for(i=1; i<=nn; i++)

for(j=1; j<=nn; j++)

{

A[i,j] = C[i,j];

P[i,j] = 0;

}

for(i=1; i<=nn; i++)

A[i,i] = 0;

for(k=1; k<=nn; k++)

for(i=1; i<=nn; i++)

for(j=1; j<=nn; j++)

if(A[i,k] + A[k,j] >A[i,j])

{

A[i,j]=A[i,k]+A[k,j];

P[i,j]=k;

}

}

private void Path(int [,]P, double [,]C, int i, int j, ref double l,

ref int sec)

{

int k;

k=P[i,j];

if(k!=0)

{

sec=k;

Path(P,C,i, k, ref l, ref sec);

l=l+C[k,j];

Path(P,C,k, j, ref l, ref sec);

}

}

private double MaxPath(double [,]C, int [,]P, int i, int j)

{

double l;int sec_v;

l=0;

sec_v=0;

Path(P,C,i, j,ref l, ref sec_v);

if(sec_v!=0) return l+C[i,sec_v];//между ними min одна вершина –

вторая

else return C[i,j];

}

private double GetMat(double tmin,double tmax,double tver)

{

double avg;

avg = (tmin+4*tver+tmax)/6;

return avg;

}

private double GetDsp(double tmin,double tmax)

{

double Ds;

Ds = 0.4*Math.Pow(tmax-tmin, 2);

return Ds;

}

private double GetOtk(double tmin,double tmax)

{

double ot;

ot = (tmax-tmin)/6;

return ot;

}

private void GetPar(double [,]C, double []tp,double []tn, double [,]tpn,

double [,]tpo, double [,]tno, double [,]tnn, double [,]Rn, double [,]Rcb)

{

for(int i=1; i<=n; i++)

for(int j=1; j<=n; j++)

if(C[i,j]>=0)

{

//ранние сроки начала и окончания работы

tpn[i,j]=tp[i]; tpo[i,j]=tpn[i,j]+C[i,j];

//поздние сроки начала и окончания работы

tno[i,j]=tn[j]; tnn[i,j]=tno[i,j]-C[i,j];

//полный резерв времени работы

Rn[i,j]=tno[i,j]-tpo[i,j];

//свободный резерв времени работы

Rcb[i,j]=tp[j]-tpo[i,j];

}

}

private double GetNorm(Random r)

{

double U1,U2,V1,V2,S,X1,Norm;

l1:

U1 = r.NextDouble();

U2 = r.NextDouble();

V1 = 2*U1-1;

V2 = 2*U2-1;

S = V1*V1+V2*V2;

if(S>=1) goto l1;

X1 = V1*Math.Sqrt(-2*Math.Log(S,Math.E)/S);

Norm = X1;

return Norm;

}

private double GetCC(Random r,double mint,double maxt,ref double Norm)

{

double C;

Norm = GetNorm(r);

C = mint+Norm*(maxt-mint);

return C;

}

private int GetMax(ArrayList codjj)

{

int Max;

Max=0;

for(int i=1; i<codi.Count; i++)

Max=Math.Max(Max,Convert.ToInt32(codjj[i]));

return Max;

}

private double GetMax(double [,]C)

{

double Max;

Max=0;

int nn = (int)Math.Sqrt(C.Length)-1;

for(int i=1; i<=nn; i++)

for(int j=1; j<=nn; j++)

if(C[i,j]>=0)

Max=Math.Max(Max,C[i,j]);

return Max;

}

private void menuItem2_Click(object sender, System.EventArgs e)

{

int i,j;

openFileDialog1.FileName="test.txt";

openFileDialog1.ShowDialog();

codi = new ArrayList();

codj = new ArrayList();

naim = new ArrayList();

mint = new ArrayList();

maxt = new ArrayList();

Read_Data(openFileDialog1.FileName,codi,codj,naim,mint,maxt);

ShowGrid1(dataGrid1,codi,codj,naim,mint,maxt);

n=GetMax(codj);

C_min = new double[n+1,n+1]; C_max = new double[n+1,n+1];

C_avg = new double[n+1,n+1];

P_min = new int[n+1,n+1]; P_max = new int[n+1,n+1];

P_avg = new int[n+1,n+1];

C_rev_min = new double[n+1,n+1]; C_rev_max = new double[n+1,n+1]; C_rev_avg = new double[n+1,n+1];

P_rev_min = new int[n+1,n+1]; P_rev_max = new int[n+1,n+1];

P_rev_avg = new int[n+1,n+1];

ArrayList Li = new ArrayList();

for(int c=0; c<zz; c++)

{

for(i=1; i<=n; i++)

for(j=1; j<=n; j++)

{

C_min[i,j]=-1000;

C_max[i,j]=-1000;

C_avg[i,j]=-1000;

}

Random r = new Random();

m=codi.Count;

double nrm=0;

for(i=1; i<m; i++)

{

C_min[Convert.ToInt32(codi[i]),

Convert.ToInt32(codj[i])]=Convert.ToDouble(mint[i]);

C_max[Convert.ToInt32(codi[i]),

Convert.ToInt32(codj[i])]=Convert.ToDouble(maxt[i]);

C_avg[Convert.ToInt32(codi[i]),

Convert.ToInt32(codj[i])]=GetCC(r,C_min[Convert.ToInt32(codi[i]),Convert.ToInt32(codj[i])],C_max[Convert.ToInt32(codi[i]),Convert.ToInt32(codj[i])],ref nrm);

}

for(i=1; i<=n; i++)

for(j=1; j<=n; j++)

{

C_rev_min[n-j+1,n-i+1]=C_min[i,j];

C_rev_max[n-j+1,n-i+1]=C_max[i,j];

C_rev_avg[n-j+1,n-i+1] = C_avg[i,j];

//GetMat(C_rev_min[n-j+1,n-i+1],C_rev_max[n-j+1,

n-i+1]);

}

AlgorithmFloyda(C_min,P_min);

AlgorithmFloyda(C_rev_min,P_rev_min);

AlgorithmFloyda(C_max,P_max);

AlgorithmFloyda(C_rev_max,P_rev_max);

AlgorithmFloyda(C_avg,P_avg);

AlgorithmFloyda(C_rev_avg,P_rev_avg);

tp_min = new double[n+1]; tp_max = new double[n+1];

tp_avg = new double[n+1];

tn_min = new double[n+1]; tn_max = new double[n+1];

tn_avg = new double[n+1];

R_min = new double[n+1]; R_max = new double[n+1];

R_avg = new double[n+1];

r_min = new double[n+1]; r_max = new double[n+1];

r_avg = new double[n+1];

tp_min[1]=0; tp_max[1]=0; tp_avg[1]=0;

for(i=2; i<=n; i++)

{

tp_min[i]=MaxPath(C_min,P_min,1,i);

tp_max[i]=MaxPath(C_max,P_max,1,i);

tp_avg[i]=MaxPath(C_avg,P_avg,1,i);

}

L_kp_min=tp_min[n]; L_kp_max=tp_max[n]; L_kp_avg = tp_avg[n];

Li.Add(L_kp_avg);

}

label1.Text = "L_kp = "+String.Format("{0:F2}",L_kp_min);

label2.Text = "L_kp = "+String.Format("{0:F2}",L_kp_max);

label3.Text = "L_kp = "+String.Format("{0:F2}",L_kp_avg);

L_kp_mat = GetMat(L_kp_min,L_kp_max,L_kp_avg); L_kp_otk =

GetOtk(L_kp_min,L_kp_max);

L_kp_dsp = Math.Pow(L_kp_otk,2);

tn_min[n]=L_kp_min; tn_max[n]=L_kp_max; tn_avg[n]=L_kp_avg;

for(i=2; i<=n; i++)

{

tn_min[n-i+1]=L_kp_min-MaxPath(C_rev_min, P_rev_min, 1, i);

tn_max[n-i+1]=L_kp_max-MaxPath(C_rev_max, P_rev_max, 1, i);

tn_avg[n-i+1]=L_kp_avg-MaxPath(C_rev_avg, P_rev_avg, 1, i);

}

label4.Text="На критическом пути расположены следующие вершины: ";

label5.Text="На критическом пути расположены следующие вершины: ";

label6.Text="На критическом пути расположены следующие вершины: ";

for(i=1; i<=n; i++)

{

R_min[i]=tn_min[i]-tp_min[i];

R_max[i]=tn_max[i]-tp_max[i];

R_avg[i]=tn_avg[i]-tp_avg[i];

if(R_min[i]==0)

label4.Text+=i.ToString()+" ";

if(R_max[i]==0)

label5.Text+=i.ToString()+" ";

if(R_avg[i]==0)

label6.Text+=i.ToString()+" ";

}

tpn_min = new double[n+1,n+1]; tpn_max = new double[n+1,n+1];

tpn_avg = new double[n+1,n+1];

tnn_min = new double[n+1,n+1]; tnn_max = new double[n+1,n+1];

tnn_avg = new double[n+1,n+1];

tpo_min = new double[n+1,n+1]; tpo_max = new double[n+1,n+1];

tpo_avg = new double[n+1,n+1];

tno_min = new double[n+1,n+1]; tno_max = new double[n+1,n+1];

tno_avg = new double[n+1,n+1];

Rn_min = new double[n+1,n+1]; Rn_max = new double[n+1,n+1];

Rn_avg = new double[n+1,n+1];

Rcb_min = new double[n+1,n+1]; Rcb_max = new double[n+1,n+1];

Rcb_avg = new double[n+1,n+1];

/*nij =

*/GetPar(C_min,tp_min,tn_min,tpn_min,tpo_min,tno_min,tnn_min,

Rn_min,Rcb_min);

ShowGrid2(dataGrid2,C_min,tpn_min, tpo_min, tnn_min, tno_min,

Rn_min, Rcb_min);

/*nij =

*/GetPar(C_max,tp_max,tn_max,tpn_max,tpo_max,tno_max,tnn_max,

Rn_max,Rcb_max);

ShowGrid2(dataGrid3,C_max,tpn_max, tpo_max, tnn_max, tno_max,

Rn_max, Rcb_max);

GetPar(C_avg,tp_avg,tn_avg,tpn_avg,tpo_avg,tno_avg,tnn_avg,

Rn_avg,Rcb_avg);

ShowGrid2(dataGrid4,C_avg,tpn_avg, tpo_avg, tnn_avg, tno_avg,

Rn_avg, Rcb_avg);

k=(int)(1+3.32*Math.Log10(n));

MainStatistics(Li,out Mx,out S2x,out Sx,out X_2);

label7.Text="Матожидание T_kp="+String.Format("{0:F2}",Mx);

label8.Text="Дисперсия T_kp = "+String.Format("{0:F2}",S2x);

label9.Text="Ср. кв. от. T_kp="+String.Format("{0:F2}",Sx);

label10.Text="Хі квадрат ="+String.Format("{0:F2}",X_2)+

", число ступеней свободы v="+v.ToString();

}

private void MainStatistics(ArrayList x,out double Mx,out double

S2x,out double Sx,out double X_2)

{

int i, j;

double /*m2, m4,*/ x_max, x_min, h;

FileStream f = new FileStream("test.xls",FileMode.Create);

StreamWriter w = new StreamWriter(f);

int []n_ = new int[k+1];

double []p_ = new double [k+1];

double []x_cp = new double [k+1];

Mx=0; S2x=0; Sx=0;

x_max=Convert.ToDouble(x[0]);

x_min=Convert.ToDouble(x[0]);

for(i=0; i<x.Count; i++)

{

if( x_max < Convert.ToDouble(x[i]))

x_max=Convert.ToDouble(x[i]);

if( x_min > Convert.ToDouble(x[i]))

x_min=Convert.ToDouble(x[i]);

}

h=(x_max-x_min)/k;

for(j=1; j<=k; j++)

{

p_[j]=0;

n_[j]=0;

x_cp[j]=x_min+h*(j-1)+h/2;

}

n_[1]=1;

for(i=0; i<x.Count; i++)

for(j=1; j<=k; j++)

if ((Convert.ToDouble(x[i]) > x_min+(j-1)*h) &&

(Convert.ToDouble(x[i]) <= x_min+j*h) )

{

n_[j]++;

break;

}

for(i=1; i<=k; i++)

Mx=Mx+x_cp[i]*n_[i];

Mx=Mx/x.Count;

for(i=1; i<=k; i++)

S2x=S2x+Math.Pow(x_cp[i]-Mx,2)*n_[i];

S2x=S2x/(x.Count-1);

Sx=Math.Sqrt(S2x);

X_2=0;

for(j=1; j<=k; j++)

{

p_[j]=h*Math.Exp(-Math.Pow(x_cp[j]-Mx,2)/(2*S2x))/(

Math.Sqrt(2*Math.PI)*Sx);

w.WriteLine(x_cp[j].ToString()+"\t"+p_[j].ToString());

X_2=X_2+Math.Pow(n_[j]-p_[j]*x.Count,2)/(p_[j]*x.Count);

}

v = k-3;

w.Close(); f.Close();

}

private void DrawGant(Graphics g,/*int n_ij,*/double [,]C,

double [,]tpn,double [,]tpo,double [,]tno,double [,]tnn)

{

int i,j;

Pen pn = new Pen(Color.Black);

Pen p = new Pen(Color.Black);

Pen p1 = new Pen(Color.Green,ht);

Pen p2 = new Pen(Color.Red,ht);

Font fnt = new Font("Courier New",ht);

SolidBrush sbr = new SolidBrush(Color.Black);

int dy=17;

float y0,y1,y2,x0,x1,x2,yn,xn;

x0=10; y0=10;

x1=x0; y1=y0;

double max = GetMax(tno);

double dx = max/ 10;

double sx=0;

xn=x0+(float)max*mx;

yn=m-1+dy*n_ij;

pn.EndCap = LineCap.ArrowAnchor;

g.DrawLine(pn,x0,yn,xn,yn);

g.DrawString("Работы",fnt,sbr,x0,y0-10);

//g.DrawString(max.ToString(),fnt,sbr,x0+(float)max*mx,yn);

for(i=0; i<=10; i++)

{

if(i<10)g.DrawLine(p,x0+(float)sx*mx,yn-2,

x0+(float)sx*mx,yn+2);

g.DrawString(String.Format("{0:F2}",sx),fnt,sbr,

x0+(float)sx*mx,yn);

sx+=dx;

}

g.DrawLine(pn,x0,yn,x0,y0);

g.DrawString("Время",fnt,sbr,xn+(float)dx*mx,yn);

for(i=1; i<=n; i++)

for(j=1; j<=n; j++)

if(C[i,j]>=0)

{

x1=x0+(float)tpn[i,j]*mx;

x2=x1+(float)C[i,j]*mx;

y1+=dy; y2=y1;

g.DrawLine(p1,x1,y1,x2,y2);

if(tpo[i,j]!=tno[i,j])

{

x1=x2;

x2=x1+(float)(tno[i,j]-tpo[i,j])*mx;

g.DrawLine(p2,x1,y1,x2,y2);

}

g.DrawString(i.ToString()+"-

"+j.ToString(),fnt,sbr ,x2,y2-ht);

}

}

private void pictureBox1_Paint(object sender,

System.Windows.Forms.PaintEventArgs e)

{

Graphics g = e.Graphics;

DrawGant(g,/*nij,*/C_min,tpn_min,tpo_min,tno_min,tnn_min);

}

private void pictureBox2_Paint(object sender,

System.Windows.Forms.PaintEventArgs e)

{

Graphics g = e.Graphics;

DrawGant(g,/*nij,*/C_max,tpn_max,tpo_max,tno_max,tnn_max);

}

private void pictureBox3_Paint(object sender,

System.Windows.Forms.PaintEventArgs e)

{

Graphics g = e.Graphics;

DrawGant(g,/*nij,*/C_avg,tpn_avg,tpo_avg,tno_avg,tnn_avg);

}

private void button1_Click(object sender, System.EventArgs e)

{

Process.Start("test.xls");

}

private void button2_Click(object sender, System.EventArgs e)

{

int n = (int)Math.Sqrt(C_avg.Length)-1;

FileStream f =new FileStream("tavg.xls",FileMode.Create);

StreamWriter w = new StreamWriter(f);

w.WriteLine("Код i,j\tt(i,j)\ttpn(i,j)\ttpo(i,j)\ttnn(i,j)\ttno(i,j)\t

Rn(i,j)\tRcb(i,j)");

for(int i=1; i<=n; i++)

for(int j=1; j<=n; j++)

if(C_avg[i,j]>=0)

{

w.WriteLine(i.ToString()+"-

"+j.ToString()+"\t"+C_avg[i,j]+"\t"+tpn_avg[i,j]+"\t"+

tpo_avg[i,j]+"\t"+tnn_avg[i,j]+"\t"+tno_avg[i,j]+"\t"+

Rn_avg[i,j]+"\t"+Rcb_avg[i,j]);

}

w.Close();

f.Close();

DialogResult result = MessageBox.Show(

"Просмотреть отчет?","",MessageBoxButtons.YesNo);

if(result==DialogResult.Yes)

Process.Start("tavg.xls");

}

private void button3_Click(object sender, System.EventArgs e)

{

int n = (int)Math.Sqrt(C_min.Length)-1;

FileStream f =new FileStream("tmin.xls",FileMode.Create);

StreamWriter w = new StreamWriter(f);

w.WriteLine("Код i,j\tt(i,j)\ttpn(i,j)\ttpo(i,j)\ttnn(i,j)\ttno(i,j)\t

Rn(i,j)\tRcb(i,j)");

for(int i=1; i<=n; i++)

for(int j=1; j<=n; j++)

if(C_min[i,j]>=0)

{

w.WriteLine(i.ToString()+"-"+j.ToString()+"\t"+

C_min[i,j]+"\t"+tpn_min[i,j]+"\t"+tpo_min[i,j]+"\t"+

tnn_min[i,j]+"\t"+tno_min[i,j]+"\t"+Rn_min[i,j]+"\t"+Rcb_min[i,j]);

}

w.Close();

f.Close();

DialogResult result = MessageBox.Show(

"Просмотреть отчет?","",MessageBoxButtons.YesNo);

if(result==DialogResult.Yes)

Process.Start("tmin.xls");

}

private void button4_Click(object sender, System.EventArgs e)

{

int n = (int)Math.Sqrt(C_max.Length)-1;

FileStream f =new FileStream("tmax.xls",FileMode.Create);

StreamWriter w = new StreamWriter(f);

w.WriteLine("Код i,j\tt(i,j)\ttpn(i,j)\ttpo(i,j)\ttnn(i,j)\ttno(i,j)\t

Rn(i,j)\tRcb(i,j)");

for(int i=1; i<=n; i++)

for(int j=1; j<=n; j++)

if(C_max[i,j]>=0)

{

w.WriteLine(i.ToString()+"-"+j.ToString()+"\t"+

C_max[i,j]+"\t"+tpn_max[i,j]+"\t"+tpo_max[i,j]+"\t"+tnn_max[i,j]+"\t"+tno_max[i,j]+"\t"+Rn_max[i,j]+"\t"+Rcb_max[i,j]);

}

w.Close();

f.Close();

DialogResult result = MessageBox.Show(

"Просмотреть отчет?","",MessageBoxButtons.YesNo);

if(result==DialogResult.Yes)

Process.Start("tmax.xls");

}

}

}


Информация о работе «Статистичне моделювання сітьового графіка побудови судна»
Раздел: Информатика, программирование
Количество знаков с пробелами: 70410
Количество таблиц: 3
Количество изображений: 11

Похожие работы

Скачать
62806
0
2

... і успіхові реформ, в Україні пішли хибним шляхом перерозподілу національного багатства на користь незначного прошарку так званих "нових українців".   2. Інвестиційна діяльність в ринковій економіці   Сьогодні у складній та заплутаній системі економічних зв’язків все частіше необхідно приймати зважені рішення щодо накопичення та інвестування. Для збереження і примноження заощаджень потрібно ві ...

0 комментариев


Наверх