Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/40: Рейтинг темы: голосов - 40, средняя оценка - 4.73
Заблокирован

С# МЕТОД ПОЛИБИЯ шифрование и дишифрование \ ввод слова в консоли

15.02.2014, 08:32. Показов 7546. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток, форумчане! Помогите пожалуйста! Выручайте! На С# раньше не приходилось работать, поэтому я новичок! Как преобразить этот код, чтобы пользователь мог вводить слова через клавиатуру и оно шифровалось Методом Полибия, а затем таким же способом после ввода определенных цифр пользователем расшифровалось!

Например: Пользователь ввел слова АЛМа и в результате вышло 11 24 25 44, и наоборот пользователь ввел 11 24 25 44 в результате вышло АЛМа. Так же надо учесть что есть строчные и прописные буквы!

Полное описание задания: Заполнить прямоугольник Полибия, в котором нужно отобразить все буквы русского алфавита от а до я и от А до Я плюс символы: пробел, точка, двоеточие, восклицательный знак, вопросительный знак и запятая ( всего 72 символа). Методом Полибия зашифровать любую фразу, введенную с клавиатуры. Затем уже расшифровать зашифрованную строку.

А вот и сам код:
Возможно его можно как-то преобразовать?! Выручайте, ребята! Буду очень благодарен вам!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
 
namespace Nurzone
{
    static class Program
    {
        static string[] mat = new string[] {
                    "АБВГДЕЖЗ",
                    "ИЙКЛМНОП",
                    "РСТУФХЦЧ",
                    "ШЩЪЫЬЭЮЯ"
            };
 
        static void Main(string[] args)
        {
            var text = "АЛМА";
            var result = String.Join(" ", Array.ConvertAll(text.ToCharArray(), encode));
            Console.WriteLine(result);
            Console.ReadKey();
        }
 
        private static string encode(char input)
        {
            for (int i = 0; i < mat.Length; i++)
            {
                var k = mat[i].IndexOf(input);
                if (k >= 0) return String.Format("{0}{1}", i + 1, k + 1);
            }
            return "";
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2014, 08:32
Ответы с готовыми решениями:

Как вызвать какой либо метод на ввод определенного слова в консоли?
Как вызвать какой либо метод на ввод определенного слова в консоли?

Метод Полибия шифрование и дешифрование на JAVA
Здравствуйте! Как реализовать дешифровку слова в джаве?! и чтобы слова вводились пользователем?! Нашла в интернете такой вот код...

Шифрование квадратом Полибия
Шифрование квадратом Полибия. Допустим, шифрую слово СЕЛДОН. Должно получиться зашифрованное сообщение 35 16 25 15 32 31, но выдает 15 16...

11
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
15.02.2014, 08:53
Nurzone, var text = "АЛМА"; заменить на string text = Console.ReadLine();
0
Заблокирован
15.02.2014, 09:08  [ТС]
Уже сделал ввод пользователем до вашего комментария! В любом случаи спасибо большое! Теперь вот мучаюсь с расшифровкой! Вижу вы знающий человек! Как бы вы реализовали расшифровку?! Опять таки пользователь должен ввести определенное количество цифр и в результате выходит слова, которое соответствует этим цифрам. Помогите пожалуйста! =)

Добавлено через 5 минут
rRczZZ, Вижу что вы знаток! Дайте какое-нибудь напутствие для новичка в решении этой проблемы! Заранее спасибо! =)
0
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
15.02.2014, 09:36
Nurzone, т.е. каждому символу сопоставляются его точные координаты в таблице? тогда как-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System.Text;
 
private static string decode(string input, string[] alphabet)
{
    StringBuilder sb = new StringBuilder();
    string[] coords = input.Split(' ');
    foreach (string sc in coords)
    {
        int r = int.Parse(sc[0].ToString());
        int c = int.Parse(sc[1].ToString());
        sb.Append(alphabet[r-1][c-1]);
    }
 
    return sb.ToString();
}
 
// Вызов (в Main)
try
{
    string eStr = "11 24 25 11"; // = result
    Console.WriteLine(decode(eStr, mat));
}
catch (Exception )
{
    Console.WriteLine("wrong input");
}
2
Заблокирован
15.02.2014, 09:50  [ТС]
rRczZZ, Спасибо большое! Немного трудновата мне как новичку понять все с ходу! придется разбираться, но можно все же еще один маленький вопрос?! =) Куда мне лучше разместить последний ваш код про расшифровку в вышеупомянутом мною листинге?! Немного запутался! =)
0
Заблокирован
15.02.2014, 09:55
rRczZZ, Здравствуйте, столкнулась с подобной проблемой, могли бы вы прокомментировать свой код? Я тоже новичок! Мне очень интересно!
0
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
15.02.2014, 10:37
Лучший ответ Сообщение было отмечено Nurzone как решение

Решение

altuwa, Nurzone, вот весь файл в чуть более удобной для меня форме. Здесь таблица хранится не двумерным массивом, а одномерным, если хотим, напрмер, получить символ из таблицы с координатами Row=3 Column=4 в таблице 5*5, то нужно обратиться по индексу 5*3+4. Обратно, если дан индекс - необходимо взять частное и остаток от деления на горизонтальную размерность.
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System;
using System.Text;
 
