С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 19.05.2016
Сообщений: 8

Реализация шифра "Атбаш"

20.05.2016, 21:34. Показов 3778. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пытаюсь написать программу для реализации Атбаша
по логике и по самой формуле Атбаша, получается такой код
C++
1
2
3
4
5
6
7
8
9
int T;
        AnsiString buff = Edit1->Text;
        for (int i = 1;i<=buff.Length();i++)
                {
                        T = ((unsigned char)"Z"-(unsigned char)buff[i]+(unsigned char)"A");
                        buff[ i ] = (char)T;
 
                }
        Edit2->Text = buff;
Но сама программа правильно не работает
в чем ошибка?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.05.2016, 21:34
Ответы с готовыми решениями:

Реализация шифра Бэкона
Помогите, пожалуйста реализовать шифр Бэкона. С шифром я разобрался, но запрограммировать пока не получается. Примерно, это должно...

Реализация шифра Цезаря
#include &lt;vcl.h&gt; #pragma hdrstop #include &lt;math.h&gt; #include &quot;Unit1.h&quot; ...

Реализация шифра Виженера
Написать программу для шифра Виженера на С++

7
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
20.05.2016, 21:37
Как вы поняли что правильно, а что не правильно ? Вы же код написали, значит знаете что он делает. Или тупо списали ? Тогда зачем говорить что вы пытаетесь ?
0
0 / 0 / 0
Регистрация: 19.05.2016
Сообщений: 8
20.05.2016, 21:40  [ТС]
эм
как я поняла что неправильно работает программа?
ввела букву "а", а он вместо "я" выдал непонятный символ
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
20.05.2016, 22:07
Могу ошибаться, но вроде (unsigned char)"Z" приводит к коду символа. Вы где этот код взяли ?
0
0 / 0 / 0
Регистрация: 19.05.2016
Сообщений: 8
20.05.2016, 22:19  [ТС]
ну
все правильно
к коду символа
мне он и нужен
формула шифра атбаш выглядит как "«n» − «i» + 1, где «n» — число букв в алфавите"
так как получить i как номер буквы в русском алфавите я не могу, я использую (unsigned char), чтобы получить ее код
для получения n тот же самый (unsigned char) для последней буквы алфавита, и для получения номера первой буквы алфавита (unsigned char) собственно первой буквы алфавита.
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,012
21.05.2016, 00:39
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Замена происходит для букв русского, английского алфавита и цифр:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  int T;
  AnsiString buff = Edit1->Text;
  for (int i = 1; i <= buff.Length(); i++)
  {
    T = (int)buff[i];
 
    if (buff[i] >= 'A' && buff[i] <= 'Z')
      T = (int)'A' - (int)buff[i] + (int)'Z';
    else if (buff[i] >= 'a' && buff[i] <= 'z')
      T = (int)'a' - (int)buff[i] + (int)'z';
    else if (buff[i] >= 'А' && buff[i] <= 'Я')
      T = (int)'А' - (int)buff[i] + (int)'Я';
    else if (buff[i] >= 'а' && buff[i] <= 'я')
      T = (int)'а' - (int)buff[i] + (int)'я';
    else if (buff[i] >= '0' && buff[i] <= '9')
      T = (int)'0' - (int)buff[i] + (int)'9';
 
    buff[i] = (char)T;
  }
  Edit2->Text = buff;
Либо используй функцию
C++
1
2
3
4
int atbash(char ch, char first_char, char last_char)
{
  return (int)last_char - (int)ch + (int)first_char;
}
и код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  int T;
  AnsiString buff = Edit1->Text;
  for (int i = 1; i <= buff.Length(); i++)
  {
    T = (int)buff[i];
 
    if (buff[i] >= 'A' && buff[i] <= 'Z')
      T = atbash(buff[i], 'A', 'Z');
    else if (buff[i] >= 'a' && buff[i] <= 'z')
      T = atbash(buff[i], 'a', 'z');
    else if (buff[i] >= 'А' && buff[i] <= 'Я')
      T = atbash(buff[i], 'А', 'Я');
    else if (buff[i] >= 'а' && buff[i] <= 'я')
      T = atbash(buff[i], 'а', 'я');
    else if (buff[i] >= '0' && buff[i] <= '9')
      T = atbash(buff[i], '0', '9');
 
    buff[i] = (char)T;
  }
  Edit2->Text = buff;
