Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
1 / 1 / 0
Регистрация: 05.12.2024
Сообщений: 60

Решение задач из книги Страуструпа (шифрование/дешифрование)

04.05.2025, 10:50. Показов 9707. Ответов 40

Студворк — интернет-сервис помощи студентам
Доброго времени суток,

Решаю задачки из книги Б.Страуструпа "Язык программирования С++. Специальное издание.", Бином, 2019.
Заинтересовали две: упр.9 и 10 из Пар.7.10. В упр. 9 предлагается написать программу шифрования по алгоритму c^key[i]. А в упр. 10 - написать программу, помогающую без знания ключа дешифровать текст, закодированный программой из упр. 9.
Весь смак в том, что предлагается воспользоваться алгоритмом из другой удивительной книги: "David Kahn: The Codebreakers". Т.е. это не переборы ключей, а другой алгоритм, определяющий длину ключа по повторам в тексте и далее угадывающий отдельные символы исходя из частоты их употребления в английском языке.

Я написал обе программы: и шифрующую, и дешифрующую. НО: алгоритм из книги рассчитан на работу с английским алфавитом - из шифрованного английского текста получаем открытый английский же текст. А при шифрования по алгоритму c^key[i] из латиницы всегда получается большой процент непечатаемых символов. Соответственно, при расшифровке строго по алгоритму на экран "выводятся" эти непечатаемые символы. (если расшифровывать примеры из книги "David Kahn: The Codebreakers" то программа работает, но там шифровалось подменой одних латинских букв другими, а не через c^key[i])

Вопрос: кто-нибудь вообще решал эту задачу 10 именно с этим алгоритмом из книги? решение есть или сама постановка задачи некорректна???
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.05.2025, 10:50
Ответы с готовыми решениями:

Решение задачи из книги Страуструпа
Пожалуйста помогите с задачей. "Напишите функцию char* strdup ( cons t char* ) , копирующую...

Каковы ваши впечатления от книги Страуструпа Программирование на языке С++(третье издание)?
Начал читать книгу Страуструпа Программирование на языке С++(третье издание), после прочтенных 100...

пример из книги страуструпа
struct pair { char* name; // ñòðîêà int val; // öåëîå }; ...

40
Заблокирован
06.05.2025, 02:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Royal_X Посмотреть сообщение
Но я сейчас сравниваю не его код, а твой и мой.
Цитата Сообщение от Royal_X Посмотреть сообщение
а чем деление по модулю на каждой итерации лучше условия на каждой итерации?
Хз.
Просто надежнее. Просто короче.

Добавлено через 9 минут

Не по теме:

Royal_X, да и я не сильно на нем настаиваю, просто хотел показать этот метод. Тот кусок сильно бросился в глаза и в ребро.



Добавлено через 10 минут
Цитата Сообщение от Royal_X Посмотреть сообщение
а чем деление по модулю на каждой итерации лучше условия на каждой итерации?
Ну хз, вот реальный пример где я использовал этот метод Очередь целых чисел
Вот, и я даже не знаю как применить твой вопрос к нему.
То есть, он же не только для циклического прохода. Это общий метод.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,263
06.05.2025, 07:36
SmallEvil, мы вообще зря стараемся. ТС выделил "терморектальный криптоанализ" как лучший ответ...
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
06.05.2025, 08:15
да у нее проблемы только с русскими буквами, английские работают нормально. Кодировка КОИ-8 для русских буков 2-х байтовая, вот и вылазят кракозябры. А назад в КОИ-8 из байтов нужно преобразовывать другой функцией, не помню уже какой. Просто так не заработает.
0
Злостный нарушитель
 Аватар для Verevkin
10233 / 5662 / 1260
Регистрация: 12.03.2015
Сообщений: 26,245
06.05.2025, 08:21
Цитата Сообщение от alexu_007 Посмотреть сообщение
Кодировка КОИ-8 для русских буков 2-х байтовая
Я что-то пропустил? Когда КОИ-8 2-байтовой стала?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
06.05.2025, 09:11
Цитата Сообщение от SmallEvil Посмотреть сообщение
Это вместо сбрасывания счетчика на ноль, как в вашем коде.
Простой операцией.
Вот в этом куске кода:

C++
1
2
3
4
   std::size_t key_size = key.size();
   std::size_t k = 0;
   for(const auto& c : in)
      res += c ^ key[k++%key_size];
что значение переменной k пробежит последовательно по диапазону [0..key_size-1], что значение (k % key_size) пробежит по тому же диапазону.
0
1 / 1 / 0
Регистрация: 05.12.2024
Сообщений: 60
06.05.2025, 18:13  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
SmallEvil, мы вообще зря стараемся. ТС выделил "терморектальный криптоанализ" как лучший ответ...
Не огорчайтесь вы все лучшие))) Но юмор никогда лишним не бывает

