Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.80
XudaH
13 / 13 / 1
Регистрация: 04.05.2009
Сообщений: 130
#1

Закодировать текст - Visual Basic .NET

27.01.2011, 20:14. Просмотров 2899. Ответов 14
Метки нет (Все метки)

Привет всем =) Вот с программкой кое какой парюсь, нужно закодировать слово шифром Цезаря.
То есть:
1) есть русский алфавит из 33 букв и одного пробела.
2) например, закодировать слово "яблоко" (в кодированном виде получиться "вдоснс"), т.е. чтобы закодировать слово нужно по алфавиту сместиться на 3 буквы вправо (например, была буква А, стала буквой Г)
Порядок смещения можно задать любой(это по умолчанию на 3 буквы вправо смещается).
Ещё нужно закодированное слово и раскодировать ;-)
Так вот как такое сделать?
Спасибо за внимание!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2011, 20:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Закодировать текст (Visual Basic .NET):

Закодировать текст по Вижинеру
Начало тут А можно пояснение, где что

Закодировать текст по Вижинеру
Привет всем =) Опять я с кодировкой. На этот раз не получается закодировать текст с помощью таблицы Вижинера. Нужно взять русский алфавит...

Закодировать текст методом гаммирования
Привет всем) Как закодировать текст методом гаммирования? Метод гаммирования: Берется любое слово или словосочетание(например, яблоко) и...

Как, используя метод base64, закодировать текст?
Здравствуйте. Подскажите пожалуйста, как изменить код, чтобы можно было вместо рисунка кодировать текст. За ранние благодарен. ...

Закодировать файлы и поставить пароль для их расшифровки
Как закодировать все файлы в определенной папке?И что бы их запустить нужно ввести пароль 555

Задан некоторый текст и матрица-ключ, в которой каждой букве поставлено число. Зашифруйте текст
Задано некоторый текст и матрица-ключ, в которой каждой букве украинского алфавита поставлено в соответствие некоторое число. Использовав...

