Добавить букву "ё" в шифр Цезаря - C#
Формулировка задачи:
Доброго времени суток. Есть программа которая шифрует и дешифрует текст шифром Цезаря. Но в ее алфавит не включена буква "ё". Можно ли ее туда добавить и если можно, то как? Спасибо.
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- namespace Shifrovanie_Cezar
- {
- class Program
- {
- static void Main()
- {
- //Цикл для повтора задачи
- do
- {
- string path = @"D:\Test.txt";
- //Переменная выбора шифрования/дешифрования
- uint k = 0;
- //Строка, к которой применяется шифрованияе/дешифрование
- string[] g = {""} ;
- //Строка - результат шифрования/дешифрования
- string result = "";
- //Величина сдвига при шифровании/дешифровании
- uint shift;
- //Вывод сообщения на экран
- Console.WriteLine("Введите 1 для шифрования или 2 для дешифрования");
- //Считывание переменной выбора, пока она не станет равной 1 или 2
- while ((k != 1) && (k != 2))
- {
- //Считывание переменной k, если введенные данные имеют тип uint
- uint.TryParse(Console.ReadLine(), out k);
- //Вывод сообщения об ошибке, если k != 1 или k != 2
- if ((k != 1) && (k != 2))
- Console.WriteLine("Ошибка ввода, повторите попытку");
- }
- //Вывод сообщения на экран
- Console.WriteLine("Введите величину сдвига");
- //Считывние величины сдвига
- while (!uint.TryParse(Console.ReadLine(), out shift))
- {
- //Если введена неверная величина сдвига (отрицательное число, или не число)
- Console.WriteLine("Ошибка ввода, повторите попытку");
- }
- //Если величина сдвига больше длины алфавита кирилицы
- if (shift > 32)
- shift = shift % 32;
- //Если выбрано шифрование
- if (k == 1)
- {
- //Вывод сообщения на экран
- Console.WriteLine("Строка считывается из файла!");
- //Считывание строки
- string s = File.ReadAllText(path, Encoding.Default);
- //Выполение шифрования
- //Цикл по каждому символу строки
- for (int i = 0; i < s.Length; i++)
- {
- //Если не кириллица
- if (((int)(s[i]) < 1025) || ((int)(s[i]) > 1105))
- result += s[i];
- //Если буква является строчной
- if ((Convert.ToInt16(s[i]) >= 1072) && (Convert.ToInt16(s[i]) <= 1105))
- {
- //Если буква, после сдвига выходит за пределы алфавита
- if (Convert.ToInt16(s[i]) + shift > 1105)
- //Добавление в строку результатов символ
- result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 33);
- //Если буква может быть сдвинута в пределах алфавита
- else
- //Добавление в строку результатов символ
- result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
- }
- //Если буква является прописной
- if ((Convert.ToInt16(s[i]) >= 1040) && (Convert.ToInt16(s[i]) <= 1025))
- {
- //Если буква, после сдвига выходит за пределы алфавита
- if (Convert.ToInt16(s[i]) + shift > 1025)
- //Добавление в строку результатов символ
- result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 33);
- //Если буква может быть сдвинута в пределах алфавита
- else
- //Добавление в строку результатов символ
- result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
- }
- }
- //Вывод на экран зашифрованной строки
- Console.WriteLine("Строка успешно зашифрована!");
- Console.WriteLine(result);
- }
- //Если было выбрано дешифрование
- if (k == 2)
- {
- //Вывод сообщения на экран
- Console.WriteLine("Строка считывается из файла!");
- //Считывание строки
- g = File.ReadAllLines(path, Encoding.Default);
- //Выполение дешифрования
- Console.WriteLine("Строка успешно дешифрована!");
- foreach (string s in g)
- {
- result = string.Empty;
- //Цикл по каждому символу строки
- for (int i = 0; i < s.Length; i++)
- {
- if (Convert.ToInt16(s[i]) == 32)
- result += ' ';
- //Если буква является строчной
- if ((Convert.ToInt16(s[i]) >= 1072) && (Convert.ToInt16(s[i]) <= 1105))
- {
- //Если буква, после сдвига выходит за пределы алфавита
- if (Convert.ToInt16(s[i]) - shift < 1072)
- //Добавление в строку результатов символ
- result += Convert.ToChar(Convert.ToInt16(s[i]) - shift + 32);
- //Если буква может быть сдвинута в пределах алфавита
- else
- //Добавление в строку результатов символ
- result += Convert.ToChar(Convert.ToInt16(s[i]) - shift);
- }
- //Если буква является прописной
- if ((Convert.ToInt16(s[i]) >= 1040) && (Convert.ToInt16(s[i]) <= 1071))
- {
- //Если буква, после сдвига выходит за пределы алфавита
- if (Convert.ToInt16(s[i]) - shift < 1040)
- //Добавление в строку результатов символ
- result += Convert.ToChar(Convert.ToInt16(s[i]) - shift + 32);
- //Если буква может быть сдвинута в пределах алфавита
- else
- //Добавление в строку результатов символ
- result += Convert.ToChar(Convert.ToInt16(s[i]) - shift);
- }
- }
- //Вывод на экран дешифрованной строки
- Console.WriteLine(result);
- }
- }
- Console.WriteLine("Для выхода из программы нажмите Escape");
- } while (Console.ReadKey(true).Key != ConsoleKey.Escape);
- }
- }
- }
Решение задачи: «Добавить букву "ё" в шифр Цезаря»
textual
Листинг программы
- static void Main(string[] args)
- {
- if (args.Length < 2)
- {
- Console.WriteLine("Первый аргумент -ТЕКСТ, второй аргумент -сдвиг");
- Console.ReadKey();
- }
- else
- {
- string decoded_text = args[0];
- string encrypted_text = " ";
- int shift = Int32.Parse(args[1]);
- char character = '0';
- decoded_text = decoded_text.ToUpper();
- char[] alphabet = new char[33] { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У',
- 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
- Console.WriteLine("Шифруем текст {0}", decoded_text); //Display the decoded text
- foreach (char c in decoded_text)
- {
- character = c;
- int shift1 = Array.IndexOf(alphabet, character) - shift;
- if (shift1 <= 0)
- shift1 = shift1 + 33;
- if (shift1 >= 33)
- shift1 = shift1 - 33;
- encrypted_text += alphabet[shift1];
- }
- Console.WriteLine("\nСдвиг {0}, {1}", shift, encrypted_text);
- Console.ReadKey();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д