Beispiel #1
0
 /// <summary>
 /// Считываем и распознаём множества из строкового представления
 /// </summary>
 /// <param name="text">Входная строка</param>
 public void read(String text)
 {
     Mass.Clear();                                                                                                              //очищаем предыдущее чтение
     Error_Log_textBox.Text += "[info] Начали распознавание чисел. ";                                                           //логи
     String[] _Temp = text.Replace(" ", "").Replace("\n", "").Replace("\r", "").Replace("\t", "").Replace(".", ",").Split(';'); //режем по строчкам множеств
     Error_Log_textBox.Text += "Предположительное количество: " + _Temp.Length + "\r\n";                                        //логи
     foreach (String s in _Temp)                                                                                                //пробегаем
     {
         try                                                                                                                    //отлов исключений и ошибок, {самая забагованная часть кода :D}
         {
             Fuzzy_numbers <Double> _F_Temp = ParseDouble(s);                                                                   //преобразуем строку в нечёткое число
             if (_F_Temp == null)
             {
                 break;
             }
             Mass.Add(new Fuzzy_numbers <Double>(_F_Temp, _F_Temp.Name));
             Error_Log_textBox.Text += "[info] Число: \"" + _F_Temp.Name + "\" распознано \r\n";//логи
         }
         catch (System.Exception ex)
         {
             Error_Log_textBox.Text += "[Ошибка] " + ex.Message + " произошла на \"" + s + "\" \r\n";//логи
         }
     }
     Error_Log_textBox.Text += "[info] Распознано: " + Mass.Count + " из " + _Temp.Length + "\r\n";//логи
 }
Beispiel #2
0
        /// <summary>
        /// Преобразует строковое представление в объект типа Fuzzy_numbers если это возможно
        /// </summary>
        /// <param name="s">Строковое представление объекта типа Fuzzy_numbers</param>
        /// <returns>Восстановленный из строки объект типа Fuzzy_numbers</returns>
        public Fuzzy_numbers <Double> ParseDouble(String s)
        {
            Fuzzy_numbers <Double> _Temp;

            String[] Name_F = s.Split('=');//отделяем название от описания
            try
            {
                //задаём имя числу
                if (Name_F.Length >= 2)
                {
                    _Temp = new Fuzzy_numbers <Double>(Name_F[0]);
                    s     = Name_F[1];
                }
                else
                {
                    _Temp = new Fuzzy_numbers <Double>();
                }
                //заменяем знаки в соответствии с форматом и режем на элементы
                String[] _Split_s = s.Replace(" ", "").Replace(".", ",").Split('+');
                //бежим по элементам и добавляем в число
                foreach (String _s in _Split_s)
                {
                    String[] _Split_Slash = _s.Replace("\\", "/").Split('/');
                    if (_Split_Slash.Length == 2)
                    {
                        _Temp.Add(new Element_Fuzzy_numbers <Double>(Double.Parse(_Split_Slash[1]), Double.Parse(_Split_Slash[0])));
                    }
                }
            }
            catch (System.Exception ex)
            {
                throw new FormatException("Input string was invalid.\n" + ex.Message + "\n" + ex.Data);
            }
            return(_Temp);
        }
Beispiel #3
0
        void plot(Fuzzy_numbers <Double> e, Brush _Brush)
        {
            Int32 _Height = pictureBox1.Height, _Width = pictureBox1.Width; //размеры холста

            Point[] _p = new Point[e.Count];                                //линии
            //сортировка элементов по оси х
            Fuzzy_numbers <Double> _T = e.Sort_from_Element;

            for (int i = 0; i < e.Count; i++)
            {
                _p[i].X = (int)((int)(e[i].Element * ((_Width / 2d) / MAX)));            //добавляем точку x для контура
                _p[i].Y = (int)((int)((e[i].Accessory_Function) * (_Height - 25) + 25)); //точку y для контура
                gr.FillEllipse(_Brush, (int)(e[i].Element * ((_Width / 2d) / MAX)) - 3, (int)((e[i].Accessory_Function) * (_Height - 25) + 22), 6, 6);
            }
            if (checkBox1.Checked)
            {
                gr.DrawLines(new Pen(_Brush), _p);
            }
        }
Beispiel #4
0
        private void построитьГрафикToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CheckedListBox CheckedListBoxs = (contextMenuStrip1.SourceControl as CheckedListBox);

            if (CheckedListBoxs != null)
            {
                //Список чисел для отправки на постройку
                List <Fuzzy_numbers <Double> > Selected_Items = new List <Fuzzy_numbers <Double> >();
                foreach (var it in CheckedListBoxs.CheckedItems)//пробегаемся по отмеченным
                {
                    Fuzzy_numbers <Double> _Temp = ParseDouble(it.ToString());
                    if (_Temp != null)//если преобразовалось то добавляем в список отправки
                    {
                        Selected_Items.Add(_Temp);
                    }
                }
                if (Selected_Items.Count != 0)            //если количество больше 0
                {
                    new Graphics1(Selected_Items).Show(); //отправляем на построение
                }
            }
        }