Опубликовано 26.01.2018 по предмету Информатика от Гость

Переделать из программы Pascal в C#
Задание: Шифр атбаш
const
s1=ABCDEFGHIJKLMNOPQRSTUVWXYZабвгдеёжзийклмнопрстуфхцчшщъыьэюя; s2=ZYXWVUTSRQPONMLKJIHGFEDCBAяюэьыъщшчцхфутсрпонмлкйизжедгвба; var
i,p:integer;
s:string;
begin
Write(Введите текст: ); Readln(s);
for i:=1 to Length(s) do
begin
p:=Pos(s[i],s1);
if p>0 then s[i]:=s2[p]
end;
Writeln(Результат: ,s)
end.

Ответ оставил Гость

Цитата Из Вик.ипедии: "Правило шифрования Атбаш состоит в замене i-й буквы алфавита буквой с номером n - i + 1, где n — число букв в алфавите".

На самом деле, n - i — смещение относительно первой буквы, которое будет иметь i-тая в алфавите буква после шифровки. Для того, чтобы получить номер буквы, нужно прибавить к смещению порядковый номер первой буквы. В случае с обычным алфавитом — 1. (А ещё можно делать наоборот: искать отрицательное смещение и прибавлять номер последнего элемента)

С программой все чуть-чуть посложнее (но не так, чтобы сильно). Номер символа в ней определяется не положением в алфавите, а используемой кодировкой. Обычно, символы идут в таблице кодировки друг за другом, но есть и исключения. Например, буква "ё" обычно идет отдельно от остального алфавита.

Программа читает стандартный ввод (клавиатура) построчно.
Если буквы латинские, достаточно простой арифметики с кодами символов и перевод результата в символьных формат.
Для русских символов выделена переменная, содержащая алфавит в правильном порядке (хотя можно было бы извернуться и решить первым способом, но зачем?). Если символ подходит входит в один из двух алфавитов, то шифруется. Нет - выводится без изменений.

Программа будет работать до тех пор пока не будет введен символ с кодом 0 (Ctrl + @).

//////////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Brainly {
    class Program {
        static void Main(string[] args) {
            string buff,
                alfa = "абвгдеёжзийклмнопрстуфхцчъыьэюя", //алфавит
                key = new string(alfa.ToCharArray().Reverse().ToArray());//перевернутый алфавит
            bool isEnd = false;
            while (!isEnd) {
                Console.Write("Введите текст: ");
                buff = Console.ReadLine();
                Console.Write("Результат:     ");
                for (int i = 0; i < buff.Length; ++i) {
                    if (buff[i] == /0) isEnd = true; //Выход?
                    if (buff[i] >= a && buff[i] <= z)
                        Console.Write((char)(z - buff[i] + a));
                    else if (buff[i] >= A && buff[i] <= Z)
                        Console.Write((char)(Z - buff[i] + A));
                    else if (buff[i] >= а && buff[i] <= я || buff[i] == ё)
                        Console.Write(key[alfa.IndexOf(buff[i])]);
                    else if (buff[i] >= А && buff[i] <= Я || buff[i] == Ё)                        Console.Write(key[alfa.ToUpper().IndexOf(buff[i])].ToString().ToUpper());
                    else
                        Console.Write(buff[i]);
                }
                Console.WriteLine();    Console.WriteLine();
            }
        }
    }
}

Не нашел нужный ответ?

Если ответ по предмету Информатика отсутствует или он оказался неправильным, то попробуй воспользоваться поиском других ответов во всей базе сайта.


Найти другие ответы