Изображения
 
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,012
21.05.2016, 05:12
Код можно сократить (в случае использования функции - аналогично):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  AnsiString buff = Edit1->Text;
  for (int i = 1; i <= buff.Length(); i++)
  {
    if (buff[i] >= 'A' && buff[i] <= 'Z')
      buff[i] = 'Z' - buff[i] + 'A';
    else if (buff[i] >= 'a' && buff[i] <= 'z')
      buff[i] = 'z' - buff[i] + 'a';
    else if (buff[i] >= 'А' && buff[i] <= 'Я')
      buff[i] = 'Я' - buff[i] + 'А';
    else if (buff[i] >= 'а' && buff[i] <= 'я')
      buff[i] = 'я' - buff[i] + 'а';
    else if (buff[i] >= '0' && buff[i] <= '9')
      buff[i] = '9' - buff[i] + '0';
  }
  Edit2->Text = buff;
Добавлено через 3 часа 47 минут
И еще короче:
C++
1
2
3
4
5
6
7
8
9
  String buff = Edit1->Text, alph = "AZazАЯая09";
  for (int i = 1; i <= buff.Length(); i++)
    for (int j = 1; j <= alph.Length(); j += 2)
      if (buff[i] >= alph[j] && buff[i] <= alph[j+1])
      {
        buff[i] = alph[j+1] - buff[i] + alph[j];
        // buff[i] = atbash(buff[i], alph[j], alph[j+1]);
      }
  Edit2->Text = buff;
Добавлено через 16 минут
Только для правильной работы функции
C++
1
2
3
4
int atbash(char ch, char first_char, char last_char)  // или char вместо int
{
  return last_char - ch + first_char;
}
нужно String выше изменить на AnsiString (как было раньше).
То есть
C++
1
  AnsiString buff = Edit1->Text, alph = "AZazАЯая09";
Добавлено через 20 минут
Хотя я извращаюсь, функция здесь даром не нужна.
Окончательный рабочий код (расшифровывание, если что, делается с помощью того же самого кода):
C++
1
2
3
4
5
6
  String buff = Edit1->Text, alph = "AZazАЯая09";
  for (int i = 1; i <= buff.Length(); i++)
    for (int j = 1; j <= alph.Length(); j += 2)
      if (buff[i] >= alph[j] && buff[i] <= alph[j+1])
        buff[i] = alph[j+1] - buff[i] + alph[j];
  Edit2->Text = buff;
1
0 / 0 / 0
Регистрация: 19.05.2016
Сообщений: 8
22.05.2016, 17:39  [ТС]
всем большое спасибо за ответы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2016, 17:39
Помогаю со студенческими работами здесь

Реализация задачи шифра замены
Ребята, всем доброго времени суток. Помогите пожалуйста с реализацией данной задачи. Вообще что то все колом в башке встало. С файлами...

Реализация блочного шифра MADRYGA
Доброго времени суток! :senor: Нуждаюсь в помощи людей, которые в этом разбираются.. :read: На лабораторной нам задали написать...

Програмная реализация шифра Khufu Khafre
Нужно 4.06 сдать курсач по теме :&quot;Програмная реализация шифра Khufu Khafre&quot; на языке с++ Нужно объяснение или код Помогите...

Реализация шифра перестановки для заданного ключа
Напишите пожалуйста код на С++ реализации шифра перестановки для заданного ключа.

Как сделать дешифровку шифра Атбаш? Что нужно изменить в коде программы?
alf2=&quot;&quot; key=input() for i in range(len(key)): if (alf2.find(key)) == -1: alf2+=key print(alf2) for i in...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru