Форум » Выполнение и анализ алгоритмов для исполнителей » Задание 6-1 номера 157-160 » Ответить

Задание 6-1 номера 157-160

Ольга: Здравствуйте, намекните, пожалуйста, с какого конца к этому заданию подступиться. Пробую через разность в 2-ой с.с., что то никак не получается. 157) Автомат обрабатывает натуральное число N (0 ≤ N ≤ 255) по следующему алгоритму: 1) Строится восьмибитная двоичная запись числа N. 2) Все цифры двоичной записи заменяются на противоположные (0 на 1, 1 на 0). 3) Полученное число переводится в десятичную запись. 4) Из нового числа вычитается исходное, полученная разность выводится на экран. Пример. Дано число N = 13. Алгоритм работает следующим образом: 1) Восьмибитная двоичная запись числа N: 00001101. 2) Все цифры заменяются на противоположные, новая запись 11110010. 3) Десятичное значение полученного числа 242. 4) На экран выводится число 242 – 13 = 229. Какое число нужно ввести в автомат, чтобы в результате получилось 113?

Ответов - 8

Поляков: Ольга пишет: намекните, пожалуйста, с какого конца к этому заданию подступиться. Там все очень просто. Когда мы выполнили инверсию в 8 разрядах (заменили все 0 на 1 и наоборот), мы фактически вычли исходное число из числа 255.

nikson: Решение простое: 1. Инверсия числа и сумма самого числа дает 255 2. Тогда система. х+у = 255 х-у = 113 3. Из первого х = 255 - у. Подставляем во второе 255-2у=113, откуда у = 72 И всё :)))

never: А можно рассмотреть решение задачи 160? Автомат обрабатывает целое число N (0 ≤ N ≤ 255) по следующему алгоритму: Строится восьмибитная двоичная запись числа N. Все цифры двоичной записи заменяются на противоположные (0 на 1, 1 на 0). Полученное число переводится в десятичную запись. Из нового числа вычитается исходное, полученная разность выводится на экран. Какое число нужно ввести в автомат, чтобы в результате получилось «–21»? Получаем решение: 1. Переводим число -21 в восьмибитное представление: 11101011 2. Переводи его в десятичную систему счисления: 235 3. Получаем систему: x+y=255 x-y=235 4. Вычитаем из первого уравнения второе: 2y=20 5. Получаем y=10 Проверка показывает, что это правильный ответ. В файле answers даётся ответ 138, который также является верным. Т.е. задача имеет два решения?


polyakovss: Здравствуйте! В условии сказано: Автомат обрабатывает целое число N (0 <= N <= 255) по следующему алгоритму: Строится восьмибитная двоичная запись числа N. Если первый (старший) разряд восьмибитной двоичной записи числа N отводится под знак числа, то диапазон чисел от -128 до 127 включительно. Числа большие 127 в этом случае представить нельзя. Значит, речь идет об однобайтовом представлении, которое применяется только для положительных целых чисел. В этом формате отсутствует знаковый разряд. Соответственно, нет отрицательных чисел. В этом случае ответом будет число 138. Это и будет правильный ответ в этой задаче. А вот если бы в условии было сказано, что строится ПРЯМОЙ восьмибитный КОД числа N, а (-128 <= N <= 127), то x + y = -1 x - y = -21 y = 10. В этом случае ответом было бы число 10. Просто алгоритм обработки числа был бы другим по сравнению с первым случаем. Замечание: В первом случае, если y = 10, то x = 245. x - y = 235, а не -21. Если же y = 138, то x = 117. x - y = -21. Во втором случае, если y = 10, то x = -11. x - y = -21. Во втором случае y не может быть равным 138.

Степан: как вы получили диапазон чисел от -128 до 127 включительно? можно пожалуйста поподробнее решение этого задания?

polyakovss: Здравствуйте, Степан! Вы пишете: как вы получили диапазон чисел от -128 до 127 включительно? можно пожалуйста поподробнее решение этого задания? Задание 5 задача 160: Автомат обрабатывает целое число N (0 ≤ N ≤ 255) по следующему алгоритму: 1) Строится восьмибитная двоичная запись числа N. 2) Все цифры двоичной записи заменяются на противоположные (0 на 1, 1 на 0). 3) Полученное число переводится в десятичную запись. 4) Из нового числа вычитается исходное, полученная разность выводится на экран. Какое число нужно ввести в автомат, чтобы в результате получилось «–21»?Решение: В условии сказано: Автомат обрабатывает целое число N (0 <= N <=255) по следующему алгоритму: Строится восьмибитная двоичная запись числа N. Поскольку в восьмибитную двоичную запись "помещается" число 255, то, значит, речь идет об однобайтовом представлении, которое применяется только для положительных целых чисел. В таком формате отсутствует знаковый разряд. Соответственно, нет отрицательных чисел. В этом случае сумма инверсии числа и самого числа равна 255. Пусть y - исходное число, а x - созданное автоматом. Тогда получаем систему уравнений: x + y = 255 x - y = - 21 Вычтем из первого уравнения второе: 2y = 276 --> y = 138. Ответ: 138. Замечание: В ЭТОЙ задаче диапазон чисел от 0 до 255 (0 <= N <=255).

Ж: [pre2] for n in range(256): a=format(bin(n)[2::],'0>8') a=''.join(['1' if c=='0' else '0' for c in a]) # a = a.replace('1', '2'); a = a.replace('0', '1'); a = a.replace('2', '0') # второй способ сделать замену 1 на 0 и наоборот b=int(a,2)-n if b==113: print(n)[/pre2]Ответ 71.

elpov06: можно еще с помощью рассуждений: например дано число 13 это в восьмибитном представлении х= 00001101, все цифры заменяются на противоположные у=11110010. Если сложить х+у то получится 11111111=255. Далее новое у=255-х, далее Из нового числа вычитается исходное, полученная разность выводится на экран: 255-х-х=113. Решаем линейное уравнение и получаем 71.



полная версия страницы