Цитата Из Вик.ипедии: "Правило шифрования 'Атбаш' состоит в замене i-й буквы алфавита буквой с номером n - i + 1, где n — число букв в алфавите".
На самом деле, n - i — смещение относительно первой буквы, которое будет иметь i-тая в алфавите буква после шифровки. Для того, чтобы получить номер буквы, нужно прибавить к смещению порядковый номер первой буквы. В случае с обычным алфавитом — 1. (А ещё можно делать наоборот: искать отрицательное смещение и прибавлять номер последнего элемента)
С программой все чуть-чуть посложнее (но не так, чтобы сильно). Номер символа в ней определяется не положением в алфавите, а используемой кодировкой. Обычно, символы идут в таблице кодировки друг за другом, но есть и исключения. Например, буква "ё" обычно идет отдельно от остального алфавита.
Программа читает стандартный ввод (клавиатура) построчно. Если буквы латинские, достаточно простой арифметики с кодами символов и перевод результата в символьных формат. Для русских символов выделена переменная, содержащая алфавит в правильном порядке (хотя можно было бы извернуться и решить первым но зачем?). Если символ подходит входит в один из двух алфавитов, то шифруется. Нет - выводится без изменений.
Программа будет работать до тех пор пока не будет введен символ с кодом 0 (Ctrl + @).
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace { 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(); } } } }
1)Американский учёный, выдающийся математик и философ, основоположник кибернетики и теории искусственного интеллекта.Мировую известность Винеру принесли его труды в области математической логики и теоретической физики.Заслуга Норберта Винера в том, что он впервые понял принципиальное значение информации в процессах управления. 2) Американский инженер и математик, его работы являются синтезом математических идей с конкретным анализом чрезвычайно сложных проблем их технической реализации Он является основателем теории информации, нашедшей применение в современных высокотехнологических системах связи. Шеннон внес огромный вклад в теорию вероятностных схем, теорию автоматов и теорию систем управления — области наук, входящие в понятие «кибернетика». В 1948 году предложил использовать слово «бит» для обозначения наименьшей единицы информации 3) Термин гипертекст впервые появился двадцать лет спустя и был введен в 1965 году Тедом Нельсоном, "одним из самых известных учеников Буша 4) Тим Бернерс-Ли, британский ученый, изобрел World Wide Web (WWW) в 1989 году. 5)еонард Эйлер (1707-1783) — математик, механик, физик и астроном. По происхождению швейцарец. Идеальный математик 18 века - так часто называют Эйлера.
Ученый необычайной широты интересов и творческой продуктивности. Автор свыше 800 работ по математическому анализу, дифференциальной геометрии, теории чисел, приближенным вычислениям, небесной механике, математической физике, оптике, , кораблестроению, теории музыки и других, оказавших значительное влияние на развитие науки. За время существования Академии наук в России, считается одним из самых знаменитых ее членов.