При вводе латинских букв вывод ошибки - 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));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д