![]() |
|
Модераторы: bsa |
![]()
|
|
| Mastodont |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
У Дейтлов есть задачка:
Программу шифрования я написал. А вот с чем работать программе дешифрования? Например, вводим 1234. С первым числом произойдут следующие действия: (1+7) % 10 = 0.8 В итоге получаем дробную часть 8. А чтобы вернуть цифру 1, надо 0.8 * 10 - 7. Но программа-дешифратор получит не 0.8, а только 8. Откуда ей знать, что раньше там было 0.8 ? Ведь могло быть и 1.8, и 2.8 и что угодно вообще. У кого какие мысли? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
речь о целочисленном делении и нужно использовать значение
так что никаких дробей. Это сообщение отредактировал(а) mes - 26.1.2010, 13:47 |
|||
|
||||
| Mastodont |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
||||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
Mastodont, это проблемы программы дешифратора, а не твои
Добавлено через 1 минуту и 18 секунд а mes, я полагаю, имел ввиду, что не имеет значения, что там было в целой части |
|||
|
||||
| world |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 2.10.2009 Где: Харьков Репутация: нет Всего: 12 |
n = (n + 7) % 10 уникально для n = 10(количество цифр в 10-ричной СС), поэтому целая часть не несёт никакого значения. Предлагаю следующий алгоритм:
Это сообщение отредактировал(а) world - 26.1.2010, 14:39 --------------------
Say what you mean, and mean what you say. Robert Wilson Cody |
|||
|
||||
| Mastodont |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
Так, рассуждаем:
Вводим n = 1 Оно шифруется: (1 + 7) / 10 = 0,8 Целочисленный остаток от деления: 0
|
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
почитайте для начала что есть остаток.. в школе изучали то ли во 2м, максимум в 3м классе. вначале хоть с цифрой и не ошиблись, но откуда могло ?
тогда я тоже предложу : encode_digit = (n+3) % 10; Добавлено через 2 минуты и 35 секунд нет code_digit = (1+7) % 10; // == 8 Это сообщение отредактировал(а) mes - 26.1.2010, 15:04 |
||||||
|
|||||||
| Mastodont |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
делимое / делитель = частное Остаток, по идее, дробная часть частного. Разве нет? Это сообщение отредактировал(а) Mastodont - 26.1.2010, 15:39 |
|||
|
||||
| CPUSoul |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 24.1.2010 Где: Матушка Германия Репутация: нет Всего: нет |
5 % 3 = 2 2 это остаток, потому что в 5 вмещается только 1 раз тройка, а то что остается, так как вместить вторую тройку нельзя, мы называем "остатком". 10%3 = 1 Три раза вместили тройку, осталась еще 1. То что ты говоришь, это всего лишь "дробная часть" числа. Не путай два понятия. http://ru.wikipedia.org/wiki/%D0%94%D0%B5%...%BA%D0%BE%D0%BC Операцию получения "остатка" от деления одного числа на другое обычно записывают через "%", операцию деления одного числа на другое как "/". Это сообщение отредактировал(а) CPUSoul - 26.1.2010, 15:50 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
нет.. для примера попробуйте разделить на несколько человек купюры или билеты.. дроби не помогут, так как рвать купюры/билеты нельзя..Вот что останется от равномерного деления и есть остаток |
|||
|
||||
| Mastodont |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
Так дешифратор-то я делаю. Значит мои Так, в условии задачи написано:
т.е. у числа 1234 цифра "1" будет шифроваться так: (1 + 7 )/10 = 8 / 10 = 0.8 Какой здесь будет остаток? Как я понимаю, им является "8".
Это получается, что кому-то билетов вообще не хватило? Это сообщение отредактировал(а) Mastodont - 26.1.2010, 15:53 |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Не понимаете, а случайно совпадает.. Если бы делитель не был бы 10, то не угадали бы. В выражении нет остатка.. все поделено.. (хотя поделено не правильно.. попробуйте спросить у компилятора.. однозначно он покажет не 0.8 а вот (1+7) % 10 = 8 Прально не хватило.. но нас не интересует кому и сколько досталось. Нас интересует остаток, то что осталось лежать на столе. |
|||
|
||||
| CPUSoul |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 24.1.2010 Где: Матушка Германия Репутация: нет Всего: нет |
Нет, значением будет 0. Потому что при делении "/", а не "%" тип int отбросит "дробную часть" и оставит целую. Которая равна 0. А остаток действительно 8, просто оператор нужно использовать другой. Именно "%", а не "/". Сделай так:
Посмотри результаты и ты поймешь разницу. Это сообщение отредактировал(а) CPUSoul - 26.1.2010, 16:25 |
|||
|
||||
| Mastodont |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 18.3.2007 Репутация: нет Всего: 1 |
Эх, да, остаток - это ж совсем другое 14 поделить на 3, частное будет 4, а остаток 2. А если делимое меньше делителя, то остатка, получается, нет. И какже мне тогда зашифровать число 1? Мне ж надо вместо числа использовать остаток от деления (1-7)/10, то есть нуль. Или Дейтлы имели в виду именно операцию "%" ?
А кто сказал, что обязательно будет тип int? Это числа, которые уходят из шифратора и приходят дешифратору, должны быть целыми. А для операций шифрования-дешифрования могут использоваться переменные любых типов. |
||||||
|
|||||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
нет частного, остаток есть. его нет (равен нулю) если делится нацело, но в Вашем случае только один раз такое будет, так что ни с чем не спутаете.
где здесь остаток нашли ?! но в любом случае лучше поздно понять, чем никогда -
не важно инт или не инт - это Вам для облегчения представления говорилось. и сказанное для инт действительно и для других целых чисел.
Это сообщение отредактировал(а) mes - 27.1.2010, 09:56 |
||||||
|
|||||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |