Fundamentals-of-computer-modeling
187 строк · 7.6 Кб
1#include "ModelingWorkForm.h"
2#include <iostream>
3#include <cmath>
4#include <random>
5#include <time.h>
6
7using namespace System;
8using namespace System::Windows::Forms;
9
10
11[STAThreadAttribute]
12void main(array<String^>^ args)
13{
14std::srand(time(NULL));
15Application::SetCompatibleTextRenderingDefault(false);
16Application::EnableVisualStyles();
17ModelingWorkMachineWithBreakdowns::ModelingWorkForm form;
18Application::Run(% form);
19
20}
21
22double getTimeBefoeNextTask(double const& lambda)
23{
24double u = rand() / (RAND_MAX + 1.0);
25double res = int((-log(1 - u) / lambda) * 100 + 0.5) / 100.0;
26return res;
27}
28
29double getTimeBeforeBreakdownMachine(double const& timeBreakDown_M_X, double const& timeBreakdown_StandartDeviation)
30{
31std::mt19937 gen((std::random_device())());
32std::normal_distribution<double> nd(timeBreakDown_M_X, timeBreakdown_StandartDeviation);
33double res = int((nd(gen)) * 100 + 0.5) / 100.0;
34return res;
35}
36
37double getRandomUniform(double const& start,double const& end)
38{
39return ((double)rand()) / RAND_MAX;
40}
41
42double getDebugMachine(double const& timeExectuionInterval1, double const& timeExectuionInterval2)
43{
44double res = int((getRandomUniform(timeExectuionInterval1, timeExectuionInterval2)) * 100 + 0.5) / 100.0;
45return res;
46}
47
48double getTimeExecutionTask(double const& timeExectuionM_X,double const& timeExectuionStandartDeviation)
49{
50double res = int((getRandomUniform(timeExectuionM_X, timeExectuionStandartDeviation)) * 100 + 0.5) / 100.0;
51return res;
52}
53
54double getTimeRepair(double const& timeTroubleshootinFrom,double const& timeTroubleshootinTo)
55{
56double res = int((getRandomUniform(timeTroubleshootinFrom, timeTroubleshootinTo)) * 100 + 0.5) / 100.0;
57return res;
58}
59
60System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Btn_execution_Click(System::Object^ sender, System::EventArgs^ e)
61{
62int countDetails = Convert::ToInt32(numericUpDown1->Text);
63int allDetails = countDetails;
64double const timeExectuionInterval1 = Convert::ToDouble(tb_TimeExecutionInterval1->Text->Replace(".",",")); //íàëàäêà ñòàíêà
65double const timeExectuionInterval2 = Convert::ToDouble(tb_TimeExecutionInterval2->Text->Replace(".", ","));
66double const timeExectuionM_X = Convert::ToDouble(tb_TimeExecutionM_X->Text->Replace(".", ",")); // âðåìÿ âûï çàäàíèÿ
67double const timeExectuionStandartDeviation = Convert::ToDouble(tb_TimeExecutionStandartDeviation->Text->Replace(".", ","));
68
69double const timeBreakDown_M_X = Convert::ToDouble(tb_breakdownM_X->Text->Replace(".", ",")); // ìåæäó ïîëîìêàìè èíòåðâàë
70double const timeBreakdown_StandartDeviation = Convert::ToDouble(tb_breakdownStandartDeviation->Text->Replace(".", ","));
71
72double const timeTroubleshootinFrom = Convert::ToDouble(tb_troubleshootingFrom->Text->Replace(".", ",")); // âðåìÿ óñòðàíåíèÿ îò
73double const timeTroubleshootinTo = Convert::ToDouble(tb_troubleshootingTo->Text->Replace(".", ","));
74
75double timeBeforeNextTask = getTimeBefoeNextTask(1.0); //âðåìÿ äî ñëåäóþùåãî çàäàíèÿ
76double timeBeforeBreakdownMachine = getTimeBeforeBreakdownMachine(timeBreakDown_M_X, timeBreakdown_StandartDeviation); // âðåìÿ äî ïîëîìêè
77
78double totalTimeWorkMachine = 0;
79int countBrokenDetails = 0;
80double totalTimeRepair = 0;
81double totalTimeWait = 0;
82while (countDetails > 0)
83{
84if (timeBeforeNextTask > 0)
85{
86//totalTimeWorkMachine += timeBeforeNextTask; //äîáàâëÿåì âðåìÿ îæèäàíèÿ çàäàíèÿ
87timeBeforeNextTask = 0;
88}
89
90double setMachine = getDebugMachine(timeExectuionInterval1, timeExectuionInterval2);
91double timeExectuionTask = getTimeExecutionTask(timeExectuionM_X, timeExectuionStandartDeviation);
92double timeDebugExection_oneTask = setMachine + timeExectuionTask;
93
94if (timeDebugExection_oneTask < timeBeforeBreakdownMachine)
95{
96timeBeforeNextTask += getTimeBefoeNextTask(1.0);
97totalTimeWorkMachine += timeDebugExection_oneTask; //ê îáùåìó âðåìåíè ðàáîòû ñòàíêà äîáàâëÿåì âðåìÿ âûïîëíåíèÿ îäíîãî çàäàíèÿ
98timeBeforeBreakdownMachine -= timeDebugExection_oneTask; //îò âðåìåíè äî ïîëîìêè îòíèìàåì âûïîëíåíèå îäíîãî çàäàíèÿ
99timeBeforeNextTask -= timeDebugExection_oneTask; //îò âðåìåíè äî ñëåä. çàäàíèÿ îòíèìàåì âðåìÿ âûï. îäíîãî çàäàíèÿ
100countDetails--;
101}
102else
103{
104countBrokenDetails++;
105totalTimeWait += timeBeforeBreakdownMachine;
106//totalTimeWorkMachine += timeBeforeBreakdownMachine; //îáùåå âðåìÿ ðàáîòû ñòàíêà + âðåìÿ ïðîñòîÿ
107timeBeforeNextTask -= timeBeforeBreakdownMachine;
108double repairTime = getTimeRepair(timeTroubleshootinFrom, timeTroubleshootinTo);
109//cout repairTime
110//totalTimeWorkMachine += repairTime;
111timeBeforeNextTask -= repairTime;
112timeBeforeBreakdownMachine = getTimeBeforeBreakdownMachine(timeBreakDown_M_X, timeBreakdown_StandartDeviation);
113totalTimeRepair += repairTime;
114
115}
116}
117int countDetailInQueue = 0;
118while (timeBeforeNextTask < 0)
119{
120timeBeforeNextTask += getTimeBefoeNextTask(1.0);
121countDetailInQueue++;
122}
123
124lbl_countTask->Text = "Êîëè÷åñòâî äåòàëåé: " + allDetails.ToString();
125lbl_CountBreakdown->Text = "Êîëè÷åñòâî ïîëîìîê: " + countBrokenDetails.ToString();
126lbl_TimeWork->Text = "Âðåìÿ ðàáîòû ñòàíêà: " + (static_cast<int>(totalTimeWorkMachine)).ToString() +" ÷. " + (static_cast<int>((int)totalTimeWorkMachine % 1 * 60)).ToString() +" ìèí.";
127lbl_DetailInQueue->Text = "Äåòàëåé â î÷åðåäè: " + countDetailInQueue.ToString();
128lbl_TotalTimeRepair->Text = "Îáùåå âðåìÿ ðåìîíòà: " + (static_cast<int>(totalTimeRepair)).ToString() + " ÷. " + (static_cast<int>((int)totalTimeRepair % 1 * 60)).ToString() + " ìèí.";
129lbl_totaltimeWait->Text = "Îáùåå âðåìÿ ïðîñòîÿ: " + (static_cast<int>(totalTimeWait)).ToString() + " ÷. " + (static_cast<int>((int)totalTimeWait % 1 * 60)).ToString() + " ìèí.";
130//return brokenDetails,totalTimeWorkMachine, totalTimeWorkMachine/allDetails,countDetailInQueue,
131}
132
133System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_TimeExecutionInterval1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
134{
135if (checkInput(e)== true)
136e->Handled = true;
137}
138
139System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_TimeExecutionInterval2_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
140{
141if (checkInput(e))
142e->Handled = true;
143}
144
145System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_TimeExecutionM_X_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
146{
147if (checkInput(e))
148e->Handled = true;
149}
150
151System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_TimeExecutionStandartDeviation_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
152{
153if (checkInput(e))
154e->Handled = true;
155}
156
157System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_breakdownM_X_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
158{
159if (checkInput(e))
160e->Handled = true;
161}
162
163System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_breakdownStandartDeviation_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
164{
165if (checkInput(e))
166e->Handled = true;
167}
168
169System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_troubleshootingFrom_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
170{
171if (checkInput(e))
172e->Handled = true;
173}
174
175System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_troubleshootingTo_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
176{
177if (checkInput(e))
178e->Handled = true;
179}
180
181System::Boolean ModelingWorkMachineWithBreakdowns::ModelingWorkForm::checkInput(System::Windows::Forms::KeyPressEventArgs^ e)
182{
183if ((Char::IsNumber(e->KeyChar) | Char::IsPunctuation(e->KeyChar)) || e->KeyChar == (char)8)
184return false;
185else
186return true;
187}
188
189
190