При вводе латинских букв вывод ошибки - C#

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. namespace ZKI_Lab1
  11. {
  12. public partial class Form1 : Form
  13. {
  14. char[,] Alf = new char[6, 6];
  15. public Form1()
  16. {
  17. InitializeComponent();
  18. }
  19. private void bKey_KeyPress(object sender, KeyPressEventArgs e)
  20. {
  21. if (e.KeyChar <= 191 && e.KeyChar != 8)
  22. e.Handled = true;
  23. }
  24. private void bMessage_KeyPress(object sender, KeyPressEventArgs e)
  25. {
  26. if (e.KeyChar <= 191 && e.KeyChar != 8)
  27. e.Handled = true;
  28. }
  29. public void AddRowsAndCells(int c,int r)
  30. {
  31. for (int i = 0; i < c; i++)
  32. {
  33. Table.Columns.Add("Column" + Convert.ToString(i + 1), Convert.ToString(i + 1));
  34. Table.Columns[i].Width = 26;
  35. }
  36. for (int i = 0; i < r; i++)
  37. Table.Rows.Add();
  38. }
  39. private void Start_Click(object sender, EventArgs e)
  40. {
  41. if (bMessage.Text != "" && bEncryptMessage.Text != "")
  42. {
  43. MessageBox.Show("Введено исходное и зашифрованное сообщение");
  44. lMessage.ForeColor = Color.Red;
  45. lEncryptMessage.ForeColor = Color.Red;
  46. return;
  47. }
  48. if (bMessage.Text == "" && bEncryptMessage.Text == "")
  49. {
  50. MessageBox.Show("Введите исходное или зашифрованное сообщение");
  51. lMessage.ForeColor = Color.Red;
  52. lEncryptMessage.ForeColor = Color.Red;
  53. return;
  54. }
  55. if (bKey.Text != "") CreateTable(bKey.Text);
  56. else
  57. {
  58. MessageBox.Show("Введите ключ");
  59. lKey.ForeColor = Color.Red;
  60. return;
  61. }
  62.  
  63. string ms;
  64. char[,] MCrypto, ECrypto;
  65. int Mc;
  66. if (bMessage.Text != "") //шифрование
  67. {
  68. ms = bMessage.Text; Mc = ms.Length;
  69. MCrypto = new char[Mc * 2, 2];
  70. Mc = 0;
  71. while (ms.Length != 0)
  72. {
  73. if (ms.Length == 1)
  74. {
  75. MCrypto[Mc, 0] = ms[0];
  76. if (MCrypto[Mc, 0] != 'Я') MCrypto[Mc, 1] = 'Я';
  77. else MCrypto[Mc, 1] = '-';
  78. ms = ms.Remove(0, 1);
  79. }
  80. else if (ms[0] == ms[1])
  81. {
  82. MCrypto[Mc, 0] = ms[0]; MCrypto[Mc, 1] = 'Я';
  83. ms = ms.Remove(0, 1);
  84. }
  85. else
  86. {
  87. MCrypto[Mc, 0] = ms[0]; MCrypto[Mc, 1] = ms[1];
  88. ms = ms.Remove(0, 2);
  89. }
  90. Mc++;
  91. }
  92. ECrypto = new char[Mc, 2];
  93. int x1, x2, y1, y2; // x - строки, y - столбцы
  94. for (int i = 0; i < Mc; i++)
  95. {
  96. Search(MCrypto[i,0], out x1, out y1); //Первая буква
  97. Search(MCrypto[i,1], out x2, out y2); //Вторая буква
  98. /*MessageBox.Show("Первая буква - "+Convert.ToString(i) +", вторая буква - "+Convert.ToString(i2) +Environment.NewLine+
  99. "Позиция первой буквы(" + Convert.ToString(ems[i]) + "): столбец - " + Convert.ToString(AMs[i, 0]) + ", строка - " + Convert.ToString(AMs[i, 1])+Environment.NewLine+
  100. "Позиция второй буквы(" + Convert.ToString(ems[i2]) + "): столбец - " + Convert.ToString(AMs[i2, 0]) + ", строка - " + Convert.ToString(AMs[i2, 1]));*/
  101. if (x1 == x2)
  102. {
  103. if (y1 > 4) ECrypto[i, 0] = Alf[x1, 0];
  104. else ECrypto[i, 0] = Alf[x1, y1 + 1];
  105. if (y2 > 4) ECrypto[i, 1] = Alf[x2, 0];
  106. else ECrypto[i, 1] = Alf[x2, y2 + 1];
  107. /*MessageBox.Show("Строки символов " + Convert.ToString(MCrypto[i,0]) + " и " + Convert.ToString(MCrypto[i,1])+" равны"+Environment.NewLine+
  108. "Зашифрованная биграмма: "+ Convert.ToString(EСrypto[i, 0])+ Convert.ToString(EСrypto[i, 1]));*/
  109. }
  110. else if (y1 == y2)
  111. {
  112. if (x1 > 4) ECrypto[i, 0] = Alf[0, y1];
  113. else ECrypto[i, 0] = Alf[x1 + 1, y1];
  114. if (x2 > 4) ECrypto[i, 1] = Alf[0, y2];
  115. else ECrypto[i, 1] = Alf[x2 + 1, y2];
  116. /*MessageBox.Show("Столбцы символов " + Convert.ToString(MCrypto[i, 0]) + " и " + Convert.ToString(MCrypto[i, 1]) + " равны" + Environment.NewLine +
  117. "Зашифрованная биграмма: " + Convert.ToString(EСrypto[i, 0]) + Convert.ToString(EСrypto[i, 1]));*/
  118. }
  119. else
  120. {
  121. ECrypto[i, 0] = Alf[x1, y2];
  122. ECrypto[i, 1] = Alf[x2, y1];
  123. /*MessageBox.Show("Образование прямоугольника символами " + Convert.ToString(MCrypto[i, 0]) + " и " + Convert.ToString(MCrypto[i, 1]) +
  124. Environment.NewLine + "Зашифрованная биграмма: " + Convert.ToString(EСrypto[i, 0]) + Convert.ToString(EСrypto[i, 1]));*/
  125. }
  126. }
  127. for (int i = 0; i < Mc; i++)
  128. bEncryptMessage.Text += Convert.ToString(ECrypto[i, 0]) + Convert.ToString(ECrypto[i, 1]);
  129. if (CB.Checked)
  130. {
  131. string ems = ""; ms = "";
  132. for (int i = 0;i<Mc;i++)
  133. {
  134. ms += Convert.ToString(MCrypto[i, 0]) + Convert.ToString(MCrypto[i, 1])+" ";
  135. ems += Convert.ToString(ECrypto[i, 0]) + Convert.ToString(ECrypto[i, 1])+" ";
  136. }
  137. MessageBox.Show("Биграмма исходного сообщения: " + Environment.NewLine+ms + Environment.NewLine +
  138. Environment.NewLine + "Зашифрованная биграмма исходного сообщения: " +Environment.NewLine+ ems);
  139. }
  140. }
  141. else
  142. {
  143. ms = bEncryptMessage.Text; Mc = ms.Length;
  144. if (Mc % 2 != 0)
  145. {
  146. MessageBox.Show("Неверное зашифрованное сообщение");
  147. lEncryptMessage.ForeColor = Color.Red;
  148. return;
  149. }
  150. ECrypto = new char[Mc*2, 2];
  151. Mc = 0;
  152. while (ms.Length != 0)
  153. {
  154. ECrypto[Mc, 0] = ms[0];
  155. ECrypto[Mc, 1] = ms[1];
  156. ms = ms.Remove(0, 2);
  157. Mc++;
  158. }
  159. MCrypto = new char[Mc, 2];
  160. int x1, x2, y1, y2;
  161. for (int i = 0; i < Mc; i++)
  162. {
  163. Search(ECrypto[i,0], out x1, out y1);
  164. Search(ECrypto[i,1], out x2, out y2);
  165. if (x1 == x2)
  166. {
  167. if (y1 == 0) MCrypto[i, 0] = Alf[x1, 5];
  168. else MCrypto[i, 0] = Alf[x1, y1 - 1];
  169. if (y2 == 0) MCrypto[i, 1] = Alf[x1, 5];
  170. else MCrypto[i, 1] = Alf[x2, y2 - 1];
  171. }
  172. else if (y1 == y2)
  173. {
  174. if (x1 == 0) MCrypto[i, 0] = Alf[5, y1];
  175. else MCrypto[i, 0] = Alf[x1 - 1, y1];
  176. if (x2 == 0) MCrypto[i, 1] = Alf[5, y2];
  177. else MCrypto[i, 1] = Alf[x2 - 1, y2];
  178. }
  179. else
  180. {
  181. MCrypto[i, 0] = Alf[x1, y2];
  182. MCrypto[i, 1] = Alf[x2, y1];
  183. }
  184. }
  185. for (int i = 0; i < Mc - 1; i++)
  186. if (MCrypto[i, 1] == 'Я' && MCrypto[i,0] == MCrypto[i+1,0]) bMessage.Text += MCrypto[i, 0];
  187. else bMessage.Text += Convert.ToString(MCrypto[i, 0]) + Convert.ToString(MCrypto[i, 1]);
  188. if (MCrypto[Mc - 1, 1] == '-' || (MCrypto[Mc - 1, 1] == 'Я')) bMessage.Text += MCrypto[Mc-1,0];
  189. else bMessage.Text += Convert.ToString(MCrypto[Mc-1, 0]) + Convert.ToString(MCrypto[Mc-1, 1]);
  190. if (CB.Checked)
  191. {
  192. string ems = ""; ms = "";
  193. for (int i = 0; i < Mc; i++)
  194. {
  195. ms += Convert.ToString(MCrypto[i, 0]) + Convert.ToString(MCrypto[i, 1])+" ";
  196. ems += Convert.ToString(ECrypto[i, 0]) + Convert.ToString(ECrypto[i, 1])+" ";
  197. }
  198. MessageBox.Show("Биграмма зашифрованного сообщения: " +Environment.NewLine + ems + Environment.NewLine +
  199. Environment.NewLine + "Расшифрованная биграмма зашифрованного сообщения: " +Environment.NewLine + ms);
  200. }
  201. }
  202. }
  203. public void CreateTable(string key)
  204. {
  205. char[] RAlf = new char[36] { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', '-', '1', '2' };
  206. string ems = ""; int l = 0;
  207. while (0 != key.Length)
  208. {
  209. Alf[0, 0] = key[0];
  210. ems += Alf[0, 0];
  211. l = key.IndexOf(Alf[0, 0]);
  212. while (l >= 0)
  213. {
  214. key = key.Remove(l, 1);
  215. l = key.IndexOf(Alf[0, 0]);
  216. }
  217. }
  218. key = ems;
  219. if (Table.RowCount == 0 && Table.ColumnCount == 0)
  220. AddRowsAndCells(6, 6);
  221. l = 0; int l2 = -1; bool t;
  222. for (int i = 0; i < 6; i++)
  223. for (int i2 = 0; i2 < 6; i2++)
  224. if (l < key.Length)
  225. {
  226. Alf[i, i2] = key[l];
  227. Table.Rows[i].Cells[i2].Value = Alf[i, i2];
  228. l++;
  229. }
  230. else
  231. {
  232. do
  233. {
  234. t = false; l2++;
  235. for (int n = 0; n < key.Length; n++)
  236. if (RAlf[l2] == key[n])
  237. {
  238. t = true;
  239. break;
  240. }
  241. }
  242. while (t);
  243. Alf[i, i2] = RAlf[l2];
  244. Table.Rows[i].Cells[i2].Value = Alf[i, i2];
  245. }
  246. }
  247. public void Search(char ch, out int x1, out int y1)
  248. {
  249. x1 = 0; y1 = 0;
  250. for (int m = 0;m<6;m++)
  251. for (int n = 0;n<6;n++)
  252. if (Alf[m,n]==ch)
  253. {
  254. x1 = m; // x1 - строки
  255. y1 = n; // y1 - столбцы
  256. return;
  257. }
  258. }
  259. }
  260. }
Латинские буквы вообще не вводятся а нужно сделать так чтобы они вводились но выдавало ошибку при выполнеении программы.

Решение задачи: «При вводе латинских букв вывод ошибки»

textual
Листинг программы
  1. throw new Exception(string.Format("Нажата кнопка {0}", e.KeyChar));

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


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

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

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы