//метод очистки private void ClearMethod() { EnterTextBox.Clear(); CodeTextBox.Clear(); MessWithourErrorTextBox.Clear(); PositionMistakeTextBox.Clear(); }
void FunctionButton_Click(object sender, EventArgs e) { var button = sender as Button; var line = EnterTextBox.Text; try { var calc = new MyCalc(); var result = calc.ComputeOfOneValue(line, button.Text); EnterTextBox.Clear(); EnterTextBox.Paste(result.ToString()); } catch (Exception exception) { ErrorMessage(exception.Message); } }
void SpecialButtonsClickHandlers() { CButton.Click += (sender, args) => { EnterTextBox.Text = string.Empty; ExpressionTextBox.Text = string.Empty; }; CEButton.Click += (sender, args) => EnterTextBox.Text = string.Empty; DeleteButton.Click += (sender, args) => { if (EnterTextBox.Text != string.Empty) { EnterTextBox.Text = EnterTextBox.Text.Remove(EnterTextBox.Text.Length - 1); } }; ForDoubleButton.Click += (sender, args) => { if (EnterTextBox.Text.IndexOf(',') != EnterTextBox.Text.Length - 1) { EnterTextBox.Paste(","); } }; PIButton.Click += (sender, args) => EnterTextBox.Paste(Math.PI.ToString()); EButton.Click += (sender, args) => EnterTextBox.Paste(Math.Exp(1).ToString()); X2Button.Click += (sender, args) => { if (EnterTextBox.Text != string.Empty) { EnterTextBox.Paste("^2"); } }; YXButton.Click += (sender, args) => { if (EnterTextBox.Text != string.Empty) { EnterTextBox.Paste("^"); } }; }
void Buttons_Click(object sender, EventArgs e) { var button = sender as Button; EnterTextBox.Paste(button.Text); }
//метод раскодировки сообщений private void DecodeMessage() { try { string binaryNumber; if (EnterTextBox.Text != string.Empty) { binaryNumber = EnterTextBox.Text; //вводим двоичное число из текстбокса for (int i = 0; i < binaryNumber.Length; i++) { int temp = Convert.ToInt32(Convert.ToString(binaryNumber[i])); if ((temp != 0) && (temp != 1)) { MessageBox.Show("Сообщение должно быть двоичным, попробуйте ещё раз!"); EnterTextBox.Clear(); CodeTextBox.Clear(); return; } } } else { MessageBox.Show("Не введено сообщение!"); CodeTextBox.Clear(); return; } int m = binaryNumber.Length; //длина введённого закодированного сообщения if (m < 3) { MessageBox.Show("Длина сообщения должна быть больше 3, иначе неверно!"); EnterTextBox.Clear(); CodeTextBox.Clear(); return; } if (BinaryClass.IsPowTwo(m)) { MessageBox.Show("Длина закодирванного сообщения не должна быть равна степени двойки!"); EnterTextBox.Clear(); CodeTextBox.Clear(); return; } int n = (int)Math.Truncate(m - Math.Log(m + 1, 2)); //длина раскодированного сообщения int[] decode = new int[n]; //массив для закодированного сообщения int count = 0; for (int i = 0; i < m; i++) { if ((i + 1) == 1) { continue; } if (BinaryClass.IsPowTwo(i + 1)) { continue; } decode[count] = binaryNumber[i]; count++; } //переводим массив в строковую переменную и выводим в текстбокс string vyvod = ""; foreach (var v in decode) { vyvod = vyvod + Convert.ToString(Convert.ToChar(v)); } CodeTextBox.Text = vyvod; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
//метод исправления ошибок private void MistakeCorrection() { try { string binaryNumber; if (EnterTextBox.Text != string.Empty) { binaryNumber = EnterTextBox.Text; //вводим двоичное число из текстбокса for (int i = 0; i < binaryNumber.Length; i++) { int temp = Convert.ToInt32(Convert.ToString(binaryNumber[i])); if ((temp != 0) && (temp != 1)) { MessageBox.Show("Сообщение должно быть двоичным, попробуйте ещё раз!"); EnterTextBox.Clear(); CodeTextBox.Clear(); return; } } } else { MessageBox.Show("Не введено сообщение!"); CodeTextBox.Clear(); return; } int n = binaryNumber.Length; //длина введённого числа в двоичной форме int m = BinaryClass.SearchM(n); //для заданного n ищем длину закодированного слова int countControlSymbols = m - n; //количество контрольных символов в зашифрованном слове, передаём это в матрицу int[] code = new int[m]; //массив для закодированного слова int deg = 0, count = 0; //по введённым данным строим матрицу Хэмминга var hammingsMatrix = BuildMatrix.BuildHMatrix(countControlSymbols); //на контрольные символы ставим временно "9", а на информационные - исходное слово for (int i = 0; i < m; i++) { //если выполняется это условие - значит нашли контрольный символ if ((i + 1) == Math.Pow(2, deg)) { deg++; code[i] = 9; } //иначе вставляем исходное слово else { code[i] = int.Parse(Convert.ToString(binaryNumber[count])); count++; } } int hammingsMatrixLines = hammingsMatrix.GetLength(0); //количество строк в матрице Хэмминга int hammingsMatrixColumn = hammingsMatrix.GetLength(1); //количество столбцов в матрице Хэмминга int countcontrol = -1; //вычисляем итоговые контрольные символы for (int i = 0; i < m; i++) { int flag = 1; int sum = 0; if (code[i] == 9) { countcontrol++; int line = hammingsMatrixLines - 1 - countcontrol; for (int j = 0; j < hammingsMatrixColumn; j++) { if ((hammingsMatrix[line, j] == 1) && (flag == 1)) { flag = 0; continue; } if ((hammingsMatrix[line, j] == 1) && (flag == 0)) { if (j <= code.Length - 1) { sum = sum + code[j]; } } } code[i] = sum % 2; } } //переводим массив в строковую переменную string vernyVyvod = ""; foreach (var v in code) { vernyVyvod = vernyVyvod + Convert.ToString(v); } var rnd = new Random(); var mistake = rnd.Next(1, m + 1); code[mistake - 1] = BinaryClass.ReverseSym(code[mistake - 1]); //генерируем ошибку //переводим массив в строковую переменную и выводим в текстбокс string vyvod = ""; foreach (var v in code) { vyvod = vyvod + Convert.ToString(v); } CodeTextBox.Text = vyvod; //считаем, сколько единиц в закодированном сообщении int countN = 0; for (int i = 0; i < m; i++) { if (code[i] == 1) { countN++; } } //вспомогательный массив для вычисления синдрома и его длина int countAuxArray = countControlSymbols * countN; int[] auxiliaryArray = new int[countAuxArray]; //в вспомогательный массив записываем те столбцы матрицы Хэмминга, //которые соответствуют единице в закодированном сообщении длины m int index = 0; for (int i = 0; i < m; i++) { if (code[i] == 1) { for (int j = 0; j < hammingsMatrixLines; j++) { auxiliaryArray[index] = hammingsMatrix[j, i]; index++; } } } //ищем сумму цифр на определённых позициях (синдром по сути) //результат - номер позиции ошибки в двоичной сс int positionmistake = 0; for (int i = 0; i < countControlSymbols; i++) { var result = 0; for (int t = 0; t < countN; t++) { if ((i + countControlSymbols * t) < countAuxArray) { result = result + auxiliaryArray[i + countControlSymbols * t]; } } positionmistake = positionmistake * 10 + result % 2; } //переводим номер ошибки в десятичную сс и выводим в текстбокс positionmistake = BinaryClass.TranslationOfBinary(positionmistake); PositionMistakeTextBox.Text = Convert.ToString(positionmistake); MessWithourErrorTextBox.Text = vernyVyvod; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
//метод кодирования сообщения по методу Хаффмана private void CodeMessage() { try { string binaryNumber; if (EnterTextBox.Text != string.Empty) { binaryNumber = EnterTextBox.Text; //вводим двоичное число из текстбокса for (int i = 0; i < binaryNumber.Length; i++) { int temp = Convert.ToInt32(Convert.ToString(binaryNumber[i])); if ((temp != 0) && (temp != 1)) { MessageBox.Show("Сообщение должно быть двоичным, попробуйте ещё раз!"); EnterTextBox.Clear(); CodeTextBox.Clear(); return; } } } else { MessageBox.Show("Не введено сообщение!"); CodeTextBox.Clear(); return; } int n = binaryNumber.Length; //длина введённого числа в двоичной форме int m = BinaryClass.SearchM(n); //для заданного n ищем длину закодированного слова int countControlSymbols = m - n; //количество контрольных символов в зашифрованном слове, передаём это в матрицу int[] code = new int[m]; //массив для закодированного слова int deg = 0, count = 0; //по введённым данным строим матрицу Хэмминга var hammingsMatrix = BuildMatrix.BuildHMatrix(countControlSymbols); //на контрольные символы ставим временно "9", а на информационные - исходное слово for (int i = 0; i < m; i++) { //если выполняется это условие - значит нашли контрольный символ if ((i + 1) == Math.Pow(2, deg)) { deg++; code[i] = 9; } //иначе вставляем исходное слово else { code[i] = int.Parse(Convert.ToString(binaryNumber[count])); count++; } } int hammingsMatrixLines = hammingsMatrix.GetLength(0); //количество строк в матрице Хэмминга int hammingsMatrixColumn = hammingsMatrix.GetLength(1); //количество столбцов в матрице Хэмминга int countcontrol = -1; //вычисляем итоговые контрольные символы for (int i = 0; i < m; i++) { int flag = 1; int sum = 0; if (code[i] == 9) { countcontrol++; int line = hammingsMatrixLines - 1 - countcontrol; for (int j = 0; j < hammingsMatrixColumn; j++) { if ((hammingsMatrix[line, j] == 1) && (flag == 1)) { flag = 0; continue; } if ((hammingsMatrix[line, j] == 1) && (flag == 0)) { if (j <= code.Length - 1) { sum = sum + code[j]; } } } code[i] = sum % 2; } } //переводим массив в строковую переменную и выводим в текстбокс string vyvod = ""; foreach (var v in code) { vyvod = vyvod + Convert.ToString(v); } CodeTextBox.Text = vyvod; } catch (Exception ex) { MessageBox.Show(ex.Message); } }