-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
129 lines (126 loc) · 8.02 KB
/
Program.cs
File metadata and controls
129 lines (126 loc) · 8.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using System.Threading;
namespace MultiThread
{
class Program
{
public static int M, N;
public static int a, b, c, d;
public static double Weight_a = 0.1, Weight_b = 0.2, Weight_c = 0.3, Weight_d = 0.4;
public static double TotalWeight_a, TotalWeight_b, TotalWeight_c, TotalWeight_d;
const int SizeTruck1 = 7000;
const int SizeTruck2 = 5000;
static void Main()
{
Console.ForegroundColor = ConsoleColor.White;
// предлагается пользователю осуществить ввод значения переменной
Console.Write("Укажите объём сырья (не менее 100 едениц):");
string userString = Console.ReadLine();
M = Convert.ToInt32(userString);
// если значение переменной выходит из указанного предела, то выбрасывается исключение "Необходимый объём сырья должен быть более 100 едениц."
if (M < 100)
{
throw new Exception("Необходимый объём сырья должен быть более 100 едениц.");
}
Console.ForegroundColor = ConsoleColor.White;
// предлагается пользователю осуществить ввод значения переменной
Console.Write("\nУкажите объём выпуска продукции в час (не менее 50 едениц):");
string userString1 = Console.ReadLine();
N = Convert.ToInt32(userString1);
// если значение переменной выходит из указанного предела, то выбрасывается исключение
if (N < 50)
{
throw new Exception("Максимальный объём выпуска продукции в час более 50 едениц");
}
a = N;
b = Convert.ToInt32(1.1 * N);
c = Convert.ToInt32(1.2 * N);
d = Convert.ToInt32(1.3 * N);
TotalWeight_a = a * Weight_a;
TotalWeight_b = b * Weight_b;
TotalWeight_c = c * Weight_c;
TotalWeight_d = d * Weight_d;
int Storage = M * (a + b + c + d);
double Delivery = Convert.ToInt32(Storage * 95 / 100);
double VoyageTruck1 = Convert.ToInt32(Delivery * 60 / 100 / SizeTruck1);
double VoyageTruck2 = Convert.ToInt32(Delivery * 40 / 100 / SizeTruck2);
double Truck1 = Convert.ToInt32(Delivery * 60 / 100);
double Truck2 = Convert.ToInt32(Delivery * 40 / 100);
double RawTruck1 = Convert.ToInt32((Delivery * 60 / 100) - (a + b));
double RawTruck2 = Convert.ToInt32((Delivery * 40 / 100) - (c + d));
// создаем первый поток и назначаем функцию - выпуск продукта_a
Thread factory_a = new Thread(ReleaseProduct_a);
// запускаем первый поток
factory_a.Start();
// Остановка потока на 1 секунду
Thread.Sleep(TimeSpan.FromSeconds(1));
for (int i = 1; i <= a; i++)
{
Console.Write(string.Format("a{0} ", i));
}
// создаем второй поток и назначаем функцию - выпуск продукта_b
Thread factory_b = new Thread(ReleaseProduct_b);
// запускаем второй поток
factory_b.Start();
// Остановка потока на 1 секунду
Thread.Sleep(TimeSpan.FromSeconds(1));
for (int i = 1; i <= b; i++)
{
Console.Write(string.Format("b{0} ", i));
}
// создаем третий поток и назначаем функцию - выпуск продукта_c
Thread factory_c = new Thread(ReleaseProduct_c);
// запускаем третий поток
factory_c.Start();
// Остановка потока на 1 секунду
Thread.Sleep(TimeSpan.FromSeconds(1));
for (int i = 1; i <= c; i++)
{
Console.Write(string.Format("c{0} ", i));
}
// создаем четвёртый поток и назначаем функцию - выпуск продукта_d
Thread factory_d = new Thread(ReleaseProduct_d);
// запускаем четвёртый поток
factory_d.Start();
// Остановка потока на 1 секунду
Thread.Sleep(TimeSpan.FromSeconds(1));
for (int i = 1; i <= d; i++)
{
Console.Write(string.Format("c{0} ", i));
}
Console.ForegroundColor = ConsoleColor.White;
// далее выводятся расчётные данные по указанному условию задания
Console.Write(string.Format("\n\nОбщая вместимость склада {0} едениц.", Storage));
Console.Write(string.Format("\n\nПри заполнении склада на 95% - {0} едениц, производится вывоз со склада двумя грузовиками.", Delivery));
Console.Write(string.Format("\n\nПервый грузовик (вместимостью 7000 едениц) выполнит {0} рейс(а)(ов). " +
"\n\nПеревезёт {1} едениц, в том числе: продукт a-{2} ед., продукт b-{3} ед., сырья {4} ед.", VoyageTruck1, Truck1, a, b, RawTruck1));
Console.Write(string.Format("\n\nВторой грузовик (вместимостью 5000 едениц) выполнит {0} рейс(а)(ов). " +
"\n\nПеревезёт {1} едениц, в том числе: продукт c-{2} ед., продукт d-{3} ед., сырья {4} ед.", VoyageTruck2, Truck2, c, d, RawTruck2));
}
// функция потока a
public static void ReleaseProduct_a()
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine(string.Format("\n\n\nЗавод A: Объём выпуска продукта a составляет {0} ед./час, а общий вес партии продукта составляет {1} кг.", a, TotalWeight_a));
}
// функция потока b
public static void ReleaseProduct_b()
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(string.Format("\n\n\nЗавод B: Объём выпуска продукта b составляет {0} ед./час, а общий вес партии продукта составляет {1} кг.", b, TotalWeight_b));
}
// функция потока c
public static void ReleaseProduct_c()
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(string.Format("\n\n\nЗавод C: Объём выпуска продукта c составляет {0} ед./час, а общий вес партии продукта составляет {1} кг.", c, TotalWeight_c));
}
// функция потока d
public static void ReleaseProduct_d()
{
Console.ForegroundColor = ConsoleColor.DarkYellow;
Console.WriteLine(string.Format("\n\n\nЗавод D: Объём выпуска продукта d составляет {0} ед./час, а общий вес партии продукта составляет {1} кг.", d, TotalWeight_d));
Console.ReadLine();
}
}
}