"Шифр Цезаря" (Код Цезаря) на С#.


Задание:

Разработать программу, кодирующую входную строку методом моноалфавитной подстановки, используя «шифр Цезаря». Программа должна поддерживать ввод широких символов (UNICODE).

Допустимые символы – ВСЕ!!! т.е. все символы английского (латинского) и русского алфавитов, цифры и другие знаки вводимые с клавиатуры

Программа должна закодировать входную строку методом моноалфавитной подстановки, используя шифр Цезаря. К цифровому коду каждой буквы (или другого символа) прибавить заданное пользователем значение key (ключ). Если получившийся код выходит за пределы указанных наборов символов, то считать, что за последним символом набора снова следует первый (цикл по кольцу). Вывод результата кодирования-декодирования представить на этой же форме.

Код Шифр Цезаря на C# Visual Studio 2012 JW Player here replace

Если не удалось запустить видео, воспользуйтесь этой ссылкой ... видео на YouTube

программа Шифр Код Цезаря на С# почти бесплатно


Решение:

Код очень короткий:

файл Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CezarCS
{
    public partial class Form1 : Form
    {
       Cezar Me = new Cezar();

       public Form1()
       {
       InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {
       textBox2.Text = Me.Codeс(textBox1.Text, (int)numericUpDown1.Value);
       }

       private void button2_Click(object sender, EventArgs e)
       {
       textBox3.Text = Me.Codeс(textBox2.Text, -(int)numericUpDown1.Value);
       }
    }
}

И два класса: Clent - лента Цезаря и собственно Cezar, обеспечивающий своим методом Codeс и кодирование, и декодирование...

Почему я назвал первый класс "лентой"? У лент в нашей обычной жизни нет проблем с длиной... Какой длины лента нужна, такой и отстригай от большого мотка... И вторая особенность лент: ее легко закольцевать, т.е. соединить (сшить, склеить) два ее конца.
Посмотрите на конструктор... он принимает строку любой длины...
Метод Repl(замена) по параметрам "символ"(m) и "смещение"(key) вернет новый символ в закольцованной ленте.


class Clent
{
    string le;

    public Clent(string m)
    {
       le = m;
    }

    public string Repl(string m, int key) //замена символа m на символ со смещением
    {
       int pos=le.IndexOf(m);
       if (pos == -1) return ""; //символ в этой ленте не найден
       pos = (pos+key) % le.Length; //если смещение больше одного круга
       if (pos < 0) pos += le.Length;
       return le.Substring(pos, 1);
    }
}

class Cezar : System.Collections.Generic.List<Clent>
{
    public Cezar()
    { //в конструкторе формирую коллекцию лент
       this.Add(new Clent("abcdefghijklmnopqrstuvwxyz"));
       this.Add(new Clent("ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
       this.Add(new Clent("абвгдеёжзийклмнопрстуфхцчшщъыьэюя"));
       this.Add(new Clent("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"));
       this.Add(new Clent("0123456789"));
       this.Add(new Clent("!\"#$%^&*()+=-_'?.,|/`~№:;@[]{}"));
    }

    public string Codeс(string m, int key) //кодирование и декодирование в зависимости от знака ключа
    {
       string res="", tmp="";
       for(int i=0;i<m.Length;i++)
       {
       foreach (Clent v in this)
       {
       tmp = v.Repl(m.Substring(i, 1), key);
       if (tmp != "") //нужная лента найдена, замена символу определена
       {
       res += tmp;
       break; // прерывается foreach (перебор лент)
       }
       }
       if (tmp == "") res += m.Substring(i, 1); //незнакомый символ оставляю без изменений
       }
       return res;
    }
}

Как видим, если символ принадлежит набору ленты, то возвращается новый символ этого набора в зависимости от величины смещения (отрицательного или положительного – не важно). Набор как бы закольцован (за пределы набора выйти нельзя). Функция возвращает пустую строку если символ не принадлежит набору.

Использование классов показано в программе…

скачать exe-файл для тестирования,


Условия получения кода?    Показать?


Другие примеры на тему «Шифрование, Кодирование и/или Сжатие Информации»

Другие примеры на языках «C»,«C++»,«C#»





То же задание на других языках...

на Visual Basic 6 (пароль в e-mail рассылке бесплатно) здесь ...

программа Шифр Код Цезаря на Visual Basic 6.0 бесплатно

на Delphi 7 (пароль в e-mail рассылке бесплатно) здесь ...

программа Шифр Код Цезаря на Delphi 7 бесплатно






Если на этой странице не нашлось того, что Вы так искали...

         Не расстраивайтесь, не все потеряно... Смело щелкайте...

исходный код на заказ. orenstudent.ru Автоматизация документов MS Office. orenstudent.ru исходный код на заказ. orenstudent.ru Помогите найти и устранить ошибку в исходном коде программы. orenstudent.ru Skype-консультирование по программированию
Скайп-консультации

Акция !!!
Весь код по 49 руб


требуются
школьники!


и СТУДЕНТЫ!
Кому не плевать
на деньги!
Сайт помощи студентам по программированию и информатике

Program code