Мне до вашего понимания языка еще копать и копать!
0
Злостный нарушитель
 Аватар для Verevkin
10233 / 5662 / 1260
Регистрация: 12.03.2015
Сообщений: 26,245
06.05.2025, 18:15
Цитата Сообщение от ADnD Посмотреть сообщение
Но юмор никогда лишним не бывает
А я и не шутил...
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
08.05.2025, 22:27
Цитата Сообщение от Royal_X Посмотреть сообщение
...ТС выделил "терморектальный криптоанализ" как лучший ответ...
Чушь. На неск. секунд опоздаешь - источник информации сдохнет от болевого шока. И ты уже никогда ничего не расшифруешь.

Добавлено через 2 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
Я что-то пропустил? Когда КОИ-8 2-байтовой стала?
Sorri. Перепутал с UTF-8.
0
Злостный нарушитель
 Аватар для Verevkin
10233 / 5662 / 1260
Регистрация: 12.03.2015
Сообщений: 26,245
08.05.2025, 22:34
Цитата Сообщение от alexu_007 Посмотреть сообщение
Чушь. На неск. секунд опоздаешь - источник информации сдохнет от болевого шока. И ты уже никогда ничего не расшифруешь.
Ты просто не умеешь пользоваться терморектальным криптоанализатором. Тут надо умеючи.
Цитата Сообщение от alexu_007 Посмотреть сообщение
Sorri.
Пишется "Sorry".
Цитата Сообщение от alexu_007 Посмотреть сообщение
Перепутал с UTF-8.
UTF-8 тоже не является двухбайтной кодировкой. Матчасть учи.
0
08.05.2025, 22:55

Не по теме:

Цитата Сообщение от Verevkin Посмотреть сообщение
Ты просто не умеешь пользоваться
твой рязанский куратор хорош, видно, что неплохо тебя подготовил)

0
09.05.2025, 07:34

Не по теме:

Цитата Сообщение от Royal_X Посмотреть сообщение
твой рязанский куратор хорош, видно, что неплохо тебя подготовил)
Рязанский куратор - это я. :D У меня не было куратора, я самоучка.

0
09.05.2025, 18:43  [ТС]

Не по теме:

Какой интересный диалог развивается... И оказалось что достаточно было нужный пост лайкнуть... ;)

0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
10.05.2025, 14:26
Цитата Сообщение от Verevkin Посмотреть сообщение
UTF-8 тоже не является двухбайтной кодировкой. Матчасть учи.
В винде 10 кодировка UTF-8? Размер файла с латинскими буквами - 6 байт. С кириллицей - 12. d0 и d1 в файле с кириллицей откуда взялись?
Миниатюры
Решение задач из книги Страуструпа (шифрование/дешифрование)   Решение задач из книги Страуструпа (шифрование/дешифрование)  
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
10.05.2025, 14:33
Цитата Сообщение от Verevkin Посмотреть сообщение
Пишется "Sorry".
У мня английский с акцентом...
0
Злостный нарушитель
 Аватар для Verevkin
