Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
fs444
7 / 11 / 0
Регистрация: 18.08.2009
Сообщений: 484
#1

Странное условие задания - C++

26.01.2010, 13:41. Просмотров 949. Ответов 10
Метки нет (Все метки)

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

(1+7) % 10 = 0.8

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

У кого какие мысли?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2010, 13:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Странное условие задания (C++):

Условие задания - C++
Доброго времени суток. Дали задание по программированию, я конечно все понимаю, но такого не понимаю. Я сколько ни читал условие, так и...

Не понятное условие задания (Создать класс матрица) - C++
Добрый день! Помогите, пожалуйста, разобраться с условием задания. Вот само задание: Создать класс матрица, который содержит указатель...

Составить программу, которая выводит на экран слово «ИСТИНА», если условие выполнено или слово «ЛОЖЬ», если условие не выполнено. - C++
Цифры данного трехзначного числа V являются членами арифметической прогрессии

Странное решение - C++
Тут встретился в книжонке с таким выводом 2-мерного массива, вроде простой, но вывод странный. Не дадите комент по странной строке: ...

Странное поведение - C++
Здравствуйте еще раз :) Теперь возникла другая непонятка. Есть класс StringParser, объекты которого умеют разбивать строку на подстроки,...

Странное поведение new - C++
Объясните почему оператор new выделяет неверное количество памяти? # include <iostream> using namespace std; char* interpitator( int...

10
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
26.01.2010, 15:32 #2
(1+7) % 10 = 8
Операция % - Это ОСТАТОК от деления
Фактически при шифровании происходит циклический сдвиг цифр 1 - 8, 2 - 9, 3- 0, 4 - 1... 9 - 6
Так что преобразование вполне однозначно и обратимо

Дешифрация : (цифра +3) % 10
Без учета перестановок
0
fs444
7 / 11 / 0
Регистрация: 18.08.2009
Сообщений: 484
26.01.2010, 15:54  [ТС] #3
Так, в условии задачи написано:
заменять каждую цифру значением остатка от деления: (сумма это цифры плюс 7) / 10
т.е. у числа 1234 цифра "1" будет шифроваться так:

(1 + 7 )/10 = 8 / 10 = 0.8

Какой здесь будет остаток? Как я понимаю, им является "8".
0
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
26.01.2010, 21:22 #4
fs444, что-то в школе ты пропустил.
Поищи в гугле "остаток от деления"
0
fs444
7 / 11 / 0
Регистрация: 18.08.2009
Сообщений: 484
27.01.2010, 09:34  [ТС] #5
Эх, да, остаток - это ж совсем другое
14 поделить на 3, частное будет 4, а остаток 2. А если делимое меньше делителя, то остатка, получается, нет.

По ходу, Дейтлы имели в виду не тот остаток. Я так понял речь шла про операцию "%", которая из 0.8 оставит только 8.

Проблему дешифровки решил так: X = (Y + 3) % 10
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.01.2010, 09:38 #6
Цитата Сообщение от fs444 Посмотреть сообщение
(1+7) % 10 = 0.8
Фиг. (1+7) % 10 = 8, а не 0.8.

Добавлено через 1 минуту
Цитата Сообщение от fs444 Посмотреть сообщение
А если делимое меньше делителя, то остатка, получается, нет.
Бред. Частное в этом случае равно нолю, а остаток делимому.
0
fs444
7 / 11 / 0
Регистрация: 18.08.2009
Сообщений: 484
27.01.2010, 09:41  [ТС] #7
(1+7) % 10 = 0.8
Фиг. (1+7) % 10 = 8, а не 0.8.
Ну так мне и нужен 8

Берем 1. Шифруем ее:

(1 + 7) % 10 = 8 % 10 = 8

В итоге получаем 8.

Дешифруем 8:

(8 + 3) % 10 = 11 % 10 = 1

В итоге получаем исходную 1. И так со всеми остальными числами.

А если делимое меньше делителя, то остатка, получается, нет.
Бред. Частное в этом случае равно нолю, а остаток делимому.
Это как? Поясни в цифрах .
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.01.2010, 11:15 #8
прямое
5 -> (5+7) % 10 == 2
7 -> (7+7) % 10 == 4

обратное
2 -> 2 + 10 - 7 == 5
4 -> 4 + 10 - 7 == 7
0
fs444
7 / 11 / 0
Регистрация: 18.08.2009
Сообщений: 484
27.01.2010, 11:40  [ТС] #9
Цитата Сообщение от accept Посмотреть сообщение
прямое
5 -> (5+7) % 10 == 2
7 -> (7+7) % 10 == 4

обратное
2 -> 2 + 10 - 7 == 5
4 -> 4 + 10 - 7 == 7
Ну и так, видимо,тоже можно сделать. Спасибо
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.01.2010, 01:33 #10
не, это я ошибся (не проверил для восьмёрки)
Day всё правильно вывел
0
fs444
7 / 11 / 0
Регистрация: 18.08.2009
Сообщений: 484
28.01.2010, 08:37  [ТС] #11
не, это я ошибся (не проверил для восьмёрки)
Да, я тоже почувствовал
0
28.01.2010, 08:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2010, 08:37
Привет! Вот еще темы с ответами:

Странное распараллеливание - C++
Добрый вечер, коллеги. У меня следующая проблема. Преподаватель сказал распараллелить программу, обрабатывающую изображения в папке....

странное определение функций - C++
Читал заголовочный файл, так наткнулся на следующее выражение: #define MPI_MAX (MPI_Op)(0x58000001) Что означает такое...

Странное поведение программы - C++
Перечитываю Герберт Шилдт: С++ базовый курс. Простая программа: #include <iostream> using namespace std; int main() { ...

Странное предупреждение GCC - C++
В функции есть строчки и компилятор ругается на последнуюю: char *p = NULL; ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru