Fundamentals-of-computer-modeling

Форк
0
187 строк · 7.6 Кб
1
#include "ModelingWorkForm.h"
2
#include <iostream>
3
#include <cmath>
4
#include <random>
5
#include <time.h>
6

7
using namespace System;
8
using namespace System::Windows::Forms;
9

10

11
[STAThreadAttribute]
12
void main(array<String^>^ args)
13
{
14
	std::srand(time(NULL));
15
	Application::SetCompatibleTextRenderingDefault(false);
16
	Application::EnableVisualStyles();
17
	ModelingWorkMachineWithBreakdowns::ModelingWorkForm form;
18
	Application::Run(% form);
19

20
}
21

22
double getTimeBefoeNextTask(double const& lambda)
23
{
24
	double u = rand() / (RAND_MAX + 1.0);
25
	double res = int((-log(1 - u) / lambda) * 100 + 0.5) / 100.0;
26
	return res;
27
}
28

29
double getTimeBeforeBreakdownMachine(double const& timeBreakDown_M_X, double const& timeBreakdown_StandartDeviation)
30
{
31
	std::mt19937 gen((std::random_device())());
32
	std::normal_distribution<double> nd(timeBreakDown_M_X, timeBreakdown_StandartDeviation);
33
	double res = int((nd(gen)) * 100 + 0.5) / 100.0;
34
	return res;
35
}
36

37
double getRandomUniform(double const& start,double const& end)
38
{
39
	return ((double)rand()) / RAND_MAX;
40
}
41

42
double getDebugMachine(double const& timeExectuionInterval1, double const& timeExectuionInterval2)
43
{
44
	double res = int((getRandomUniform(timeExectuionInterval1, timeExectuionInterval2)) * 100 + 0.5) / 100.0;
45
	return res;
46
}
47

48
double getTimeExecutionTask(double const& timeExectuionM_X,double const& timeExectuionStandartDeviation)
49
{
50
	double res = int((getRandomUniform(timeExectuionM_X, timeExectuionStandartDeviation)) * 100 + 0.5) / 100.0;
51
	return res;
52
}
53

54
double getTimeRepair(double const& timeTroubleshootinFrom,double const& timeTroubleshootinTo)
55
{
56
	double res = int((getRandomUniform(timeTroubleshootinFrom, timeTroubleshootinTo)) * 100 + 0.5) / 100.0;
57
	return res;
58
}
59

