Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.03.2012, 22:13
Интересующийся
Отправить личное сообщение для andrewvas Посмотреть профиль Найти все сообщения от andrewvas
 
Регистрация: 15.03.2012
Сообщений: 16

Вопросы по скрипту для шифровки и дешифровки шифра Цезаря.
Вот сам скрипт:
<html>
<head>
<title>Шифр Цезаря</title> </head>
<body> <br>
<div align="center">
<b>Введите сюда Ваш текст:</b>
<br><br>
<input id="b_text1" type="text" size="80">
<br><br><br>
<b>Выберите действие:</b>
<br><br>
<input onclick="caesar_code(0)" type="button" value="Шифровать">&nbsp;&nbsp;&nbsp;
<input onclick="caesar_code(1)" type="button" value="Дешифровать"> <br><br><br>
<b>Результат:</b> <br><br>
<input id="b_text2" type="text" size="80"> </div>
<script language="JavaScript">
function caesar_code(b_n) {
var b_alf = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', b_result = '', b_x = b_text1.value, b_u =b_text1.value.toUpperCase();
if (b_n == 0) {
for(i = 0; i < b_x.length; i++) {
b_pos = b_alf.lastIndexOf(b_u.charAt(i));
b_char1 = b_alf.charAt(b_pos +7);
b_result = b_result + b_char1 } }
if (b_n == 1) {
for(i = 0; i < b_x.length; i = i+2) {
b_pos = b_alf.indexOf(b_u.charAt(i));
b_result = b_result + b_alf.charAt(b_pos - 7); } }
b_text2.value = b_result; }  
</script>
</html>

У меня два вопроса:
1) Почему скрипт дешифрует только один символ?
2) Как реализовать цикличность, т.е если алфавит заканчивается то скрипт начинает "брать" алфавит сначало.
Ответить с цитированием
  #2 (permalink)  
Старый 18.03.2012, 04:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

andrewvas,
У вас нет проверки существуетли b_pos +7 или b_pos - 7 плюс i = i+2 в строке 25, нужно i++.
Ответить с цитированием
  #3 (permalink)  
Старый 18.03.2012, 16:56
Интересующийся
Отправить личное сообщение для andrewvas Посмотреть профиль Найти все сообщения от andrewvas
 
Регистрация: 15.03.2012
Сообщений: 16

спасибо)
Если я выполняю проверку и b_pos+7(b_pos-7) не существует то..?
Ответить с цитированием
  #4 (permalink)  
Старый 18.03.2012, 18:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

andrewvas,
примерно так
if(b_pos+7>b_alf.length) b_pos-=b_alf.length;
if(b_pos-7<0) b_pos+=b_alf.length;
Ответить с цитированием
  #5 (permalink)  
Старый 18.03.2012, 22:23
Интересующийся
Отправить личное сообщение для andrewvas Посмотреть профиль Найти все сообщения от andrewvas
 
Регистрация: 15.03.2012
Сообщений: 16

ок спасибо)
только куда это вставить?)
P.S b_pos-=b_alf.length; это тоже самое что b_pos=b_pos-b_alf.length; ?
Ответить с цитированием
  #6 (permalink)  
Старый 19.03.2012, 08:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

andrewvas,
Вариант с возможностью добавления любых символов для шифрования с возможностью выбора любого положительного сдвига, плюс если символ "нешифруемый" он остаётся таким же(регистр по прежнему верхний, но его можно убрать если добавить символы нижнего регистра)...
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1251">
  <title>Шифр Цезаря</title>
  <script type="text/javascript">
function caesar_code(a, d) {
    var c = document.getElementById("b_text1"),
        g = document.getElementById("b_text2"),
        b = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ",
        e = "",
        d = d % b.length || 0,
        c = c.value.toUpperCase(),
        f = b.substr(d) + b.substr(0, d);
    1 == a && (a = b, b = f, f = a);
    for (i = 0; i < c.length; i++) a = b.lastIndexOf(c.charAt(i)), a = f.charAt(a) || c.charAt(i), e += a;
    g.value = e
};
  </script>
</head>
<body>
  <br>
  <div align="center">
    <strong>Введите сюда Ваш текст:</strong><br>
    <br>
    <input id="b_text1" type="text" size="80"><br>
    <br>
    <br>
    <strong>Выберите действие:</strong><br>
    <br>
    <input onclick="caesar_code(0,7)" type="button" value="Шифровать">
    <input onclick="caesar_code(1,7)" type="button" value="Дешифровать">
    <br>
    <br>
    <br>
    <strong>Результат:</strong><br>
    <br>
    <input id="b_text2" type="text" size="80">
  </div>
</body>
</html>
Ответить с цитированием
  #7 (permalink)  
Старый 19.03.2012, 18:23
Интересующийся
Отправить личное сообщение для andrewvas Посмотреть профиль Найти все сообщения от andrewvas
 
Регистрация: 15.03.2012
Сообщений: 16

Спасибо) А можно небольшие пояснения(в 12, 14 и последующих строках)? в том как скрипт работает) а то я не очень понял(
Ответить с цитированием
  #8 (permalink)  
Старый 14.03.2013, 19:45
Аватар для Tmin10
Кандидат Javascript-наук
Отправить личное сообщение для Tmin10 Посмотреть профиль Найти все сообщения от Tmin10
 
Регистрация: 13.05.2011
Сообщений: 104

В 12 строке мы вычисляем сдвиг, тут если сдвиг больше 33, то по кругу будет.
В 14 сроке получаем набор символов со сдвигом.
Ответить с цитированием
  #9 (permalink)  
Старый 14.03.2013, 20:51
Аватар для Tmin10
Кандидат Javascript-наук
Отправить личное сообщение для Tmin10 Посмотреть профиль Найти все сообщения от Tmin10
 
Регистрация: 13.05.2011
Сообщений: 104

Так, а вот что делает код
a = f.charAt(a) || c.charAt(i);
я так и не понял, почему к символам применяется ИЛИ, что оно даёт?
Ответить с цитированием
  #10 (permalink)  
Старый 14.03.2013, 21:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Сообщение от Tmin10
a = f.charAt(a) || c.charAt(i);
а первоначально это индекс буквызамены -- если индекса нет -нет такой буквы оставляем символ как он есть без замены
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AJAX для ЧАЙНИКОВ (вопросы) sc2r2bey AJAX и COMET 16 10.07.2009 21:23