Добавить букву "ё" в шифр Цезаря - C#

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

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

Доброго времени суток. Есть программа которая шифрует и дешифрует текст шифром Цезаря. Но в ее алфавит не включена буква "ё". Можно ли ее туда добавить и если можно, то как? Спасибо.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. namespace Shifrovanie_Cezar
  7. {
  8. class Program
  9. {
  10. static void Main()
  11. {
  12. //Цикл для повтора задачи
  13. do
  14. {
  15. string path = @"D:\Test.txt";
  16. //Переменная выбора шифрования/дешифрования
  17. uint k = 0;
  18. //Строка, к которой применяется шифрованияе/дешифрование
  19. string[] g = {""} ;
  20. //Строка - результат шифрования/дешифрования
  21. string result = "";
  22. //Величина сдвига при шифровании/дешифровании
  23. uint shift;
  24. //Вывод сообщения на экран
  25. Console.WriteLine("Введите 1 для шифрования или 2 для дешифрования");
  26. //Считывание переменной выбора, пока она не станет равной 1 или 2
  27. while ((k != 1) && (k != 2))
  28. {
  29. //Считывание переменной k, если введенные данные имеют тип uint
  30. uint.TryParse(Console.ReadLine(), out k);
  31. //Вывод сообщения об ошибке, если k != 1 или k != 2
  32. if ((k != 1) && (k != 2))
  33. Console.WriteLine("Ошибка ввода, повторите попытку");
  34. }
  35. //Вывод сообщения на экран
  36. Console.WriteLine("Введите величину сдвига");
  37. //Считывние величины сдвига
  38. while (!uint.TryParse(Console.ReadLine(), out shift))
  39. {
  40. //Если введена неверная величина сдвига (отрицательное число, или не число)
  41. Console.WriteLine("Ошибка ввода, повторите попытку");
  42. }
  43. //Если величина сдвига больше длины алфавита кирилицы
  44. if (shift > 32)
  45. shift = shift % 32;
  46. //Если выбрано шифрование
  47. if (k == 1)
  48. {
  49. //Вывод сообщения на экран
  50. Console.WriteLine("Строка считывается из файла!");
  51. //Считывание строки
  52. string s = File.ReadAllText(path, Encoding.Default);
  53. //Выполение шифрования
  54.  
  55. //Цикл по каждому символу строки
  56. for (int i = 0; i < s.Length; i++)
  57. {
  58. //Если не кириллица
  59. if (((int)(s[i]) < 1025) || ((int)(s[i]) > 1105))
  60. result += s[i];
  61. //Если буква является строчной
  62. if ((Convert.ToInt16(s[i]) >= 1072) && (Convert.ToInt16(s[i]) <= 1105))
  63. {
  64. //Если буква, после сдвига выходит за пределы алфавита
  65. if (Convert.ToInt16(s[i]) + shift > 1105)
  66. //Добавление в строку результатов символ
  67. result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 33);
  68. //Если буква может быть сдвинута в пределах алфавита
  69. else
  70. //Добавление в строку результатов символ
  71. result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
  72. }
  73. //Если буква является прописной
  74. if ((Convert.ToInt16(s[i]) >= 1040) && (Convert.ToInt16(s[i]) <= 1025))
  75. {
  76. //Если буква, после сдвига выходит за пределы алфавита
  77. if (Convert.ToInt16(s[i]) + shift > 1025)
  78. //Добавление в строку результатов символ
  79. result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 33);
  80. //Если буква может быть сдвинута в пределах алфавита
  81. else
  82. //Добавление в строку результатов символ
  83. result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
  84. }
  85. }
  86. //Вывод на экран зашифрованной строки
  87. Console.WriteLine("Строка успешно зашифрована!");
  88. Console.WriteLine(result);
  89. }
  90. //Если было выбрано дешифрование
  91. if (k == 2)
  92. {
  93. //Вывод сообщения на экран
  94. Console.WriteLine("Строка считывается из файла!");
  95. //Считывание строки
  96. g = File.ReadAllLines(path, Encoding.Default);
  97. //Выполение дешифрования
  98. Console.WriteLine("Строка успешно дешифрована!");
  99. foreach (string s in g)
  100. {
  101. result = string.Empty;
  102. //Цикл по каждому символу строки
  103. for (int i = 0; i < s.Length; i++)
  104. {
  105. if (Convert.ToInt16(s[i]) == 32)
  106. result += ' ';
  107. //Если буква является строчной
  108. if ((Convert.ToInt16(s[i]) >= 1072) && (Convert.ToInt16(s[i]) <= 1105))
  109. {
  110. //Если буква, после сдвига выходит за пределы алфавита
  111. if (Convert.ToInt16(s[i]) - shift < 1072)
  112. //Добавление в строку результатов символ
  113. result += Convert.ToChar(Convert.ToInt16(s[i]) - shift + 32);
  114. //Если буква может быть сдвинута в пределах алфавита
  115. else
  116. //Добавление в строку результатов символ
  117. result += Convert.ToChar(Convert.ToInt16(s[i]) - shift);
  118. }
  119. //Если буква является прописной
  120. if ((Convert.ToInt16(s[i]) >= 1040) && (Convert.ToInt16(s[i]) <= 1071))
  121. {
  122. //Если буква, после сдвига выходит за пределы алфавита
  123. if (Convert.ToInt16(s[i]) - shift < 1040)
  124. //Добавление в строку результатов символ
  125. result += Convert.ToChar(Convert.ToInt16(s[i]) - shift + 32);
  126. //Если буква может быть сдвинута в пределах алфавита
  127. else
  128. //Добавление в строку результатов символ
  129. result += Convert.ToChar(Convert.ToInt16(s[i]) - shift);
  130. }
  131. }
  132.  
  133. //Вывод на экран дешифрованной строки
  134. Console.WriteLine(result);
  135. }
  136. }
  137. Console.WriteLine("Для выхода из программы нажмите Escape");
  138. } while (Console.ReadKey(true).Key != ConsoleKey.Escape);
  139. }
  140. }
  141. }

Решение задачи: «Добавить букву "ё" в шифр Цезаря»

textual
Листинг программы
  1.        static void Main(string[] args)
  2.         {
  3.             if (args.Length < 2)
  4.             {
  5.                 Console.WriteLine("Первый аргумент -ТЕКСТ, второй аргумент -сдвиг");
  6.                 Console.ReadKey();
  7.             }
  8.             else
  9.             {
  10.  
  11.                 string decoded_text = args[0];
  12.                 string encrypted_text = " ";
  13.                 int shift = Int32.Parse(args[1]);
  14.                 char character = '0';
  15.                 decoded_text = decoded_text.ToUpper();
  16.  
  17.                 char[] alphabet = new char[33] { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У',
  18.                 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
  19.  
  20.                 Console.WriteLine("Шифруем текст {0}", decoded_text);       //Display the decoded text
  21.  
  22.                 foreach (char c in decoded_text)
  23.                     {
  24.                         character = c;
  25.                         int shift1 = Array.IndexOf(alphabet, character) - shift;
  26.                         if (shift1 <= 0)
  27.                             shift1 = shift1 + 33;
  28.  
  29.                         if (shift1 >= 33)
  30.                             shift1 = shift1 - 33;
  31.                         encrypted_text += alphabet[shift1];
  32.                     }
  33.                 Console.WriteLine("\nСдвиг {0},  {1}", shift, encrypted_text);
  34.                 Console.ReadKey();                
  35.             }
  36.         }

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


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

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

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

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

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

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