Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2011, 15:17   #1
sizetooo
 
Регистрация: 20.10.2011
Сообщений: 3
Вопрос Тривиальное криптование

Добрый день, у меня проблема с программой, суть программы в том, что она должна осуществлять шифрование "Тарабарской грамотой". Вот суть шифровки http://www.wikiznanie.ru/ru-wz/index...BE%D1%82%D0%B0

Представляю свой код:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Kursovik_Tarabarskaya_Gramota
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            radioButton1.Checked = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            richTextBox1.LoadFile(openFileDialog1.FileName);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            saveFileDialog1.ShowDialog();
            richTextBox1.SaveFile(saveFileDialog1.FileName);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            if (radioButton1.Checked)
            {
                richTextBox1.Text = richTextBox1.Text.Replace("б", "щ");
                richTextBox1.Text = richTextBox1.Text.Replace("в", "ш");
                richTextBox1.Text = richTextBox1.Text.Replace("г", "ч");
                richTextBox1.Text = richTextBox1.Text.Replace("д", "ц");
                richTextBox1.Text = richTextBox1.Text.Replace("ж", "х");
                richTextBox1.Text = richTextBox1.Text.Replace("з", "ф");
                richTextBox1.Text = richTextBox1.Text.Replace("к", "т");
                richTextBox1.Text = richTextBox1.Text.Replace("л", "с");
                richTextBox1.Text = richTextBox1.Text.Replace("м", "р");
                richTextBox1.Text = richTextBox1.Text.Replace("н", "п");
             }
            else
            {
                
                richTextBox1.Text = richTextBox1.Text.Replace("п", "н");
                richTextBox1.Text = richTextBox1.Text.Replace("р", "м");
                richTextBox1.Text = richTextBox1.Text.Replace("с", "л");
                richTextBox1.Text = richTextBox1.Text.Replace("т", "к");
                richTextBox1.Text = richTextBox1.Text.Replace("ф", "з");
                richTextBox1.Text = richTextBox1.Text.Replace("х", "ж");
                richTextBox1.Text = richTextBox1.Text.Replace("ц", "д");
                richTextBox1.Text = richTextBox1.Text.Replace("ч", "г");
                richTextBox1.Text = richTextBox1.Text.Replace("ш", "в");
                richTextBox1.Text = richTextBox1.Text.Replace("щ", "б");
              }
        }
    }
}
Тест программы принес результат только с буквами: б в г д ж з к л м н.
Результат как в шифровании таки и в дешифрировании, но нужно, чтобы работал весь алфавит согласных букв, в соответствии с таблицй шифровки Тарабарской Грамоты.

Помогите пожалуйста!
sizetooo вне форума Ответить с цитированием
Старый 20.10.2011, 15:34   #2
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

напидумывай по аналогии. смысл не заменить на то что в этой статье, а каждому символу сделать соответсвие символу не равное ему самому же
Guy вне форума Ответить с цитированием
Старый 20.10.2011, 15:51   #3
sizetooo
 
Регистрация: 20.10.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Guy Посмотреть сообщение
напидумывай по аналогии. смысл не заменить на то что в этой статье, а каждому символу сделать соответсвие символу не равное ему самому же
А как так сделать, я и так и сяк думал, а нет такой фичи, как Text.Replace( "1","2") только чтобы не просто 1 на 2 менялся, а чтобы еще и 2 на 1?
sizetooo вне форума Ответить с цитированием
Старый 20.10.2011, 23:42   #4
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Думаю, что как-то как:
Код:
using System;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            var crypt = new MyCrypt();
            string cr = crypt.Crypt("Пробная строка");
            MessageBox.Show(cr + Environment.NewLine + crypt.UnCrypt(cr));
        }
    }

    public class MyCrypt
    {
        private readonly string dic;
        private readonly string reverseDic;

        public MyCrypt()
        {
            dic = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
            char[] array = dic.ToCharArray();
            Array.Reverse(array);
            reverseDic = new string(array);
        }

        public string Crypt(string s)
        {
            s = s.ToUpper();
            string ns = string.Empty;
            s.ToList().ForEach(c => ns += GetChar(c, reverseDic, dic));
            return ns;
        }

        public string UnCrypt(string s)
        {
            return Crypt(s);
        }

        private char GetChar(char ch, string s1, string s2)
        {
            return !s1.Contains(ch) ? ch : s2[s1.LastIndexOf(ch)];
        }
    }
}
Насчет регистра... лень делать проверки, это будет задание: Поменять регистр символа на противоположный (подсказка, проверяй содержится ли она в строке, если да, то ТоЛоуэр, иначе ТоАппер).
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 21.10.2011, 00:36   #5
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Цитата:
Сообщение от sizetooo Посмотреть сообщение
А как так сделать, я и так и сяк думал, а нет такой фичи, как Text.Replace( "1","2") только чтобы не просто 1 на 2 менялся, а чтобы еще и 2 на 1?
Используй не Replace а иди for либо foreach по всем символам из Text-а и заменяй посимвольно тогда не ошибёшься
Guy вне форума Ответить с цитированием
Старый 21.10.2011, 14:30   #6
sizetooo
 
Регистрация: 20.10.2011
Сообщений: 3
По умолчанию

Всем спасибо, сделал так два массива в стринге и один в чаре, там заменял в стрингах и дописывал в чар :D Все работает ок! Спасибо ребят, ваши идеи помогли :DD
sizetooo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тривиальное затруднение GoodTimes Общие вопросы C/C++ 2 10.05.2010 22:28