14
Provaider
104 / 32 / 1
Регистрация: 01.10.2010
Сообщений: 310
27.01.2011, 22:06 #2
Ну здесь есть несколько путей. 1) это получить кодировку символов, и уже танцевать от неё. 2) Написать функцию, которая вначале обрезает полученную строку посимвольно, а потом ты сам кодируешь полученные буквы таким образом:1=А, 2=Б, 3=В, прбел=00, маленькие буквы так: а=11, б=21 и т.д., а чтобы потом не запутаться с раскодировкой, буквы переведённые в цифру разделяй знаком ";". Как-то так
0
XudaH
13 / 13 / 1
Регистрация: 04.05.2009
Сообщений: 130
28.01.2011, 17:12  [ТС] #3
Вот массив из букв как создать?
0
Eugene22
_
2349 / 1222 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
28.01.2011, 18:21 #4
Вот массив из букв как создать?
vb.net
1
твоя_строка.ToCharArray()
0
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
28.01.2011, 18:29 #5
Как вариант. На форме 2 текстбокса и 75 кнопок. Класс формы:
vb.net
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
Public Class Form1
    Dim MC As String = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ .,!№;%:?*()0123456789\/" & """"
    Dim Inps As String
    Dim Outps As String
    Dim KoefF As Integer = 1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Inps = TextBox1.Text
        Outps = ""
        For I As Integer = 1 To Inps.Length
            Dim Fnd As Integer = InStr(MC, Strings.Mid(Inps, I, 1), CompareMethod.Text)
            If Fnd <> 0 Then
                Dim Tmp As Integer = Fnd + KoefF
                If Tmp > MC.Length Then Tmp = Tmp - MC.Length
                Outps &= Strings.Mid(MC, Tmp, 1)
            End If
        Next
        TextBox2.Text = (Outps)
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Inps = TextBox1.Text
        Outps = ""
        For I As Integer = 1 To Inps.Length
            Dim Fnd As Integer = InStr(MC, Strings.Mid(Inps, I, 1), CompareMethod.Text)
            If Fnd <> 0 Then
                Dim Tmp As Integer = Fnd - KoefF
                If Tmp <= 0 Then Tmp = MC.Length - Tmp
                Outps &= Strings.Mid(MC, Tmp, 1)
            End If
        Next
        TextBox2.Text = (Outps)
    End Sub
End Class
Прижелании можно убрать точки и запятые в строке. При желании можно доработать код, и будут меняться только буквы, а точки и запятые будут на своих местах.
2
XudaH
13 / 13 / 1
Регистрация: 04.05.2009
Сообщений: 130
28.01.2011, 22:02  [ТС] #6
vb.net
1
Как вариант. На форме 2 текстбокса и 75 кнопок.
о_О столько много кнопок именно нужно?))
0
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
28.01.2011, 22:27 #7
Конечно это шутка. Но если их все разместить, код все равно будет работать

Добавлено через 2 минуты
vb.net
1
Dim KoefF As Integer = 1
Это и есть сдвиг, установи другой
1
Eugene22
_
2349 / 1222 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
28.01.2011, 23:14 #8
Предлагаю альтернативный способ кодирования
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 Imports System.Text
Private Sub button_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button1.Click
        Dim s As String = TextBox2.Text
        Dim i As StringBuilder = New StringBuilder()
        Dim d As Integer
        For Each c As Char In s
            d = AscW(c)
            Select Case d
                Case 1103 : d = 1039
                Case 1102 : d = 1038
                Case 1101 : d = 1037
            End Select
            d = d + 3
            i.Append(ChrW(d))
        Next
    End Sub
Раскодирование (правда не проверял)
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub button_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles Button2.Click
        Dim s As String = TextBox2.Text
        Dim i As StringBuilder = New StringBuilder()
        Dim d As Integer
        For Each c As Char In s
            d = AscW(c) - 3
            Select Case d
                Case 1039 : d = 1103
                Case 1038 : d = 1102
                Case 1037 : d = 1101
            End Select        
            i.Append(ChrW(d))
        Next
    End Sub
1
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
28.01.2011, 23:22 #9
Eugene22, у тебя жестко обозначено смещение на 3 символа. Если переделывать под например 17 - то тут придется покропеть в блоке СелектКейз.
Нет?

Добавлено через 3 минуты
Цитата Сообщение от XudaH Посмотреть сообщение
Порядок смещения можно задать любой(это по умолчанию на 3 буквы вправо смещается)
Думается, неплохо бы предлагать пользователю интервал смещения - вообще бы хорошо было.
А еще обработать ввод значения смещения, превышающее длину строки с буквами...
0
Eugene22
_
2349 / 1222 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
28.01.2011, 23:31 #10
А ну это ты правильно заметил, значит есть куда расти. Просто в поставленной задаче что-то говорилось про сдиг на три символа, поэтому я от этого и отталкивался. От балды решил побыстрому набрасать.
0
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
28.01.2011, 23:36 #11
Цитата Сообщение от Eugene22 Посмотреть сообщение
Case 1103 : d = 1039 Case 1102 : d = 1038 Case 1101 : d = 1037
А не проще ли делать проверку, мол, если Д больше чем 1100, то пусть оно равно Д - 64?
Ведь там сплошная математика. Пусть автор учтет, если будет код тоже обкатывать.
StringBuilder - безусловно, грамотный ход, я как-то забыл про него.
0
Eugene22
_
2349 / 1222 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
28.01.2011, 23:46 #12
Ага мне тоже какие-то мысли начали приходить вначале, чтобы универсально это расчитать. Просто день выдался тяжелым, я уже не особо соображаю.
0
XudaH
13 / 13 / 1
Регистрация: 04.05.2009
Сообщений: 130
01.02.2011, 21:06  [ТС] #13
Все работает) Только если сдвиг, например, на 2 поставлю, чтобы раскодировать букву "А", должна получиться буква "Я", в поле ничего не пишется((
0
Памирыч
Почетный модератор
20840 / 8722 / 1079
Регистрация: 11.04.2010
Сообщений: 11,012
02.02.2011, 06:54 #14
Мой косяк - мы вычитаем отрицательное число, то есть, получаем сложение.
В блоке кода с расшифровкой в строке
vb.net
1
If Tmp <= 0 Then Tmp = MC.Length - Tmp
Надо заменить "-" на "+":
vb.net
1
If Tmp <= 0 Then Tmp = MC.Length + Tmp
1
XudaH
13 / 13 / 1
Регистрация: 04.05.2009
Сообщений: 130
02.02.2011, 18:25  [ТС] #15
Цитата Сообщение от Памирыч Посмотреть сообщение
Мой косяк - мы вычитаем отрицательное число, то есть, получаем сложение.
В блоке кода с расшифровкой в строке
vb.net
1
If Tmp <= 0 Then Tmp = MC.Length - Tmp
Надо заменить "-" на "+":
vb.net
1
If Tmp <= 0 Then Tmp = MC.Length + Tmp
спасибо) я уже в колледже разобрался когда сдавал))
0
02.02.2011, 18:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2011, 18:25
Привет! Вот еще темы с решениями:

Закодировать введенный текст
Здравствуйте. Нужно закодировать текст набранный символами русского алфавита. Алфавит кода цифры от 0 до 9. Сумма цифр в числе должна быть...

Как закодировать текст в MD5 ?
Здравствуйте! Задачка простая. Есть текст, например &quot;12345абвгд&quot; который выводится в TextBox1. Задача программы - вывести в TextBox2...

Закодировать текст шифром Цезаря
Нужна программа, которая будет считывать текстовое сообщение из файла и зашифровывать его при помощи шифра Цезаря(например есть ключ 123. и...

Закодировать и сохранить закодированый текст в файл
Задание: Имеется тестовый файл в нем строка на английском языке (Hello world например). Надо файл открыть,считать текст, закодировать...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru