Смоделировать процесс обработки на станке 100 деталей. Подсчитать число заполненных тележек и число потерянных деталей - C#
Формулировка задачи:
Условие задачи:
С интервалом времени 5 ± 2мин. детали поштучно поступают к станку на обработку и до начала обработки хранятся на рабочем столе, который вмещает 3 детали. Если свободных мест на столе нет, вновь поступающие детали укладываются в тележку, которая вмещает 5 деталей, если тележка заполняется до нормы, ее увозят к другим станкам, а на ее место через 8 ± 3мин. ставят новую тележку. Если во время отсутствия тележки поступает очередная деталь и не находит на столе мест, она считается потерянной. Рабочий берет детали на обработку в первую очередь из тележки, а если она пуста – со стола. Обработка деталей производится за 10 ± 5мин. Смоделировать процесс обработки на станке 100 деталей. Подсчитать число заполненных тележек и число потерянных деталей.
В Windows Forms делал на C#. Не могу понять как описать часть про тележку и 8 ± 3мин.
Создал 3 таймера:
1ый для 5 ± 2мин - поступление детали, работает пока не будет 100 деталей запущено.
2ой для 10 ± 5мин - обработка детали на станке, timer.stop() когда количество деталей =100 и стол пуст и телега пуста.
а вот с 3им для 8 ± 3мин. - проблема. Не могу понять, как описать условие - если интервал таймера закончился, то таймер выключить. Так как потом мы его еще будем включать. Помогите пожалуйста.
Решение задачи: «Смоделировать процесс обработки на станке 100 деталей. Подсчитать число заполненных тележек и число потерянных деталей»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace KURSOV
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool net_telegi=false; // индикатор телеги
bool det_rab=false; // =true если деталь в обработке
int kol_det = 0; // количество деталей вступивших в оборот
int rab_stol = 0; // количество деталей находящихся на столе
int telega = 0; // количество деталей находящихся в телеге
int poteri = 0; // количество потерянных деталей
int kol_teleg = 0; // количество использованных телег
int result = 0; // количество деталей вступивших в систему
int time1 = 5; // Основное время поступления детали
int time2 = 2; // +\- для времени поступления деталей
int time3 = 8; // Основное время через которое ставят тележку
int time4 = 3; // +\- для времени через которое ставят тележку
int time5 = 10; // Основное время обработки детали на станке
int time6 = 5; // +\- для времени обработки детали на станке
int t1, t2, t3; //временные интервалы
int k, l, m, tl, tm; // переменные циклов-счетчиков
private void tabPage1_Click(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e) // ПРИМЕНЕНИЕ ИЗМЕНЕНИЙ
{
time1 = Convert.ToInt32(textBox1.Text);
time2 = Convert.ToInt32(textBox2.Text);
time3 = Convert.ToInt32(textBox3.Text);
time4 = Convert.ToInt32(textBox4.Text);
time5 = Convert.ToInt32(textBox5.Text);
time6 = Convert.ToInt32(textBox6.Text);
}
private void button4_Click(object sender, EventArgs e) // ВЫСТАВИТЬ УМОЛЧАНИЯ
{
time1 = 5;
time2 = 2;
time3 = 8;
time4 = 3;
time5 = 10;
time6 = 5;
}
private void button2_Click(object sender, EventArgs e) // ЗАПУСК
{
Random rnd1 = new Random();
t1 = rnd1.Next(time1-time2,time1+time2);
textBox14.Text = Convert.ToString(t1);
Random rnd2 = new Random();
t2 = rnd2.Next(time5 - time6, time5 + time6);
textBox15.Text = Convert.ToString(t2);
Random rnd3 = new Random();
t3 = rnd3.Next(time3 - time4, time3 + time4);
textBox16.Text = Convert.ToString(t3);
det_rab = true;
if (t1 > t2) { tl = t1; tm=t2;} else { tl = t2; tm=t1; }
while (l <= tl*100)
{
for (m = 0; m <= tm * 100; m++)
{
l++;
if (m % t2 == 0)
{
result++;
det_rab = false;
if ((telega != 0) & (net_telegi == false))
{
telega--;
det_rab = true;
}
else
{
rab_stol--;
det_rab = true;
}
}
if (l % t1 == 0)
{
kol_det++;
if (rab_stol < 3)
{
rab_stol++;
kol_det--;
}
else
if ((telega < 5) & (net_telegi == false))
{
telega++;
kol_det--;
}
else
if (net_telegi == true)
{
poteri++;
kol_det--;
}
else
{
kol_teleg++;
poteri++;
kol_det--;
net_telegi = true;
for (k = 0; k <= t3; k++)
{
if (k == t3)
{
net_telegi = false;
telega = 0;
}
}
}
}
}
}
MessageBox.Show("Моделирование завершено!\n" + "Потрачено времени: " + l + " минут");
textBox11.Text = Convert.ToString(kol_teleg);
textBox10.Text = Convert.ToString(poteri);
textBox9.Text = Convert.ToString(result);
textBox7.Text = Convert.ToString(kol_det);
textBox8.Text = Convert.ToString(det_rab);
textBox12.Text = Convert.ToString(rab_stol);
textBox13.Text = Convert.ToString(telega);
textBox17.Text = Convert.ToString(net_telegi);
}
private void button3_Click(object sender, EventArgs e) // ОЧИСТИТЬ ВСЕ
{
textBox14.Text = ""; // очистить t1
textBox15.Text = ""; // очистить t2
textBox16.Text = ""; // очистить t3
textBox11.Text = ""; // очистить количество телег kol_teleg
textBox10.Text = ""; // очистить количество потери poteri
textBox9.Text = ""; // очистить количество деталей result
textBox7.Text = ""; // очистить количество деталей kol_det
textBox8.Text = ""; // очистить детали из обработки det_rab
textBox12.Text = ""; // очистить рабочий стол rab_stol
textBox13.Text = ""; // очистить тележку telega
textBox17.Text = ""; // очистить индикатор net_telegi
net_telegi = false; // индикатор телеги
det_rab = false; // =true если деталь в обработке
kol_det = 0; // количество деталей вступивших в оборот
rab_stol = 0; // количество деталей находящихся на столе
telega = 0; // количество деталей находящихся в телег
poteri = 0; // количество потерянных деталей
kol_teleg = 0; // количество использованных телег
result = 0; // количество деталей вступивших в систему
k = 0;
l = 0;
tl = 0;
tm = 0;
m = 0;
}
}
}