static class TestConsole
{
    static void Main(string[] args)
    {
        // Создаем алфавит и выводим на экран
        string alp = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
        alp += alp.ToLower(); // в нижнем регистре
        alp += " .:!?,";
 
        PTable pTable = new PTable(9, 8, alp);
        Console.WriteLine("Таблица:\r\n" + pTable);
 
        // Ввод слова с клавиатуры
        Console.WriteLine("Введите слово");
        string text = "АЛМА"; // = Console.ReadLine();
 
        try
        {
            // кодируем
            text = pTable.encode(text);
            Console.WriteLine("Закодированное слово: " + text);
 
            // декодируем
            text = pTable.decode(text);
            Console.WriteLine("Декодированное слово: " + text);
        }
        catch
        {
            Console.WriteLine("Попались неизвестные символы");
        }
 
        Console.ReadLine();
    }
 
}
 
class PTable
{
    // Храним алфавит в одномерной строке
    string chars;
 
    // Конструктор, n,m - размерности таблицы, chars - набор символов
    public PTable(int n, int m, string chars)
    {
        N = n; M = m;
        this.chars = chars;
    }
 
    // Даем доступ к размерностям
    public int N { get; private set; }
    public int M { get; private set; }
 
    // Элементы таблицы
    public char this[int r, int c]
    {
        get { return chars[r * M + c]; }
    }
 
    // Вывод таблицы
    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        for (int r = 0; r < N; r++)
        {
            for (int c = 0; c < M; c++)
            {
                sb.Append(this[r,c]);
                sb.Append(' ');
            }
            if (r + 1 != N) sb.AppendLine();
        }
        
        return sb.ToString();
    }
 
    // Кодирование строки
    public string encode(string text)
    {
        int ind;
        StringBuilder sb = new StringBuilder();
        foreach (char c in text)
        {
            if ((ind = chars.IndexOf(c)) != -1)
            {
                sb.Append((int)(ind / M) + 1);
                sb.Append(ind % M + 1);
                sb.Append(' ');
            }
        }
        return sb.ToString();
    }
 
    // Декодирование строки вида "rc rc rc rc"
    public string decode(string text)
    {
        StringBuilder sb = new StringBuilder();
        string[] coords = text.Split(' '); // разбиваем текст по пробелам
        foreach (string s in coords)
        {
            if (s != "")
            {
                // в s строка вида "rc", преобразуем каждый символ в цифру
                int r, c;
                if (int.TryParse(s[0].ToString(), out r) && int.TryParse(s[1].ToString(), out c))
                {
                    sb.Append(this[r-1,c-1]);
                }
            }
        }
        return sb.ToString();
    }
}
2
Заблокирован
15.02.2014, 10:55  [ТС]
rRczZZ, Спасибо вам большое! Вечером приду буду разбираться в коде и подстраивать вами предложенный код под мое задание! Жалко что нету возможности, чтобы пользователь вводил слова в консоли и оно шифровалось, и дешифровка тоже происходило после того как пользователь ввел их координаты! =)
0
Заблокирован
15.02.2014, 11:00
rRczZZ, спасибо! а можно реализовать так чтобы слово вводилось пользователем через клавиатуру и при дешифровке тоже пользователь вводил через клавиатуру в консоли координаты?
0
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
15.02.2014, 11:03
Лучший ответ Сообщение было отмечено Nurzone как решение

Решение

Nurzone, :fp:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
static void Main(string[] args)
{
    // Создаем алфавит и выводим на экран
    string alp = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
    alp += alp.ToLower(); // в нижнем регистре
    alp += " .:!?,";
 
    PTable pTable = new PTable(9, 8, alp);
    Console.WriteLine("Таблица:\r\n" + pTable);
 
    Console.WriteLine("Введите слово для шифровки");
    string text = Console.ReadLine();
    Console.WriteLine("Закодированное слово: " + pTable.encode(text));
 
    try
    {
        Console.WriteLine("Введите слово для дешифровки");
        text = Console.ReadLine();
        Console.WriteLine("Дешифрованное слово: " + pTable.decode(text));
    }
    catch
    {
        Console.WriteLine("Попались неизвестные символы");
    }
 
    Console.ReadLine();
}
2
Заблокирован
15.02.2014, 11:14
rRczZZ, Огромное спасибо! Очень выручили!
0
Заблокирован
15.02.2014, 12:55  [ТС]
rRczZZ, Спасибо ОГРОМНОЕ вам! Реализовано на высоком уровне!!! Я в большом восторге!

Теперь буду все досконально изучать!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2014, 12:55
Помогаю со студенческими работами здесь

Шифрование с использованием квадрата Полибия
Здравствуйте! Помогите, пожалуйста, выполнить задание. Программу нужно сделать в Window Forms. Реализовать в программе шифрование и...

Шифрование методом квадрата Полибия
Напишите пожалуйста программу, которая шифрует методом квадрата Полибия.

Шифрование методом квадрат Полибия (исправить ошибку)
Нужно исправить ошибку в коде для реализации шифрования методом квадрата полибия. Module Module1 Dim P(5, 5) As String Dim a ...

Шифрование по квадрату Полибия, как изменить процедуру шифрования?
1) Программа шифрует текст который считывает из текстового файла, но она шифрует только первую строку. Другими словами после нажатия кнопки...

Метод Полибия
Доброе утро друзья. Помогите пожалуйста... очень скоро у меня зачет задача была такова по методу Полибия: 1 шаг: ввод слов на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru