示例#1
0
 public FormMain()
 {
     InitializeComponent();
     //Инициализируем переходы и ленту
     dgvStates = DGV.StatesStart(dgvStates, alphabet, 4);
     dgvStates = DGV.StatesFormat(dgvStates);
     dgvRibbon = DGV.RibbonStart(dgvRibbon, alphabet, 500, 2);
     dgvRibbon = DGV.RibbonFormat(dgvRibbon);
 }
示例#2
0
        public static DataGridView openDefault(DataGridView dgv1, string path, string defaultAlphabet)
        {
            try
            {
                StreamReader sr = new StreamReader(@path);
                try
                {
                    //длина и ширина
                    int a = 0;
                    int b = 0;
                    //Считываем длину и ширину
                    a = Convert.ToInt32(sr.ReadLine());
                    b = Convert.ToInt32(sr.ReadLine());
                    //Cоздаём новые размеры
                    dgv1.Rows.Clear();
                    dgv1.Rows.Add(a);
                    dgv1.ColumnCount = b;

                    string newAlphabet = "";
                    for (int i = 0; i < a; i++)
                    {
                        string[] mas = sr.ReadLine().Split(';');
                        for (int j = 0; j < b; j++)
                        {
                            //переписываем в dgv
                            dgv1.Rows[i].Cells[j].Value = mas[j];
                            //Если не нулевая ячейка, то считываем алфавит
                            if (j == 0 && i != 0)
                            {
                                newAlphabet += mas[j];
                            }
                        }
                    }
                    dgv1 = DGV.StatesFormat(dgv1);

                    return(dgv1);
                }
                catch
                {
                    MessageBox.Show("Проблемы считывания стандартного алгоритма");
                    dgv1 = DGV.StatesStart(dgv1, defaultAlphabet, 4);
                    return(dgv1);
                }
                finally
                {
                    sr.Close();
                }
            }
            catch
            {
                MessageBox.Show("Стандартный алгоритм не найден");
                dgv1 = DGV.StatesStart(dgv1, defaultAlphabet, 4);
                return(dgv1);
            }
        }
示例#3
0
        private void новыйToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //очищаем dgv
            dgvStates.Rows.Clear();
            //Алфавит берём дефолтный
            alphabet = defaultAlphabet;

            //Запускаем нашу dgv
            dgvStates = DGV.StatesStart(dgvStates, alphabet, 4);
            dgvStates = DGV.StatesFormat(dgvStates);
        }
示例#4
0
        private void radioButtonRibbon_CheckedChanged(object sender, EventArgs e)
        {
            operandsModeForm       = false;
            numericUpDownA.Visible = false;
            numericUpDownB.Visible = false;
            labelA.Visible         = false;
            labelB.Visible         = false;

            dgvRibbon = DGV.RibbonClear(dgvRibbon, alphabet);
            dgvRibbon = DGV.RibbonReadOnly(dgvRibbon, false);
        }
示例#5
0
        private void buttonClearRibbon_Click(object sender, EventArgs e)
        {
            string oldAlphabet = alphabet;

            alphabet = "";
            for (int i = 1; i < dgvStates.Rows.Count; i++)
            {
                alphabet += dgvStates.Rows[i].Cells[0].Value.ToString();
            }
            if (Analyzer.alphabetAnalysis(dgvStates, alphabet))
            {
                dgvRibbon = DGV.RibbonClear(dgvRibbon, alphabet);

                dgvStates = DGV.toWhite(dgvStates, 0);
                dgvStates.Rows[0].Cells[0].Style.BackColor = Color.Gray;
                dgvRibbon = DGV.toWhite(dgvRibbon, 1);
            }
            else
            {
                alphabet = oldAlphabet;
            }
        }