10233 / 5662 / 1260
Регистрация: 12.03.2015
Сообщений: 26,245
10.05.2025, 14:40
Цитата Сообщение от alexu_007 Посмотреть сообщение
В винде 10 кодировка UTF-8?
Какую выберешь, такая и будет. А шо не так?
Цитата Сообщение от alexu_007 Посмотреть сообщение
Размер файла с латинскими буквами - 6 байт. С кириллицей - 12. d0 и d1 в файле с кириллицей откуда взялись?
От верблюда. Я ж сказал - учи МАТЧАСТЬ.
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,266
11.05.2025, 06:09
...позволяющий более компактно хранить и передавать символы Юникода, используя переменное количество байт (от 1 до 4)...
Это не то же, что я написал - применимо к данной задаче? Русские буквы как раз занимают по 2 байта.
0
Злостный нарушитель
 Аватар для Verevkin
10233 / 5662 / 1260
Регистрация: 12.03.2015
Сообщений: 26,245
11.05.2025, 08:28
Цитата Сообщение от alexu_007 Посмотреть сообщение
Это не то же, что я написал - применимо к данной задаче? Русские буквы как раз занимают по 2 байта.
Ну наконец-то ты прочитал матчасть. Молодец.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,263
11.05.2025, 13:19
Цитата Сообщение от alexu_007 Посмотреть сообщение
Русские буквы
да блет когда наконец поймете, что нет "русских" букв, а есть кириллические.
Цитата Сообщение от alexu_007 Посмотреть сообщение
занимают по 2 байта
да, потому что кириллические буквы находятся в диапазоне U+0080 ... U+07FF



В общем, один байт занимают ASCII символы. Причем, даже коды совпадают. Сделано это для совместимости.
Два байта занимают расширенная латиница и многие популярные алфавиты (кириллический, греческий, армянский, грузинский, еврейский, арабский, сирийский)
Дальше уже экзотика. Три байта это расширенный арабский, бенгальский, тамильский, тайский и пр. Четыре байта это иероглифы и исторические алфавиты.
0
Заблокирован
11.05.2025, 14:52
Добавлено через 6 минут
f0 9f 91 bd 20 55 54 46 2d 39 20 2d 20 63 6f 6d 69 6e 67 20 f0 9f 91 bd
Такой юникод(в utf8) форум отказывается принимать
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,263
11.05.2025, 15:09
SmallEvil,
первые и последние четыре байта - f0 9f 91 bd - это символ инопланетянина U+1F47D, т.е. это 4-байтный utf-8 символ.
но дальше у тебя UTF-9 - coming тут однобайтные utf-8 символы.

Форум, не принимает именно символ инопланетянина. Он не принимает и всякие другие эмодзи, смайлики и многие остальные юникод символы. Видимо, это сделано так, чтобы люди использовали встроенные в редактор форума собственные смайлы, которые на форуме представлены как gif-картинки, а не как символы. Это сделано для того, чтобы данные символы отображались на всех устройствах, независимо от поддержки символов юникода тем или иным шрифтом и чтобы не было так, что у некоторых вместо смайлов квадратики. С другой стороны, это явно ограничивает возможности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2025, 15:09
Помогаю со студенческими работами здесь

Чем отличаються между собой книги Страуструпа
Чем отличаються между собой книги Страуструпа и какую имеет смысл почитать после Лафоре и Прата или...

Задачка из книги Страуструпа...
Доброго времени суток всем! Заранее благодарен за ответы и, возможные, пути исправления... Итак:...

Задача из книги Страуструпа
Меня настораживает несколько странная формулировка, я не понимаю зачем так предлагают решать...

Задачка из книги Страуструпа на поиск минимального и максимального введенного числа
Здравствуйте могли бы вы мне помочь в решении задачи. Вот собственно само условие. Условие:...

Задание из книги Страуструпа
Здравствуйте! Я решил начать изучать программирование, конкретнее - язык C++. Самым логичным...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru