Алгоритм Цезаря

Тема в разделе "WASM.BEGINNERS", создана пользователем deniszp, 12 сен 2008.

  1. deniszp

    deniszp New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2008
    Сообщения:
    6
    Здраствуйте, нужна ваша помошь. В написании программы я столкнулся с такой проблемой:нужно написать проверку в кодировании и декодировании, что бы наши закодированые и декодированые буквы не вылазили за русский или английский алфавит в ASCII. Создавать отдельно массив букв не хочется,проверку для закодирования мне помогли написать...теперь хотелось бы узнать, как можно изменть ее для декодирования.

    Код:
    //шифрование
    void encode(char *buf, int m, int shift) {
    for (int i=0; i<m; i++){
    if ((buf>122)||(buf<97)) {buf=' ';continue;}
    if (shift>122-buf) buf=96+(shift-122+buf);
    buf += shift;

    }
    }

    //дешифрование
    void decode(char *buf, int m, int shift) {
    for (int i=0; i<m; i++){
    buf= buf-shift;
    }
    }
     
  2. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    эээээм. Думаю задача решается путем включения АЛУ мозга;)

    А вобще, буковки, которые после добавления shift вылазят за диапазон 97-122, просто переносятся на другую часть диапазона, которая после сдвига, как бы, будет типа пустой. В данном случае "вылезающие" буковки имеют коды от 123-shift до 122 (поскольку buf += shift) и заменяются на соотетствующие коды в пределах от 97 до 96+shift.
    Будут обрабатываться русские или английские буковки - зависит от выбранного диапазона, который зависит от кодировки. На этот счет смотри справочную литературу.
    Как сделать декодирование. Просто надо делать сдвиг в другую сторону, учитывая вылазовывание из диапазона, т.е. часть кодов от 97 до 96+shift будут заменяться соответствующими из интервала от 123-shift до 122.

    ЗЫ: если я все правильно понял.
     
  3. deniszp

    deniszp New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2008
    Сообщения:
    6
    Хм..а я не понял...если тебе не трудно, можеш написать как будет выглядить декодировка? Очень прошу..
     
  4. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Замкни мысленно диапазон в кольцо, и ты увидишь работу алгоса. Ничето там никуда не вылезет.
     
  5. deniszp

    deniszp New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2008
    Сообщения:
    6
    Не смешно.
     
  6. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Да, это уже не смешно... :-(
     
  7. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    deniszp Просто так это ты не сделаешь, там намного сложнее того что ты привёл. Юзай Base64
     
  8. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    shift %= n; // n - количество букв в алфавите
     
  9. ieroglif

    ieroglif New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2008
    Сообщения:
    29
    2FED, согласен, Base64 тут поможет. Это правильный вариант.