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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы