unvisibleman

ЭМММ ЛР3

May 10th, 2015
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.51 KB | None | 0 0
  1.         private void go_Click(object sender, EventArgs e){
  2.             try{
  3.                 data.Visible = true;
  4.                 double p = double.Parse(pBox.Text);
  5.                 if (p < 0){
  6.                     MessageBox.Show("Стоимость оборудования не может быть меньше нуля");
  7.                     return;
  8.                 }
  9.                 double a = double.Parse(aBox.Text);
  10.                 if (a >= 1){
  11.                     MessageBox.Show("Дисконтирующий множитель лежит в пределах [0;1]");
  12.                     return;
  13.                 }
  14.                 double r1 = double.Parse(r1Box.Text);
  15.                 double r2 = double.Parse(r2Box.Text);
  16.                 if (r1 < 0 || r2 < 0){
  17.                     MessageBox.Show("Коэффициенты функции обслуживания не могут быть меньше нуля");
  18.                     return;
  19.                 }
  20.                 double q1 = double.Parse(q1Box.Text);
  21.                 if (q1 < 0){
  22.                     MessageBox.Show("Ликвидная стоимость не может быть меньше нуля");
  23.                     return;
  24.                 }
  25.                 List<double[]> table = new List<double[]>();
  26.                 for (int i = 0; ; i++){
  27.                     double[] tmp = new double[6];
  28.                     tmp[0] = i + 1;
  29.                     double tmp_sum = 0;
  30.                     for (int j = 0; j < tmp[0]; j++)
  31.                         tmp_sum += Math.Pow(a, j) * r_t(r1, r2, j);
  32.                     tmp[1] = tmp_sum;
  33.                     tmp[2] = Math.Pow(a, tmp[0]) * (p - q_t(q1, tmp[0]));
  34.                     tmp[3] = tmp[1] + tmp[2];
  35.                     tmp[4] = 1 - Math.Pow(a, tmp[0]);
  36.                     tmp[5] = 1.0 / tmp[4] * tmp[3];
  37.                     table.Add(tmp);
  38.                     if (i > 0 && table[i][5] > table[i - 1][5]) break;
  39.                 }
  40.                 FileStream fs = new FileStream("output.txt", FileMode.OpenOrCreate, FileAccess.Write);
  41.                 StreamWriter sw = new StreamWriter(fs);
  42.                 sw.WriteLine("N\tP(0)");
  43.                 sw.WriteLine(" ");
  44.                 data.RowCount = table.Count;
  45.                 data.ColumnCount = 6;
  46.                 data.Columns[0].HeaderText = "N";
  47.                 data.Columns[1].HeaderText = "Sum(a^i*r(i))";
  48.                 data.Columns[2].HeaderText = "a^N*(p-q(N))";
  49.                 data.Columns[3].HeaderText = "Sum(a^i*r(i))+a^N*(p-q(N))";
  50.                 data.Columns[4].HeaderText = "1-a^N";
  51.                 data.Columns[5].HeaderText = "P(0)";
  52.                 for (int i = 0; i < table.Count; i++){
  53.                     for (int j = 0; j<6; j++)
  54.                         data[j, i].Value = Math.Round(table[i][j], 3);
  55.                     sw.WriteLine(Math.Round(table[i][0], 3) + "\t" + Math.Round(table[i][5], 3));
  56.                 }
  57.                 sw.WriteLine(" ");
  58.                 sw.WriteLine("Минимальные затраты Pmin = " + Math.Round(table[table.Count - 2][5], 3) + " при периоде замены N = " + Math.Round(table[table.Count - 2][0], 3) + " мес");
  59.                 sw.Close();
  60.                 fs.Close();
  61.             }
  62.             catch (Exception ex){
  63.                 MessageBox.Show("Ошибка: " + ex.Message);
  64.             }
  65.         }
  66.  
  67.         double r_t(double r1,double r2,double t){
  68.             return r1 - r2 / (t + 1.0);
  69.         }
  70.         double q_t(double q1,double t){
  71.             return q1 / (t + 1.0);
  72.         }
Advertisement
Add Comment
Please, Sign In to add comment