I wrote the program, after pressing the Start button, the program just hangs and that's it. There are no mistakes. Help fix the problem. I think the reason lies in this line Precision = Convert.ToDouble(comboBoxPrecision.SelectedItem.ToString(), NumberFormatInfo.InvariantInfo); It converts the value of 0.01 to Double
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Globalization; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class WorkForm : Form { private int InOrders; private int ServiceOrders; private int NumOfChannels; private double Precision = 0; private double OrderInterval; private double ChannelInterval; private int TotalTime; private double CmoTime; private ulong NumOfOrders = 0; private ulong ServedOrders; private int CmoPosition; private int[] ChannelBusy; private double[] ServiceTimeOfChannel; private Random rand = new Random(); // ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠΎΡΠ½ΠΎΡΡΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΡΡ
private int Precition(double e) { int Tochnost = 0; if (e == 0.1) Tochnost = 10; if (e == 0.01) Tochnost = 100; if (e == 0.001) Tochnost = 1000; return Tochnost; } // Π§ΠΈΡΠ»ΠΎ Π·Π½Π°ΠΊΠΎΠ² Π΄Π»Ρ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ ΠΈΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΡΠΎΡΠ½ΠΎΡΡΠΈ private int ChisloZnakov(double Prec) { int a = 0; if (Prec == 0.1) a = 1; if (Prec == 0.01) a = 2; if (Prec == 0.001) a = 3; return a; } // ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΡΠ²ΠΊΠ°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ ΠΈΠ½ΡΠ΅Ρ. Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ»ΡΠΆ. ΠΊΠ°Π½Π°Π»Π° private double OrdersInterval(int NumOfOrders, double Tochnost) { int CelayaChast; double Ostatok; CelayaChast = Precition(Tochnost) / NumOfOrders; Ostatok = (Precition(Tochnost) / (double)NumOfOrders - CelayaChast) * 10; if (Ostatok >= 5) CelayaChast++; return (double)(CelayaChast / (double)Precition(Tochnost)); } // Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ private double TimeGenerator(bool FirstOrder, double Interval, double Tochnost) { double NewTime; int GenerationInterval = (int)(Interval * Precition(Tochnost) + 1); // ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΠΏΠ΅ΡΠ²Π°Ρ Π·Π°ΡΠ²ΠΊΠ° if (!FirstOrder) { // ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π½ΡΠ»Ρ => ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠ΅Π΅ΡΡ Π²ΡΠ΅ΠΌΡ do { NewTime = (double)(rand.Next() % GenerationInterval) / Precition(Tochnost); } while (NewTime == 0); } else NewTime = (double)(rand.Next() % GenerationInterval) / Precition(Tochnost); return Math.Round(NewTime, ChisloZnakov(Tochnost)); } // ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π·Π°ΡΠ²ΠΊΠΈ private bool NewOrder(double TimeOfCmo, double IntervalOfOrder, ulong NumberOfOrders) { if (TimeOfCmo >= IntervalOfOrder * (NumberOfOrders)) { return true; } else return false; } // ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ Π² ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ private void CmoCheck(int TotalTime, double CmoTime, int NumOfChannels) { int i = 0; if (CmoPosition != 0) { while (i < NumOfChannels) { if (ChannelBusy[i] == 1) { if (((ServiceTimeOfChannel[i] <= CmoTime) && (CmoTime <= TotalTime)) || ((CmoTime > TotalTime) && (ServiceTimeOfChannel[i] <= TotalTime))) { ChannelBusy[i] = 0; ServiceTimeOfChannel[i] = 0; CmoPosition--; richTextBox1.Text += (i + 1).ToString() + "-ΠΉ ΠΊΠ°Π½Π°Π» ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ» Π·Π°ΡΠ²ΠΊΡ" + "\n"; ServedOrders++; } } i++; } } } // Π·Π°ΠΏΠΈΡΡ Π·Π°ΡΠ²ΠΎΠΊ Π² ΠΊΠ°Π½Π°Π»Ρ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π² ΠΊΠ°Π½Π°Π»Π΅ + ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ private void CmoWork(double CmoTime, int NumOfChannels, double ChannelInterval, double e) { double ChannelWorkTime; int i = 0; // Π΅ΡΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Π°, ΡΠΎ Π·Π°ΠΏΠΈΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΠΊΠ°Π½Π°Π» if (CmoPosition == 0) { ChannelBusy[0] = 1; ChannelWorkTime = TimeGenerator(false, ChannelInterval, e); ServiceTimeOfChannel[0] = CmoTime + ChannelWorkTime; CmoPosition++; InfoOrder(CmoTime, 0, ChannelWorkTime); } else // ΠΈΠ½Π°ΡΠ΅, ΠΈΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΡ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ ΠΊΠ°Π½Π°Π» { if (CmoPosition != NumOfChannels) { while (i < NumOfChannels) { if (ChannelBusy[i] == 0) { ChannelBusy[i] = 1; ChannelWorkTime = TimeGenerator(false, ChannelInterval, e); ServiceTimeOfChannel[i] = CmoTime + ChannelWorkTime; CmoPosition++; InfoOrder(CmoTime, i, ChannelWorkTime); break; } i++; } } else { richTextBox1.Text += "ΠΠ°ΡΠ²ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠ½ΡΡΠ° Π½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ - ΠΠΠΠΠΠ« ΠΠΠΠ―Π’Π«" + "\n"; richTextBox1.Text += "Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π‘ΠΠ: " + CmoPosition.ToString() + "\n"; for (i = 0; i < NumOfChannels; i++) { richTextBox1.Text += "Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ " + (i + 1).ToString() + "-Π³ΠΎ ΠΊΠ°Π½Π°Π»Π° : " + Convert.ToString(ChannelBusy[i]) + "\n"; richTextBox1.Text += "ΠΡΠ΅ΠΌΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π² " + (i + 1).ToString() + " ΠΊΠ°Π½Π°Π»Π΅: " + Convert.ToString(ServiceTimeOfChannel[i]) + "\n"; } } } } // ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅ΠΉ Π·Π°ΡΠ²ΠΊΠ΅ private void Info(double CmoTime, ulong NumOfOrders) { richTextBox1.Text += "ΠΡΠ΅ΠΌΡ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ " + NumOfOrders.ToString() + "-ΠΉ Π·Π°ΡΠ²ΠΊΠΈ: " + CmoTime.ToString() + "\n"; } private void InfoOrder(double CmoTime, int Index, double TimeOfChannel) { richTextBox1.Text += "ΠΠ°ΡΠ²ΠΊΠ° ΠΏΡΠΈΠ½ΡΡΠ° Π½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅: " + CmoTime.ToString() + " Π² " + (Index + 1).ToString() + "-ΠΉ ΠΊΠ°Π½Π°Π»" + "\n"; richTextBox1.Text += "ΠΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ Π·Π°ΡΠ²ΠΊΠΈ Π² ΠΊΠ°Π½Π°Π»Π΅: " + TimeOfChannel.ToString() + "\n"; richTextBox1.Text += "ΠΡΠ΅ΠΌΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ: " + ServiceTimeOfChannel[Index].ToString() + "\n"; } // ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΡΠΌΡ public WorkForm() { InitializeComponent(); } private void btnExit_Click_1(object sender, EventArgs e) { Application.Exit(); } // ΠΠ£Π‘Π private void btnStart_Click_1(object sender, EventArgs e) { // Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
if (TBoxOrders.Text != "" && TBoxOrderService.Text != "" && TBoxChannels.Text != "" && comboBoxPrecision.Text != "" && TBoxCmoWork.Text != "") { this.Enabled = false; InOrders = Convert.ToInt32(TBoxOrders.Text); ServiceOrders = Convert.ToInt32(TBoxOrderService.Text); NumOfChannels = Convert.ToInt32(TBoxChannels.Text); Precision = Convert.ToDouble(comboBoxPrecision.SelectedItem.ToString(), NumberFormatInfo.InvariantInfo); richTextBox1.Text = ""; int i = 0; // ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ChannelBusy = new int[NumOfChannels]; ServiceTimeOfChannel = new double[NumOfChannels]; TotalTime = Convert.ToInt32(TBoxCmoWork.Text); // ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ (ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
) CmoTime = 0; CmoPosition = 0; NumOfOrders = 0; ServedOrders = 0; while (i <= NumOfChannels - 1) { ChannelBusy[i] = 0; ServiceTimeOfChannel[i] = 0; i++; } // ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π·Π°ΡΠ²ΠΊΠΈ CmoTime = TimeGenerator(true, OrderInterval, Precision); richTextBox1.Text += "\n" + "-----------------------" + "\n"; richTextBox1.Text += "Π’Π΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π‘ΠΠ :" + CmoTime.ToString(); richTextBox1.Text += "\n" + "-----------------------" + "\n"; NumOfOrders++; Info(CmoTime, NumOfOrders); CmoCheck(TotalTime, CmoTime, NumOfChannels); CmoWork(CmoTime, NumOfChannels, ChannelInterval, Precision); // ΠΠΎΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ do { // ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π‘ΠΠ CmoTime = Math.Round((CmoTime + TimeGenerator(false, OrderInterval, Precision)), ChisloZnakov(Precision)); richTextBox1.Text += "\n" + "-----------------------" + "\n"; richTextBox1.Text += "Π’Π΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π‘ΠΠ :" + CmoTime.ToString(); richTextBox1.Text += "\n" + "-----------------------" + "\n"; // ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ Π² ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ CmoCheck(TotalTime, CmoTime, NumOfChannels); // ΠΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π·Π°ΡΠ²ΠΊΠΈ if ((NewOrder(CmoTime, OrderInterval, NumOfOrders)) && (CmoTime <= TotalTime)) { NumOfOrders++; Info(CmoTime, NumOfOrders); CmoWork(CmoTime, NumOfChannels, ChannelInterval, Precision); } } while (CmoTime < TotalTime); richTextBox1.Text += "ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠΈΡ
Π·Π°ΡΠ²ΠΎΠΊ: " + NumOfOrders.ToString() + "\n"; richTextBox1.Text += "ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ΅Π½Π½ΡΡ
Π·Π°ΡΠ²ΠΎΠΊ: " + ServedOrders.ToString() + "\n"; this.Enabled = true; this.Focus(); btnResult.Enabled = true; } else MessageBox.Show("ΠΡΠ΅ ΠΏΠΎΠ»Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Ρ Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ!"); } // ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²Π²ΠΎΠ΄ΠΈΠΌΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ private bool Check(string Txt) { try { Convert.ToInt32(Txt); } catch (Exception) { MessageBox.Show("ΠΠ²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ"); return false; } return true; } // Π²Π²ΠΎΠ΄ Π²Ρ
ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° private void TBoxOrders_TextChanged_1(object sender, EventArgs e) { TBoxOrderService.Enabled = true; } // Π²Π²ΠΎΠ΄ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ private void TBoxOrderService_TextChanged_1(object sender, EventArgs e) { TBoxChannels.Enabled = true; } // Π²Π²ΠΎΠ΄ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΠ°Π½Π°Π»ΠΎΠ² private void TBoxChannels_TextChanged_1(object sender, EventArgs e) { TBoxCmoWork.Enabled = true; } // Π²ΡΠ±ΠΎΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ private void comboBoxPrecision_TextChanged_1(object sender, EventArgs e) { Precision = Convert.ToDouble(comboBoxPrecision.SelectedItem.ToString()); TBoxOrders.Enabled = true; } // Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° Π²Ρ
ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° private void TBoxOrders_Leave_1(object sender, EventArgs e) { if (TBoxOrders.Text != "" && (btnExit.ContainsFocus == false)) { if (Check(TBoxOrders.Text)) { InOrders = Convert.ToInt32(TBoxOrders.Text); OrderInterval = OrdersInterval(InOrders, Precision); labelOrdersInterval.Text = OrderInterval.ToString() + " Π΅Π΄.Π²Ρ."; } else TBoxOrders.Focus(); } } // Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΡ private void TBoxOrderService_Leave_1(object sender, EventArgs e) { if (TBoxOrderService.Text != "" && (btnExit.ContainsFocus == false)) { if (Check(TBoxOrderService.Text)) { ServiceOrders = Convert.ToInt32(TBoxOrderService.Text); ChannelInterval = OrdersInterval(ServiceOrders, Precision); labelChannelInterval.Text = ChannelInterval.ToString() + " Π΅Π΄.Π²Ρ."; } else TBoxOrderService.Focus(); } } // Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΠ°Π½Π°Π»ΠΎΠ² private void TBoxChannels_Leave_1(object sender, EventArgs e) { if (TBoxChannels.Text != "" && (btnExit.ContainsFocus == false)) { if (Check(TBoxChannels.Text)) { NumOfChannels = Convert.ToInt32(TBoxChannels.Text); } else TBoxChannels.Focus(); } } // ΠΠ’Π§ΠΠ’ private void btnResult_Click_1(object sender, EventArgs e) { ResultForm FResult = new ResultForm(this, NumOfChannels, Precision, TotalTime, NumOfOrders, ServedOrders); FResult.Show(); } private void WorkForm_Load_1(object sender, EventArgs e) { btnResult.Enabled = false; } private void comboBoxPrecision_SelectedIndexChanged(object sender, EventArgs e) { } } }
while (CmoTime < TotalTime)but is there any certainty that sometime this condition will break? - AK β¦