При вводе латинских букв вывод ошибки - C#
Формулировка задачи:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ZKI_Lab1 { public partial class Form1 : Form { char[,] Alf = new char[6, 6]; public Form1() { InitializeComponent(); } private void bKey_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar <= 191 && e.KeyChar != 8) e.Handled = true; } private void bMessage_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar <= 191 && e.KeyChar != 8) e.Handled = true; } public void AddRowsAndCells(int c,int r) { for (int i = 0; i < c; i++) { Table.Columns.Add("Column" + Convert.ToString(i + 1), Convert.ToString(i + 1)); Table.Columns[i].Width = 26; } for (int i = 0; i < r; i++) Table.Rows.Add(); } private void Start_Click(object sender, EventArgs e) { if (bMessage.Text != "" && bEncryptMessage.Text != "") { MessageBox.Show("Введено исходное и зашифрованное сообщение"); lMessage.ForeColor = Color.Red; lEncryptMessage.ForeColor = Color.Red; return; } if (bMessage.Text == "" && bEncryptMessage.Text == "") { MessageBox.Show("Введите исходное или зашифрованное сообщение"); lMessage.ForeColor = Color.Red; lEncryptMessage.ForeColor = Color.Red; return; } if (bKey.Text != "") CreateTable(bKey.Text); else { MessageBox.Show("Введите ключ"); lKey.ForeColor = Color.Red; return; } string ms; char[,] MCrypto, ECrypto; int Mc; if (bMessage.Text != "") //шифрование { ms = bMessage.Text; Mc = ms.Length; MCrypto = new char[Mc * 2, 2]; Mc = 0; while (ms.Length != 0) { if (ms.Length == 1) { MCrypto[Mc, 0] = ms[0]; if (MCrypto[Mc, 0] != 'Я') MCrypto[Mc, 1] = 'Я'; else MCrypto[Mc, 1] = '-'; ms = ms.Remove(0, 1); } else if (ms[0] == ms[1]) { MCrypto[Mc, 0] = ms[0]; MCrypto[Mc, 1] = 'Я'; ms = ms.Remove(0, 1); } else { MCrypto[Mc, 0] = ms[0]; MCrypto[Mc, 1] = ms[1]; ms = ms.Remove(0, 2); } Mc++; } ECrypto = new char[Mc, 2]; int x1, x2, y1, y2; // x - строки, y - столбцы for (int i = 0; i < Mc; i++) { Search(MCrypto[i,0], out x1, out y1); //Первая буква Search(MCrypto[i,1], out x2, out y2); //Вторая буква /*MessageBox.Show("Первая буква - "+Convert.ToString(i) +", вторая буква - "+Convert.ToString(i2) +Environment.NewLine+ "Позиция первой буквы(" + Convert.ToString(ems[i]) + "): столбец - " + Convert.ToString(AMs[i, 0]) + ", строка - " + Convert.ToString(AMs[i, 1])+Environment.NewLine+ "Позиция второй буквы(" + Convert.ToString(ems[i2]) + "): столбец - " + Convert.ToString(AMs[i2, 0]) + ", строка - " + Convert.ToString(AMs[i2, 1]));*/ if (x1 == x2) { if (y1 > 4) ECrypto[i, 0] = Alf[x1, 0]; else ECrypto[i, 0] = Alf[x1, y1 + 1]; if (y2 > 4) ECrypto[i, 1] = Alf[x2, 0]; else ECrypto[i, 1] = Alf[x2, y2 + 1]; /*MessageBox.Show("Строки символов " + Convert.ToString(MCrypto[i,0]) + " и " + Convert.ToString(MCrypto[i,1])+" равны"+Environment.NewLine+ "Зашифрованная биграмма: "+ Convert.ToString(EСrypto[i, 0])+ Convert.ToString(EСrypto[i, 1]));*/ } else if (y1 == y2) { if (x1 > 4) ECrypto[i, 0] = Alf[0, y1]; else ECrypto[i, 0] = Alf[x1 + 1, y1]; if (x2 > 4) ECrypto[i, 1] = Alf[0, y2]; else ECrypto[i, 1] = Alf[x2 + 1, y2]; /*MessageBox.Show("Столбцы символов " + Convert.ToString(MCrypto[i, 0]) + " и " + Convert.ToString(MCrypto[i, 1]) + " равны" + Environment.NewLine + "Зашифрованная биграмма: " + Convert.ToString(EСrypto[i, 0]) + Convert.ToString(EСrypto[i, 1]));*/ } else { ECrypto[i, 0] = Alf[x1, y2]; ECrypto[i, 1] = Alf[x2, y1]; /*MessageBox.Show("Образование прямоугольника символами " + Convert.ToString(MCrypto[i, 0]) + " и " + Convert.ToString(MCrypto[i, 1]) + Environment.NewLine + "Зашифрованная биграмма: " + Convert.ToString(EСrypto[i, 0]) + Convert.ToString(EСrypto[i, 1]));*/ } } for (int i = 0; i < Mc; i++) bEncryptMessage.Text += Convert.ToString(ECrypto[i, 0]) + Convert.ToString(ECrypto[i, 1]); if (CB.Checked) { string ems = ""; ms = ""; for (int i = 0;i<Mc;i++) { ms += Convert.ToString(MCrypto[i, 0]) + Convert.ToString(MCrypto[i, 1])+" "; ems += Convert.ToString(ECrypto[i, 0]) + Convert.ToString(ECrypto[i, 1])+" "; } MessageBox.Show("Биграмма исходного сообщения: " + Environment.NewLine+ms + Environment.NewLine + Environment.NewLine + "Зашифрованная биграмма исходного сообщения: " +Environment.NewLine+ ems); } } else { ms = bEncryptMessage.Text; Mc = ms.Length; if (Mc % 2 != 0) { MessageBox.Show("Неверное зашифрованное сообщение"); lEncryptMessage.ForeColor = Color.Red; return; } ECrypto = new char[Mc*2, 2]; Mc = 0; while (ms.Length != 0) { ECrypto[Mc, 0] = ms[0]; ECrypto[Mc, 1] = ms[1]; ms = ms.Remove(0, 2); Mc++; } MCrypto = new char[Mc, 2]; int x1, x2, y1, y2; for (int i = 0; i < Mc; i++) { Search(ECrypto[i,0], out x1, out y1); Search(ECrypto[i,1], out x2, out y2); if (x1 == x2) { if (y1 == 0) MCrypto[i, 0] = Alf[x1, 5]; else MCrypto[i, 0] = Alf[x1, y1 - 1]; if (y2 == 0) MCrypto[i, 1] = Alf[x1, 5]; else MCrypto[i, 1] = Alf[x2, y2 - 1]; } else if (y1 == y2) { if (x1 == 0) MCrypto[i, 0] = Alf[5, y1]; else MCrypto[i, 0] = Alf[x1 - 1, y1]; if (x2 == 0) MCrypto[i, 1] = Alf[5, y2]; else MCrypto[i, 1] = Alf[x2 - 1, y2]; } else { MCrypto[i, 0] = Alf[x1, y2]; MCrypto[i, 1] = Alf[x2, y1]; } } for (int i = 0; i < Mc - 1; i++) if (MCrypto[i, 1] == 'Я' && MCrypto[i,0] == MCrypto[i+1,0]) bMessage.Text += MCrypto[i, 0]; else bMessage.Text += Convert.ToString(MCrypto[i, 0]) + Convert.ToString(MCrypto[i, 1]); if (MCrypto[Mc - 1, 1] == '-' || (MCrypto[Mc - 1, 1] == 'Я')) bMessage.Text += MCrypto[Mc-1,0]; else bMessage.Text += Convert.ToString(MCrypto[Mc-1, 0]) + Convert.ToString(MCrypto[Mc-1, 1]); if (CB.Checked) { string ems = ""; ms = ""; for (int i = 0; i < Mc; i++) { ms += Convert.ToString(MCrypto[i, 0]) + Convert.ToString(MCrypto[i, 1])+" "; ems += Convert.ToString(ECrypto[i, 0]) + Convert.ToString(ECrypto[i, 1])+" "; } MessageBox.Show("Биграмма зашифрованного сообщения: " +Environment.NewLine + ems + Environment.NewLine + Environment.NewLine + "Расшифрованная биграмма зашифрованного сообщения: " +Environment.NewLine + ms); } } } public void CreateTable(string key) { char[] RAlf = new char[36] { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', '-', '1', '2' }; string ems = ""; int l = 0; while (0 != key.Length) { Alf[0, 0] = key[0]; ems += Alf[0, 0]; l = key.IndexOf(Alf[0, 0]); while (l >= 0) { key = key.Remove(l, 1); l = key.IndexOf(Alf[0, 0]); } } key = ems; if (Table.RowCount == 0 && Table.ColumnCount == 0) AddRowsAndCells(6, 6); l = 0; int l2 = -1; bool t; for (int i = 0; i < 6; i++) for (int i2 = 0; i2 < 6; i2++) if (l < key.Length) { Alf[i, i2] = key[l]; Table.Rows[i].Cells[i2].Value = Alf[i, i2]; l++; } else { do { t = false; l2++; for (int n = 0; n < key.Length; n++) if (RAlf[l2] == key[n]) { t = true; break; } } while (t); Alf[i, i2] = RAlf[l2]; Table.Rows[i].Cells[i2].Value = Alf[i, i2]; } } public void Search(char ch, out int x1, out int y1) { x1 = 0; y1 = 0; for (int m = 0;m<6;m++) for (int n = 0;n<6;n++) if (Alf[m,n]==ch) { x1 = m; // x1 - строки y1 = n; // y1 - столбцы return; } } } }
Решение задачи: «При вводе латинских букв вывод ошибки»
textual
Листинг программы
throw new Exception(string.Format("Нажата кнопка {0}", e.KeyChar));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д