При вводе латинских букв вывод ошибки - 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));