示例#6
0
        public static DataGridView open(DataGridView dgv1, string defaultAlphabet)
        {
            //Файловый диалог
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Filter = "Algorithm of Turing machines|*.tma";
            ofd.Title  = "Открыть алгоритм";

            //Открываем и ждём нажатия кнопки
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                //Открываем поток с нашим файлом
                StreamReader sr = new StreamReader(ofd.FileName);
                //ошибка считывания либо синтаксиса
                bool ex = false;
                //длина и ширина
                int a = 0;
                int b = 0;
                try
                {
                    //Считываем длину и ширину(пытаемся)
                    a = Convert.ToInt32(sr.ReadLine());
                    b = Convert.ToInt32(sr.ReadLine());
                    //Создаём новые размеры
                    dgv1.Rows.Clear();
                    dgv1.Rows.Add(a);
                    dgv1.ColumnCount = b;
                    //заводим переменную для нового алфавита, который будет считан
                    string newAlphabet = "";

                    for (int i = 0; i < a; i++)
                    {
                        //Считываем в массив строк
                        string[] mas = sr.ReadLine().Split(';');
                        //Если количество ; и столбцов не совпало хотя бы раз, то ex и уходим
                        if (mas.Length != b + 1)
                        {
                            ex = true;
                            MessageBox.Show("Неверный формат файла");
                            break;
                        }

                        for (int j = 0; j < b; j++)
                        {
                            //переписываем в dgv
                            dgv1.Rows[i].Cells[j].Value = mas[j];
                            //Если не нулевая ячейка, то считываем алфавит
                            if (j == 0 && i != 0)
                            {
                                newAlphabet += mas[j];
                            }

                            if (ex)
                            {
                                break;
                            }
                        }
                        if (ex)
                        {
                            break;
                        }
                    }

                    if (ex)
                    {
                        dgv1 = DGV.StatesStart(dgv1, defaultAlphabet, 4);
                        dgv1 = DGV.StatesFormat(dgv1);
                    }
                    else
                    {
                        dgv1 = DGV.StatesFormat(dgv1);
                        return(dgv1);
                    }
                }
                //Если вылетели по ошибке, то загружаем новый алгоритм
                catch
                {
                    MessageBox.Show("Неверный формат файла");
                    ex   = true;
                    dgv1 = DGV.StatesStart(dgv1, defaultAlphabet, 4);
                    dgv1 = DGV.StatesFormat(dgv1);
                    return(dgv1);
                }
                //В любом случае нужно закрыть поток
                finally
                { sr.Close(); }
            }
            return(dgv1);
        }
示例#7
0
        //Кнопка старта
        private void buttonStart_Click(object sender, EventArgs e)
        {
            if (buttonStart.Text == "Старт")
            {
                //Шаманство с алфавитом
                string oldAlphabet = alphabet;
                alphabet = "";
                for (int i = 1; i < dgvStates.Rows.Count; i++)
                {
                    try { alphabet += dgvStates.Rows[i].Cells[0].Value.ToString(); }
                    catch { dgvStates.Rows[i].Cells[0].Value = ""; }
                }

                //Белим

                dgvStates = DGV.toWhite(dgvStates, 0);
                dgvStates.Rows[0].Cells[0].Style.BackColor = Color.Gray;
                dgvRibbon = DGV.toWhite(dgvRibbon, 1);

                dgvStates.ClearSelection();

                shift = 1;
                if (operandsModeForm)
                {
                    if (operandA + operandB + 1 + shift > dgvRibbon.ColumnCount)
                    {
                        dgvRibbon.ColumnCount += (operandA + operandB + 1 + 1) - dgvRibbon.ColumnCount;
                    }
                    for (int i = 0; i < shift; i++)
                    {
                        dgvRibbon.Rows[1].Cells[i].Value = alphabet[0];
                    }
                    for (int i = shift; i < operandA + shift; i++)
                    {
                        dgvRibbon.Rows[1].Cells[i].Value = alphabet[2];
                    }
                    dgvRibbon.Rows[1].Cells[operandA + shift].Value = alphabet[1];
                    for (int i = operandA + 1 + shift; i < operandA + operandB + 1 + shift; i++)
                    {
                        dgvRibbon.Rows[1].Cells[i].Value = alphabet[2];
                    }
                    for (int i = operandA + operandB + 1 + shift; i < dgvRibbon.ColumnCount; i++)
                    {
                        dgvRibbon.Rows[1].Cells[i].Value = alphabet[0];
                    }

                    //dgvRibbonFormat();
                    dgvRibbon = DGV.RibbonFormat(dgvRibbon);
                }

                if (Analyzer.alphabetAnalysis(dgvStates, alphabet) && Analyzer.syntacticAnalysis(dgvStates, alphabet, states) && Analyzer.semanticAnalysis(dgvStates, dgvRibbon, alphabet, states) && Analyzer.ribbonAnalysis(dgvRibbon, alphabet))
                {
                    blockOnStart();

                    colorIndexRibon   = 0;
                    colorIndexStates1 = 0;
                    colorIndexStates2 = 0;

                    start();
                }
                else
                {
                    alphabet = oldAlphabet;
                }
            }
            else
            if (buttonStart.Text == "Пауза")
            {
                trackBarSpeed.Enabled = true;
                timerAuto.Enabled     = false;
                buttonStart.Text      = "Продолжить";
            }
            else
            if (buttonStart.Text == "Продолжить")
            {
                trackBarSpeed.Enabled = false;
                timerAuto.Interval    = speed;
                timerAuto.Enabled     = true;
                buttonStart.Text      = "Пауза";
            }
            else
            if (buttonStart.Text == "Стоп")
            {
                step(true);
            }
        }