Заполнить прямоугольник Полибия, в котором нужно отобразить все буквы русского алфавита от а до я и от А до Я

Nurzone

Доброе время суток, форумчане! Помогите решить проблему! Дело жизни и смерти! Раньше с С# не приходилось иметь дело! Поэтому не имею представления что делать!Задание:Заполнить прямоугольник Полибия, в котором нужно отобразить все буквы русского алфавита от а до я и от А до Я плюс символы: пробел, точка, двоеточие, восклицательный знак, вопросительный знак и запятая ( всего 72 символа). Методом Полибия зашифровать любую фразу, введенную с клавиатуры. Затем уже расшифровать зашифрованную строку.Помогите!!! Выручайте!!!P.S. Нашел в просторах интернета код, в котором реализован метод Полибия для квадратной матрицы. Проанализировав этот код я понял, что он только для квадратной матрицы и не совсем подходит под мое задания, к тому же тут прописные и строчные буквы в шифровании выводят один и тот же результат!Возможно можно как-то изменить код под мое задание?! Прощу помочь!!!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace NurzhanLaboratory1
{
    class Program
    {
        static void Main(string[] args)
        {
            char[,] alfrus = {     {'А', 'а', 'Б', 'б', 'В', 'в', 'Г', 'г', 'Д', 'д'},
                                   {'Е', 'е', 'Ё', 'ё', 'Ж', 'ж', 'З', 'з', 'И', 'и'},
                                   {'Й', 'й', 'К', 'к', 'Л', 'л', 'М', 'м', 'Н', 'н'},
                                   {'О', 'о', 'П', 'п', 'Р', 'р', 'С', 'с', 'Т', 'т'},
                                   {'У', 'у', 'Ф', 'ф', 'Х', 'х', 'Ц', 'ц', 'Ч', 'ч'},
                                   {'Ш', 'ш', 'Щ', 'щ', 'Ъ', 'ъ', 'Ы', 'ы', 'Ь', 'ь'},
                                   {'Э', 'э', 'Ю', 'ю', 'Я', 'я', '0', '1', '2', '3'},
                                   {'4', '5', '6', '7', '8', '9', ' ', ',', '.', '!'},
                                   {'?', ':', ';', '<', '>', '{', '}', '|', '(', ')'},
                                   {'"', '_', '*', '+', '-', '/', '€', '$', '@', '='}
                               };
 
 
            Console.WriteLine("Введите сообщение русскими буквами для шифровки: ");
            string message = Console.ReadLine();
            string new_message = "";
 
 
 
            for (int i = 0; i < message.Length; i++) // цикл идет по введенному  сообщению,т.е от нулевого символа до конечного (Length)
            {
                for (int j = 0; j < alfrus.GetLength(0); j++)
                for (int k = 0; k < alfrus.GetLength(1); k++) //эти два цикла нужны для перемешения по двумерному массиву,в котором содержаться сам алфавит
                     if (Char.ToLower(alfrus[j, k]) == message[i] || Char.ToUpper(alfrus[j, k]) == message[i])
                     { // в условии проверяем на совпадения буквы сообщения с буквами алфавита,предусматривается и регистр(большие-малые) букв
                          new_message += (Convert.ToString(j) + Convert.ToString(k)); // запоминаем индексы найденных совпадений,в стринговом порядке
                           break;
                     }
 
            }
            Console.WriteLine(new_message); // вывод полученного результата шифрации
 
            Console.WriteLine("Введите код для расшифровки: ");
            string message1 = Console.ReadLine();
            string new_message1 = "";
            for (int a = 0; a < message1.Length; a += 2)
            {
                new_message1 += alfrus[Convert.ToInt32(message1[a].ToString()), Convert.ToInt32(message1[a + 1].ToString())];
            }
            Console.WriteLine(new_message1);
 
        }
    }
}
10 ответов

Nurzone

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


Nurzone

Дело в том, что по Вики, методов шифровки (и соответственно дешифровки) у матрицы Полибия может быть несколько... Вы знаете, какой именно Вам нужен?
Должно быть примерно так:Какой метод лучше подходит для него?!


Nurzone

Так тут и так видно, буква преобразуется в двузначное число, номер строки + номер столбца.


Nurzone

Ну, я для наглядности вам прислал эту картинку! =) Как бы вы решили эту задачу?!.. Видно, что вы знающий человек! Помогите пожалуйста!!!


Nurzone

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


Nurzone

Вижу это проблема не только у меня! Но я не совсем правильно понял вашего вопроса?! Если конечно вы его мне адресовали! Как я понял вы смогли сделать шифрования на джаве, но не смогли сделать дешифровку! это тоже большая проблема!!!


Nurzone

Ну, я для наглядности вам прислал эту картинку! =) Как бы вы решили эту задачу?!.. Видно, что вы знающий человек! Помогите пожалуйста!!!
Ну как-нибудь бы решил... Сейчас попробую, что выйдет.


Nurzone

using System;
 
namespace A
{
    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 "";
        }
    }
}


Nurzone

я дико извиняюсь, но тут же в задание написано пользователь должен вводить слова и оно должно шифроваться! затем пользователь может дешифровать таким же способом!


Nurzone

Спасибо большое! =) А можно сделать так, чтобы пользователь вводил любое слова и оно шифровалось в соответствии с моим заданием?! и таким же способом при вводе определенный цифр дешифровалось?! Помогите пожалуйста!!!pycture, Могли бы вы прокоментировать этот код?! И что делать если в слове есть маленькие буквы? Как бы вы реализовали ввод слова пользователем через клавиатуру?! Вижу вы хорошо знакомы С# Выручайте! Буду вам благодарен очень!