60
System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Btn_execution_Click(System::Object^ sender, System::EventArgs^ e)
61
{
62
	int countDetails = Convert::ToInt32(numericUpDown1->Text);
63
	int allDetails = countDetails;
64
	double const timeExectuionInterval1 = Convert::ToDouble(tb_TimeExecutionInterval1->Text->Replace(".",",")); //íàëàäêà ñòàíêà
65
	double const timeExectuionInterval2 = Convert::ToDouble(tb_TimeExecutionInterval2->Text->Replace(".", ","));
66
	double const timeExectuionM_X = Convert::ToDouble(tb_TimeExecutionM_X->Text->Replace(".", ",")); // âðåìÿ âûï çàäàíèÿ
67
	double const timeExectuionStandartDeviation = Convert::ToDouble(tb_TimeExecutionStandartDeviation->Text->Replace(".", ","));
68

69
	double const timeBreakDown_M_X = Convert::ToDouble(tb_breakdownM_X->Text->Replace(".", ",")); // ìåæäó ïîëîìêàìè èíòåðâàë
70
	double const timeBreakdown_StandartDeviation = Convert::ToDouble(tb_breakdownStandartDeviation->Text->Replace(".", ","));
71

72
	double const timeTroubleshootinFrom = Convert::ToDouble(tb_troubleshootingFrom->Text->Replace(".", ",")); // âðåìÿ óñòðàíåíèÿ îò
73
	double const timeTroubleshootinTo = Convert::ToDouble(tb_troubleshootingTo->Text->Replace(".", ","));
74

75
	double timeBeforeNextTask = getTimeBefoeNextTask(1.0); //âðåìÿ äî ñëåäóþùåãî çàäàíèÿ
76
	double timeBeforeBreakdownMachine = getTimeBeforeBreakdownMachine(timeBreakDown_M_X, timeBreakdown_StandartDeviation); // âðåìÿ äî ïîëîìêè
77
	
78
	double totalTimeWorkMachine = 0;
79
	int countBrokenDetails = 0;
80
	double totalTimeRepair = 0;
81
	double totalTimeWait = 0;
82
	while (countDetails > 0)
83
	{
84
		if (timeBeforeNextTask > 0)
85
		{
86
			//totalTimeWorkMachine += timeBeforeNextTask; //äîáàâëÿåì âðåìÿ îæèäàíèÿ çàäàíèÿ
87
			timeBeforeNextTask = 0;
88
		}
89

90
		double setMachine = getDebugMachine(timeExectuionInterval1, timeExectuionInterval2);
91
		double timeExectuionTask = getTimeExecutionTask(timeExectuionM_X, timeExectuionStandartDeviation);
92
		double timeDebugExection_oneTask = setMachine + timeExectuionTask;
93

94
		if (timeDebugExection_oneTask < timeBeforeBreakdownMachine) 
95
		{
96
			timeBeforeNextTask += getTimeBefoeNextTask(1.0);
97
			totalTimeWorkMachine += timeDebugExection_oneTask; //ê îáùåìó âðåìåíè ðàáîòû ñòàíêà äîáàâëÿåì âðåìÿ âûïîëíåíèÿ îäíîãî çàäàíèÿ
98
			timeBeforeBreakdownMachine -= timeDebugExection_oneTask; //îò âðåìåíè äî ïîëîìêè îòíèìàåì âûïîëíåíèå îäíîãî çàäàíèÿ
99
			timeBeforeNextTask -= timeDebugExection_oneTask; //îò âðåìåíè äî ñëåä. çàäàíèÿ îòíèìàåì âðåìÿ âûï. îäíîãî çàäàíèÿ
100
			countDetails--;
101
		}
102
		else
103
		{
104
			countBrokenDetails++;
105
			totalTimeWait += timeBeforeBreakdownMachine;
106
			//totalTimeWorkMachine += timeBeforeBreakdownMachine; //îáùåå âðåìÿ ðàáîòû ñòàíêà + âðåìÿ ïðîñòîÿ
107
			timeBeforeNextTask -= timeBeforeBreakdownMachine;
108
			double repairTime = getTimeRepair(timeTroubleshootinFrom, timeTroubleshootinTo);
109
			//cout repairTime
110
			//totalTimeWorkMachine += repairTime;
111
			timeBeforeNextTask -= repairTime;
112
			timeBeforeBreakdownMachine = getTimeBeforeBreakdownMachine(timeBreakDown_M_X, timeBreakdown_StandartDeviation); 
113
			totalTimeRepair += repairTime;
114

115
		}
116
	}
117
	int countDetailInQueue = 0;
118
	while (timeBeforeNextTask < 0)
119
	{
120
		timeBeforeNextTask += getTimeBefoeNextTask(1.0);
121
		countDetailInQueue++;
122
	}
123

124
	lbl_countTask->Text = "Êîëè÷åñòâî äåòàëåé: " + allDetails.ToString();
125
	lbl_CountBreakdown->Text = "Êîëè÷åñòâî ïîëîìîê: " + countBrokenDetails.ToString();
126
	lbl_TimeWork->Text = "Âðåìÿ ðàáîòû ñòàíêà: " + (static_cast<int>(totalTimeWorkMachine)).ToString() +" ÷. " + (static_cast<int>((int)totalTimeWorkMachine % 1 * 60)).ToString() +" ìèí.";
127
	lbl_DetailInQueue->Text = "Äåòàëåé â î÷åðåäè: " + countDetailInQueue.ToString();
128
	lbl_TotalTimeRepair->Text = "Îáùåå âðåìÿ ðåìîíòà: " + (static_cast<int>(totalTimeRepair)).ToString() + " ÷. " + (static_cast<int>((int)totalTimeRepair % 1 * 60)).ToString() + " ìèí.";
129
	lbl_totaltimeWait->Text = "Îáùåå âðåìÿ ïðîñòîÿ: " + (static_cast<int>(totalTimeWait)).ToString() + " ÷. " + (static_cast<int>((int)totalTimeWait % 1 * 60)).ToString() + " ìèí.";
130
	//return brokenDetails,totalTimeWorkMachine, totalTimeWorkMachine/allDetails,countDetailInQueue,
131
}
132

133
System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_TimeExecutionInterval1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
134
{
135
	if (checkInput(e)== true)
136
		e->Handled = true;
137
}
138

139
System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_TimeExecutionInterval2_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
140
{
141
	if (checkInput(e))
142
		e->Handled = true;
143
}
144

145
System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_TimeExecutionM_X_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
146
{
147
	if (checkInput(e))
148
		e->Handled = true;
149
}
150

151
System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_TimeExecutionStandartDeviation_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
152
{
153
	if (checkInput(e))
154
		e->Handled = true;
155
}
156

157
System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_breakdownM_X_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
158
{
159
	if (checkInput(e))
160
		e->Handled = true;
161
}
162

163
System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_breakdownStandartDeviation_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
164
{
165
	if (checkInput(e))
166
		e->Handled = true;
167
}
168

169
System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_troubleshootingFrom_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
170
{
171
	if (checkInput(e))
172
		e->Handled = true;
173
}
174

175
System::Void ModelingWorkMachineWithBreakdowns::ModelingWorkForm::Tb_troubleshootingTo_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
176
{
177
	if (checkInput(e))
178
		e->Handled = true;
179
}
180

181
System::Boolean ModelingWorkMachineWithBreakdowns::ModelingWorkForm::checkInput(System::Windows::Forms::KeyPressEventArgs^ e)
182
{
183
	if ((Char::IsNumber(e->KeyChar) | Char::IsPunctuation(e->KeyChar)) || e->KeyChar == (char)8)
184
		return false;
185
	else
186
		return true;
187
}
188

189

190

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.