Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2010, 13:42   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Непонятное условие задания

У Дейтлов есть задачка:
Цитата:
Компания хочет передавать данные по телефону, но она обеспокоена возможностью телефонного перехвата. Все передаваемые данные являются четырехзначными целыми числами. Компания попросила вас написать программу, которая должна шифровать эти данные так, чтобы они могли передаваться с большей безопасностью. Ваша программа должна читать целые четырехзначные числа и шифровать их следующим образом: заменять каждую цифру значением остатка от деления: (сумма это цифры плюс 7) / 10. Затем менять местами первую цифру с третьей и вторую с четвертой. Затем печатать полученное зашифрованное целое. Напишите отдельную программу, которая вводила бы зашифрованные четырехзначные целые и дешифровала их, получая исходные числа.
Программу шифрования я написал. А вот с чем работать программе дешифрования? Например, вводим 1234. С первым числом произойдут следующие действия:

(1+7) % 10 = 0.8

В итоге получаем дробную часть 8. А чтобы вернуть цифру 1, надо 0.8 * 10 - 7. Но программа-дешифратор получит не 0.8, а только 8. Откуда ей знать, что раньше там было 0.8 ? Ведь могло быть и 1.8, и 2.8 и что угодно вообще.

У кого какие мысли?
fs444 вне форума Ответить с цитированием
Старый 26.01.2010, 14:32   #2
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Никаких особых мыслей. Первое - остаток от деления 8. Не 0.8, не 18, а именно 8, так как речь идет остатке, а не о дробной части.
Второе - остаток от деления 8 (это я еще раз повторил, для запоминания). Не 18 (тоже для запоминания), а именно 8. И он не может быть 18, так как 18 больше 10. Но, если сделать именно остаток, то "программа будет знать", так как получит все число, даже не надо придумывать объяснения "как" и "почему".
LeBron вне форума Ответить с цитированием
Старый 26.01.2010, 16:10   #3
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
Но, если сделать именно остаток, то "программа будет знать", так как получит все число, даже не надо придумывать объяснения "как" и "почему".
Не совсем понял смысл этих слов

Пойдем сначала:

Есть число 1234. Программа-шифратор начинает кодировать первую цифру "1".

(1 + 7) \ 10 = 8 \ 10 = 0.8; остаток от деления здесь, насколько я понимаю, 8

Цифру "1 ", только что закодированную в "8", принимает программа-дешифратор. Ей необходимо "8" превратить обратно в "1". Как это сделать?

Есть идея использовать таблицу соответствий. Ведь здесь есть закономерность:
1 - 8
2 - 9
3 - 0
4 - 1
5 - 2
6 - 3
7 - 4
8 - 5
9 - 6
0 - 7
fs444 вне форума Ответить с цитированием
Старый 26.01.2010, 16:38   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Y = (X + 7) % 10
=>
X = (Y + 3) % 10
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 27.01.2010, 08:47   #5
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Y = (X + 7) % 10
=>
X = (Y + 3) % 10
Ух ты, работает, спасибо
fs444 вне форума Ответить с цитированием
Старый 16.03.2017, 16:18   #6
yti
Новичок
Джуниор
 
Регистрация: 16.03.2017
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Y = (X + 7) % 10
=>
X = (Y + 3) % 10
Добрый день. Понимаю, что тема уже старая. Я начал изучать с++ и решаю данную задачу. Никак не могу понять, каким образом тут получается такая формула дешифрирования? Можете расписать подробнее? как я понял тройка получается из 10-7=3, но почему вычитание из 10, а не просто Y-7, происходит никак не могу понять. Спасибо.
yti вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятное зависание. DIMANJ Операционные системы общие вопросы 20 18.11.2009 17:08
Непонятное OgE®_M@G Microsoft Office Access 6 13.11.2009 06:30
Непонятное задание. Dmitry81 Помощь студентам 11 11.01.2009 16:27
Непонятное задание. Dmitry81 Microsoft Office Excel 2 10.01.2009 12:38
Непонятное условие SunKnight Паскаль, Turbo Pascal, PascalABC.NET 3 29.11.2008 23:01