Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Шифратор и дешифратор Добавлено: 17.12.08 21:50  

Автор вопроса:  Roman | Web-сайт: kruftin.h15.ru | ICQ: 347671864 
При написании простой кодирующей программы возникли проблемы с декодированием букв ш, щ.
Кодирование происходит за счёт прибавления 5 к коду анси элемента, причём 0 соответствует 251, 1 - 252, 2 - 253, 3 - 254, 4 - 255. Помогите установить причину неверного раскодирования при использовании букв ш и щ.
Private Sub Command1_Click()
symbol_res = ""
key = 3
a = RTB1.Text
l = Len(a)
For i = 1 To l
    symbol = Mid(a, i, 1)
    symbol_code1(i) = Asc(symbol)
    If symbol_code1(i) < 5 Then
        symbol_codemod = 25 & symbol_code1(i) + 1
        symbol_codemod = Chr(symbol_codemod)
    ElseIf symbol_code1(i) > 250 Then
        d = symbol_code1(i) - 1
        symbol_codemod = Val(Right$(CStr(d), 1))
        symbol_codemod = Chr(symbol_codemod)
    Else
        symbol_codemod = symbol_code1(i) + 5
        symbol_codemod = Chr(symbol_codemod)
    End If
    symbol_res = symbol_res & symbol_codemod
    
    
Next i
RTB2.Text = symbol_res

End Sub


Private Sub Command2_Click()
symbol_res = ""
key = 3
b = RTB3.Text
l = Len(b)
For i = 1 To l
    symbol = Mid(b, i, 1)
    symbol_code2(i) = Asc(symbol)
    If symbol_code2(i) < 5 Then
        symbol_codemod = 25 & symbol_code2(i) + 1
        symbol_codemod = Chr(symbol_codemod)
    ElseIf symbol_code2(i) > 250 Then
        d = symbol_code2(i) - 1
        symbol_codemod = Val(Right$(CStr(d), 1))
        symbol_codemod = Chr(symbol_codemod)
    Else
        symbol_codemod = symbol_code2(i) - 5
        symbol_codemod = Chr(symbol_codemod)
    End If
    symbol_res = symbol_res & symbol_codemod
    
    
Next i
RTB4.Text = symbol_res
End Sub

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 17.12.08 23:36
Код это жесть.

Ответить

Номер ответа: 2
Автор ответа:
 



Вопросов: 5
Ответов: 79
 Профиль | | #2 Добавлено: 18.12.08 00:34
Вот. Попыхтел я, однако :) Ты как-то всё слишком усложняешь, сам ложишь кирпичи на своей дороге. Допустим зачем делать конкатенацию (объединение строк) если можно обойтись арифметическими операциями? :) Ну ладно, я понимаю, это всё из-за того что ты только начинаешь. Дерзай. И кстати, RichTextBox обычный TextBox... да вообще все текстовые контейнеры будут искажать спец. непечатные символы. Такие данные нужно подгружать из переменных.

  1.  
  2. Dim symbol_code1() As Byte, symbol_code2() As Byte
  3.  
  4. Private Sub Command1_Click()
  5. symbol_res = ""
  6. ReDim symbol_code1(Len(RTB1.Text))
  7. For i = 1 To Len(RTB1.Text)
  8. symbol_code1(i) = Asc(Mid(RTB1.Text, i, 1))
  9. If symbol_code1(i) > 250 Then
  10. symbol_codemod = Chr(symbol_code1(i) - 251)
  11. Else
  12. symbol_codemod = Chr(symbol_code1(i) + 5)
  13. End If
  14. symbol_res = symbol_res & symbol_codemod
  15. Next i
  16. RTB2.Text = symbol_res
  17. End Sub
  18.  
  19. Private Sub Command2_Click()
  20. symbol_res = ""
  21. ReDim symbol_code2(Len(RTB3.Text))
  22. For i = 1 To Len(RTB3.Text)
  23. symbol_code2(i) = Asc(Mid(RTB3.Text, i, 1))
  24. If symbol_code2(i) < 5 Then
  25. symbol_codemod = Chr(251 + symbol_code2(i))
  26. Else
  27. symbol_codemod = Chr(symbol_code2(i) - 5)
  28. End If
  29. symbol_res = symbol_res & symbol_codemod
  30. Next i
  31. RTB4.Text = symbol_res
  32. End Sub

Ответить

Номер ответа: 3
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #3
Добавлено: 18.12.08 03:05
да вот вам ниибаца алго! =)))
  1. Const Source As String = "Сожри еще этой жесткой корейской морковки да покури бамбук!........"
  2.  
  3. Dim Result As String
  4.  
  5. Private Sub Form_Load()
  6.     Result = CodeDecode(Source)
  7.     Me.AutoRedraw = True
  8.     Print Source
  9.     Print Result
  10.     Result = CodeDecode(Result)
  11.     Print Result
  12. End Sub
  13.  
  14. Function CodeDecode(ByVal Src As String) As String
  15.     Dim lenghtOfString As Integer
  16.     Dim currentPos As Integer
  17.     Dim Char As String * 1
  18.     lenghtOfString = Len(Src)
  19.     currentPos = 1
  20.     Do
  21.         Char = Chr$((Asc(Mid$(Src, currentPos, 1)) Xor currentPos) Xor (lenghtOfString Mod currentPos))
  22.         CodeDecode = CodeDecode & Char
  23.         currentPos = currentPos + 1
  24.     Loop While currentPos <= lenghtOfString
  25. End Function

Ответить

Номер ответа: 4
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #4
Добавлено: 18.12.08 08:27
Сожри еще этой жесткой корейской морковки да покури бамбук!

=)

Ответить

Номер ответа: 5
Автор ответа:
 Фенягz



ICQ: 387437448 

Вопросов: 7
Ответов: 202
 Web-сайт: atauenis.narod.ru/
 Профиль | | #5
Добавлено: 18.12.08 13:22
Executioner пишет:

"Сожри еще этой жесткой корейской морковки да покури бамбук!........"

Жжжошь! :-D

Ответить

Номер ответа: 6
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 18.12.08 19:09
Порадовало :)

Ответить

Номер ответа: 7
Автор ответа:
 



Вопросов: 5
Ответов: 79
 Профиль | | #7 Добавлено: 19.12.08 22:53
Интересно это. Но вот как логические операторы работают с числами совсем непонятно, а ещё неясно почему строковая переменная не должна быть пустой
  1. Dim Char As String * 1

Ответить

Номер ответа: 8
Автор ответа:
 Nytrogen



Вопросов: 18
Ответов: 186
 Профиль | | #8 Добавлено: 19.12.08 23:53
supaplex777: как логические операторы работают с числами совсем непонятно

Побитово. Например, 2 And 3 = 2

    010
& 011
    010

supaplex777: почему строковая переменная не должна быть пустой

Потому что Вы указываете, что в ней всегда хранится один символ.

Ответить

Номер ответа: 9
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #9
Добавлено: 20.12.08 00:09
Не то чтобы она не должна быть пустой. Просто так она занимает в памяти меньше места.
А про логические операторы ботай учебники по информатике/кодингу.

Ответить

Номер ответа: 10
Автор ответа:
 



Вопросов: 5
Ответов: 79
 Профиль | | #10 Добавлено: 23.12.08 02:48
010b & 011b = 010b?!! Оо это вот блин компа рядом нет - щас проверил бы. Не признаем мы учебники и документацию! всё делается методом тыка :)

Ответить

Номер ответа: 11
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #11
Добавлено: 23.12.08 06:41
& - умножение
| - сложение. исключение только 1 | 1 = 1
Просто запомнить.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам