Текст
                    НАУКУ —ВСЕМ!
Шедевры научно-популярной литературы (математика) • № 94
Д. М. Златопольский
СИСТЕМЫ СЧИСЛЕНИЯ
УЧЕБНЫЕ И ЗАНИМАТЕЛЬНЫЕ МАТЕРИАЛЫ
Более 100 содержательных задач
Фокусы, головоломки, исторические факты
Решение задач из ЕГЭ по информатике
•
Вопросы для конкурсов «Что? Где? Когда?» и «Брейн-ринг»
URSS
МОСКВА



ББК 22.1 о 22.18 32.8о 32.811 Златопольский Дмитрий Михайлович Системы счисления: учебные и занимательные материалы. Более 100 содержательных задач. Фокусы, головоломки, исторические факты. Решение задач из ЕГЭ по информатике. Вопросы для конкурсов «Что? Где? Когда?» и «Брейн-ринг». — М.: ЛЕНАНД, 2015. — 512 с. (НАУКУ — ВСЕМ! Шедевры научно-популярной литературы (математика). № 94.) В книге приведены задачи, фокусы, головоломки и другие увлекательнейшие материалы, связанные с недесятичными системами счисления. Ее материалы можно использовать на уроках, в качестве домашних заданий, на кружках и факультативах, во внеклассной работе. Книга состоит из 18 глав и содержит 13 приложений. В ней приводятся: задачи разного уровня сложности; методика решения типовых задач на системы счисления, представленных в Едином государственном экзамене по информатике; арифметические и геометрические прогрессии чисел в недесятичных системах; логические и сдвиговые операции; основные принципы создания так называемых «помехоустойчивых» кодов; математические фокусы, головоломки, игры с числами в недесятичных системах счисления. Все задания, представленные в книге, имеют развивающее значение для интеллекта, формируют общеучебные навыки и способствуют повышению интереса учащихся к математике и информатике. Ко всем заданиям даны ответы и разъяснения. В приложениях описываются различные методы (в том числе малоизвестные) перевода из одной системы счисления в другую целых чисел и правильных дробей, программы (с методикой их разработки) решения задач, связанных с системами счисления, решением головоломок и демонстрацией фокусов, рассмотренных ранее, а также представлены материалы исторического характера (такие материалы имеются и в основной части книги в виде «врезок»). Если вам нужны задачи разного уровня сложности по теме «Системы счисления» для уроков и домашних заданий, головоломки, фокусы и игры, связанные с этой темой, материалы для внеклассной работы и проектной деятельности учащихся, то эта книга — для вас. Она, безусловно, будет полезна также учащимся, увлекающимся указанными предметами. Рецензент: канд. пед. наук, доц. О. А. Савельева ООО «ЛЕНАНД». 117312, г. Москва, пр-т Шестидесятилетия Октября, д. 11 А, стр. 11. Формат 60x90/16. Печ. л. 32. Зак. № 5238. Отпечатано в ОАО «Первая Образцовая типография». Филиал «Чеховский печатный двор». 142300, Чехов, ул. Полиграфистов, д. 1. ISBN 978-5-9710-1341-9 © ЛЕНАНД, 2014 14795 ID 182946 9 78597 341 НАУЧНАЯ И УЧЕБНАЯ ЛИТЕРАТУРА URSS E-mail: URSS@URSS.ru Каталог изданий в Интернете: http://URSS.ru Тел./факс (многоканальный): + 7 (499) 724 25 45 Все права защищены. Никакая часть настоящей книги не может быть воспроизведена или передана в какой бы то ни было форме и какими бы то ни было средствами, будь то электронные или механические, включая фотокопирование и запись на магнитный носитель, а также размещение в Интернете, если на то
Памяти Анатолия Павловича Савина посвящается* * А. П. Савин (1932-1998) — замечательный человек и популяризатор математики, бессменный член редколлегии физико-математического журнала «Квант», с которым автор имел честь быть знакомым и сотрудничать.
Содержание Введение 9 Глава 1. Разминка 11 1.1. Ей было 1100 лет 11 1.2. Загадочная автобиография 11 1.3. Может ли такое быть? : 12 1.4. Численность класса 12 1.5. Мартышка и бананы 12 1.6. Мартышка и перчатки 12 1.7. Необычный класс 12 1.8. Возможно ли это? 12 1.9. Подсчет пальцев 12 1.10. Надпись на доске 12 1.11. Игрушки 13 1.12. Куклы 13 1.13. Большая скорость 13 1.14. Яблоки 13 1.15. Конфеты 13 1.16. Странные записи 14 1.17. Равенства 14 1.18. Существует ли система счисления? 14 1.19. Размеры футбольного поля 14 1.20. Площадь комнаты 14 1.21. Площадь квадрата 15 1.22. Четыре задачи на перестановку цифр 15 1.23. Вывеска с номером дома 15 1.24. Непредвиденное затруднение 15 1.25. Алиса и системы счисления 15 1.26. Таблица из девяти чисел 16 1.27. Таблица из 16 чисел 16 1.28. В какой системе счисления записано число? 16 1.29. Есть ли такая цифра? 16 1.30. Переместить одну цифру 16 Задачи про степени двойки 16 Ответы к главе 1 18 Глава 2. Задачи посложнее 25 2.1. Система счисления в... колесе 25 2.2. Равенство 25 2.3. Неравенство 25
Содержание 5 2.4. Еще одно равенство 25 2.5. Возможно ли неравенство? 25 2.6. Уравнение 25 2.7. Двоичное число 25 2.8. О полных квадратах 25 2.9. О полных кубах 26 2.10. Повар и пицца 26 2.11. Градуировка весов 26 2.12. Семь кошельков 26 2.13. Банкир и конверты 26 2.14. Серебряная цепочка 26 2.15. Количество цифр в двоичной записи 27 2.16. Кощей Бессмертный и Иван Царевич 27 2.17. Пропущенное число 27 2.18. Бедный торговец (старинная задача) 27 2.19. Может ли быть такое? 27 2.20. А такое? 27 2.21. Три вопроса 28 2.22. Еще раз об Алисе 28 2.23. Последняя цифра 28 2.24. Количество нулей и количество единиц 28 2.25. Импульсы с планеты т-Кита 28 2.26. Об экономичности... систем счисления 28 2.27. Задача Иосифа Флавия — частный случай 29 2.28. Как узнать номера квартир 30 2.29. Друзья обмениваются новостями 30 2.30. Необычный футбольный матч 30 2.31. Подсчет числа единичных битов 31 Задачи про степени двойки 31 Ответы к главе 2 33 Глава 3. Фальшивые монеты и отравленное вино 56 3.1. Пять мешков с монетами 56 3.2. 64 монеты 57 3.3. Восемь монет 58 3.4. Девять монет 60 3.5. Яд в четырех бочках с вином 61 3.6. Яд в девяти бочках с вином 63 Глава 4. Методика решения типовых задач из ЕГЭ по информатике 65 4.1. Определение количества единиц или нулей в записи p-ичного числа 65
6 Содержание 4.2. Задания на использование чисел, представленных в разных системах 68 4.3. Нахождение основания системы счисления 71 4.4. Разные задания 73 Глава 5. Делимость и прогрессии 75 5.1. О признаках делимости 75 5.2. Прогрессии 77 Ответы к главе 5 79 Глава 6. Логические и сдвиговые операции 86 Ответы к главе 6 99 Глава 7. Об уравновешенной троичной системе счисления 115 Ответы к главе 7 119 Глава 8. Система счисления с... отрицательным основанием 121 Ответы к главе 8 125 Глава 9. Двоично-десятичное кодирование 127 Глава 10. Биты, исправляющие ошибки 138 10.1. Как найти ошибку? 138 10.2. Код Хемминга 145 Ответы к главе 10 150 Глава 11. Фокусы 154 11.1. Отгадывание числа 154 11.2. Волшебная таблица 155 11.3. Семь табличек 157 11.4. Волшебная карточка 159 11.5. Еще фокусы с карточками 160 11.6. Фокус с октаэдром 163 11.7. Фокус с цветными цифрами 166 11.8. Фокус «15 названий» 169 11.9. Карточный фокус «Последняя карта» 171 11.10. Фокус Жергонна 173 Ответы к главе 11 175 Глава 12. Старинные китайские символы 180 Ответы к главе 12 184
Содержание 7 Глава 13. Учебное домино и другие задания 189 13.1. Задания на использование двоичной системы счисления 189 13.2. Задания на использование других систем счисления 191 Ответы к главе 13 199 Глава 14. Числовые ребусы и кросснамбер 205 14.1. Ребусы со звездочками 205 14.2. Числовые ребусы в троичной системе 207 14.3. Ребусы в четверичной системе счисления 208 14.4. Ребусы в пятеричной системе счисления 209 14.5. Числовые ребусы в шестеричной системе счисления 210 14.6. Еще один ребус в шестеричной системе 210 14.7. Чему равен РАДИУС? 210 14.8. Числовые ребусы в двенадцатеричной системе счисления 211 14.9. Числовой ребус в системе счисления с неизвестным основанием 213 14.10. Числовой ребус с неизвестным числом 213 14.11. Числовой ребус с неизвестным числом и неизвестной системой счисления 214 14.12. Кросснамбер «Двоичная система счисления» 214 Ответы к главе 14 215 Глава 15. Игра «ним» 229 Ответы к главе 15 233 Глава 16. Двоичная система и «Ханойские башни» 238 Глава 17. Системы счисления и электронные таблицы 243 17.1. Разминка, или задания, выполняемые без использования формул 243 17.2. Степени целых чисел 248 17.3. Перевод целых чисел из р-ичной системы счисления в десятичную и обратно 251 17.4. Взаимосвязь между системами счисления с основаниями q = рт 259 17.5. Представление целых чисел 276 17.6. Логические и сдвиговые операции 279 17.7. Сложение целых чисел 290 17.8. Разные задания 303 Глава 18. Вопросы для конкурсов «Что? Где? Когда?» и «Брейн-ринг» по информатике 310 Ответы к главе 18 318
8 Содержание Ответы на дополнительные задания 323 Литература 331 ПРИЛОЖЕНИЯ Приложение 1. Методики перевода целых чисел из одной системы счисления в другую 334 Приложение 2. О переводе из одной системы счисления в другую дробей 346 Приложение 3. Программы решения ряда задач, приведенных в главе 2 397 Приложение 4. Программы для перевода целых чисел из одной системы счисления в другую 406 Приложение 5. Программы для перевода из одной системы счисления в другую дробей 431 Приложение 6. Программы для моделирования арифметических действий в процессоре 436 Приложение 7. Программы, моделирующие фокусы, описанные в главе 11 450 Приложение 8. Оформление листов электронных таблиц для демонстрации фокусов 469 Приложение 9. Первый урок в школе разведчиков 472 Приложение 10. Быстрое возведение в целую степень 478 Приложение 11. Программы, моделирующие игру «ним» 481 Приложение 12. Программы, моделирующие решение головоломки «Ханойские башни» 493 Приложение 13. Двоичная система... в древности 497
Введение В книге приведены задачи, фокусы, головоломки и другие материалы, связанные с недесятичными системами счисления. Их можно использовать на уроках, в качестве домашних заданий, на кружках и факультативах, во внеклассной работе. Книга состоит из 18 глав и приложений. В главах 1-3 приводятся задачи разного уровня сложности. Подавляющая часть задач — содержательные, многие с элементами занимательности. Методика решения типовых задач на системы счисления, представленных в Едином государственном экзамене по информатике, приводится в главе 4. Оказывается, что признаки делимости на некоторые числа можно установить и в недесятичных системах счисления. Этому вопросу посвящена глава 5. В ней также описываются арифметические и геометрические прогрессии чисел в этих системах. В главе 6 рассказывается о логических и сдвиговых операциях, которые применяются к числам, а также рассматриваются так называемые «инвертированные числа». Обычно к нетрадиционным системам счисления относят фибонач- чиеву и факториальные системы [2]. В книге в главах 7-9 описываются также другие необычные системы — уравновешенная троичная, смешанная двоично-десятичная и даже система с... отрицательным основанием. В главе 10 рассказывается об основных принципах создания так называемых «помехоустойчивых» кодов — способов кодирования информации, позволяющих контролировать и находить возможные ошибки, которые могли произойти во время ее передачи. Как известно, большинство фокусов — «ловкость рук и никакого мошенничества» ©. Но есть фокусы, секрет которых — математический. Десять таких фокусов описаны в главе 11. Головоломкам разного типа (числовым ребусам и т. п.) с числами в не десятичных системах счисления посвящены главы 12-14. В главах 15 и 16 рассказывается об использовании двоичной системы счисления в известной игре «ним» и в головоломке «Ханойские башни». Задания, представленные в главе 17 «Системы счисления и электронных таблицы», помогут ученикам закрепить вопросы, связанные с систе¬
10 Введение мами счисления, и одновременно углубленно изучить возможности электронных таблиц. В заключительной, 18-й, главе приведены вопросы, связанные с системами счисления, которые можно предложить участникам школьных конкурсов «Что? Где? Когда?» и «Брейн-ринг». Все задания, представленные в книге, имеют развивающее значение для интеллекта учащихся, формируют общеучебные навыки и способствуют повышению интереса обучающихся к математике и информатике. К большинству заданий даны ответы и разъяснения. В приложениях описываются различные методы (в том числе малоизвестные) перевода из одной системы счисления в другую целых чисел и правильных дробей, программы (с методикой их разработки) решения задач, связанных с системами счисления, демонстрацией фокусов, моделированием игр и головоломок. Представлены также материалы исторического характера (такие материалы имеются и в основной части книги в виде «врезок»). Задания на разработку указанных программ можно предложить учащимся при изучении программирования, а ряд других вопросов, отраженных в книге, — в проектной деятельности. Книга адресована учителям информатики и математики, но будет полезна и учащимся, увлекающимся указанными предметами.
Глава 1 Разминка Приведенные в данной главе несложные задачи могут быть использованы как на уроках, так и в качестве домашних заданий. ► 1.1. ЕЙ БЫЛО 1100 ЛЕТ Ей было 1100 лет, Она в 101-й класс ходила, В портфеле по 100 книг носила — Все это правда, а не бред. Когда, пыля десятком ног, Она шагала по дороге, За ней всегда бежал щенок, С одним хвостом, зато 100-ногий. Она ловила каждый звук Своими 10-ю ушами, И 10 загорелых рук Портфель и поводок держали. И 10 темно-синих глаз Рассматривали мир привычно... Но станет все совсем обычным, Когда поймете наш рассказ. А. Н. Стариков Поняли ли вы рассказ поэта? ► 1.2. Загадочная автобиография [11] В бумагах одного чудака-математика найдена была его автобиография. Она начиналась следующими строками: «Я окончил курс университета 44 лет от роду. Спустя год, 100-летним молодым человеком, я женился на 34-летней девушке. Незначительная разница в возрасте — всего 11 лет — способствовала тому, что мы жили общими интересами и мечтами. Спустя немного лет у меня была уже и маленькая семья из 10 детей. Жалованья я получал в месяц всего 200 руб., из которых 1/10 приходилось отдавать сестре, так что мы с детьми жили на 130 руб. в месяц» и т. д. Чем объяснить странные противоречия в числах этого отрывка?
12 Глава 1. Разминка ► 1.3. Может ли такое быть? Одна девочка написала подруге: «У меня есть братья. Всего их — 100. Младшему 1000 лет, а старшему 1111 лет. Старший учится в 1001 классе». Может ли такое быть? ► 1.4. Численность класса В классе 1010 мальчиков, что составляет 101000% от численности всего класса. Сколько в классе девочек и какова общая численность класса? Ответы получите в двоичной системе, в которой записаны все приведенные значения. ► 1.5. Мартышка и бананы Мартышка висит на хвосте. В каждой руке по 101 бананов, а в каждой ноге — на 1 банан больше, чем в руке. Сколько всего бананов у мартышки? Расчеты проведите в двоичной системе, в которой записаны значения в условии. ► 1.6. Мартышка и перчатки Мартышка-мама связала 111 своим детишкам по перчатке на каждую руку и ногу. Но они порвали все свои перчатки, кроме младшего, который порвал только 11. Мартышка решила «починить» испорченные перчатки. Сколько перчаток попадет маме в работу? Ответ представьте и в системе счисления, в которой записаны значения в условии, и в десятичной системе. При расчетах используйте только операцию вычитания. ► 1.7. Необычный класс В классе 1000 учеников, из них 120 девочек и 110 мальчиков. В какой системе счисления велся счет учеников? ► 1.8. Возможно ли это? Один школьный учитель информатики написал: «У меня в классе 100 учеников, из них 24 мальчика и 32 девочки». Возможно ли это? ► 1.9. Подсчет пальцев Один шестиклассник о себе написал так: «Пальцев у меня 24, на каждой руке 5, а на ногах 12». Как же это могло быть? ► 1.10. Надпись на доске На доске сохранилась полустертая запись: 4 2 4 2 3 Восстановите слагаемые.
Глава 1. Разминка 13 ► 1.11. Игрушки У одного мальчика-инопланетянина было 12 разных игрушек. Когда ему подарили еще 5, то общее число игрушек стало равно 21. Как такое могло быть? ► 1.12. Куклы У одной девочки-инопланетянки было 21 разных кукол. Она отдала подруге 12 кукол, после чего у нее осталось 3 куклы. Как такое могло быть? ► 1.13. Большая скорость Один инопланетянин написал, что за 4 часа, двигаясь со скоростью 400 км/ч, он проехал 3100 км. Как такое могло быть? В большинстве источников можно найти информацию о том, что двоичная система счисления была впервые описана великим немецким ученым Готфридом Вильгельмом Лейбницем в конце XVII века. Однако, строго говоря, это не так. Двоичную систему описывали и до него. Так, ее предложил Томас Гарриот в рукописи, написанной около 1600 г. (правда, об этом не было известно вплоть до появления в 1951 г. работы J. W. Shirley «Binary numeration before Leibniz» //American Journal of Physics, 1951. Vol. 19). В 1670 г. испанский епископ Хуан Карамюэль опубликовал работу «Mathesis biceps vetus et nova» («Два лика математики — новой и старой»), в одной из частей которой рассмотрел системы счисления с основаниями 2, 3, 4, 5, 6, 7, 8, 9, 10, 12 и 60. В 1623 г. Френсис Бэкон предложил фактически пятизначный двоичный код для букв алфавита. Лейбниц, начиная с 1697 г. в письмах к разным адресатам (герцогу Брауншвейгскому Рудольфу Августу, Иоганну Кристиану Шуленбургу, Иоганну Бернулли, иезуиту отцу Буве) неоднократно излагал выработанные им принципы двоичной арифметики. После появления в 1703 г. статьи Лейбница «Explication de I’arithmetique binaire», в которой объяснялись правила двоичной арифметики, двоичная система приобрела большую известность. Правда, Лейбниц не считал, что её необходимо применять на практике, он рассматривал двоичную систему в основном как важный инструмент теоретических исследований. Впервые огромные потенциальные возможности применения двоичной системы для вычислений продемонстрировал изобретатель логарифмов Джон Непер, ещё в 1617 г. предложивший свою «счётную доску» (см. приложение 13). ► 1.14. Яблоки После того как каждое из 52 яблок разрезали пополам, стало 134 половинок. В какой системе счисления велся счет при этом? ► 1.15. Конфеты Один мальчик-инопланетянин разделил поровну 62 конфеты между собой, братом и двумя сестрами и каждый получил по 12 конфет. Как такое могло быть?
14 Глава 1. Разминка ► 1.16. Странные записи У одного любителя математики и информатики в тетради были обнаружены следующие записи: 3 2 0 5 (пять пишем — десять; 3 2 17 4 7 7 5 2 пишем, 1 в уме и т. д.) 14 5 2 1 0 2 0 2 1 5 4 5 4 3 5 (пятью семь — тридцать пять; х 4 7 3 пишем, 4 в уме и т .п.) 3 7 13 2 16 4 2 5 5 5 3 3 6 1 1 1 4 “30 2 4, 0525 6~ 1 - 6 0 ~ Г о о 7 4 4 0 " _3 0_ 1 о о Как вы можете объяснить эти записи? ► 1.17. Равенства В какой системе счисления справедливы равенства: а) 3 • 4 = 10? б)5-5 = 31? в) 2 -2 = 100? ► 1.18. Существует ли система счисления? Существует ли система счисления, в которой одновременно соблюдаются два равенства: а) 3+4= 10 и 3 -4 = 15; б)3 +2 = 5 иЗ -2= 11. ► 1.19. Размеры футбольного поля На планете т-Кита футбольное поле имеет размеры, как и на Земле, — 105 х 68 м. Но т-китяне записывают эти размеры как 126 х 75 м. Почему? ► 1.20. Площадь комнаты Житель планеты а-Кентавр пишет, что размеры его комнаты 4 х 12 м, а площадь равна 53 квадратных метра. Как такое могло быть? Следовательно, = 24,0(52) 14 52 Проверка: 0,0(52) = = J_ 770 14 (после сокращения на 52) 24 + J_ = 24*14 + 1 =361 14 14 14 и т. д.
Глава 1. Разминка 15 ► 1.21. Площадь квадрата В учебнике, изданном на планете (З-Сириус, написано: «Площадь квадрата равна квадрату его стороны. Например, если сторона равна 11, то площадь равна 1001». Почему? ► 1.22. Четыре задачи на перестановку цифр 1. Дано число 15, записанное в некоторой системе счисления. В какой системе при перестановке его цифр значение увеличивается в 3 раза? 2. Какое двузначное число, записанное в 9-ичной системе счисления, при перестановке его цифр увеличивается: а) в 4 раза? б) в 1,5 раза? 3. Есть ли такое восьмеричное число, которое при перестановке его цифр увеличивается в 1,25 раза? ► 1.23. Вывеска с номером дома Один любитель информатики проживал по адресу: ул. Кременчугская, 153, корпус 6. Но когда он смотрел на вывеску с номером дома, то утверждал, что живет в доме номер 69. Как выглядела вывеска? Вариант вопроса Один любитель информатики проживал по адресу: ул. Кременчугская, 153, корпус 6. Но когда он смотрел на вывеску с номером дома, то утверждал, что живет в доме номер 69. Почему? ► 1.24. Непредвиденное затруднение Много лет назад один состоятельный клиент покупал компьютер. Компьютер был по тем временам мощный (с процессором Pentium с тактовой частотой 168 МГц — да-да, было и такое!) и, соответственно, дорогой. Неожиданно возникла проблема: индикатор тактовой частоты процессора на системном блоке оказался двухразрядным. Стандартное в таких случаях решение — установка на индикаторе буквосочетания HI (от англ. high — высокая) покупателя не устраивало, он требовал, чтобы индикатор показывал частоту с точностью до мегагерца. Это было сделано, причем без замены индикатора или дописывания символов на корпусе. Частота отображалась непосредственно на индикаторе, покупатель ушел довольный. Как это было сделано? ► 1.25. Алиса и системы счисления В знаменитой книге Льюиса Кэрролла «Алиса в стране чудес», в главе 2, автор приводит следующую фразу Алисы, когда она пробует вспомнить то, что знала раньше: «Ой, у меня, наверное, скоро правда голова сломается! А ну-ка проверю, помню я то, что знала, или нет. Значит так: четырежды пять — двенадцать, четырежды шесть — тринадцать, четырежды семь... Так я до двадцати никогда не дойду!».
16 Глава 1. Разминка Как можно объяснить столь странные утверждения героини книги? Можно предположить, что в рассуждениях Алисы речь идет о вычислениях в не десятичных системах счисления1. В каких? ► 1.26. Таблица из девяти чисел В чем особенность следующей таблицы: 100 1001 10 11 101 111 1000 1 110 ► 1.27. Таблица из 16 чисел В чем особенность следующей таблицы: 1 1110 1111 100 1100 111 110 1001 1000 11 1010 101 1101 10 1011 10000 ► 1.28. В КАКОЙ СИСТЕМЕ счисления записано число? В какой системе счисления некоторое число N записывается в виде 6703, если в десятичной системе оно равно 4944. ► 1.29. Есть ли такая цифра? Есть ли такая цифра А, при которой 4325 < 2А16? ► 1.30. Переместить одну цифру В этом выражении: 101-102=1 переместите одну цифру так, чтобы оно стало верным. Задачи про степени двойки Начнем со стихотворения, которое поможет учащимся запомнить степени числа 2 (от 21 до 210): Слон живет у нас в квартире, В доме 2, подъезд 4, По часам привык питаться: Утром — в 8, днем — в 16. Ест на завтрак непременно 32 охапки сена. После утренней прогулки — 64 булки. На обед ему приносим огурцов 128. Помидоров может съесть 256. Съест блинов 512, — это если не стараться. А замесить на кефире —1024. 1 Как отмечается в ответе к заданию 1.1, о недесятичных числах 12 и 13, строго говоря, нельзя говорить «двенадцать» и «тринадцать».
Глава 1. Разминка 17 ► 1. Банка с бактериями © В банке находятся бактерии. Через минуту каждая из бактерий делится пополам, затем каждая из получившихся бактерий через минуту делится пополам и т. д. Через час банка полна. Можно ли определить, через какое время банка была заполнена наполовину? ► 2. Еще одна банка с бактериями В банку поместили одну бактерию. Через минуту она поделилась пополам, затем каждая из получившихся бактерий через минуту делится пополам и т. д. Через час банка стала полной. Через какое время банка будет заполнена, если в нее поместить: а) две бактерии? б) четыре бактерии? ► 3. Лилии в пруду Был пруд, в центре которого в один из дней вырос лист водяной лилии. Каждый день число таких листьев удваивалось, и на 30-й дней поверхность пруда уже была заполнена листьями лилий. Сколько дней понадобилось, чтобы заполнить листьями половину пруда? Сосчитайте также, сколько листьев выросло к десятому дню. ► 4. Прабабушки и прадедушки Сколько всего прапрадедушек и прапрабабушек было у всех ваших прапрадедушек и прапрабабушек? ► 5. Илья Муромец и Змей Горыныч Перед вами — фрагмент сказки: «Срубил Илья Муромец Змею Горы- нычу голову, а взамен две выросли. Срубил 2 — выросли 4, срубил 4 — выросли 8, срубил 8 — выросли 16, срубил 16 — выросли 32, срубил 32 — выросли 63, срубт 63 — выросли 128, срубил 128 — выросли 256. А как сру- бт Илья 256 голов, тут и настал Змею Горынычу конец, потому что был Горыныч восьмиразрядный!» Какие три ошибки имеются в приведенном фрагменте? © У программиста спрашивают: — Не помнишь, сколько будет два в четвертой? — (Без запинки) Шестнадцать. — А два в шестнадцатой? — (Без запинки) Шестьдесят пять тысяч пятьсот тридцать шесть. — Вот голова, ну ты даешь! Ну, а три в четвертой? — (После паузы) Не помню точно. Кажется, дробное число получается... ► 6. Сколько ЕДИНИЦ И СКОЛЬКО НУЛЕЙ? Найдите количество единиц е и количество нулей п в двоичной записи выражения: 1)(2б- 1)-(22- 1);
18 Глава 1. Разминка ► 7.0 свиньях из пьесы М. А. Булгакова В пьесе М. А. Булгакова «Иван Васильевич» (по ней снята известная кинокомедия «Иван Васильевич меняет профессию») имеется эпизод, в котором диктор по радио рассказывает о свиньях: «На десятом году две свиньи могут дать один миллион свиней!». Конечно, писатель иронизировал при этом и использовал условные значения. Предлагаем читателям решить такую, также условную, задачу: «На десятом году две свиньи могут дать два миллиона свиней. Сколько пар свиней дает каждая пара свиней через год, если считать, что новых свиней дает и «исходная пара», и все ее «потомки»». Задачу решите, не извлекая корни, а используя значения степеней двойки, например, приведенные в стихотворении чуть выше. Еще раз повторим, что задача носит полностью условный характер. Ответы к главе 1 1.1. Все числа в стихотворении записаны в двоичной системе счисления. Ключ к разгадке — во фразах «Своими 10-ю ушами», «10 загорелых рук», «10 темно-синих глаз». Десятичное число 2 (количество рук, ушей или глаз) представляется как 10 только в этой системе. Обращаем внимание на тот факт, что при чтении стихотворения вслух слова десять (10), стоногий (100-ногий) и т. п. произносить нельзя — эти слова являются названиями чисел только в десятичной системе счисления. Поэтому и слово десятком в стихотворении является неправильным. 1.2. «Секрет» странного текста выдается фразой: «спустя год (после 44 лет — Прим. автора книги [11]), 100-летним молодым человеком...». Если от прибавления одной единицы число 44 получается 100, то, значит, цифра 4 — наибольшая в использованной системе счисления, а, следовательно, основанием системы является 5. Чудаку-математику пришла фантазия написать все числа своей биографии по пятеричной системе счисления. Поэтому число, изображенное в тексте записки 44, означает 4-5+4, то есть 24. Точно так же число 100 в автобиографии означает одну единицу третьего разряда в пятеричной системе, то есть 25. Остальные числа записки соответственно означают: 34 = 3-5+4=19; 11 = 1*5 + 1=6; 200 = 2 • 25 = 50; 10 = 5; 1/10= 1/5; 130 = 1-25 + 3-5 =40. Восстановив истинный смысл чисел записки, мы видим, что в ней никаких противоречий нет: «Я окончил курс университета 24 лет от роду. Спустя год, 25-летним молодым человеком, я женился на 19-летней девушке. Незначительная
Ответы к главе 1 19 разница в возрасте — всего 6 лет — способствовала тому, что мы жили общими интересами и мечтами. Спустя немного лет у меня была уже и маленькая семья из 5 детей. Жалованья я получал в месяц 50 руб., из которых 1/5 приходилось отдавать сестре, так что мы с детьми жили на 40 руб. в месяц». 1.3. Да, если все значения записаны в двоичной системе счисления (у девочки 4 брата, младшему 8 лет, а старшему — 15. Старший учится в 9 классе). 1.4. Все расчеты следует проводить в десятичной системе. Количество мальчиков 10102 = Юю, их доля — 1010002 = 4010 %. Тогда количество девочек равно 15ю, или 11112, а общая численность класса — 110012. 1.5. 22 банана (101102). 1.6. Так как число 11 в троичной системе счисления равно десятичному числу 4, а по условию кто-то порвал именно это число перчаток (“только 11”), то все значения в условии не могут быть записаны в этой системе. Значит, использована двоичная система счисления. Общее число связанных перчаток равно 1112 • 410. Для получения результата умножать нет необходимости — достаточно приписать к числу справа два нуля (111002). Так как непорванной осталась одна перчатка, то в ремонте побывает 111002 -1 = 110112, или 27 перчаток. 1.7. Во втором разряде справа при сложении цифр 1 и 2 получается сумма, оканчивающаяся на 0, что возможно только в троичной системе счисления. 1.8. Это возможно в шестеричной системе счисления (246= 16ю, 326 = = 20ю, 1006= Збю). 1.9. Это могло быть, если все числа записаны в восьмеричной2 системе счисления (58= 510, 128= Ю10, 248 = 20ш). 1.10. Последняя цифра первого слагаемого равна 1. Сумма чисел 5 и 4 может оканчиваться на 2 только в семеричной системе счисления. Весь пример: 2 3 4 5 1 1 5 6 4 2 4 2 4 2 3 1.11. Это могло быть, если все значения записаны в шестеричной системе счисления (126= 8]0, 56= 510, 216= 1310). 1.12. Это могло быть, если все значения записаны в четверичной системе счисления (214= 910, 124= 610, 34= 310). 1.13. Это могло быть, если все значения записаны в пятеричной системе счисления (4005= 100j0, 31005 = 40010). 1.14. В семеричной. 2 Обратим внимание на написание слов «восьмеричная», «шестеричная», «пятеричная» и т. п.
20 Глава 1. Разминка 1.15. Это могло быть, если все значения записаны в троичной системе счисления (623 = 20ю, 123 = 510). 1.16. Все расчеты проводились в восьмеричной системе счисления. 1.17 а) в 12-ичной; б) в восьмеричной; в) в двоичной. 1.18 а) да, существует — семеричная система счисления; б) нет, не существует — второе равенство возможно только 5 пятеричной системе счисления, но в этой системе нет цифры 5, присутствующей в первом равенстве. 1.19. Удобно записать в развернутой форме3 двузначный размер (75). Если неизвестное основание системы счисления обозначить рА, то: 1р + 5 = 68, откуда р = 9. Ответ, т-китяне используют для записи девятеричную систему счисления. 1.20 Предположим, что использована не десятичная система счисления, а система с основанием р. Представим все значения в развернутой форме: = 410; -р ю + 2ю; 53 р = 5р + 3. Перемножим размеры комнаты: 4 • (р + 2) = 4р + 8 и приравняем результат значению площади: 4р + 8 = 5р + 3, откуда р = 5. Ответ. Это могло быть, если все значения записаны в пятеричной системе счисления. 1.21. Используется двоичная система счисления (112 = 3, 10012 = 9). 3 Развернутой формой записи целого неотрицательного числа А в р-ичной системе называется запись вида: а„р” + ап _ \рп ~ 1 + ап _ 2рп ~2 + ... + а\р + ао, 0 < я, < р, п > 0, где р — основание позиционной системы счисления, я, — цифры числам вр-ичной системе [2]. Эта форма в основном используется для решения задач. 4 Так же, как правило, будем обозначать основание и при решении других задач.
Ответы к главе 1 21 1.22 1. Десятичный эквивалент заданного числа равен q + 5, а числа, полученного при перестановке его цифр, — 5q + 1. По условию: *±1 = з, q + 5 откуда q = 7. Ответ: в семеричной. 2. а) если искомое число имеет вид ab, то можем записать: 96 +я = 4’ 9я + 6 откуда 56 = 35я или Ъ = 1а. Так как Ъ < 9, то имеем единственное решение: b = 7,a = 1; б)35. 3. Есть — это число 34. 1.23. На вывеске номер дома был указан в виде 1536. В информатике в виде нижнего индекса указывают основание системы счисления, в которой записано число. Шестеричному числу 153 соответствует десятичное значение 69. 1.24. Для записи числа 168 в двух разрядах надо использовать систему счисления с основанием больше 13. Например, шестнадцатеричную систему, в которой число 168 записывается в виде А8. 1.25. Произведение чисел 4 и 5 равно 12 в восемнадцатеричной системе счисления, 4 и 6 = 13 — в системе счисления с основанием 21. 1.26. Если принять, что все числа в таблице записаны в двоичной системе счисления, и перевести их в десятичную, то получим: 4 9 2 3 5 7 8 1 6 Особенность последней таблицы в том, что сумма чисел в каждой строке, в каждом столбце и на каждой диагонали квадрата одна и та же (15). Это так называемый «магический квадрат порядка 3» 1.27. Изображен так называемый «магический квадрат порядка 4». В нем представлены следующие десятичные числа: 1 14 15 4 12 7 6 9 8 11 10 5 13 2 3 16 1.28. По условию задачи 6703р= 494410. Переведем число 6103р в десятичную систему счисления: 6703р= (бр3 + 1р2 + 3)|0.
22 Г лава 1. Разминка Значит, вр3 + 1р2 + 3 = 4944 или вр3 + 1р2 - 4941 = 0. Мы получили уравнение третьей степени, решать которые могут, естественно, не все учащиеся. Решением этого уравнения (методику решения мы приводить не будем) является р = 9. Проверив возможные значения р - 3 и р = 9, получим искомый результат (естественно, тот же). Можно также найти правильный ответ путем следующих рассуждений. Прежде всего, видно, что р > 7, т. к. используется цифра 7, и меньше 10, поскольку десятичная запись числа N «меньше», чем 6703. Значит, возможны только два варианта: р = 8 и р = 9. Исследовав их, обнаружим, что подходит только вариант р = 9. Ответ — число записано в девятеричной системе счисления. 1.29. Представим оба заданных числа в развернутой форме записи: откуда 107 < 73 + 6А, или 34 < 6А. Так как ,4 < 5, то последнее неравенство не может достигаться ни при каких значениях А. 1.30. Возможны два варианта ответа: 1) 101 - 102 = 1 в десятичной системе; 2) 110 - 102 = 1 в троичной системе счисления. Ответы на задачи про степени двойки 1. Можно — это произойдет через 59 минут (каждую минуту число бактерий удваивается). 2. а) через 59 минут; б) через 58 минут. Обоснование показано на рис. 1.1. или Можно также преобразовать уравнение 6р3 + 1р2 - 4941 = 0 к виду: 6р3 + 7р2 ~ 4941, р2(6р + 7) = З4 • 61. 4-25 + 3-5 + 2<2-36 + Л-6+1, 2 бакт. 4 бакт. Полная банка 60 мин. 1мин. 2 мин. 3 мин. Рис. 1.1
Ответы к главе 1 23 3. Наполовину пруд был заполнен на 29-й день. К десятому дню в пруду было 512 лилий. 4. Так как у каждого человека было 8 прапрадедов и 8 прапрабабушек, а у каждого из этих шестнадцати лиц также было по 16 прямых предков в «четвертом колене», то искомое число равно 256 (16 • 16). Число прямых предков в «восьмом колене» будет меньше, чем 256, если среди них были, например, случаи вступления в брак троюродных братьев и сестер и т. п. 5. Ошибка 1. После срубания у Змея Горыныча какого-то количества голов у него вырастало вдвое больше голов, поэтому если срубить 32 головы, то должно отрасти 64, а не 63. Ошибка 2. По той же причине, если срублено 63 головы, то должно отрасти 126, а не 128. Если же выросли 128 голов, то было срублено 64, а не 63. Ошибка 3. Восьмиразрядный Горыныч должен умереть после срубания 128 (а не 256) голов, потому что число 256 в двоичном виде уже не поместится в восьмиразрядную сетку, и все восемь младших разрядов будут нулевые. Если же Змей Горыныч все-таки умер после отрубания 256 голов, он был девятиразрядным, потому что в девяти разрядах число 256 в двоичном виде размещается, а 512 — нет. 6. Учитывая, что (2k - 1) — это А>значное двоичное число, состоящее из одних единиц, то ответы получить нетрудно: 1) п = 2, е = 4; 2) п - Ь, е = а - Ъ\ 3) п = 60, е = 55. 7. Обозначим искомое значение (количество пар свиней, которое дает через год каждая пара) — z. Через год у «исходной пары» родится z пар, и общее число пар свиней станет равно 1 + z. На втором году появится (1 + z)z новых пар, то есть всего станет (1 +z) + (1 + z)z = (1 + z)(l + z) пар. Аналогично рассуждая, получим общее число пар свиней для третьего года — (1 + z)(l + z)(l + z) = (1 + z)3. Значит, для десятого года можем записать: (1 +z)10= 1 ООО ООО. По условию, извлекать корни не разрешается. Попробуем найти z, используя степени двойки. Вспомним (например, слово килобайт), что 210 = 1024 ~ 1000. Так как 1 000 000 = 1000 • 1000, то можем записать. 210-2l0~ 1 000 000 ~(1 +z)10.
24 Глава 1. Разминка При умножении степеней с одинаковыми основаниями показатели степеней складываются: 210. 2I0 = 220. Далее, также вспомнив математику, запишем: 220 = 22'0 = (22)10 =410. Значит, 410 ~ (1 + z)10 или 4 = 1 + z, откудаz ~ 3.
Глава 2 Задачи посложнее О содержании данной главы говорит ее название... ► 2.1. Система счисления в... колесе Радиус колеса автомобиля равен 101* см. Колесо сделало 5000010 оборотов и проехало расстояние в 313* км. Найдите основание х системы счисления, в которой заданы размер радиуса колеса и расстояние. ► 2.2. Равенство В каких системах счисления соблюдается равенство 10р + 10р = 20Р1 ► 2.3. Неравенство В каких системах счисления 5^ + 5^ 10р? ► 2.4. Еще одно равенство В каких системах счисления 5Р + 5Р = 10Р? ► 2.5. Возможно ЛИ НЕРАВЕНСТВО? Существуют ли системы счисления с основаниями р и q9 в которых 12, >21,? ► 2.6. Уравнение В некоторой системе счисления записали уравнение Х6 • 2 = 75, где Х6 — двузначное число с неизвестной первой цифрой и второй цифрой 6, 75 — двузначное число с неизвестной первой цифрой и второй цифрой 5. Обе неизвестные цифры (иДиУ) не могут быть равны нулю. Определите, в какой системе счисления составлено это уравнение, и найдите все его решения (то есть все пары чисел X и 7, являющиеся решениями). ► 2.7. Двоичное число Про некоторое двоичное число известно, что в нем: 1) не более 40 цифр; 2) цифры чередуются; 3) количество одной из цифр составляет ровно 52% общего числа цифр. Найдите десятичный эквивалент этого числа. ► 2.8. О ПОЛНЫХ КВАДРАТАХ Существуют ли системы счисления, кроме десятичной, в которых является полным квадратом число:
26 Глава 2. Задачи посложнее а) 121? б)144? в) 169? г) 196? ► 2.9. О ПОЛНЫХ КУБАХ Существуют ли системы счисления, кроме десятичной, в которых является полным кубом число: а) 1331? б) 1728? ► 2.10. Повар и пицца В распоряжении повара имеются перец, лук, грибы, помидоры, морковь и анчоусы, причем все это можно, по его мнению, добавлять к сыру, чтобы приготовить пиццу (а можно и ничего не добавлять!). Сколько типов пиццы может приготовить повар? ► 2.11. Градуировка весов Есть пружинные весы, которые нужно отградуировать. Каким должен быть набор гирь-разновесов, который можно использовать для градуировки весов на интервал масс 1, 2, ..., 31 кг, чтобы число гирь в наборе было минимальным? ► 2.12. Семь кошельков Как разложить по семи кошелькам 127 рублевых монет, чтобы любую сумму от 1 до 127 рублей можно было бы выдать, не открывая кошельков (то есть вместе с кошельками)? ► 2.13. Банкир и конверты [7] Некому банкиру нужно было встретиться с важным клиентом, которому он должен выдать наличными заранее неизвестную сумму от 1 до 1 ООО ООО у. е. Чтобы не тратить время на отсчитывание денег, банкир дал указание своим кассирам заготовить некоторое количество конвертов с деньгами, на которых написаны содержащиеся в них суммы, чтобы потом просто отдать клиенту один или несколько конвертов, в которых и будет содержаться требуемая им сумма. 1. Какое наименьшее количество конвертов необходимо иметь? 2. Какова будет в этом случае полная сумма во всех конвертах? 3. Как, используя подготовленные конверты, набрать требуемую сумму? ► 2.14. Серебряная цепочка В гостиницу приехал путешественник. Выяснилось, что деньги он забыл дома. У него была лишь серебряная цепочка из 7 звеньев. Он договорился с хозяином гостиницы о том, что за каждый день пребывания в гостинице будет расплачиваться одним звеном цепочки. Какое звено цепочки надо аккуратно расцепить, чтобы прожить в гостинице 7 дней и ежеднев¬
Глава 2. Задачи посложнее 27 но расплачиваться с хозяином? (Хозяин может давать сдачу звеньями, полученными им ранее.) © Можно сказать, что первым литературным героем, который пользовался двоичной системой счисления, был Митрофан (Митрофанушка) из комедии Д. И. Фонвизина «Недоросль». Ведь, проводя расчеты, он утверждал, что «единожды нуль — нуль», а «нуль да нуль — нуль», что совпадает с действиями в двоичной системе. Еще пытался он определить, сколько будет «Один да один», правда, при этом задумался... ► 2.15. Количество цифр в двоичной записи Установите формулу, определяющую количество цифр в записи десятичного числа А в: а) в двоичной системе счисления; б) в g-ичной системе счисления. ► 2.16. Кощей Бессмертный и Иван Царевич Иван Царевич попал в плен к Кощею Бессмертному. Тот выдвинул Ивану такие условия. Кощей загадывает три двузначных числа а, b и с. Царевич должен назвать ему три числа X, Y и Z, после чего Кощей сообщит ему сумму аХ + ЪУ + cZ. Иван Царевич должен отгадать задуманные Кощеем числа, иначе ему отрубят голову. Как ему спастись? ► 2.17. Пропущенное число Какое число надо поставить вместо символа “?” в последовательности: 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 24,31, 100, ?, 10000. ► 2.18. Бедный торговец (старинная задача)1 В лавке бедного торговца вместо гирь было всего 4 камня. Однако с помощью этих камней он на рычажных чашечных весах совершенно правильно взвешивал предметы массой 1, 2, ..., 40 кг. Какого веса были камни? ► 2.19. Может ли быть такое? Один мальчик сказал «Позавчера мне было 10 лет, а в будущем году мне исполнится 13 лет». Может ли быть такое? ► 2.20. А ТАКОЕ? Один юноша написал: «Позавчера мне было 16 лет, а в будущем году мне исполнится 20». Может ли быть такое? 1 Обычно эту задачу называют «задачей Баше на взвешивание», потому что она была упомянута в книге Клода Каспара Баше «Problemes plaisans et dekctables» (фр. «Приятные и восхитительные задачи»), опубликованной в 1612 году. Баше спрашивал, какое минимальное количество гирь необходимо дня того, чтобы уравновесить любой вес от 1 до 40 фунтов? За 400 лет до Баше ее сформулировал Фибоначчи (Леонардо Пизанский). Этой задачей интересовался Дмитрий Иванович Менделеев в бытность свою управляющим Главной палатой мер и весов в Санкт-Петербурге.
28 Глава 2. Задачи посложнее ► 2.21. Три вопроса 1. Как, не производя никаких арифметических действий, найти остаток от деления любого двоичного числа на 2? 2. Как проще всего умножить любое двоичное число на 3? 3. Как проще всего умножить любое шестнадцатеричное число на десятичное число 24? ► 2.22. Еще раз об Алисе В главе 1 предлагалась задача, связанная с книгой Льюиса Кэрролла «Алиса в стране чудес». В цитате из книги Алиса утверждала: «Так я до двадцати никогда не дойду!». Попробуйте объяснить, почему девочка не дойдет до двадцати. ► 2.23. Последняя цифра Найдите последнюю цифру числа 250. ► 2.24. Количество нулей и количество единиц Дано двоичное число, состоящее из идущих подряд а единиц, после которых следуют b нулей. Найдите количество нулей п и количество единиц е суммы этого числа и числа 2е. ► 2.25. Импульсы с планеты т-Кита С планеты т-Кита поступают импульсы. Получена последовательность сообщений вида: Х[\] = 000100001001010101100001 Х[2\ = 00010001000010010101010101100001 Х[3]= 0001000100010000100101010101010101100001 ИТ. д. Выдвинута гипотеза: если сообщения^/'], i= 1, 2, 3, ... подчиняются некоторому простому закону, то на планете живут разумные существа. Разумные ли существа живут на т-Кита? ► 2.26. Об экономичности... систем счисления Мы привыкли, что понятие «экономичность» применяется к приборам, устройствам и т. п. Но оно связано и с системами счисления. Под экономичностью системы счисления обычно понимается количество чисел, которое можно записать в данной системе с помощью определенного количества знаков. Поясню это на примере. Чтобы в десятичной системе записать 1000 чисел (от 0 до 999), необходимо 30 знаков (по 10 цифр для каждого из трех разрядов). А, например, в двоичной системе с помощью 30 знаков можно записать 215 различных чисел (т. к. для каждого двоичного разряда нужны только две цифры 0 и 1, то с помощью 30 цифр мы можем записывать числа, содержащие до 15 разрядов). Но 215 > 1000, поэтому, имея 15 двоичных разрядов, можно записать больше различных чисел, чем с помощью трех десятичных. Таким образом, двоичная система более экономичная, чем десятичная.
Глава 2. Задачи посложнее 29 Но какая из систем счисления самая экономичная? Для ответа на этот вопрос рассмотрим следующую конкретную задачу. Пусть в нашем распоряжении имеется 60 знаков. Мы можем, разбив их на 30 групп по два элемента в каждой, записать с их помощью в двоичной системе любое число, имеющее не больше 30 двоичных разрядов, т. е. в общей сложности 230 чисел. Те же 60 знаков мы можем разбить на 20 групп по три элемента и, пользуясь троичной системой, записать З20 различных чисел. Далее, разбив 60 знаков на 15 групп по четыре элемента в каждой, можно применить четверичную систему и записать 415 чисел и т. д. В частности, воспользовавшись десятичной системой (т. е. разбив все знаки на 6 групп по 10 элементов в каждой), мы могли бы записать 106 чисел, а применив шестидесятеричную систему, можно было бы с помощью 60 знаков записать только 60 чисел. Посмотрим, какая из возможных здесь систем самая экономичная, т. е. позволяет записать с помощью данных 60 знаков наибольшее количество чисел. Иными словами, речь идет о том, какое из чисел 230, З20, 415, 512, 610, 106, 125, 154, 203, 302, 60 наибольшее. Предложите своим ученикам получить ответ на обсуждаемый вопрос с помощью электронной таблицы Microsoft Excel или подобной, построив график зависимости перечисленных чисел от основания соответствующей системы счисления (см. рис. 2.1). ► 2.27. Задача Иосифа Флавия — частный случай Задача, которую называют «задачей Иосифа Флавия», основана на легенде о том, что известный историк первого века Иосиф Флавий выжил и стал известным благодаря математической одаренности. В ходе Иудейской войны он в составе отряда из 41 иудейского воина был загнан римлянами в пещеру. Предпочитая самоубийство плену, воины решили выстроиться в круг и последовательно убивать каждого третьего из живых до тех пор, пока не останется ни одного человека2. Однако Иосиф, наряду 2 По-видимому, предполагалось, что последний должен был убить себя сам.
30 Глава 2. Задачи посложнее с одним из своих единомышленников, счел подобный конец бессмысленным — он быстро вычислил спасительные места в круге, на которые поставил себя и своего товарища. Эта задача известна у нас в стране как задача о считалке. Во многих играх (прятки и др.), для того чтобы выяснить, кому «водить», кто-либо из играющих произносит недлинный стихотворный текст — считалку. Играющий, на которого попадает последнее слово текста, выходит из круга. Кто последним останется в кругу, тому и водить. В общем виде задача формулируется так: «По кругу размещены п человек. Задан параметр расчета к, то есть каждый &-й человек будет выбывать из круга. Требуется определить р — порядковый номер человека, который останется в круге последним». Предложите своим ученикам решить эту задачу для частного случая — когда к = 2. Обращаем внимание на то, что при этом нет необходимости разрабатывать программу на каком-либо языке программирования — задача может быть решена путем рассуждений. Указания по выполнению. Сначала нужно рассмотреть вариант, когда значение п есть степень двойки, а затем исследовать общий случай. © В мире 10 категории людей — те, которые понимают двоичную систему счисления, и те, которые ее не понимают. ► 2.28. Как узнать номера квартир В поселке, в котором живут учащиеся, в домах не более 30 квартир. Однажды учитель информатики решил узнать номера квартир каждого из 25 учеников класса. Он может произвести следующую операцию: прочитать список из нескольких (возможно — одного) номеров квартир и попросить ребят, живущих в соответствующих квартирах, поднять руки. Какое минимальное число раз он должен проделать такую операцию, чтобы узнать номер квартиры каждого ученика? ► 2.29. Друзья обмениваются новостями 32 друга одновременно узнали 32 новости, причём каждый узнал одну новость. Они сразу же стали звонить друг другу и обмениваться новостями. Каждый разговор длится 1 час. Какое минимальное количество часов необходимо, чтобы все узнали все новости? (Понятно, что во время одного разговора можно передать сколько угодно новостей.) ► 2.30. Необычный футбольный матч Тренер футбольной команды решил провести тренировочную игру своей команды, состоящей из двух вратарей и 20 полевых игроков, следующим образом. Он разбил всех на две «полукоманды». Вратари все время защищают ворота одной и той же половины, а полевых игроков тренер каждые 10 минут переводил из одной «полукоманды» в другую.
Глава 2. Задачи посложнее 31 Успеет ли тренер за один 40-минутный тайм игры добиться того, чтобы любые два полевых футболиста в какой-то из 10-минутных отрезков времени оказались в разных «полукомандах»? ► 2.31. Подсчет числа единичных битов В 16-битной памяти условной ЭВМ записано двоичное число: 1 1 1 0 0 1 0 1 1 1 0 0 1 0 1 1 Рис. 2.2 Другой памяти нет. Имеются также три устройства: • № 1 — для считывания значений, записанных в нескольких последовательных битах памяти; • № 2 — для суммирования 1-4-разрядных двоичных чисел (результат может быть 5-разрядным); • № 3 — для записи 2-5-разрядных двоичных значений (с возможными начальными нулями) в память. Предложите алгоритм определения количества единичных битов в заданном 16-битном двоичном числе. Задачи про степени двойки ► 1. Городские слухи В небольшой городок Компьютеринск, взрослое население которого составляло 4500 человек, приехал в 8 часов утра житель столицы и привез всем интересную новость. В доме, где приезжий остановился, он сообщил ее только двум местным жителям; это заняло, скажем, четверть часа. Узнав эту новость, каждый из двух граждан поспешил рассказать ее двум другим. Это потребовало также четверти часа. Каждый из четырех вновь узнавших новость поделился ею в ближайшие четверть часа с двумя другими гражданами и т. д. Когда поголовно все взрослое население Компьютеринска будет осведомлены о новости, которую в 8 часов утра была известна только одному человеку? ► 2. Как отмерить 31 г сахара? Дан мешок сахарного песка, чашечные весы и гирька в 1 г. Как за минимальное число взвешиваний отмерить 31 г сахара? ► 3. Чтение книги Взяв в библиотеке новую книгу, Митя каждый день читал половину непрочитанного и еще полстраницы. В результате всю книгу он прочитал за п дней. Сколько страниц было в книге?
32 Глава 2. Задачи посложнее ► 4. ЧТО БОЛЬШЕ? Что больше СТЕПЕНИ12 или ДВА20, если одинаковыми буквами зашифрованы одинаковые цифры, а разными буквами — разные цифры. При решении степени числа 10 не исследуйте, а проанализируйте степени числа ... — впрочем, подумайте сами ©. ► 5. БИТ И КИЛОБИТ Учитывая требование предыдущей задачи, установите, что больше: 1) БИТ4 или Z/2 • КИЛОБИТ, если Z — число, равное количеству битов в килобите, а число БИТ — минимально возможное; 2) БИТ4 или 4 КИЛОБИТ2, если КИЛОБИТ — минимально возможное число. ► 6. Группа задач «Сколько единиц и сколько нулей?». Но посложней 1. Найдите количество нулей п и количество единиц е в двоичной записи результата выражения: 1) 22 +22; 2)2т + 2100; 3) 2а + 2°. 2. Найдите количество единиц е в двоичной записи результата выражения: 1) 22 +24; 2) 250 + 220; 3) 2а + 2* (афЪ). 3. Найдите количество нулей п и количество единиц е в двоичной записи результата выражения: 1) 24 -22; 2) 2|00 - 225. 4. Найдите количество нулей п в двоичной записи результата выражения: 1) 22 +24; 2) 250 + 220. 5. Найдите количество нулей п и количество единиц е в двоичной записи результата выражения: 1) (24 - 1) + 24; 2) (2100- 1) + 2100. 6. Найдите количество нулей п и количество единиц е в двоичной записи результата выражения: 1) (25 - 1) + 22; 2) (2100 - 1) + 225. 7. Найдите количество нулей п и количество единиц е в двоичной записи результата выражения:
Ответы к главе 2 33 1) (25 - 1) - 22; 2) (2100- 1)-225. 8. Найдите количество нулей п и количество единиц е в двоичной записи результата выражения: 1) 25-(23 - 1); 2) 2100-(230- 1). 9. Найдите количество нулей п и количество единиц е в двоичной записи результата выражения: 1)(2б- 1) + (22- 1); 2) (26- 1) + (24 - 1); 3) (2°- 1) + (2Ь - 1) при а> Ь. 10. Найдите количество нулей п и количество единиц е в двоичной записи результата выражения: 1) (24 - 1) + (24 - 1); 2)(2°- 1) + (2е- 1). Выдающийся русский поэт и новатор Велемир Хлебников (1885-1922) в своей книге «Доски Судьбы» пытался открыть законы времени. В частности, он писал, что, «Согласно основному закону, через 2п дней пространственная природа событий повторяет себя...». Ответы к главе 2 2.1. Пусть R — радиус колеса, п — число оборотов колеса, S — пройденное расстояние. Так как длина окружности колеса равна 2nR , то имеем: S - 2nRn. Теперь запишем значения 101* и 313* в десятичной системе счисления: 101*= 1 • х2 + 0 • х1 + 1, 313*= 3 • х2 + 1 • х{ + 3. После этого получим уравнение вида 3 • х2 + х + 3 = (2 • 3,14 • (х2 + 1) • 50000)/105 (правую часть уравнения переводим в километры). После преобразований получим 0,14 • х2 -х + 0,14 = 0. Умножая обе части уравнения на 100, получим квадратное уравнение 14х2- 100х + 14 = 0, у которого подходящий корень равен 7. 2.2. Прежде всего, ясно, что основание р должно быть больше 2, так как в двоичной системе цифра 2 в алфавите отсутствует. Далее, запишем каждое число в равенстве в развернутой форме: Р +Р = 2Р- Это равенство справедливо при любых значения р (естественно, кроме р = 2). Можно также представить в развернутой форме записи число 20,, а в левой части равенства учесть, что 10, =рю- Ответ: в системах счисления с основанием р > 3.
34 Глава 2. Задачи посложнее 2.3. Здесь в любом случае р > 5. Далее, так как в любой системе счисления \Ор=р\0, то, записав в развернутой форме каждое из слагаемых в левой части: 5 + 5 фр9 имеем, что неравенство выполняется при р Ф 10. Ответ: в системах счисления с основаниями р, удовлетворяющим условиям 6 < р < 9 или р> 11. 2.4. Из ответа на предыдущую задачу следует, что это возможно только в десятичной системе счисления. 2.5. Из записи приведенных в условии чисел следует, что р > 2 и q > 2. Так как \2Р =р + 2, а 21^ = 2q + 1, то исходное неравенство можно переписать в виде: р + 2 > 2q + 1, или р > 2q — 1. Учитывая также ограничения на «меньшее» основание q, можем сказать, что исходное неравенство выполняется при всех системах счисления с основаниями q>2mp>2q- 1. 2.6. Запишем уравнение «в столбик», заменив умножение сложением: Y 5 Сумма чисел 6 и 6 может оканчиваться на 5 только в семеричной системе счисления (67 + 67 = 157). Далее, так как получающая сумма — двузначная, а из крайнего справа разряда «в уме» переходит 1, то возможные варианты решения: 1)Х= 1, У = 3; 2) X = 2, У = 5. 2.7. Искомое число не может начинаться с нуля, значит, оно имеет вид 1010...0101. По условию, доля единиц в нем — 52%, то есть на 4% больше, чем нулей, а количество единиц больше на 1. Итак, 4% соответствует — 1, то есть 100% — 25. Итак, общее число цифр — 25, из них 13 единиц и 12 нулей: 1010101010101010101010101. Десятичный эквивалент этого числа равен 22369621. Можно также рассуждать так. Обозначим общее количество цифр в искомом числе — К, количество единиц — К1, нулей — КО, причем К — нечетное число. Чтобы доля единиц {КМК • 100) и доля нулей (КО/К • 100) были целым числом, значение К должно быть равно 5, 15, 25, 35 (10, 20 и 30, как четные числа, не учитываем).
Ответы к главе 2 35 Числа 15 и 35 — не являются делителями числа 100, то есть целая доля единиц и нулей не получится. Остаются значения 5 и 25. Вариант с тремя единицы и двумя нулями не подходит (доли цифр 60% и 40%). Значения К\ = 13 и КО = 12 соответствует условию (доли цифр 52% и 48%). 2.8 а. Если записать умножение в «столбик»: 1 1 X J 1_ 1 1 1 1 1 2 1 то можно увидеть, число 121 является квадратом числа 11 в любой системе счисления с основанием, большим двух (цифра 2 в записи числа имеется). Можно также исследовать развернутую запись числа 121: тр=р2 + 2р+ 1 = о +1)2. Выражение р + 1 соответствует свернутой записи числа 11 в /?-ичной системе счисления, что позволяет сделать тот же вывод (121, =р2 + 2р + 1 = = (р+1)2 = (11„)2). б. Существуют (все системы счисления с основанием, большим 4). в. Существуют (все системы счисления с основанием, большим 9). г. Здесь ответ, совпадающий с ответом на предыдущую задачу, является неверным! В самом деле, если исследовать развернутые записи чисел 196, и 14,, то можно получить: \96р=р2 + 9р + 6 (1) \4р=р + 4 (2) (14,)2=р2 + 8р+16 (3) Приравняв выражения (1) и (3): р2 + 9р + 6 =р2 + 8р + 16, имеем: р= 10. Итак, только в десятичной системе число 196 является полным квадратом. 2.9 а. В десятичной системе число 1331 является кубом числа 11. Если опять же исследовать умножение в «столбик»: 1 2 1 X 1 1 1 2 1 1 2 1 13 3 1
36 Глава 2. Задачи посложнее то можно увидеть, число 1331 является кубом числа И в любой системе счисления с основанием, большим 3. Можно также исследовать развернутую запись числа 1331: 1331Р =р3 + Зр2 + Ър + \ =(р+ I)3. Выражение р + 1 соответствует свернутой записи числа 11 в р-ичной системе счисления. б. Нет. 2.10. Все возможные варианты состава пиццы (кроме сыра) можно представить в виде табл. 2.1, в которой цифра 1 означает, что соответствующий компонент в продукте используется, цифра 0 — не используется. Таблица 2.1 №№ пп Перец Лук Грибы Помидоры Морковь Анчоусы 1 0 0 0 0 0 0 2 0 0 0 0 0 1 3 1 1 1 0 1 0 4 0 0 1 1 0 1 Из табл. 2.1 видно, что число различных вариантов пиццы равно десятичному числу, которое в двоичной системе счисления выглядит как 111111, увеличенному на 1 (по условию можно не использовать ни один из перечисленных компонентов — такому «составу» пиццы соответствует вариант номер 1), т. е. 64. 2.11. Здесь рассуждения такие. 1. Десятичное число 31 в двоичной системе счисления выглядит так: 11111, а все числа, меньшие, 31, в этой системе состоят (естественно) из единиц и нулей. 2. Любое двоичное число от 1 до 11111 можно получить, складывая двоичные числа 1, 10, 100, 1000 и 10000 (убедитесь в этом!). Эти числа есть двойка в степени 0, 1, 2, 3 и 4, т. е. десятичные цифры 1, 2, 4, 8 и 16. Значит, минимальный набор гирь-разновесов, который можно использовать для градуировки весов на интервал масс 1-31 кг, это гири массой 1,2, 4, 8 и 16 кг. Например, чтобы отградуировать весы на 3 кг (310 = 112) , можно использовать гири массой 1 и 2 кг (этим значениям соответствуют двоичные числа 1 и 10), на 13 кг (13 ю = 1Ю12) — гири массой 1, 4 и 8 кг (12, 1002 и 10002). 2.12. В первый кошелек надо положить одну монету, во второй — две, в третий — четыре, в четвертый — восемь, в пятый — шестнадцать, в шестой — тридцать две, в седьмой — шестьдесят четыре. Если этим кошелькам присвоить условные номера соответственно 1, 2, ..., тогда лю-
Ответы к главе 2 37 бую сумму от 1 до 127 рублей можно получить следующим образом. Нужно перевести эту сумму в двоичную систему счисления, после чего взять те кошельки, номера которых равны номерам тех разрядов двоичной записи суммы, где представлена цифра 1 (разряды следует нумеровать справа налево, начиная с 1). Например, чтобы выдать сумму в 109 рублей, надо отдать кошельки с номерами 7, 6, 4, 3 и 1, так как 10910 = 11011012 (см. разъяснения к задаче 2.11). За этой методикой скрыт достаточно логичный алгоритм выдачи сдачи клиенту, записанный некогда даже в инструкции для работников торговли. А он очень прост — сдачу надо выдавать, начиная с самых больших купюр. В нашем случае нужно найти кошелек с наибольшей суммой денег, не превосходящей требуемую, то есть наибольшую степень двойки, не превосходящую требуемого количества денег. Если требуемая сумма равна этой степени, то алгоритм заканчивает работу. В противном случае опять выбирается конверт с наибольшей суммой денег, не превосходящей оставшуюся и т. д. Алгоритм закончит работу, когда вся сумма будет набрана. 2.13. Конечно, можно просто заготовить конверты со всеми суммами от 1 до 1 ООО ООО. Но где взять столько конвертов? (Да и зачем тратить деньги на них? ©) Есть более рациональный подход. Какой — аналогичный решению предыдущей задачи. Надо положить в первый конверт 1 у. е., а в каждый следующий класть вдвое большую сумму, чем в предыдущий. Тогда, например, в 5-м конверте будет 16 у. е., в 6-м — 32 и т. д. Проведя расчеты, например, на калькуляторе, можно установить, что в 18-м конверте будет 131072 у. е., ..., в 21-м — 1 048 576 у. е., но он уже явно не понадобится, а вот с 20-й конверт с 1048576/2 = 524288 у. е. может и пригодиться. Дополнительное задание для самостоятельной работы учащихся3 ► 1. При проведении описанных расчетов некоторые вычисления являются явно лишними и их можно не проводить. Если в к-м конверте сумма денег составляет s, то в каком конверте будет сумма: 1) в 4 раза большая? 2) в 8 раз большая? 3) в 2: раз большая? 4) равная s2? Конечно, все равно расчеты достаточно трудоемкие. А нельзя ли получить формулу для расчета минимального числа конвертов, необходи- 3 Ответы на дополнительные задания приведены в конце книги.
38 Глава 2. Задачи посложнее мых для выдачи некоторой суммы N7 К сожалению, в общем случае — нельзя. Но можно значительно упростить расчеты, если определить максимальную степень двойки, не превышающую N. Если такая степень известна и равна 5, то число конвертов равно log2S + 1, где log2S — логарифм числа S по основанию 2. Например, если N = 70, то S = 64, а искомое число конвертов: log264 + 1 = 6 + 1 = 7. Для набора суммы от 1 до 1 ООО ООО общее количество денег во всех конвертах составит 1 048 576. Набрать же требуемую сумму, используя подготовленные конверты, можно, применив методику, описанную применительно к задаче 2.12. Дополнительные задания для самостоятельной работы учащихся ► 2. Установите, для каких значений сумм, не превышающих 25, можно рассчитать требуемое минимальное число конвертов «в уме». ► 3. Как рассчитать сумму 1 + 2 + 4 + ... + 2к, не используя многочисленные операции сложения? Например, чему равна сумма 1 + 2 + 22 + ... + 29, если 2 ю = 1024? Предложите также своим ученикам разработать компьютерную программу для решения задачи определения номеров конвертов, в которой не будет проводиться перевод чисел в двоичную систему счисления. Методика разработки такой программы приведена в приложении 3. 2.14. Учитывая решение предыдущих задач, можно понять, что десятичные числа 1, 2, ..., 7 можно «получить» из чисел 1, 2 и 4. Значит, надо иметь 1, 2 и 4 звена. Их можно получить, если расцепить третье или пятое звенья — цепочка распадется на три части: в одной 2 звена, в другой — 4 звена, а в третьей части — одно (разъединенное) звено. С их помощью удастся расплатиться в течение семи дней так, как показано в табл. 2.2. Таблица 2.2 Номер дня проживания, d Количество звеньев цепочки, отдаваемых в d -й день Количество звеньев, возвращаемых хозяином 1 1 - 2 2 1 3 1 4 4 1 +2 5 1 - 6 2 1 7 1 -
Ответы к главе 2 39 Дополнительные задания для самостоятельной работы учащихся ► 1. Решите задачу для случая, когда в цепочке — 15 звеньев и в гостинице надо прожить 15 дней и ежедневно. ► 2. Разработайте правило, по которому можно для каждого дня определить, какую часть цепочки путешественник должен отдавать хозяину и какую часть последний, в случае необходимости, должен возвращать путешественнику. 2.15 а. Проанализировав двоичную запись десятичных чисел А от 0 до 16 (см. табл. 2.3), можно установить, что искомая формула имеет вид: [log2А] + 1, где квадратные скобки соответствуют целой части числа, записанного между ними. Таблица 2.3 А Двоичная записьА Количество цифр к 0 0 1 1 1 1 2 10 2 3 11 2 4 100 3 5 101 3 6 110 3 7 111 3 8 1000 4 9 1001 4 15 1111 4 16 10000 5 Аналитическое решение Заданное число А в развернутой форме в /?-ичной системе счисления (см. выше) имеет вид: апрп + а„_ \рп~ 1 + an_ip”~2+ ... + ахр + а0у 0 < а,<р, п> О, Заменим в развернутой форме записи все цифры на максимальную (на р - 1) и покажем, что в этом случае число строго меньше, чем рп + \ Очевидно также, что такое число меньше, чем рп, так как ап > 1: р" <= + а„-\РП~' + а„_2Р”'2 + ••• +а\р + а0<(р- 1)-рп+(р- 1) •р"'1 + + ...+ (p-l)-p + (p-l)=pn+l-l<pn+l.
40 Глава 2. Задачи посложнее Последнее равенство получено с использованием формулы суммы п + 1 членов геометрической прогрессии, первый член которой равен (р - 1), а знаменатель — р. Итак, общее количество цифр к = п + 1. Например, для числа 100 и р = 2: 26 < 100 < 26, то есть двоичная запись числа 100 будет состоять из 7 цифр. Можно также, так сказать, «идти» от искомой величины количество цифр к. Проиллюстрируем рассуждения на примере двоичной системы. Числа, записываемое к цифрами в двоичной системе счисления, — это числа из диапазона от 2к ~ 1 до 2к - 1 (убедись в этом, например, проанализировав табл. 2.3). Это означает, что при заданном А нас интересует к такое, что 2к ~ 1 < А < 2к - 1. Последние неравенства можно записать так: 2к~1 < А < 2к. Отсюда (вспомните определение логарифма) к - 1 < log2^ < к и к - 1 = [log*4], к = [log*4] + 1. б. Числа, записываемое к цифрами в д-ичной системе счисления, — это числа из диапазона от qk~1 до qk- 1 (убедись в этом). Это означает, что при заданном А нас интересует к такое, что qk~ х < А < qk - 1. Последние неравенства можно записать так: qk~] < А < qk. Отсюда к - 1 < logqA < к и к - 1 = [log^], к = [log^4] + 1, где квадратные скобки соответствуют целой части числа, записанного между ними. 2.16. Чтобы спастись, Иван Царевич должен назвать числа 10000 (1002), 100 и 1. В этом случае сумма аХ + bY + cZ, сообщенная Кощеем, будут представлять собой запись числа в 100-ичной системе счисления с тремя двузначными «цифрами», равными а, b и с. Например, если Кощей Бессмертный загадал числа 23, 70 и 66, то он должен будет сообщить сумму 237066. По этому шестизначному числу Иван Царевич может определить задуманные двузначные числа. 2.17. Представление числа 16 в троичной системе счисления, т. е. 121. Действительно, в последовательности записаны представления числа 16 в шестнадцатеричной системе счисления, потом в 15-ичной, 14-ичной и т. д. 2.18. Прежде всего, вспомним задачу 2.11. При ее решении использовалась запись чисел в двоичной системе счисления. На рычажных чашечных весах при взвешивании груза камни можно размещать на обеих чашках — и на свободной, и вместе с грузом. Следовательно, в нашей задаче надо найти такой набор чисел, которые можно не только складывать, но и вычитать. Если здесь также рассматривать представление десятичных чисел 1, 2, ..., 40 в двоичной системе счисления, то выяснится, что для взвешивания понадобится 6 разных камней — массой 1, 2, 4, 8, 16 и 32 кг (убедитесь, что с их помощью можно определить все нужные значения!). В условии же задачи говорится только о четырех камнях. Значит, надо попробовать использовать другие системы счисления. Чтобы найти, какую именно, рассмотрим более простую зада¬
Ответы к главе 2 41 чу: «С помощью какого минимального набора камней разной массы можно взвешивать предметы массой 1, 2, 3 и 4 кг?». Ответ здесь такой: с помощью двух камней — массой 1 и 3 кг. Это должно навести на мысль о том, что нужно использовать троичную систему счисления. Действительно, любое троичное число от 1 до 1111 (40 ю = 1111з) можно получить, складывая или вычитая числа 13, 103, 1003, и 10003 (убедитесь в этом!). Эти числа есть тройка в степени 0, 1, 2 и 3, т. е. десятичные числа 1, 3, 9 и 27, — именно такой массы и были камни в лавке бедного торговца. Дополнительное задание для самостоятельной работы учащихся ► Подумайте, как определить, какие камни (или гири такого же веса) надо класть вместе с грузом, а какие — на свободную чашку, чтобы при грузе массой А кг весы были в равновесии. 2.19. Сказанное мальчиком может быть, если его день рождения — 31 декабря, а мальчик говорит это 1 января. 2.20. Из предыдущей задачи следует, что 3 года — максимально возможная разность возраста человека между «возрастом в будущем году» и «возрастом позавчера». Кроме того, такая разность может быть равной 1 (позавчера было Vполных лет, в будущем году исполнится (V + 1) лет) и 2 (день рождения — «вчера», позавчера было V полных лет, вчера стало (V + 1) лет, в будущем году исполнится (V + 2) лет). Если же разность записанных возрастов превышает 3, то это значит, что возрасты указаны в системе счисления, отличной от десятичной. О такой возможность говорит и тот факт, что в условии задачи использовано слово «написал» (в недесятичных системах счисления о числе 16 нельзя сказать: «шестнадцать»). Рассмотрим возможные варианты для систем счисления с основанием 6-9 (см. табл. 2.4). Таблица 2.4 В десятичной системе В 6-ичной системе В 7-ичной системе В 8-ичной системе В 9-ичной системе 6 10 6 6 6 7 11 10 7 7 8 12 11 10 8 9 13 12 11 10 10 14 13 12 11 И 15 14 13 12 12 20 15 14 13 13 21 16 15 14
42 Глава 2. Задачи посложнее Окончание таблицы 2.4 В десятичной системе В 6-ичной системе В 7-ичной системе В 8-ичной системе В 9-ичной системе 14 ' 22 20 16 15 15 23 21 17 16 16 24 22 20 17 17 25 23 21 18 18 30 24 22 20 19 31 25 23 21 20 32 26 24 22 21 33 30 25 23 22 34 31 26 24 Из табл. 2.4 следует, что написанное юношей может быть в трех случаях: 1) когда разность «десятичных» возрастов равна 1 (фактические возрасты — 14 и 13 лет), возрасты написаны в семеричной системе; 2) когда разность «десятичных» возрастов равна 2 (фактические возрасты — 14 и 16 лет), возрасты написаны в восьмеричной системе; 3) когда разность «десятичных» возрастов равна 3 (фактические возрасты — 15 и 18 лет), возрасты написаны в девятеричной системе; В табл. 2. 4 соответствующие значения выделены курсивом и полужирным начертанием. Дополнительные задания для самостоятельной работы учащихся ► 1. Один мальчик написал: «Позавчера мне было 15 лет, а в будущем году мне исполнится 20». Может ли быть такое? ► 2. Один юноша написал: «Позавчера мне было 17 лет, а в будущем году мне исполнится 20». Может ли быть такое? 2.21 1. Остаток от деления любого двоичного числа на 2 равен его последней цифре. 2. Чтобы умножить любое двоичное число на 3, достаточно сначала умножить его на 2 (приписав справа нуль — см. выше), а затем прибавить к полученному числу исходное, например 1101001012 • 3i0 = 11010010102 + + 1101001012= 100111011112. 3. Чтобы умножить любое шестнадцатеричное число на 2410, достаточно найти сумму произведений этого числа на 1610 и на 810. Первое произведение (на 16ю) можно получить, приписав к заданному числу справа нуль. Второе произведение равно половине первого.
Ответы к главе 2 43 Можно также сложить данное число с его половиной и к полученной сумме приписать 0. Однако при этом возникает проблема расчета половины заданного числа. Конечно, когда делимое число состоит из одних четных цифр, найти частное от его деления на 2 легко. А когда в первом произведении есть нечетные цифры? Умножать же заданное число на 8 нерационально (для этого надо помнить таблицу умножения в шестнадцатеричной системе). Рациональный прием для определения произведения шестнадцатеричного числа А на 8 состоит в следующем. Для вычисления А 16 • 8 надо перевести числа А и 8 в двоичную систему счисления (превратив каждую шестнадцатеричную цифру в тетраду4 двоичных). Так как 8i6= 10002, то для нахождения произведения дописываем в записи числа А справа три нуля и с помощью тетрад возвращаемся в шестнадцатеричную систему счисления. Например: 137]6 • 2410 = 13716 • 18i6 = 137016 + 13716 • 816 = 1370i6 + + 1001101112 • 10002= 137016+ 1001 1011 10002= 137016 + 9В816. 2.22. Для системы счисления, основание которой — 18 («восемна- дцатеричная»), произведение 4 • 5 равняется 12. В системе счисления с основанием 21 справедливо равенство 4 • 6 = 13. Если продолжить этот ряд, каждый раз увеличивая основание на 3, то произведения будут увеличиваться на единицу: 424 ' 724 = 1424; 427 * 827 = 1527; 4зо * 9зо = 1630; 4зз ’ Ю33 = 1733; 4зб * 1 Ьб= 1836; 4з9 * 12з9 = 1939; Но при умножении на 13 мы не дойдем до 20. Произведение 442 • 1342 равняется не 20, а числу, начинающемуся на цифру 1, за которой будет следовать символ, обозначающий цифру 10. Так что героиня книга была права, утверждая, что не дойдет до числа 20!5. Впервые такое объяснение дал A. JI. Тейлор в своей книге «Белый рыцарь» (A. L. Taylor. The White Knight.-L., 1952). 2.23. Выпишем последние цифры нескольких начальных степеней двойки: 2, 4, 8, 6, 2, 4, 6, 8, 2, ... . Видно, что через каждые 4 цифры они повторяются (25, 29, как и 21, оканчивается на 2; 26, как и 22, оканчивается на 4; 27, как и 23, оканчивается на 8, и т. д.) Поскольку длина «цикла» равна 4, то можем утверждать, что последняя цифра числа 250 будет такой же, как и последняя цифра числа 2 в степени, равной остатку от деления 50 на 4, то есть во второй степени. Итак, ответ — 4. 4 Группу из четырех цифр. э Еще раз напомним, что о недесятичном числе 20 нельзя говорить: двадцать.
44 Глава 2. Задачи посложнее 2.24. Здесь следует рассмотреть три случая: 1 )с<Ь; 2) с = Ъ\ 3) с> Ъ. Но прежде всего заметим, что 2е — это (с + 1)-значное двоичное число, в котором одна единица и с нулей (см. табл. 2.5). Таблица 2.5 с Десятичное число я = 2е Двоичная запись числа п Количество единиц Количество нулей Общее количество цифр 0 1 1 1 0 1 1 2 10 1 1 2 2 4 100 1 2 3 3 8 1000 1 3 4 4 16 10000 1 4 5 Итак, три случая. В первом случае ответ достаточно очевиден: п = b - I, е = а + 1. Проанализируем случай с = Ь. Ясно, что количество нулей в слагаемых будет одинаковым (b или с). При сложении «вручную» эти нули мы бы перенесли в итоговую сумму. Кроме того, понадобилось бы сложить а-значное число из одних единиц и 1. Последняя сумма представляет из себя число вида 100... (а нулей). Следовательно, искомые значения в этом случае: е= 1, л = а + Ь (или п = а + Ъ). Анализ нескольких конкретных примеров для случая с > Ъ показывает, что количество единиц равно е ~ (с - b) + 1. А так как вся исследуемая сумма будет (а + b + 1)-значной, то количество нулей п - (а + Ъ + 1) - ((с - b) + 1) = = а + 2Ъ - с. 2.25. Проанализировав полученные сообщения, можно увидеть, что их начальные части совпадают в 2-7 первых импульсах (битах). Порции из 2-3 и 5-7 битов никакой закономерности в сообщениях не дают. А вот разбиение сообщений на полубайты (4 бита) дает следующее: Х[\] = 0001 0000 1001 0101 0110 0001 Х[2] = 0001 0001 0000 1001 0101 0101 0110 0001 Х[3] = 0001 0001 0001 0000 1001 0101 0101 0101 0110 0001 Дальнейший анализ удобнее проводить, переведя полубайты в десятичную систему счисления6: 6 Хотя и в двоичном виде можно увидеть закономерность, о которой пойдет речь ниже.
Ответы к главе 2 45 ATI] = 1 09 5 6 1 Х[2] = 1 1 0 9 5 5 6 1 АТЗ] = 1 1 10955561 Видна закономерность! Можно сказать, что сообщения представляют собой последовательность полубайтов вида (в десятичной системе): Х[п] = 1 1 1 ... 1 1 1 0 9 5 5 5... 5 5 5 6 1. ' V / ' У ' п единиц п пятерок Уже одно это говорит, что на планете живут разумные существа. Но какие числа обозначают полученные сообщения? Для ответа на этот вопрос вашим ученикам придется вспомнить математику. 2.26. Троичная система счисления. 2.27 А. Нетрудно убедиться, что когда число п есть степень двойки, то последним в кругу останется человек, имевший в исходной нумерации номер 1. Б. Когда число п — любое (например, 20), то: 1) сначала из круга выбудет какое-то число людей до момента, когда в кругу останется количество людей, равное степени двойки — в рассматриваемом примере — 16. Это означает, что выбыло 4 человека, а среди них последним выбыл 8-й; Таблица 2.6 Значение п Двоичное представление п Двоичное представление Комментарий к расчету 20 10100 21 10101 Соответствующая максимальная степень двойки (т) 16 10000 16 10000 Сколько человек выбыло к моменту, когда осталось т человек (v) 4 10 10 0 1 0 0 0 0 5 10 10 1 1 0 0 0 0 Исходное число п без первой единицы и возможных начальных нулей 1 0 0 1 0 1 Номер последнего выбывшего человека 8 1000 (в двоичной системе 100 • 2) 10 1010 (в двоичной системе 101 -2) Чтобы умножить v на 2 и увеличить полученное число на 1, можно приписать к v справа единицу Номер человека, который останется в кругу последним 9 1001 (в двоичной системе 100 • 2 + 1) 11 1011 (в двоичной системе 101*2+1)
46 Глава 2. Задачи посложнее 2) среди оставшихся 16 человек тому, кто стоит первым после последнего выбывшего на этот момент, можно рассматривать как имеющего номер 1, и именно он, в соответствии с пунктом А, останется последним в кругу. Номер этого человека в исходном состоянии — 9. В общем виде методика нахождения номера этого человека такая: из общего количества участников нужно исключить максимальную степень двойки, оставшееся число умножить на 2 и прибавить единицу. Например, если в круге будет стоять 271 человек, то номер последнего оставшегося будет равен (271 - 256) • 2 + 1 =31. Можно также использовать следующую методику нахождения искомого номера: 1) число п перевести в двоичную систему; 2) в полученном двоичном числе первую слева единицу приписать в конце (возможные начальные нули при этом не учитывать); 3) перевести получившееся число в десятичную систему счисления. Проиллюстрируем ее на примерах /7 = 20ил = 21 (см. табл. 2.6). Обоснование методики приведено в последнем столбце таблицы. Дополнительные задания для самостоятельной работы учащихся ► 1. Подумайте над вопросом — имеются ли в частном случае задачи Иосифа Флавия при к = 2 такие значения я, при которых последним в кругу останется человек с четным номером? ► 2. «Кот и мыши» Коту снится, что его окружили тринадцать мышей. Двенадцать из них серые, а одна белая. Слышит кот, как кто-то говорит ему: «Мурлыка, ты можешь съедать каждую вторую мышку. Но отсчитывай их по кругу в одном направлении. Если ты начнешь счет с белой, то какая будет съедена последней? Или вот еще тебе задача — если последней ты должен съесть белую мышку, то с какой мышки тогда начать счет?». Помогите коту решить эти две задачи. Используйте метод с записью чисел в двоичной системе счисления. 2.28. На каждой операции называть один номер квартиры нерационально — для решения задачи понадобится 30 операций (естественно, что случай, когда, например, все ученики класса живут в квартирах с номерами 1 и 2, а учитель назвал эти номера во время двух первых операций, учитываться не должен). Учителю следует представить числа от 1 до 30 в двоичном виде — все в виде 5-разрядных чисел (при необходимости с начальными нулями). Далее, на 1-й операции он должен прочитать список номеров, у которых в 1-м (крайнем справа) двоичном разряде стоит 1, на 2-й — у которых 1 стоит во втором разряде, и т. д. Всего понадобится 5 операций (за четыре операции невозможно различить более 24 = 16 номеров квартир).
Ответы к главе 2 47 После каждой операции, используя таблицу: Таблица 2.7 № пп Фамилия Разряд Номер квартиры 5 4 3 2 1 1 Абрамов 1 1 1 13 2 Бойко 1 2 3 Г аспарян 1 1 1 19 25 Яковлева 1 1 1 7 для каждого ученика учитель отмечает разряды, применительно к номерам, для которых ученик поднимал руку (см. табл. 2.7). Искомые номера квартир определяются по полученному их двоичному представлению. Ответ: 5 раз. 2.29. Новость, известная одному из друзей, после 1-го часа станет известна не более чем двум (каждая пара разговаривавших по телефону обменяется новостями), после второго часа — не более чем четырем (каждый узнает еще 2 новости), ..., после 4-го часа — не более чем 16. Итак, потребуется не менее 5 часов. Покажем, что пяти часов достаточно. Переговоры можно вести по следующей схеме. Пронумеруем участников 5-значными двоичными числами (00000, 00001, 00010, 00011, ..., 11111). В первый час беседуют люди, номера которых отличаются только в 1-м разряде, например, в крайнем справа разряде: 00000 и 00001, 00010, 00011, ..., 11110 и 11111. Во второй час по телефону обмениваются новостями те, номера которых отличаются только в 2-м справа разряде: 00000 и 00010, 00001 и 00011, ... .В результате после двух часов каждый знает 4 новости, известные четырем участникам с номерами, отличающимися от его номера в двух крайних справа разрядах. Например, человек с двоичным номером 00001 знает «свою» новость и новости друзей с номерами 00001, 00010 и 00011. В общем случае, в к-й час беседуют люди, номера которых отличаются только в k-м разряде (например, в 3-й час abcOde беседует с abclde). При этом каждый час количество новостей, известных каждому, удваивается. Ответ. Необходимо 5 часов. 2.30. Идея решения задачи аналогична решению предыдущей. Проиллюстрируем ее применительно к более простому случаю — когда общее число полевых игроков равно 8. Формирование команд можно вести по следующей схеме. Пронумеруем участников трехзначными двоичными числами (000, 001, 010, 011, ..., 111).
48 Глава 2. Задачи посложнее На первый 10-минутный отрезок игры тренер должен разбить все 8 футболистов на две части так, чтобы в каждой части номера игроков в крайнем справа разряде были одними и теми же: 1-я «полукоманда»: ООО 010 100 110; 2-я «полукоманда»: 001 011 101 111; на второй — чтобы в каждой части номера игроков были одними и теми же в среднем разряде: 1-я «полукоманда»: 000 001 100 101; 2-я «полу команда»: 010011 110 111; на третий отрезок — чтобы в каждой части номера игроков были одними и теми же в крайнем левом разряде: 1-я «полукоманда»: 000 001 010 011; 2-я «полукоманда»: 100 101 110 111. Убедитесь, что при такой схеме условие, касающееся нахождения игроков в «полукомандах», соблюдается. При общем числе полевых футболистов, равном 16, потребуются четыре 10-минутных отрезков игры (то есть целый тайм), а при равном 20 — одного тайма не хватит. Можно также использовать прием, описанный в [1], — составить таблицу, в которой каждому полевому игроку соответствует столбец таблицы, а каждому 10-минутных отрезков — ее строка. Таблица устроена так, что в ее i-м столбце находится двоичная запись числа / - 1 (при просмотре столбца сверху вниз). Нуль, стоящий в клетке таблицы, означает, что данный футболист ученик входит в первую «полукоманду», а единица — что во вторую (или наоборот). Пример таблицы для восьми полевых: игроков: Таблица 2.8 Номер отрезка Номер футболиста 1 2 3 4 5 6 7 8 1 0 0 0 0 1 1 1 1 2 0 0 1 1 0 0 1 1 3 0 1 0 1 0 1 0 1 Нетрудно убедиться, что приведенная таблица является более кратким вариантом схемы формирования «полукоманд», приведенной выше. Ответ. Не успеет. 2.31. Главная идея алгоритма — использование имеющейся памяти для хранения всех промежуточных результатов расчетов. Один из возможных вариантов решения следующий.
Ответы к главе 2 49 1. Найти сумму значений (то есть количество единиц) в двух крайних справа битах, прочитав значение в каждом бите с помощью устройства № 1 и сложив их с помощью устройства № 2. 2. Записать найденное значение в те же биты (устройство № 3). 3. Повторить этапы 1-2 для других пар соседних битов. В результате в памяти будут записаны следующие значения (курсивом обозначены номера битов): 1 0 0 1 0 1 0 1 1 0 0 0 0 1 1 0 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Рис. 2.3 4. Сложить значение, записанное в 1-2 битах, со значением, записанным в 3—4 битах, а результат сохранить в четырех крайних справа битах: 1 0 0 1 0 1 0 1 1 0 0 0 0 0 1 1 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Рис. 2.4 5. Действия этапа 4 повторить для 5-6 и 7-8 битов, для 9-10 и 11-12 битов, для 13-14 и 15-16 битов (записав результат в соответствующие ячейки): 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Рис. 2.5 6. Сложить значение, записанное в 1-4 битах, со значением, записанным в 5-8 битах, а результат сохранить в восьми крайних справа битах. 7. То же самое сделать для 9-12 и 13-16 битов (результат записать в остальных ячейках): 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Рис. 2.6 8. Сложить значения, записанные в каждой половине 16-битной памяти, а результат сохранить в этой же памяти: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 16 15 14 13 12 11 10 9 8 7 б 5 4 3 2 1 Рис. 2.7
50 Глава 2. Задачи посложнее Полученный результат и есть искомое значение количества единичных битов в заданном 16-битном двоичном числе (10102 = Юю). Ответы на задачи про степени двойки 1. Составим таблицу (используя, например, электронную таблицу Microsoft Excel или др.): Таблица 2.9 Номер интервала времени Прошло время Знал — 1 Вновь узнали Всего знающих 1 15 мин 2 3 2 30 мин 4 7 3 45 мин 8 15 И 2 часа 45 мин 2048 4095 12 3 часа 4096 8191 Итак, менее чем через 3 часа, но более чем через 2 часа 45 минут о столичной новости узнают все взрослые Компьютеринска. Проанализировав первый и последний столбцы таблицы, можно также увидеть, что общее число знающих новость через к 15-минутных интервалов, составляет 2к + 1 - 1. Учитывая это, можем найти количество число 15-минутных интервалов, через которое общее число знающих новость достигнет 4500: 2*+ 1 - 1 =4500, откуда к = log2(4500+l) -1 = 11,1. Значит, искомое время составляет чуть больше 2 часов 45 минут. 2. Будем весь ранее взвешенный сахар ссыпать на правую чашку, на нее же будем класть гирьку, а отмеряемый сахар будем сыпать на левую чашку (см. табл. 2.10). Таблица 2.10 Номер взвешивания 1 2 3 4 5 Левая чашка 1 2 4 8 16 Правая чашка г 1 + г 3 + г 7 + г 15 + г Примечание. Буквой обозначена гирька. Итак, после 5-го взвешивания, ссыпав вместе весь отмеренный сахар, получим 31г.
Ответы к главе 2 51 3. Начнем расчеты, так сказать, «с конца». Пусть утром последнего дня чтения остались непрочитанными х страниц. Тогда согласно условию х - 0,5х - 0,5 =0, откуда х = 1. Значит, остались непрочитанными: утром предпоследнего дня (1 + 0,5) • 2 = 3, до этого — (3 + 0,5) *2 = 7, ... Составив и проанализировав таблицу: Таблица 2.11 Номер дня (считая от последнего) Число непрочитанных страниц 1 1 2 3 3 7 можно установить, что в «новой» книге, которую Митя читал п дней, было 2" - 1 страниц. 4. Трехзначное число ДВА меньше, чем 1024 (210), то есть ДВА < 210. Значит, ДВА20 < (2,0)20= 2200. Теперь о числе СТЕПЕНИ. Оно семизначное. Исследуем значение 220= 10242= 1048576. Значит, не все семизначные числа СТЕПЕНИ больше 220 (например, число 1048497 — меньше). А вот неравенство СТЕПЕНИ > 219 справедливо для всех чисел СТЕПЕНИ. Тогда СТЕПЕНИ12 > (219)12 = 2228. Следовательно, СТЕПЕНИ12 > ДВА20. 5. 1) минимально возможное значение числа — 102. 102 < 128, то есть БИТ < 27. Значит, БИТ4 < 228. Далее, из решения предыдущей задачи следует, что КИЛОБИТ > 219. Так как Z = 1024, то Z/2 • КИЛОБИТ > 228. Это значение больше, чем БИТ4; 2) 4 КИЛОБИТ2 > БИТ4. 6. Группа задач «Сколько единиц и сколько нулей? Но посложней» 1. Как уже отмечалось, 2е — это (с + 1)-значное двоичное число, в котором одна единица и с нулей (см. табл. 2.5). Учитывая это, можем получить искомые значения: 1) п = 3, е = 1; 2)п = 101, е = 1 (2100 + 2100=2101); 3)п = а+ 1,е= 1 (2а + 2а=2а+ *). 2. Ответ — 2 (для всех заданий).
52 Глава 2. Задачи посложнее 3. 1) Здесь можно найти результат непосредственными вычислениями: 1. О О О О 1 О О 110 0 Ответ: п = 2, е = 2; 2) В данном случае проводить непосредственные вычисления с двоичными числами нецелесообразно. Попробуем найти общие формулы для нахождения искомых величин для общего случая — применительно к разности 2а - 2Ь (при а > Ь). В двоичном виде уменьшаемое является (а + 1)-значным числом, а разность будет а-значной. Нетрудно увидеть (в том числе и из приведенного примера), что в конце этой разности будут записаны b нулей. А это означает, что количество единиц е равно а- Ь. Ответ: е = 75, п = 25. Примечание. Задачу можно решить проще, если выражения в условии записать следующим образом: 1) (24- 1) — (22 — 1); 2) (2100- 1)-(225- 1). (Далее см. решения задачи «Сколько единиц и сколько нулей?» в главе 1) 4. 1) Нетрудно понять, что результат сложения будет 5-значным (в большем из слагаемых — 4 единицы). Так как количество единиц в двоичной записи суммы равно 2 (см. решение задачи 2), то искомое п = 5-2 = 3. 2) гг = 51 - 2 = 49. Обобщая результаты анализа задач 1, 2 и 4, можем сформулировать следующее общее правило для расчета количества нулей п и количества единиц е в двоичной записи результата выражения 2а + 2Ь: если а = Ъ то е = 1 п = а + 1 иначе е = 2 если а > Ъ то п = а - 1 иначе |а < Ъ п = Ъ-\
Ответы к главе 2 53 все все 5. 1) п = 0, е = 4; 2) п = 0, е = 100. 6. 1) л = 3, е = 3; 2)п = 15,е = 26. Обобщая результаты анализа задач 5 и 6, можем сформулировать следующее общее правило для расчета количества нулей п и количества единиц е в двоичной записи результата выражения (2й- 1) + 2Ь\ если а = b то е = а + 1 |или 6+1 п = 0 иначе если а > b то е = b + 1 п = а - b иначе |а < Ъ е = а+ 1 п = Ь- а все все или короче: если а > Ъ то е = b + 1 п = а-Ь иначе в = а + 1 п = Ь-а все 7. 1) Здесь результат можно найти непосредственными вычислениями: 1 1 1 1 1 1 0 0 110 11
54 Глава 2. Задачи посложнее Ответ: п = 4, е = 1. 2) Попробуем найти общие формулы для нахождения искомых величин. Уменьшаемое вида 2а - 1 в двоичном представлении состоит из а единиц. Вычитание из него числа 2Ь (одна единица и Ъ нулей) при а > Ъ даст (а - 1)-значную двоичную разность, в которой будет один нуль (последнее утверждение потом проверим). Значит, количество единиц е = а - 1. Ответ на задачу 2: е = 99, п = 1. Проверим случай, когда а = b + 1 на примере (25 - 1) - 24: 1 1 1 1 1 1 0 0 0 0 1111 Из него следует, что при а = Ъ + 1 количество нулей /7 = 0, а количество единиц е = а - 1 (или е = Ь). Общее правило расчета значений е и пв двоичной записи результата выражения (2а - 1) - 2Ь при а > Ъ: е = а — 1 если а = Ъ + 1 то п = 0 иначе и = 1 все 8. 1) Здесь можно найти результат непосредственными вычислениями: 1 0 0 0 0 0 1 1 1 1110 0 1 Ответ: е = 4, п = 2. 2) Получим общую зависимость для 2а - (2b- 1) при а > Ъ. Пусть а = 5, 6 = 2, 3 или 4. Составим таблицу, в которую внесем результаты вычислений значений п: Ь = 2 6 = 3 п о п 1 2 3 Из нее видно, что п = b - 1. Так как общее число цифр в двоичной записи разности равно а (убедитесь в этом!), то е = а - Ъ + 1. Ответ на задачу 2: п = 29, е = 71.
Ответы к главе 2 55 9. Решим задачу для вариантов 1 и 2: 1) 111111 1 1 1 0 0 0 0 1 0 2) I 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 и проанализируем результаты. Общее количество цифр в сумме — а + 1. Количество единиц равно (b - 1) плюс еще одна — первая, то есть е = Ь. Тогда количество нулей п = a-b+ 1. 10. \)п= 1,е = 4; 2) п = 1, е = а (или е = Ь).
Глава 3 Фальшивые монеты и отравленное вино Рассмотрим еще ряд задач, при решении которых неожиданно возникают недесятичные системы счисления. ► 3.1. ПЯТЬ МЕШКОВ С МОНЕТАМИ Есть 5 мешков с монетами. В некоторых из них монеты фальшивые (они на 1 грамм легче настоящих). Есть еще 100 настоящих монет. Необходимо за одно взвешивание на чашечных весах с указателем, показывающим разность весов грузов на левой и правой чашках с точностью до 1 г в пределах от 0 до 100 г, установить, в каких мешках монеты фальшивые. Решение Положим на правую чашку весов одну монету из первого мешка, 2 — из второго, 4 — из третьего, 8 — из четвёртого и 16 — из пятого. На левую чашку положим 31 заведомо настоящую монету. «Фальшивые» мешки определяются по двоичной записи разности весов на чашках — в ней разряды, в которых записана единица, соответствуют номерам мешков с фальшивыми монетами1. Например, если фальшивые монеты в мешках номер 1, 2 и 5, то весы покажут 19 (1910= 100112). 1 Доказательство'. Общий вес всех монет на правой чашке: \т\ + 2т2+ 4тз+ 8m4+ \6т5 (1) на левой: 31т, (2) где т\, т2, т5— вес одной монеты соответственно из первого, второго, пятого мешков, т — вес настоящей монеты. Значение (2) можно записать так: \т+ 2т+ 4т+ 8т+ 16т (3) Тогда показание весов будет равно: А = (1 т+ 2т + 4т+ 8т+ 16т) - (\т\ + 2т2 + 4m3+ 8m4+ 16w5), или А = 1 (т- mi) + 2{т- т2) + 4(т- т3) + 8(т- т4)+ 16(т- т5). Обозначив значения в скобках соответственно гь г2, ..г5, можем записать: А = 16г5+ 8г4+ 4гз+ 2г2+ \г\. (4)
Глава 3. Фальшивые монеты и отравленное вино 57 А как решить задачу, если мешков — шесть, и в шестом тоже все монеты могут быть фальшивыми? Других монет, кроме монет в мешках, нет, но зато весы могут показывать и отрицательные значения (от -1 до -100 г). Решение приведено в конце книги. ► 3.2. 64 МОНЕТЫ Имеются 64 одинаковые по виду золотые монеты. 63 из них настоящие, а одна — фальшивая, которая легче настоящих. За какое наименьшее число взвешиваний на рычажных весах с чашками и без гирь можно определить, какая из монет фальшивая? Прежде чем описывать решение, заметим, что фраза «наименьшее число взвешиваний» в условии означает, что должны рассматриваться «худшие» варианты, а не варианты типа «а вдруг повезет». Например, вариант, когда, например, при первом взвешивании сравниваются две монеты, и одна из чашек весов перевешивает («повезло!»), рассматриваться не должен. Аналогично, не должен рассматриваться, например, такой вариант: Таблица 3.1 № взвеши¬ Берем 1-я чашка 2-я чашка Допустим, что вания монеты весов весов перевесила 1 32 32 2-я чашка 2 С 1 -й чашки 15 15 1 -я чашка 3 Со 2-й чашки 7 7 Весы в равновесии — при котором за три взвешивания устанавливается, что фальшивая монета — 15-я из той группы, которая оказалась легче при втором взвешивании. Самое простое2 решение — последовательно делить все количество монет пополам, на весах сравнивать их, затем брать более легкую кучку монет, делить ее пополам и т. д. пока при последнем взвешивании не останется сравнить между собой две монеты. Более легкая из них — и есть фальшивая. Сказанное можно оформить в виде таблицы (жирным начертанием выделены кучки монет, содержащие фальшивую монету, а также сама эта монета): Поскольку значения г, равны 0 или 1, то можем сказать, что десятичному значению А соответствует двоичное вида Г5Г4Г3Г2П, где цифра г, = 0, если / — номер мешка с настоящими монетами, и г, = 1, если i — номер мешка с фальшивыми монетами. Иными словами, выражение (4) представляет собой так называемую развернутую форму записи числа в двоичной системе счисления. Это означает, что по двоичному значению показания весов А можно получить решение задачи. 2 Но, как будет показано ниже, — не самое рациональное.
58 Глава 3. Фальшивые монеты и отравленное вино Таблица 3.2 № взвешивания Берем монеты 1-я чашка весов 2-я чашка весов Допустим, что перевесила 1 32 32 2-я чашка 2 С 1 -й чашки 16 16 1 -я чашка 3 Со 2-й чашки 8 8 1 -я чашка 4 Со 2-й чашки 4 4 2-я чашка 5 С 1 -й чашки 2 2 1 -я чашка 6 Со 2-й чашки 1 1 2-я чашка Ответ: потребуется 6 взвешиваний. Задания для самостоятельной работы учащихся ► 1. Нарисуйте блок-схему, описывающую все возможные варианты взвешиваний по рассмотренной методике при 16 монетах. ► 2. Определите, какое минимальное число взвешиваний потребуется для поиска фальшивой монеты по описанному методу среди 2п монет. ► 3.3. Восемь монет Есть 8 монет, из которых 7 настоящих, каждая из которых весит 10 г, и одна фальшивая весом 9 г. Необходимо, используя электронные весы, показывающих вес с точностью 1 г, найти фальшивую монету за минимальное число взвешиваний. Решение во многом аналогично предыдущей задаче. При первом взвешивании определим вес любых четырех монет, например 1, 2, 3 и 4. Если весы покажут 40 г, то фальшивая монета находится среди оставшихся монет, если 39 г — среди взвешиваемых. Затем нужно узнать вес любых двух монет из соответствующей группы и выявить пару монет, среди которых есть фальшивая. Третье взвешивание покажет, какая монета из этой пары — фальшивая. Задание для самостоятельной работы учащихся ► Нарисуйте блок-схему, описывающую все возможные варианты взвешиваний по рассмотренной методике решения задачи 3.2. Интересно, что для решения задачи можно применить... двоичную систему счисления! Пронумеруем монеты: 1, 2, ..., 8 и представим номера монет в виде трехразрядных двоичных чисел:
Г лава 3. Фальшивые монеты и отравленное вино 59 Таблица 3.3 Номер монеты 1 2 3 4 5 6 7 8 Условный номер 0 1 2 3 4 5 6 7 Двоичное представление 000 001 010 011 100 101 110 111 В первом взвешивании должны участвовать монеты, содержащие единицу в первом разряде, во втором — монеты с единицей во втором разряде, в третьем взвешивании — с единицей в третьем разряде. Результаты измерений будем записывать так: если общий вес монет равен 39 г, то во взвешиваемой группе содержится фальшивая монета — запишем 1 в соответствующий номеру измерения разряд, в противном случае запишем 0. Полученное двоичное число будет однозначно определять номер фальшивой монеты. ♦ Пример. Пусть фальшивая монета имеет номер 6. Ее условный номер: 5\0= 1012, значит, эта монета будут участвовать в первом и третьем взвешиваниях. При них весы покажут 39 г, а при втором взвешивании — 40 г, т. е. в результате получится двоичное число 101, соответствующее условному номеру фальшивой монеты. Обоснование Обсудим вопрос: «В каком случае при каком-то взвешивании весы покажут 39 г?». Ответ — если среди взвешиваемых монет есть фальшивая. А 40 г? — Если ее там нет. Число взвешиваний равно количеству двоичных разрядов в записи номеров. Фальшивая монета будет участвовать в тех взвешиваниях, номера которых соответствуют номеру разряда в ее двоичной записи с единицами. И именно при этих взвешиваниях весы покажут 39 г (а мы запишем в соответствующем разряде 1). В остальных взвешиваниях фальшивая монета участвовать не будет, то есть при них весы покажут 40 г (а мы запишем 0 в соответствующем разряде). Следовательно, двоичное число, составленное по результатам всех взвешиваний, будет таким же, как двоичный номер искомой монеты. Задания для самостоятельной работы учащихся ► 1. Подумайте, будет ли работать описанная методика, когда: 1) фальшивой является с номером («настоящим», а не условным) 1; 2) общее число монет равно 9; 3) общее число монет равно 7. ► 2. Из 15 кусочков руды один является радиоактивными. О любом наборе кусочков за одну проверку можно узнать, имеется ли в нем хотя бы один радиоактивный кусочек. Как четыре проверки найти радиоактивный кусочек?
60 Глава 3. Фальшивые монеты и отравленное вино ► 3, Имеется 31 пробирка с жидкостями, о которых известно, что в одной из них содержатся опасные микробы. За какое минимальное число проверок, при которых можно сливать содержимое нескольких пробирок, можно найти «опасную» пробирку? ► 3.4. Девять монет Имеются 9 одинаковых по виду золотых монет. Восемь из них настоящие, а одна — фальшивая, которая легче настоящих. За какое наименьшее число взвешиваний на рычажных весах с чашками и без гирь можно определить, какая из монет фальшивая? Если решать задачу так же, как задачу 3.2, то понадобятся три взвешивания (убедитесь в этом самостоятельно). Но, оказывается, можно решить ее всего за два взвешивания! Для этого можно разделить все монеты не на две, а на три кучки, а после чего сравнить на весах две любые кучки. Если весы в равновесии, то фальшивая монета — в третьей кучке из трех монет, в противном случае — среди тех, которые на весах перевесили. Таким образом в любом случае мы выделим кучку из трех монет, среди которых есть искомая. Сравнив на весах две любые монеты из этой кучки, мы этим, вторым, взвешиванием установим, какая из монет — фальшивая. Задание для самостоятельной работы учащихся ► Решите задачу: «Купец получил за товар 64 золотые монеты. Потом он узнач, что одна из этих монет фальшивая, которая весит больше настоящих. За какое наименьшее число взвешиваний на рычажных весах с чашками и без гирь купец сможет определить, какая из монет фачьшивая?» Указания по выполнению. Разделяйте монеты, среди которых есть фальшивая, на три части (в том числе неравные, если число монет не кратно 3). Например, первоначальную кучу из 64 монет можно разделить на три кучки из 21, 21 и 22 монет. В любом случае старайтесь, чтобы две из этих трех кучек были равными, а третья может от них отличаться. Оказывается, что и в решении задачи 3.4 нам опять помочь система счисления, но не двоичная, а троичная! Закодируем номера монет в троичной системе счисления: Таблица 3.4 Номер монеты 1 2 3 4 5 6 7 8 9 Условный номер 0 1 2 3 4 5 6 7 8 Троичное представление 00 01 02 10 11 12 20 21 22
Глава 3. Фальшивые монеты и отравленное вино 61 Задачу можно решить за два взвешивания. Для первого взвешивания рассмотрим левый разряд троичных чисел — 1 в нем будет означать, что монету нужно положить на левую чашку весов, 2 — на правую чашку, а О — что монета не участвует во взвешивании. Затем аналогично для второго разряда. Запишем результаты каждого /-го взвешивания (/ = 1, 2) в соответствующий разряд по правилу: если перевесила левая чашка — 1, если правая — 2, если весы уравновешены — 0. Полученное троичное число однозначно определяет номер фальшивой монеты. Проверьте сказанное самостоятельно на примере какой-то монеты. Почему так получается? Задание для самостоятельной работы учащихся ► Решите задачу 3.4 для случая, когда монет — 27. ► 3.5. Яд В ЧЕТЫРЕХ БОЧКАХ С ВИНОМ Когда-то в Древнем Риме некий патриций решил устроить праздник и для этого приготовил 4 бочки вина. Однако он узнал, что кто-то из его врагов подсыпал яд в одну из бочек. Про яд известно, что человек, который его выпил, умирает в течение 24 часов. До начала праздника осталось 25 часов. У патриция есть рабы, которыми он готов пожертвовать, чтобы узнать, в какой именно бочке яд. Какое минимальное число рабов необходимо «использовать», чтобы патриций узнал это? И здесь, прежде чем описывать решение, обратим внимание на то, что фраза «минимальное число» в условии означает, что должны рассматриваться «худшие» варианты, а не варианты типа «а вдруг патрицию повезет». Например, вариант, когда, например, один раб пьет вино из одной из бочек и умирает («Патрицию повезло!»), рассматриваться не должен. Самое простое решение — «использовать» трех рабов, каждый из которых пьет вино из какой-то одной бочки (все — из разных). Если через 24 часа никто не умрет, то отравленное вино — в 4-й бочке, в противном случае один из рабов ценой своей жизни «укажет» на бочку с ядом. А если трех рабов у патриция нет? Можно ли решить задачу в этом случае? Оказывается, можно! Для этого опять следует применить двоичную систему счисления! Пронумеруем3 бочки: 1, 2, 3, 4 и представим номера бочек в виде двухразрядных двоичных чисел: 3 Мы используем глаголы «пронумеруем» и другие в 1-м лице исключительно для более понятного изложения методики решения задач. Естественно, что мы считаем недопустимым использование людей для решения подобных задач.
62 Глава 3. Фальшивые монеты и отравленное вино Таблица 3.5 Номер бочки 1 2 3 4 Условный номер 0 1 2 3 Двоичное представление 00 01 10 11 Двух имеющихся рабов тоже пронумеруем. Раб с номером 1 должен выпить вино из тех бочек, у которых в первом разряде их двоичного условного номера стоит 1 (то есть из бочек с номерами 10 и 11), а раб с номером 2 — из тех бочек, у которых единица в стоит во втором разряде их двоичного номера (01 и 11). Если через 24 часа никто из рабов не умер (ура!), то яд в бочке с номером 1 (с двоичным условным номером 00). Если умер раб с номером 1, то яд в бочке с двоичным условным номером 10, если раб с номером 2 — в бочке с номером 01. К сожалению, возможен также и вариант, когда погибнут оба раба... Задания для самостоятельной работы учащихся ► 1. Определите, какое минимальное число рабов необходимо «использовать», чтобы патриций решил задачу, когда общее число бочек равно: 1)8; 2) 16; 3)2*. ► 2. Определите, можно ли при восьми бочках решить задачу с меньшим числом рабов, но за большее время. ► 3. Сравните два варианта решения аналогичной задачи, когда общее число бочек равно 8, а до начала пира осталось 49 часов: 1) при котором в первые 24 часа «используются» два раба, а затем, при необходимости, «эксперимент» (повторим — недопустимый) проводится в следующие 24 часа; 2) при котором в первые 24 часа «используются» три раба. Можно ли сделать вывод о том, какой вариант «гуманнее»? Паоло Веронезе «Пир в доме Левия»
Глава 3. Фальшивые монеты и отравленное вино 63 ► 3.6. Яд В ДЕВЯТИ БОЧКАХ С ВИНОМ Когда-то в Древнем Риме некий патриций решил устроить праздник и для этого приготовил 9 бочек вина. Однако он узнал, что кто-то из его врагов подсыпал яд в одну из бочек. Про яд известно, что человек, который его выпил, умирает в течение 24 часов. До начала праздника осталось 49 часов. У патриция есть рабы, которыми он готов пожертвовать, чтобы узнать, в какой именно бочке яд. Какое минимальное число рабов необходимо «использовать», чтобы патриций узнал это? Если решать задачу так же, как задачу 3.5, то «понадобится» 4 раба (убедитесь в этом самостоятельно). Но, оказывается, можно решить ее всего с двумя рабами! Как это сделать, вы, конечно, уже догадались — следует применить не двоичную систему счисления, а троичную. Закодируем номера бочек в троичной системе счисления: Таблица 3.6 Номер монеты 1 2 3 4 5 6 7 8 9 Условный номер 0 1 2 3 4 5 6 7 8 Троичное представление 00 01 02 10 11 12 20 21 22 Рабов тоже пронумеруем (1 и 2). Раб с номером 1 должен выпить вино из тех бочек, у которых в первом разряде их троичного условного номера стоит 1 (то есть из бочек с номерами 10, 11 и 12), а раб с номером 2 — из тех бочек, у которых единица в стоит во втором разряде их троичного номера (01, 11 и 21). Если через 24 часа умрут оба раба, то яд находится в бочке, из которой они пили, то есть с троичным номером 11. В случаях, когда погибнет только один раб, станут известны две бочки, из которых он пил, а второй раб останется живым. Значит, за вторые 24 часа можно найти «нужную» бочку. Если же через 24 часа никто не умрет, то яд находится в одной из четырех непроверенных бочек. И в этом случае за вторые 24 часа можно решить данную задачу (см. задачу 3.5). Задания для самостоятельной работы учащихся ► 1. Определите, какое минимальное число рабов необходимо «использовать», чтобы патриций решил задачу 3.6, когда общее число бочек равно: 1)27; 2)81; 3) з*; 4) п(п> 3).
64 Глава 3. Фальшивые монеты и отравленное вино ► 2. Заполните таблицу с результатами определения необходимого числа рабов в случае использования для расчета двоичной и троичной систем счисления (без учета фактора времени): Число бочек п Необходимое число рабов Разность Использование двоичной системы Использование троичной системы 8 16 32 Определите, при каком значении общего числа бочек п разность значений во втором и третьем столбцах станет равна 5 (допустив, что такое число бочек возможно). ► 3. Разработайте компьютерную программу, с помощью которой можно решить задачу о патриции при любом числе бочек п и при заданном количестве часов, оставшихся до пира (25 или 49).
Глава 4 Методика решения типовых задач из ЕГЭ по информатике В данной главе описывается методика выполнения заданий, связанных с системами счисления, представленных в демонстрационных вариантах Единого государственного экзамена по информатике последних лет, а также в книгах от разработчиков ЕГЭ. ► 4.1. Определение количества единиц или нулей в записи личного ЧИСЛА ♦ Примеры заданий типа 1 1. Сколько единиц в двоичной записи числа 1025? 2. Сколько единиц в двоичной записи десятичного числа 255? 3. Сколько нулей в двоичной записи десятичного числа 254? 4. Сколько единиц в двоичной записи десятичного числа 206? 5. Сколько единиц в двоичной записи десятичного числа 514? 6. Сколько единиц в двоичной записи десятичного числа 1040? 7. Сколько единиц в троичной записи десятичного числа 243? 8. Сколько нулей в троичной записи десятичного числа 242? Решение путем перевода заданных чисел в ту или иную систему счисления методом последовательного деления на основание (см. приложение 1) в данном случае нерационально с точки зрения затрат времени. Целесообразнее запомнить значения нескольких начальных степеней чисел 2 и 3 (для двойки это сделать несложно, для тройки их можно при необходимости выписать). Для решения следует рассмотреть возможные варианты. 1. Если заданное число является степенью чисел 2 или 3, то количество единиц в нем в двоичной и троичной записях, соответственно, равно 1, а остальные цифры — нули. Количество нулей равно показателю степени. Например, число 512 = 29 в двоичной системе состоит из одной единицы и 9 нулей, а в троичной записи числа 243 = З5 — одна единица и 5 нулей. 2. Если заданное число на 1 меньше некоторой степени чисел 2 или 3, то оно в соответствующей системе счисления оно состоит из одних единиц
66 Глава 4. Методика решения типовых задач из ЕГЭ по информатике или из одних двоек. Их количество равно показателю степени. Например, двоичная запись числа 63 = 64 - 1 = 26 - 1 представляет из себя шесть единиц, а троичная запись числа 80 = 81 - 1 = З4 - 1 — четыре двойки. 3. Еслй заданное число на 1 больше некоторой степени чисел 2 или 3, то оно в соответствующей системе счисления в нем две единицы, а остальные цифры — нули. Их количество равно показателю степени числа минус 1. Например, число 65 = 64 + 1 = 26 + 1 в двоичной системе счисления состоит из двух единицы и пяти нулей, а в троичной записи числа 82 = 81 + 1 = 34+ 1 — две единицы и три нуля. В других случаях для двоичной системы следует представить приведенные в условии числа в виде суммы степеней числа 2. Если в условии требуется определить количество единиц в двоичной записи десятичного числа, то ответ будет равен количеству степеней двойки в сумме. ♦ Пример. Сколько единиц в двоичной записи десятичного числа 514? 514 = 512 + 2 Поэтому и единиц в двоичной записи числа 514 будет две. Ответ: 2. ♦ Пример. Сколько единиц в двоичной записи десятичного числа 1040? 1040= 1024 + 16 Ответ: 2. Для троичной системы счисления задача нахождения числа единиц решается аналогично. Если же в двоичной записи требуется определить количество нулей, то искомое количество равно числу степеней двойки, не «участвующих» в сумме. ♦ Пример. Сколько нулей в двоичной записи десятичного числа 254? 254 = 128 + 64 + 32 + 16 + 8 + 4 + 2 В правой части отсутствует только число 1 (2°). Ответ: 1. Примечание. Ясно, что учитываются степени, не превышающие заданных чисел. ♦ Примеры заданий типа 21 1. Сколько единиц содержится в двоичной записи результата выражения: (2 • 108)2010 — 42011 + 22012? 1 Задачи такого типа были приведены в демонстрационном варианте контрольных измерительных материалов апробации в 2012 году единого государственного экзамена по информатике и ИКТ в компьютерной форме (задача В7), а также в тренировочно-диагностических работах 2012 и последующих годов.
Глава 4. Методика решения типовых задач из ЕГЭ по информатике 67 2. Сколько единиц содержится в двоичной записи результата выражения: (2 • 1008)500 — 4501 + 2502? 3. Сколько единиц содержится в двоичной записи результата выражения: (2- Ю8)2010 - 42011 + 24022? 4. Сколько единиц содержится в двоичной записи результата выражения: (2 • 1008)500 — 4501 + 21004? Приведем пример решения задания 1. Обратим внимание на то, что возводимые в степень числа — это степени двойки. Учитывая это, представим первые два члена заданного в условии выражения в виде степеней двойки: о ^>3 /о 1 л \2010 //-)4\2010 /->8040 8 — о ю — 2 , поэтому (2 ■ 10g) — (2 ) — 2 ^2011 _ 24022 Тогда заданное выражение примет вид: 28040 _ 24022 + 22012 В двоичной записи разности будет 4018 единиц и 4022 нуля, причем именно в таком порядке (см. решение задачи 3 группы задач «6. Группа задач “Сколько единиц и сколько нулей?”. Но посложней» в главе 2). Добавление числа 22012 (представляющего из себя единицу и 2012 нулей — см. табл. 2.5) увеличит количество единиц на 1. Можно также решить задачу по-другому. Запишем исследуемое выражение в виде: 2 8040 ^4022 2^012^ (^*) В двоичной записи разности в скобках будет 2010 единиц и 2012 нулей. В заданном выражении это число — вычитаемое из числа 28040. Уменьшаемое же состоит из единицы и 8040 нулей. Это означает, что последние 2012 нулей в уменьшаемом и вычитаемом при подсчете количества единиц можно не учитывать. Тогда вычитаемое представляет из себя 2010 единиц, а уменьшаемое — 26028. Вспомнив задачу 8 из чуть выше упомянутой группы, можно получить, что искомое количество единиц равно 6028 - 2010 + 1 = 4019. Ясно, что второй способ менее рациональный. Ответ: 4019. В общем случае методика решения задач такого типа следующая. 1. Выразить все числа в выражении в виде степеней двойки. 2. Получить выражение вида (*): 2а-2ь + 2е. 3. Определить вид разности полученного выражения:
68 Глава 4. Методика решения типовых задач из ЕГЭ по информатике 1) количество начальных единиц (и их общее количество) е: е = а- Ь; 2) количество конечных нулей (и их общее количество) п- Ь. 4. Учесть число 2е, точнее, значение с: 1) если с < Ъ, то искомое количество единиц будет на 1 больше найденного значения е\ 2) если с = Ь, то искомое количество единиц будет равно 1;. 3) если с > 6, то искомое количество единиц будет равно с - Ъ + 1. В справедливости двух последних утверждений убедитесь самостоятельно. Примечание. При решении следует помнить, что двоичная запись числа 2к— это единица, за которой следуют к нулей (см. табл. 2.5). Ответы на другие задания Задания типа 1 1.2. 2. 8. 4. 5. 5.2. 7. 1. 8.0. Задания типа 2 2. 2499. 3. 1. 4.3. ► 4.2. Задания на использование чисел, представленных в разных СИСТЕМАХ ♦ Примеры заданий типа 1 1. Вычислите сумму чисел хи^ при х = D6i6, у = 368. Результат представьте в двоичной системе счисления. 2. Вычислите сумму чисел тип при т = А616, у = 758. Результат представьте в двоичной системе счисления. 3. Вычислите сумму чисел X и У, если X = А5 16» У - 3568. Результат представьте в двоичной системе счисления. 4. Вычислите сумму чисел X и У, если Х= Е616, У = 1010102. Результат представьте в двоичной системе счисления. 5. Вычислите сумму чисел X и У, если X = 2348, У = 57i6. Результат представьте в двоичной системе счисления. 6. Вычислите сумму чисел хну при х = D5i6, у = 578. Результат представьте в двоичной системе счисления. 7. Вычислите разность X- Y двоичных чисел, если^= 10101002, Y = = 10000102.
Глава 4. Методика решения типовых задач из ЕГЭ по информатике 69 ♦ Примеры заданий типа 2 1. Чему равна сумма чисел 578 и 4616? 1) 10101012; 2) 1258; 3) АЗ |6; 4) 7516. 2.Чему равно сумма чисел 438 и 56,,,? 1) 121*; 2) 171*; 3)АЗ|6; 4) 10000012. 3. Чему равна разность чисел 101 j6 и 11001012? 1)44*; 2)2348; 3)3616; 4) 6016. ♦ Примеры заданий типа 3 1. Дано А = 6516, В = 2678. Какое из чисел С, записанных в двоичной системе, отвечает условию А < С < В! 1) 10111000; 2) 10111100; 3) 10110110; 4) 10111111. 2. Дано А = 3068, В = С816. Какое из чисел С, записанных в двоичной системе, отвечает условию А < С < В? 1) 11001001; 2) 11000101; 3) 11001111; 4) 11000111. 3. Дано А - 671б, В = 1518. Какое из чисел С, записанных в двоичной системе, отвечает условию А < С < В? 1) 1101000; 2) 1101010; 3) 1101011; 4) 1011000. 4. Дано А = 77|в, В = 1718. Какое из чисел С, записанных в двоичной системе, отвечает условию А < С < В? 1) 1111000; 2) 1001100; 3)1011011; 4) 1111010.
70 Глава 4. Методика решения типовых задач из ЕГЭ по информатике 5. Дано А = 6Ai6, В = 1548. Какое из чисел С, записанных в двоичной системе, отвечает условию А < С < В? 1) 1101010; 2) 1001101; 3) 1101011; 4) 1101100. 6. Дано А = 5D16, В = 1378. Какое из чисел С, записанных в двоичной системе, отвечает условию А < С < В? 1) 1011110; 2) 1001101; 3) 1001111; 4) 1011100. 7. Дано А = СВ16, В = 3158. Какое из чисел С, записанных в двоичной системе, отвечает условию А < С < В? 1)11010011; 2) 11001100; 3)11001111; 4) 11010111. Все приведенные в заданиях числа представлены в системах счисления с основанием 2, 8 и 16. В заданиях типа 1 результат требуется получить в двоичной системе, поэтому все заданные числа целесообразно перевести в эту систему, после чего выполнить соответствующее арифметическое действие. Как известно, перевод целых чисел из восьмеричной и шестнадцатеричной системы в двоичную можно провести без промежуточного перевода в десятичную систему (см. приложение 1). Приведем пример решения для задания 1. х = D616 = 110101102; у = 368 = 111102; х+у= 111101002. В заданиях типа 2 возможные варианты ответа представлены не только в двоичной системе, однако и здесь расчеты удобно проводить в этой системе. После расчетов результат следует перевести в системы, использованные в вариантах ответа. Приведем пример решения для задания 2. 438=1000112; 5616 = 10101102; 438+ 5616 = 11110012; 11110012= 7916; 11110012= 1718. Ответ: вариант 2 (1718).
Глава 4. Методика решения типовых задач из ЕГЭ по информатике 71 В заданиях типа 3 следует перевести числа А и В в двоичную систему, после чего сравнить полученные значения с приведенными вариантами. Приведем пример решения для задания 2. А = 6516 = 11001012; В = 2678 = 101101112. Число А — 7-значное, а все приведенные четыре числа — 8-значные, значит, условие А < С соблюдается для всех вариантов. Для сравнения их с числом В удобно выписать все числа одно под другим: 1) 10114-000; 2)10114100; 3)10110110; 4) 10114-111. 10110111 Сравнение целесообразно проводить поразрядно слева направо. Варианты, в которых значение некоторого разряда больше, чем в числе В, исключаются (в примере соответствующие разряды оформлены как зачеркнутые). Итак, ответ — вариант 3. Ответы на другие задания Задания типа 1 2. И1000112. 3. 1100100112. 4. 1000100002. 5. 111100112. 6. 1000001002. 7. 100102. Задания типа 2 1-7516. 2. 2348. Задания типа 3 2. Вариант 4 (11000111). 3. Вариант 1 (1101000). 4. Вариант 1 (1111000). 5. Вариант 3 (1101011). 6. Вариант 1 (1011110). 7. Вариант 2 (11001100). ► 4.3. Нахождение основания системы счисления ♦ Примеры заданий типа 1 1. В системе счисления с некоторым основанием десятичное число 81 записывается в виде 100. Укажите это основание.
72 Глава 4. Методика решения типовых задач из ЕГЭ по информатике 2. В системе счисления с некоторым основанием десятичное число 51 записывается в виде 102. Укажите это основание. 3. В системе счисления с некоторым основанием десятичное число 52 записывается в виде 202. Укажите это основание. 4. В системе счисления с некоторым основанием десятичное число 103 записывается в виде 205. Укажите это основание. Для выполнения заданий приведенного типа следует: 1) заданное /?-ичное число записать в развернутой форме и приравнять полученное выражение заданному десятичному числу; 2) решить полученное уравнение относительно основания р. ♦ Пример решения задания 2 Число 102 в развернутой форме — р2 + 2: р2 + 2 = 51, откуда р = 1. ♦ Примеры заданий типа 2 1. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись десятичного числа 27 оканчивается на 5. 2. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись десятичного числа 32 оканчивается на 4. 3. Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись десятичного числа 33 оканчивается на 1. Методику решения задач указанного типа опишем на примере задачи 1. Так как в условии используется цифра 5, то искомые основания р > 5. Далее, так как при этом р2 >25, то соответствующие />ичные числа — двузначные и они имеют вид х5, где х — некоторая цифра. Приравняем х5 заданному десятичному числу: х5 = 27 и запишем число х5р в развернутой форме: хр + 5 = 27, откуда хр = 22. Произведение двух чисел х и р при р> 5 может быть равно 22 в двух случаях: 1) х = 2,р = 11; 2)х = \,р = 22. Итак, ответ: 11, 22. Ответы на другие задания Задания типа 1 1.9. 3.5. 4. 7.
Глава 4. Методика решения типовых задач из ЕГЭ по информатике 73 Задания типа 2 2. 7, 14,28 3.2, 4, 8, 16, 32 ► 4.4. Разные задания Задания типа 1 1. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 27, запись которых в двоичной системе оканчивается на 110. 2. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 25, запись которых в троичной системе оканчивается на 21. 3. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 45, запись которых в двоичной системе оканчивается на 1010. 4. Укажите через запятую в порядке возрастания все десятичные числа, не превосходящие 140, запись которых в системе счисления с основанием 5 оканчивается на 12. Приведем пример выполнения задания 1. 1. Переведем приведенное двоичное число в десятичную систему: 1102 = 6ю. Полученное значение будет одним из искомых (или единственным). 2. Будем приписывать к двоичному числу слева единицы и нули в порядке возрастания получаемого двоичного числа до тех пор, пока его десятичный эквивалент не станет больше заданного: 11102 = 1410. 101102 = 2210. 111102 = 3110. Итак, ответ: 6, 14, 22. Задания типа 2 Информация для ее передачи по каналу связи кодируется шестиразрядными двоичными кодами. Поскольку при передаче возможны искажения из-за помех, в конце каждого такого кода (справа) добавляется седьмой (контрольный) разряд. Значение этого контрольного разряда выбирается так, чтобы сумма разрядов полученного семиразрядного кода была четной. Например, к коду 111010 справа добавляется 0, а к коду 111000 — 1. В приемнике каждый принятый код обрабатывается следующим образом. Вычисляется сумма его семи разрядов (включая контрольный). Нечетная сумма показывает, что при передаче данного кода произошел сбой, и этот код автоматически заменяется на специальный код 0000000. При четной сумме принятый код не меняется. 1. Исходное сообщение 0110000 1000111 0001111 было принято в виде 0111001 1000101 0001111.
74 Глава 4. Методика решения типовых задач из ЕГЭ по информатике Каким будет принятое сообщение после его обработки? 2. Исходное сообщение 0110101 1111000 1100011 было принято в виде 1110101 1111000 1100000. Каким будет принятое сообщение после его обработки? Решение задания 1 Сопоставим каждый код исходного сообщения с соответствующим ему кодом в полученном сообщении: Передано 0110000 1000111 0001111 Получено 0111001 1000101 0001111 Проанализируем каждую из этих пар кодов с точки зрения описанного в условии задачи алгоритма обработки. 1.0110000 —> 0111001. В коде при его передаче возникло два искажения (разряды с искажениями оформлены полужирным начертанием). Поскольку в полученном коде сумма всех разрядов (или, что то же самое, количество единиц в числе) четна, то система обработки принятых кодов «не заметит» такого двойного искажения кода, поэтому данный код будет принят в качестве «правильного» и оставлен в виде 0111001. 2. 1000111 —> 1000101. Здесь при передаче искаженным оказался только один разряд (вместо 1 в нем появился 0). В результате сумма всех разрядов стала нечетной. Поэтому, согласно описанному алгоритму обработки, система заменит такой код на специальный код 0000000. 3. 0001111 —> 0001111. Поскольку этот код передан без искажений и сумма всех его разрядов осталась четной, система обработки принятых кодов оставит этот код без изменений: 0001111. В результате после обработки мы получим следующую последовательность кодов: 0111001 0000000 0001111. Ответы на другие задания Задания типа 1 2. 7, 16, 25. 3. 10, 26, 42. 4. 7, 32, 57, 82, 107, 132. Задания типа 2 2. 0000000 1111000 1100000.
Глава 5 Делимость и прогрессии ► 5.1. О ПРИЗНАКАХ ДЕЛИМОСТИ Как известно, существуют простые признаки, позволяющие определить, что то или иное число делится, например, на 3, на 5, на 9 и т. п. Напомним эти признаки. 1. Признак делимости на 3: число делится на 3, если сумма его цифр делится на 3. Например, число 257802 (сумма цифр 2+5+7+8+0+2= 24) делится на три, а число 125831 (сумма цифр 1+2+5+8+3+1= 20) на три не делится. 2. Признак делимости на 5: число делится на 5, если его последняя цифра есть 5 или 0 (т. е. если на 5 делится число единиц его последнего разряда). 3. Признак делимости на 2 аналогичен предыдущему: число делится на 2, если на 2 делится число единиц его последнего разряда. А. Признак делимости на 9 аналогичен признаку делимости на 3: число делится на 9, если сумма составляющих его цифр делится на 9. Доказательство справедливости этих признаков не представляет труда. Рассмотрим, например, признак делимости на 3. Он основан на том, что единица каждого из разрядов десятичной системы (т. е. числа 1, 10, 100, 1000 и т. д.) при делении на 3 дает остаток 1. Поэтому всякое число (апап _ \ап _ 2* • • #i#o)io> т. е. число ап • 10w+ 1 • 10” 1 + ап_2 ' Ю” 2 + ... + а\ ■ 10 + а$ можно записать в виде (ап + ! + ап-2 + • •• + а\ + а0) + В, где число В делится на 3 без остатка. Отсюда следует, что ап * 10W + ап _ 1 • 10п 1 + ап _ 2 * 10п 2 + ... + а\ • 10 + а$ делится на 3 в том и только в том случае, если на 3 делится число ап + а^ j + + ап_2 + ... + я, + Жь т. е. сумма цифр исходного числа.
76 Глава 5. Делимость и прогрессии Признак делимости на 5 вытекает из того, что число 10 — основание системы счисления — делится на 5, поэтому все разряды, кроме разряда единиц, при делении на 5 обязательно дают в остатке нуль. На том же самом основан и признак делимости на 2: число четное, если оно кончается четной цифрой. Признак делимости на 9, как и признак делимости на 3, вытекает из того, что каждое число вида 10* при делении на 9 дает в остатке 1. Из сказанного ясно, что все эти признаки связаны с представлением чисел именно в десятичной системе и что они, вообще говоря, неприменимы, если пользоваться системой счисления с каким-либо другим основанием, отличным от 10. Например, число 86 в восьмеричной системе записывается в виде 1268, (так как 86 = 82 + 2 • 8 + 6). Сумма цифр равна 9, но 86 не делится ни на 9, ни на 3. Однако для каждой позиционной системы счисления можно сформулировать свои признаки делимости на то или иное число. Рассмотрим несколько примеров. Будем писать числа в двенадцатеричной системе и сформулируем для такой записи признак делимости на 6. Так как число 12 — основание системы счисления — делится на 6, то число, записанное в двенадцатеричной системе, делится на 6 в том и только в том случае, если на 6 делится его последняя цифра (здесь то же самое положение, что и с делимостью на 5 или на 2 в десятичной системе). Так как числа 2, 3 и 4 тоже служат делителями числа 12, то справедливы следующие признаки делимости: число, записанное в двенадцатеричной системе, делится на 2 (соответственно на 3 и на 4), если его последняя цифра делится на 2 (соответственно на 3 и на 4). Задания для самостоятельной работы учащихся ► 1. Определите признаки делимости: 1) в двоичной системе — на 2 и на 4; 2) в троичной системе — на 2 и на 3; 3) в четверичной системе — на 2, на 3 и на 4; 4) в шестеричной системе — на 2, на 3, на 5 и на 6; 5) в восьмеричной системе — на 2, на 4, на 7 и на 8; 6) в двенадцатеричной системе — на 8, на 9 и на 11. 7) в q-ичной системе — на (q - 1). ► 2. Некоторое десятичное число кратно семи. Установите, будет оно кратно семи: 1) в семеричной системе счисления? 2) в двоичной системе счисления?
Глава 5. Делимость и прогрессии 77 ► 3, В натуральном десятичном числе А переставили цифры и получили число В. Известно, что А - В состоит из единиц. Найдите наименьшее возможное количество единиц в разности. ► 4. Из целого числа А вычли число В, полученное перестановкой цифр А. Разность А - В состоит из 2013 единиц. Все указанные числа (Л, В, А- В, 2013) даны в q-ичной системе счисления. Найдите (в десятичной системе счисления) сумму всех возможных значений q. ► 5.2. Прогрессии Понятие «прогрессия» применимо не только к десятичной системе счисления, но к системам счисления с другим основанием. Вот пример геометрической прогрессии в двоичной системе счисления, в которой первый член равен двоичному числу 101, а знаменатель — 2 (десятичное число): 101, 1010, 10100, ... В общем виде к-й член этой прогрессии можно записать так (значение в скобках приписывается к числу 101): ак = 101(00...) (к - 1) нулей Предложите учащимся выполнить ряд заданий, связанных с прогрессиями в недесятичных системах счисления. Задания для самостоятельной работы учащихся ► 1. Определите общий вид А>го члена геометрической прогрессии в двоичной системе счисления, при первом члене, равном аи и знаменателе прогрессии z, равном степени двойки (z = 2W, т = 1, 2, ...). Искомый вид числа ак должен быть представлен в двоичной системе. Указания по выполнению Составьте и исследуйте таблицу с несколькими первыми значениями членов прогрессии при различных значениях т: к т 1 2 1 2 ► 2. Определите общий вид А;-го члена геометрической прогрессии в системе счисления с основанием р при первом члене, равном а и и знаменателе прогрессии, равном р. Искомый вид числа ак должен быть представлен в указанной системе.
78 Глава 5. Делимость и прогрессии ► 3. Определите общий вид к-то члена арифметической прогрессии в двоичной системе счисления, когда к есть степень двойки (к = 2п\ m = О, 1, 2, ...), первый член равен аъ а разность прогрессии равна: 1)2; 2)4; 3) 8; 4)3; 5)5; 6) 9. Значения к, m и всех разностей записаны в десятичной системе, значение а{ — в двоичной. Искомый вид числа ак должен быть представлен в двоичной системе. ► 4. Определите общий вид к-то члена арифметической прогрессии в двоичной системе счисления, когда Нравно 2W+ 1 (m = 0, 1, 2, ...), первый член равен аи а разность прогрессии равна 2. ► 5. Определите общий вид А>го члена арифметической прогрессии в троичной системе счисления при первом члене, равном аи и разности прогрессии, равной 3, когда: 1) к есть степень тройки (к = 3W, m = 0, 1,2, ...); 2) А;равно 3W+ 1 (m = 0, 1, 2, ...); 3) & равно 3W- 1 (m = 0, 1, 2, ...). Искомый вид числа ак должен быть представлен в троичной системе. ► 6. Определите общий вид А:-го члена арифметической прогрессии в троичной системе счисления при первом члене, равном аь и разности прогрессии, равной 4, когда: 1) к есть степень тройки (к = 3W, m = 0, 1,2, ...); 2) Нравно 3W+ 1 (m = 0, 1, 2, ...); 3) Нравно Ът- 1 (т. = 0, 1, 2, ...). Искомый вид числа ак должен быть представлен в троичной системе. ► 7. Определите общий вид £-го члена арифметической прогрессии в троичной системе счисления при первом члене, равном аи и разности прогрессии, равной 2, когда: 1) к есть степень тройки (к = 3W, т = 0, 1, 2, ...); 2) А:равно 3W+ 1 (т = 0, 1, 2, ...); 3) Нравно Зт- 1 (т = 0, 1, 2, ...). Искомый вид числа ак должен быть представлен в троичной системе. ► 8. Определите общий вид А>го члена арифметической прогрессии в системе счисления с основанием р при первом члене, равном аи и разности прогрессии, равнойр, когда к равно рт + 1 (т = 0, 1,2, ...) Искомый вид числа ак должен быть представлен в указанной системе.
Ответы к главе 5 79 ► 9. Определите общий вид суммы к членов арифметической прогрессии в двоичной системе счисления при первом члене, равном аи и разности прогрессии, равной 2 (десятичное число), когда: 1) к есть степень двойки (к = 2W, m = 0, 1,2, ...); 2) Нравно 2т+ 1 (т = 0, 1, 2, ...). Искомый вид суммы должен быть представлен в двоичной системе. ♦ Пример (условный) общего вида искомых значений во всех заданиях: а, + 100 + (И 1...)(000...) + р- I к единиц (т + 1) нулей Ответы к главе 5 Ответы на задания, связанные с признаками делимости 1. 1) число (апап_{...аха0)2\ • делится на 2, если его последняя цифра а0 равна нулю; • делится на 4, если обе его последние цифры а\ и а0 равны нулю; 2) число (апап_ х...axaQ)3: • делится на 2, если сумма его цифр есть четное число; • делится на 3, если его последняя цифра а0 равна нулю; 3) число (апап_ i...я • делится на 2, если на 2 делится его последняя цифра а0; • делится на 3, если сумма его цифр кратна трем; • делится на 4, если его последняя цифра а0 равна нулю; 4) число (апап_х...аха0)в\ • делится на 2, если на 2 делится его последняя цифра а0; • делится на 3, если на 3 делится его последняя цифра а0; • делится на 5, если сумма его цифр кратна пяти; • делится на 6, если его последняя цифра а0 равна нулю; 5) число (апап- \.. ,а\а$)%. • делится на 2, если на 2 делится его последняя цифра а0; • делится на 4, если на 3 делится его последняя цифра а0; • делится на 7, если сумма его цифр кратна семи; • делится на 8, если его последняя цифра а0 равна нулю; 6) число (апап_ i...^i«0)i2* • делится на 8, если на 8 делится число (tfitf0)i2> образованное его двумя последними цифрами; • делится на 9, если на 9 делится число (tfitfo)i2> образованное его двумя последними цифрами; • делится на 11, если на 11 делится число сумма его цифр, т. е. ап + ап_х + ап_2 + ••• + «1 + ^о-
80 Глава 5. Делимость и прогрессии 7) g-ичное число делится на (q - 1), если сумма его цифр кратна (q - 1). 2. Число, кратное семи в десятичной системе, будет таким же в любой другой системе счисления. 3. Разность А - В — кратна числу 9 (убедитесь в этом самостоятельно!). Поэтому ответ — 9. 4. Аналогично десятичной системе счисления, в g-ичной системе разность А - В кратна q - 1, так как сумма ее цифр кратна q - 1 (см. чуть выше). Согласно условию, сумма цифр разности равна 2013. Разложим число 2013 на простые множители: 2013 = 3 • 11 -61. Так как в условии фигурирует цифра 3, то искомые значения оснований систем счисления q > 4. Следовательно, q = 12 или q = 62. Ответ: 74. Ответы на задания, связанные с прогрессиями 1. Составив таблицу: к m 1 2 3 1 ах ax a\ 2 tfjO ajOO a,0000 3 tfiOO tfiOOOO <*,00000000 к = ai(00...) (£-1) нулей ak = a,(00...) (k - 1) • 2 нулей ak = 0,(00...) (к - 1) • 3 нулей можно получить такую формулу общего вида А:-го члена геометрической прогрессии ак = «i(00...). (к - 1) • т нулей 2. Для умножения некоторого /?-ичного числа на р достаточно приписать к нему справа ноль. Поэтому искомая формула имеет вид: ак = а{( 00...). (к — 1) нулей 3. 3.1 Сначала удобно исследовать арифметическую прогрессию в двоичной системе счисления, когда к равно 2т + 1, и при разности, равной 2, то есть выполнить задание 4. Рассмотрим три первых члена прогрессии (значения, соответствующие номеру к, равному 2т + 1, оттенены):
Ответы к главе 5 81 к ак Значение 1 ах ах 2 а2 а\ + 10 а3 я, + 100 Следующее значение к, равное 2т + 1, — это 5. Из закона построения прогрессии следует, что разность между 5-ми 1-м членами прогрессии в 2 раза больше разности между 3-м и 1-м членами: а5-ах = (аз - а\) • 2Ш, откуда ^5 = tfi + Оз — я j) • 2ю = «1 + Ю2 • 2ю- или, учитывая, что для умножения двоичного числа на 2 необходимо приписать к нему справа нуль: а5 = ах + 100. Аналогично можно получить: а9= а\ + 1000, fli?= «1 + 10000. Составив табличку: к т «Л 2 0 а\ + 10 3 1 я, + 100 5 2 а\ + 1000 9 3 а\ + 10000 17 4 ах + 100000 можем установить общий вид искомого члена прогрессии: ak= а\ + 1(00...). (т + 1) нулей После этого можно рассмотреть вариант, когда к = 2т (это соответствует заданию 3.1). На основе последней таблички, учитывая, что ак_\ = ак- 10, можно получить такую: к т ак 1 0 ах 2 1 а\ + 10 4 2 ах + 110 8 3 ах + 1110 16 4 ах + 11110
82 Глава 5. Делимость и прогрессии из которой следует, что в данном случае: ak=ai + (11...)0. т единиц 3.2. Составим таблицу нескольких первых членов прогрессии: к ак 1 а\ 2 а + 100 3 а + 1000 4 а + 1100 5 а + 10000 6 а + 10100 7 а + 11000 8 а + 11100 9 а + 100000 10 а + 100100 11 а + 101000 12 а + 101100 13 а + 110000 14 а + 110100 15 а + 111000 16 а + 111100 17 а + 1000000 В ней значения, соответствующие номеру члена прогрессии, равному степени двойки (к = 2Ш), оттенены. Выписав их: к т ак 1 0 а\ 2 1 а\ + 10 4 2 а\ + 110 8 3 ах + 1110 16 4 а{ + 11110 получим: я*= я 1 + (11 ...)00. т единиц 3.3. Для разности прогрессии, равной 8, имеем аналогично: ак= «1 + (11.. .)000. т единиц 3.4. Имея в виду, что при разности арифметической прогрессии, равной трем, можем записать:
Ответы к главе 5 83 ак= а\ + (к — 1) • (2 + 1) - [а\ + (к — 1) • 2] + к — 1. Выражение в квадратных скобках есть к-й член прогрессии при разности, равной 2. Тогда, учитывая результат, полученный применительно к заданию 3.1, можно записать: я* = а\ + (111...)0 +к- 1, т единиц где к — номер члена прогрессии, представленный в двоичной системе. ♦ Пример. Для прогрессии с параметрами: ах = Юю, т = Зш, то есть для чисел Юю, 13ю, 16ю, ..., определим ак при к = 810: Запишем параметры прогрессии в двоичной системе счисления: ах = т0ък=Ю002. Согласно полученной формуле имеем: ак= 1010 + 1110 + 1000- 1 = 11111, что является правильным ответом (а8 = 31 ю). 3.5. При рассуждениях, аналогичных сделанным только что, можно получить такую формулу: ак ~ а\ ■+ (111 - -ООО + к — 1, тединиц где к — номер члена прогрессии, представленный в двоичной системе. 3.6. я* = я1 + (111...)000 +*- 1, т единиц где к — номер члена прогрессии, представленный в двоичной системе. 4. Ответ был получен ранее применительно к заданию 3.1. 5. Из таблицы: к ак 1 а\ 2 а\ + 10 3 а\ + 20 4 а\ + 100 5 а{ + 110 6 а\ + 120 7 li\ + 200 8 а\ +210 9 а\ + 220 10 11\ + 1000 26 а\ + 2210 27 <Л\ + 2220 28 а\ + 10000
84 Глава 5. Делимость и прогрессии можно получить три искомые формулы: \)ак = ах + (22...)0; т двоек 2 )ак = ах + 1(00...); (т + 1) нулей 3) ак = ci\ + (22...) 10. (т - 1) двоек 6. Вспомнив решения задач 3.3 и 5, можно получить 1) ак = а\ + (22...)0 + к - 1; т двоек 2) ак — а\ + 1(00...) + к — 1; (т+ 1) нулей 3) ак = + (22...) 10 + & - 1, (/г/ - 1) двоек где к — номер члена прогрессии, представленный в троичной системе. 7. 1) ак = яj + (22...)0 — к—1; т двоек 2) ак = ci\ + 1(00...) — к - 1; (/7? + 1) нулей 3) ак = а\ + (22...) 10 - А: - 1, (/77-1) двоек где к — номер члена прогрессии, представленный в троичной системе. 8. ак = ах + 1(00...) (777+1) нулей 9. Для решения надо вспомнить значение А>го члена прогрессии (см. решение задач 3.1 и 4) и формулу для расчета суммы первых членов арифметической прогрессии. 1) ак = а\ + (11...)0 w единиц sk = (а{ + ак)/210 • к= [ах + ах + (11...)0] /210 * к = /77 единиц = [ах + ах +(11...)] • 2m= а,(00...) + (11 ...)(00...) /77 единиц /77 нулей /77 единиц /77 нулей
Ответы к главе 5 85 ♦ Пример к= 8 (т = 3) $* = я,(000)+ 111000 2) ак = а\ + 1(00...) {т + 1) нулей s* = (а, + о*)/2,0 • & = [а,+ о, + 1(00...)]/2ш • £ = (w + 1) нулей = [а,+ 1(00...)] • (2т+ 1) = о,(00...)+ 1(00...) + а, + 1(00...) т нулей т нулей 2т нулей т нулей
Глава 6 Логические и сдвиговые операции Логические операции конъюнкции (или логического умножения), дизъюнкции (логического сложения) в компьютере используются не только при работе со сложными логическими выражениями при формировании запросов к базам данных, в условных операторах в программах, в функции ЕСЛИ в электронной таблице Microsoft Excel и т. п., но и применительно к числам. Выполняются эти операции в процессоре компьютера (поэтому их называют также логическими командами) над числами, представленным в двоичном виде. Рассмотрим те логические команды, которые выполняются над двумя числами (говорят, что у них — два операнда): 1) AND (русский вариант — И); 2) OR (ИЛИ); 3) XOR (от английского еХelusive OR — исключающее ИЛИ). В отличие от арифметических операций над двумя операндами, логические команды являются поразрядными. Например, при сложении двух двоичных цифр возможен перенос в старший разряд, а при логических операциях все разряды рассматриваются изолированно друг от друга. Разумеется, действия над всеми разрядами выполняются параллельно и одновременно. Описанные операции называют также «битовыми». Чтобы было легче понять, в чем заключаются указанные логические операции в процессоре, условимся называть их первый операнд «данными», а второй — «маской». Правила выполнения логических операций в каждом разряде представлены в таблице: Таблица 6.1 X (данные) У (маска) X AND Y X OR Y XXOR Y 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0
Глава 6. Логические и сдвиговые операции 87 Вам эта таблица ничего не напоминает? Да, конечно, она аналогична таблицам истинности для логических операций над величинами логического типа (с той разницей, что здесь операндами являются двоичные цифры). Например, приХ= 101011 и Y= 1101 имеем XANI> Y= 1001, * OR Y= 101111,XXOR 7= 100110. Конечно, возможна и поразрядная операция NOT (НЕ). У нее операнд один. В результате ее выполнения в операнде двоичные цифры 0 и 1 меняются соответственно на 1 и 0 (число инвертируется). Несмотря на то, что, как отмечалось, логические операции выполняются в процессоре компьютера, в языке программирования Паскаль имеется возможность дать команду на их выполнение в программе. Для этого в Паскале существуют операции с соответствующими именами: and, or, xor, not. Их можно применять к данным целого типа, и результат, который они возвращают, также является целым числом. Так, результатом операции and над двумя операндами является десятичное число, которое соответствует двоичному представлению результата поразрядной операции И над исходными операндами. Например, в результате выполнения фрагмента программы на языке Паскаль: х := 11 and 2; writeln(х); на экран будет выведено число 2. Обоснование приведено в табл. 6.2: Таблица 6.2 Двоичное представление 11 1 0 1 1 2 0 0 1 0 11 and 2 0 0 1 0 Десятичное представление 2 Результатом операции or над двумя операндами является десятичное число, которое соответствует двоичному представлению результата поразрядной операции ИЛИ над исходными операндами. Например, в результате выполнения фрагмента программы: х := 11 or 2; writeln(х); на экран будет выведено число 11. Обоснование:
88 Глава 6. Логические и сдвиговые операции Таблица 6.3 Двоичное представление 11 1 0 1 1 2 0 0 1 0 11 or 2 1 0 1 1 Десятичное представление 11 Результатом операции хог над двумя операндами является десятичное число, которое соответствует двоичному представлению результата поразрядной операции ИЛИ над исходными операндами. Например, в результате выполнения фрагмента программы: х := 11 хог 2; writeln(х); на экран будет выведено число 9. Обоснование: Таблица 6.4 Двоичное представление 11 1 0 1 1 2 0 0 1 0 11 хог 2 1 0 0 1 Десятичное представление 9 Результатом операции not с одним операндом является десятичное число, которое соответствует двоичному представлению результата поразрядной операции НЕ над исходным операндом. Например, в результате выполнения фрагмента программы: Var a: byte; а := 11; writeln(not а); на экран будет выведено число 244. Обоснование: Таблица 6.5 Двоичное представление 11 0 0 0 0 1 0 1 1 not 11 1 1 1 1 0 1 0 0 Десятичное представление 244
Глава 6. Логические и сдвиговые операции 89 Над числами в регистрах процессора можно выполнять также две так называемые «сдвиговые» команды: 1) SHL (от Shift Left — сдвинуть влево); 2) SHR (от Shift Right — сдвинуть вправо). В результате выполнения первой в регистрах процессора происходит поразрядный сдвиг двоичных цифр на заданное количество разрядов влево. При этом соответствующее число цифр в старших разрядах теряется, а освободившиеся младшие разряды — заполняются нулями. Например, если в восьми разрядах находилось двоичное число: 1 1 0 0 1 0 0 1 то после сдвига влево на два разряда оно примет вид: 0 0 1 0 0 1 0 0 В результате выполнения команды SHR в регистрах процессора происходит поразрядный сдвиг двоичных цифр на заданное количество разрядов вправо. При этом соответствующее число цифр в младших разрядах теряется, а освободившиеся старшие разряды — заполняются нулями. Например, если в восьми разрядах было представлено двоичное число: 1 1 0 0 1 0 0 1 то после сдвига вправо на два разряда оно примет вид: 0 0 1 1 0 0 1 0 В языке Паскаль также имеется возможность вь в программе. Операция shl имеет формат: <а> shl <b> где <а> и <Ь> — натуральные числа. Результатом ее выполнения будет десятичное ветствует результату поразрядного сдвига влево на представления операнда а. Аналогично, результатом выполнения операции х := a shr b будет десятичное число х, которое соответствует рез сдвига вправо на Ъ разрядов двоичного представлен! Возможен также циклический сдвиг влево, при один или несколько старших разрядов «появлякл младших. Например, если в восьми разрядах находи. шолнить эти команды число, которое соот- b разрядов двоичного [ shr: *ультату поразрядного Iя операнда а. [ котором «уходящие» гея» на месте самого лось двоичное число: 1 0 0 0 1 0 0 1
90 Глава 6. Логические и сдвиговые операции то после циклического сдвига влево на два разряда оно примет вид: 0 0 1 0 0 1 1 0 При циклическом сдвиге вправо «уходящие» младшие разряды «появляются» на месте старших. Например, если в восьми разрядах находилось двоичное число: 1 1 0 0 1 0 0 1 то после циклического сдвига вправо на два разряда оно примет вид: 0 1 1 1 0 0 1 0 Команды для выполнения циклических сдвигов в программе на языке Паскаль отсутствуют. Задания для самостоятельной работы учащихся ► 1. Рассчитайте значения: а) 1101101 AND 10101; б) 1011011 OR 11001; в) 1001101 XOR 10111. ► 2. Определите: 1) чему равен результат операции И при нулевой маске? 2) чему равен результат операции ИЛИ при маске: а) из всех единиц? б) в виде нуля? 3) какая операция и с какой маской позволяет выделить (получить) младший разряд двоичного числа? 4) какой получится результат, если к какому-то числу дважды применить операцию исключающего ИЛИ? 5) какой получится результат, если операцию исключающего ИЛИ применить к двум одинаковым числам? 6) какой получится результат, если к какому-то числу применить операцию исключающего ИЛИ с маской из всех единиц? ► 3. Выясните, можно ли определить десятичный результат выполнения поразрядной логической операции NOT с целым десятичным числом типа byte «в уме»? Почему? ► 4. Установите, можно ли применять поразрядные логические операции к одному или двум отрицательным операндам? ► 5. Определите результат выполнения следующего фрагмента программы на языке Паскаль: Var a: byte; b: shortint; BEGIN а := 11;
Глава 6. Логические и сдвиговые операции 91 writeln(not а); b := 11; writeln(not b) END. Почему выводятся разные значения? ► 6. Объясните, почему a and -{а + 1) = О? (Например, 51 and -52 = 0). ► 7. Каким будет результат применения операции NOT к целому положительному числу — положительным или отрицательным? ► 8. Может ли результат применения операции AND к двум положительным числам быть отрицательным? А операции OR? А операции XOR? ► 9. Может ли результат применения операции AND к двум отрицательным числам быть положительным? А операции OR? А операции XOR? ► 10. Может ли результат применения операции AND к двум числам разного знака быть положительным? А операции OR? А операции XOR? ► 11. Определите, каким (положительным или отрицательным) будет результат выражения NOT(^4 AND В), если: 1) А и В — положительные числа; 2) А и В — отрицательные числа; 3) А и В — числа разного знака. ► 12. Определите, каким (положительным или отрицательным) будет результат выражения NOT(^ OR В), если: 1) А и В — положительные числа; 2) А и В — отрицательные числа; 3) А и В — числа разного знака. ► 13. Определите, каким (положительным или отрицательным) будет результат выражения NOT(,4 XOR В), если: 1) А и В — положительные числа; 2) А и В — отрицательные числа; 3) А и В — числа разного знака. ► 14. Определите, каким (положительным или отрицательным) будет результат выражения NOT A AND NOT В, если: 1) А и В — положительные числа; 2)АиВ — отрицательные числа; 3) А и В — числа разного знака. ► 15. Определите, каким (положительным или отрицательным) будет результат выражения NOT A OR NOT В, если: 1) А и В — положительные числа; 2) А и В — отрицательные числа; 3) А и В — числа разного знака.
92 Глава 6. Логические и сдвиговые операции ► 16. Определите, каким (положительным или отрицательным) будет результат выражения NOT A XOR NOT В, если: 1) А и В — положительные числа; 2)АиВ — отрицательные числа; 3)АиВ — числа разного знака. В задачах 17-23 дано целое двоичное число х, которое в памяти компьютера представляется как последовательность из восьми битов (может быть, с начальными нулями). Заметим также, что приемы, используемые при решении этих задач, часто применяются при низкоуровневом программировании [14]. ► 17. Какую логическую операцию и с какой маской надо выполнить над этим числом, чтобы обнулить крайний справа единичный бит этого числа (т. е. в двоичном представлении числа превратить крайнюю справа единицу в ноль). Например, при х = 01011000 необходимо получить 01010000. ► 18. Как, используя логические операции, проверить, является ли оно степенью числа 2? ► 19. Как, используя логические операции, проверить, имеет ли оно вид 2к — 1 ? ► 20. Какую логическую операцию и с какой маской надо выполнить над этим числом, чтобы выделить крайний справа единичный бит этого числа (т. е. получить 8 бит, среди которых единственная единица находится в том разряде, в котором в заданном числе находился крайний справа единичный бит). Например, при х = 01011000 необходимо получить 00001000. ► 21. Какую логическую операцию и с какой маской надо выполнить над этим числом, чтобы выделить завершающие нулевые биты этого числа в виде единиц? (Например, при х = 01011000 необходимо получить 00000111.) ► 22. Какую логическую операцию и с какой маской надо выполнить над этим числом, чтобы выделить крайний справа единичный бит и все завершающие нулевые биты этого числа в виде последовательности единиц? (Например, при х = 01011000 необходимо получить 00001111.) ► 23. Какую логическую операцию и с какой маской надо выполнить над этим числом, чтобы распространить крайний справа единичный бит? (Например, прих = 01011000 необходимо получить 01011111.) ► 24. Установите, как изменится число а в результате выполнения оператора присваивания а : = a shr 1: 1) при четном at 2) при нечетном а? Как можно обобщить оба ответа?
Глава 6. Логические и сдвиговые операции 93 ► 25. Определите, как изменится число а, равное 1024, в результате выполнения оператора присваивания: а := a shr к ► 26. Можно ли ответы по двум предыдущим заданиям распространить на поразрядный сдвига влево? Можно ли утверждать, что при таком сдвиге число а увеличится? А что уменьшится? ► 27. Установите, можно ли применять сдвиговые операции к отрицательным числам. ► 28. Определите, как изменится число а при циклическом сдвиге вправо на один разряд, в случае, когда в крайнем правом разряде: 1)записан 0? 2) записана 1? ► 29. Установите формулу, по которой можно определить, как изменится число а при циклическом сдвиге вправо на Ъ разрядов, в случае, когда в Ъ правых разрядах: 1) записаны нули? 2) записаны единицы? Что можно сказать об изменении значения а в этих случаях (оно увеличится или т. п.)? ► 30. Определите, как изменится число а при циклическом сдвиге влево на один разряд, в случае, когда в крайнем левом 8-м разряде: 1) записан 0? 2) записана 1? Можно ли сделать вывод об изменении значения а в этих случаях (оно увеличится или т. п.)? ► 31. Установите формулу, по которой можно определить, как изменится число а при циклическом сдвиге влево на b разрядов, в случае, когда в Ъ левых разрядах: 1) записаны нули? 2) записаны единицы? В обоих случаях принять, что число а записано в восьми разрядах. Можно ли сделать вывод об изменении значения а в этих случаях (оно увеличится или т. п.)? ► 32. В восьми двоичных разрядах записано число п. Как получить: 1) цифру в первом (крайнем справа) разряде? 2) цифру в четвертом разряде? 3) цифру к-м разряде?
94 Глава 6. Логические и сдвиговые операции Задачи с «именами» © ► 1. Сложение двух двоичных цифр Как известно, таблица сложения в двоичной системе счисления выглядит так: + ? + °, + j * i О 1 110 Запишите формулы, определяющие значения цифры результата г и значения переноса р в зависимости от значения слагаемых а и Ь. Операции сравнения (условия) не использовать. ► 2. Найти количество единиц Дано двухразрядное двоичное число (может быть с начальным нулем или состоящее из двух нулей). Определим количество единиц в нем. Это количество можно записать в виде гхг2 (00, 01 или 10). Найдите зависимости значений г\ и г2 от цифр заданного числа. Например, если заданное число равно 10, то г\ = 0, r2 = 1, если 11 — то гх = 1, г2 = 0. ► 3. Сложение трех двоичных цифр Запишите формулы, определяющие значения цифры результата г и значения переноса р в зависимости от значения трех двоичных цифр а, b и с. Операции сравнения (условия) не использовать. ► 4. Проверка на четность Запишите формулы, определяющие значение величины v такой, что v = 0, если количество единиц среди заданных двоичных цифр четное, и v = 1 — в противном случае: а) для двух заданных цифры а и Ь\ б) для двух заданных цифры а, Ъ и с; в) для к заданных цифры аи а2, Во всех случаях операции сравнения (условия) не использовать. ► 5. Закон построения последовательности двоичных чисел Последовательности двоичных чисел выглядит так: 0 1 10 11 100 101 110 111 1000
Глава 6. Логические и сдвиговые операции 95 Опишите общие правила (формулы), по которым можно получить цифры очередного число такой последовательности по значениям цифр предыдущего числа для не более чем четырехзначных двоичных чисел. ► 6. Код Грея1 Код Грея — такой способ кодирования чисел, при котором закодированное число и число, следующее за ним, отличаются только одним битом. Эта концепция, в принципе, может быть обобщена для любой системы счисления, но в нашем случае понадобится вариант с двоичной системой, а среди множества двоичных модификаций кодов Грея — «двоичный отраженный (рефлексный) код Грея». Отраженный двоичный код Грея длины п строится следующим образом. Начнем со строк 0 и 1, которые представляют собой соответственно целые числа 0 и 1: 0 1 Добавим к ним «отражение» этих строк относительно горизонтальной оси: 0 1 1 0 и припишем 1 слева от новых записей списка, а слева от уже имеющихся — разместим 0: 00 01 И 10 Таким образом мы получили отраженный код для п = 2. Чтобы получить код для /7 = 3, повторим описанную процедуру и получим: 000 001 011 010 110 111 101 100 1 Историю и применение кодов Грея — см. в конце главы.
96 Глава 6. Логические и сдвиговые операции Можно доказать, что: 1) при указанном способе построения каждая из 2" комбинаций в списке появляется, причем только один раз; 2) при переходе от одного элемента списка к рядом (ниже) стоящему изменяется только один бит; 3) только один бит изменяется при переходе от последнего элемента списка к первому. Поэтому отраженный код Грея называют также «циклическим». В табл. 6.6. записаны двоичные представления 16 десятичных чисел (порядковых номеров, начиная с нуля) и соответствующие числа кода Грея длины 4. Таблица 6.6 Двоичный код Код Г рея abed efgh 0000 0000 0001 0001 0010 ООН 0011 0010 0100 0110 0101 0111 0110 0101 0111 0100 1000 1100 1001 1101 1010 1111 1011 1110 1100 1010 1101 1011 1110 1001 1111 1000 ► 6.1. Опишите общие правила (формулы), по которым можно получить цифры элементов кода Грея в зависимости от цифр соответствующего порядкового номера (двоичного числа) и наоборот. Указание по выполнению. Используйте логические операции над числами. ► 6.2. Сформулируйте также правило формирования очередного элемента кода Грея «на бумаге». Указание по выполнению. Исследуйте четность (количество единиц) в предыдущем элементе.
Глава 6. Логические и сдвиговые операции 97 ► 6.3. Опишите также правило получения «на бумаге» значения элемента кода Грея в зависимости от соответствующего порядкового номера (двоичного числа). Указание по выполнению. Используйте сдвиговую операцию SHR (сдвиг вправо) и логическую операцию XOR. ► 6.4. Представьте, что вам нужно открыть сейф, в котором имеются четыре переключателя, каждый из которых может находиться в одном из двух положений — вертикальном или горизонтальном: Сейф откроется при каком-то одном сочетании положений переключателей. В исходном состоянии все переключатели вертикальны. Предложите последовательность перебора всех2 возможных вариантов состояния, при которой общее число переключений из одного положения переключателей в другое будет минимальным. Например, если сначала повернуть в горизонтальное положение 1-й и 4-й переключатель (1-е состояние), а затем вернуть 1 -й переключатель в вертикальное положение, а горизонтально расположить 3-й переключатель (2-е состояние), то общее число переключений в этот момент станет равно четырем (2 + 2). Ответ оформите в виде таблицы: № п.п. Состояние переключателей Число переключений Исх. 1 2 2 2 3 1 Всего После знакомства учащихся с логическими и сдвиговыми операциями целесообразно привести примеры их использования в компьютере, в частности для перевода десятичного числа в двоичную систему счисления и для проведения арифметических операций. Программы, моделирующие эти действия, приведены в приложениях 4 и 6. В приложении 9 описан пример использования логической операции хог для шифрования текста. А здесь рассмотрим также инвертированные числа. 2 Ясно, что сейф может быть открыт и при некотором не последнем варианте.
98 Глава 6. Логические и сдвиговые операции Двоичное число b будем называть «инвертированным» по отношению к двоичному числу а, если оно получено путем замены всех нулей в двоичной записи числа а на единицы и всех единиц — на нули. Обратим внимание на то, что инвертированные числа при таком толковании не представляют собой результат логической операции not (см. выше) применительно к числу а, поскольку при выполнении этой операции на единицы заменяются также начальные нули. Предложите учащимся ответить на вопросы и выполнить задания, связанные с инвертированными числами. ► 1. Может ли число в результате инвертирования увеличиться? ► 2. Какие инвертированные числа не имеют «прямых» аналогов (из которых они получены), кратных этим числам? ► 3. Значения каких чисел в результате инвертирования уменьшаются в 2 раза? ► 4. Установите общий вид чисел, которые в результате инвертирования уменьшаются: 1) в 4 раза; 2) в 2Араз (где к — целое число). ► 5. Значения каких чисел в результате инвертирования уменьшаются в 6 раз? ► 6. Установите общий вид чисел, которые в результате инвертирования уменьшаются: 1) в 14 раз; 2) в 2к-2 раз (где к — целое число). ► 7. Имеются ли числа, которые в результате инвертирования уменьшаются: • в 3 раза? • в некоторое нечетное число раз? ► 8. Инвертированное число равно 3. Минимальное соответствующее «прямое» число для него, которое одновременно кратно трем, — 12. А какое следующее большее число, обладающее теми же свойствами? Ответ получите, не выписывая очередные двоичные числа и не переводя их в десятичную систему. Указания по выполнению 1. Определите общий вид чисел, которые при инвертировании превращаются в число 3. 2. Установите формулу, позволяющую вычислить несколько чисел, следующих за числом 12. 3. Проверьте их делимость полученных значений на 3. ► 9. Найдите числа, не большие 4000, которые в результате инвертирования уменьшаются в 20 раз.
Ответы к главе 6 99 Система счисления майя Система счисления, принятая в древней цивилизации индейцев майя, обитавших на территории Центральной Америки, была пятерич- но-двадцатеричной. Первые 19 чисел записывались комбинированием черточки, обозначавшей пятерку, и точки (единицы) — см. рис. 6.1. Рис. 6.1 Но основную роль играла искаженная двадцатеричная система счисления. При записи числа «цифры» подписывались одна под другой, причем старшей являлась верхняя цифра. Прилагательное «искаженная» означает вот что: третье — после 1 и 20 — ключевое число в системе майя равнялось не 20 • 20 = 202, а 18 • 20 = 360; далее шли 18 • 202, 18 • 203, 18 ■ 204. Существовало и специальное обозначение для нуля, напоминающее полузакрытый глаз (см. рис. 6.2). На рис. 6.3 приведены несколько примеров записи чисел в системе майя: Рис. 6.2 Рис. 6.3 (1 • 20 + 0 = 20, 19 • 360 + 13 • 20 + 13 = = 7 113,10 360 + 0 20 + 7 = 3 607) Ответы к главе 6 Задания, связанные с логическими и сдвиговыми операциями а) 1101101 AND 10101: 1101101 1 1 0 1 1 0 1 10101 0 0 1 0 1 0 1 1101101 AND 10101 0 0 0 0 1 0 1
100 Глава 6. Логические и сдвиговые операции Ответ: 5ю- б) 1011011 OR 11001: 1011011 1 0 1 1 0 1 1 11001 0 0 1 1 0 0 1 1011011 OR 11001 1 0 1 1 0 1 1 Ответ'. 9110. в) 1001101 XOR 10111: 1001101 1 0 0 1 1 0 1 10111 0 0 1 0 1 1 1 1001101 XOR 10111 1 0 1 1 0 1 0 Ответ: 90 2. 1) при нулевой маске равен результат операции И равен нулю; 2) результат операции ИЛИ: а) при маске из всех единиц равен 2* - 1, где к — количество двоичных разрядов в записи данного числа: ИЛИ 1 1 1 1 1111 б) при маске в виде нуля равен данному числу: или I ® 1 о 10 0 1 3) младший разряд двоичного числа позволяет выделить (получить) операция И с маской, равной 1: И 1 1 о и 1 1 4) если к какому-то числу дважды применить операцию исключающего ИЛИ с любой маской, то получится исходное число:
Ответы к главе 6 101 Число 1 1 0 0 Маска 1 0 0 1 XOR 0 1 0 1 Маска 1 0 0 1 XOR 1 1 0 0 5) если операцию исключающего ИЛИ применить к двум одинаковым числам, то получится 0; 6) если к какому-то числу применить операцию исключающего ИЛИ с маской из всех единиц, то получится результат, равный разности маски и заданного числа: Число 1 1 0 0 Маска 1 1 1 1 XOR 0 0 1 1 3. Определить результат выполнения поразрядной логической операции NOT с целым десятичным числом N типа byte «в уме» можно — он равен 255 -N. Объяснение Обозначим значение not N — а. Тогда N + а = 255 (сумма 8-разряд- ного двоичного числа и результата применения к нему логической операции not равна 111111112э то есть 255 ю). Откуда десятичное значение not N равно 255 -N. 4. Поразрядные логические операции к одному или двум отрицательным операндам применять можно. 5. В результате выполнения следующего фрагмента программы на языке Паскаль: Var a: byte; b: shortint; BEGIN а := 11; writeln(not а); b := 11; writeln(not b) END. на экран будут выведены разные значения: 244 и -12. Первое значение обосновывается выше. Для значения b результат приведен в таблице: Двоичное представление 11 0 0 0 0 1 0 1 1 not 11 1 1 1 1 0 1 0 0
102 Глава 6. Логические и сдвиговые операции Что за число получено? Так как тип данных указан shortint, то первый разряд — знаковый. То есть получено отрицательное число, дополнительный код которого равен 1110100 (7-разрядный). Получить модуль отрицательного числа по его дополнительному коду можно следующим образом: Дополнительный код 1 1 1 0 1 0 0 Вычитаем 1 1 1 1 0 0 1 1 Инвертируем 0 0 0 1 1 0 0 Десятичное представление модуля числа 12 Итак, результат равен -12. 6. Равенство a and -(а + 1) = 0 (например, 51 and -52 = 0) имеет место по следующим причинам. Как известно, целые отрицательные числа представлены в компьютере в так называемом «дополнительном» коде. Можно показать, что такой код отрицательного числа (а + 1) представляет собой обратный код положительного числа а. Например, прямой код числа 51 при восьмиразрядной ячейки: 00110011. Для отрицательного числа -(51 + 1) = -52 дополнительный код можно определить так: Прямой код числа 52 0 0 1 1 0 1 0 0 Обратный код 1 1 0 0 1 0 1 1 Дополнительный код (прибавляем 1) 1 1 0 0 1 1 0 0 Видно, что результат логической операции and над числами 00110011 и 11001100 будет равен нулю. 7. Операция NOT меняет значения во всех двоичных разрядах внутреннего представления числа, в том числе в знаковом разряде, на противоположные. Значит, нулевое значение знакового разряда положительного числа будет изменено на единицу, то есть результат будет отрицательным. 8. Во всех трех случаях ответ — нет, так как в знаковом разряде результата будет равен нулю. 9. Для операции XOR — да, может, для двух других — нет. 10. Для операции AND — да, может, для двух других — нет. Ответы к заданиям 11-13 NOT04 AND В) NOT(/4 OR В) NOT (A XOR В) А и В — положительные числа Отрицательным Отрицательным Отрицательным А и В — отрицательные числа Положительным Положительным Отрицательным А и В — числа разного знака Отрицательным Положительным Положительным
Ответы к главе 6 103 Ответы к заданиям 14-16 NOT A AND NOT В NOT A OR NOT В NOT A XOR NOT В АиВ — положительные числа Отрицательным Отр ицате льным Положительным А и В — отрицательные числа Положительным Положительным Положительным А и В — числа разного знака Положительным Отрицательным Отрицательным 17. Применить заданному числу логическую операцию конъюнкции с маской, равной этому же числу, уменьшенному на 1. Например, если заданное число равно 01011000, то после вычитания из него 1 получится 01010111, а в результате конъюнкции: 0 1 0 1 1 0 0 0 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 Логика действий здесь такая. Цифры исходного число до крайнего справа единичного бита не должны измениться. Это можно сделать, если применить к этим разрядам логическую операцию AND с маской, равной числу из тех же цифр. А из остальных цифр, которые имеют вид 1000, надо получить 0000. Это можно сделать, если маска будет соответствующих разрядов равна 0111. Получить же такую маску можно, вычтя из заданного числа 1. 18. Так как речь в задаче идет о проверке значения, то остается применить к заданному числу какую-то логическую операцию и проверить результат на равенство нулю3. Заданное число х в двоичном виде выглядит так: 10...0. к нулей Получить ноль можно, применив к числу х логическую операцию AND с маской из к единиц. Такая маска может быть получена следующим образом: х- 1. 19. Решение этой задачи как бы «противоположно» решению предыдущей. Получить ноль (для проверки) можно, применив в заданному числу, которое должно иметь вид: 11...1, к единиц логическую операцию AND с маской вида: 10...0. к нулей 3 Проверять на равенство единице и двойке нельзя, так эти числа сами являются степенью числа 2.
104 Глава 6. Логические и сдвиговые операции Такая маска может быть получена следующим образом: х + 1, где х — заданное число. 20. Здесь рассуждения могут быть такими. Получить число из одних нулей можно, применив к заданному числу логическую операцию AND с маской, равной числу, цифры которого противоположны соответствующим цифрам заданного числа (его, в свою очередь, можно получить с помощью операции NOT). А чтобы в результате была единственная единица в том разряде, в котором в заданном числе находился крайний справа единичный бит, нужно, чтобы при упомянутой чуть выше операции AND в этом разряде в маске также была единица. Такую маску можно получить, перед использованием операции NOT вычтя из заданного числа 1. Итак, этапы решения задачи: 1) вычесть из заданного числа 1. Например, если заданное число равно 01011000, то после вычитания из него 1 получится 01010111; 2) применить к результату отрицанию NOT — получится 10101000; 3) полученное в пункте 2 число использовать в качестве маски в операции AND с заданным числом: 0 1 0 1 1 0 0 0 1 0 1 0 1 0 0 0 0 1 0 1 1 0 0 0 Второй способ иллюстрируется следующей таблицей: X 0 1 0 1 1 0 0 0 NOTx 1 0 1 0 0 1 1 1 NOT х + 1 0 1 0 1 1 0 0 0 xAND (NOT x + 1) 0 1 0 1 1 0 0 0 21. Задача может быть решения несколькими способами. 1. Логическая формула для получения требуемого результата имеет вид: NOT х AND (х- 1). Например, при х = 01011000, имеем NOTx= 10100111,х- 1 =01010111, NOTx AND (х- 1) = 00000111, при х = 11011100: имеем NOT х = 00100011, х - 1 = 11011011, NOT х AND (х - 1) = 00000011. 2. Вторая логическая формула, по которой можно получить требуемый результат, выглядит так: NOT (х OR NOT (х - 1)).
Ответы к главе 6 105 Пример ее использования: 0 1 0 1 1 0 0 0 X-1 0 1 0 1 0 1 1 1 NOT (х - 1) 1 0 1 0 1 0 0 0 jcOR NOT (х - 1) 1 1 1 1 1 0 0 0 NOT (х OR NOT (х - 1)) 0 0 0 0 0 1 1 1 3. Имеется также вариант, во многом аналогичный описанному только что. Для него формула имеет вид: NOT (х OR (NOT х + 1)). 0 1 0 1 1 0 0 0 NOT* 1 0 1 0 0 1 1 1 NOT JC + 1 1 0 1 0 1 0 0 0 jcOR (NOT x + 1) 1 1 1 1 1 0 0 0 NOT (x OR (NOT x + 1)) 0 0 0 0 0 1 1 1 4. Четвертая формула: (х AND NOT (х - 1)) - 1. д: 0 1 0 1 1 0 0 0 1 0 1 0 1 0 1 1 1 NOT(x- 1) 1 0 1 0 1 0 0 0 x AND NOT (x - 1) 0 0 0 0 1 0 0 0 (x AND NOT (x - 1)) - 1 0 0 0 0 0 1 1 1 Здесь также возможен вариант: X 0 1 0 1 1 0 0 0 NOT* 1 0 1 0 0 1 1 1 NOT X +1 1 0 1 0 1 0 0 0 ;t AND (NOT jc + 1) 0 0 0 0 1 0 0 0 x AND (NOT x + 1)- 1 0 0 0 0 0 1 1 1 22. Для решения задачи необходимо к заданному числу применить логическую операцию XOR с маской, равной этому же числу, уменьшенному на 1: 0 1 0 1 1 0 0 0 X-1 0 1 0 1 0 1 1 1 xXOR(x- 1) 0 0 0 0 1 1 1 1
106 Глава 6. Логические и сдвиговые операции 23. Отличие решения этой задачи от предыдущей заключается в использовании операции «обычной» дизъюнкции вместо исключающей дизъюнкции: 0 1 0 1 1 0 0 0 х — 1 0 1 0 1 0 1 1 1 jcOR(jc-1) 0 1 0 0 1 1 1 1 24. В результате выполнения оператора присваивания а := a shr 1: 1) при четном а: число а уменьшится в 2 раза; 2) при нечетном а: значение а станет равно a div 2, где div — знак операции целочисленного деления. Обобщить оба ответа можно в виде: a div 2. 25. Число а, равное 1024, в результате выполнения оператора присваивания: а := a shr к — уменьшится в 2к раз. 26. Однозначно утверждать, что при поразрядном сдвиге влево заданное число а в общем случае увеличится или уменьшится, нельзя: Двоичное представление Результат а 1 0 1 0 10 a shl 1 0 1 0 0 4 a shl 1 shl 1 1 0 0 0 8 27. К отрицательным числам сдвиговые операции применять можно: -6 shl 1 =-12; -6 shr 1 = 2 147 483 645. Приведенные результаты исследуйте самостоятельно. 28. Число а при циклическом сдвиге вправо на 1 разряд изменится следующим образом: 1) когда в крайнем правом разряде записан 0 — оно станет равно а div 2: а 1 0 1 0 1 1 0 0 a shr 1 0 1 0 1 0 1 1 0 2) когда в крайнем правом разряде записана 1 — оно станет равно a div 2 + 2к ~ \ где к — количество двоичных разрядов в записи данного числа:
Ответы к главе 6 107 а 1 0 1 0 1 1 0 1 a shr 1 1 1 0 1 0 1 1 0 29. Формула, по которой можно определить, как изменится число а при циклическом сдвиге вправо на Ъ разрядов, в случае: 1) когда в b правых разрядах записаны 0: а = a div 2 div 2... = a div 2b V V ' b раз Например, при b = 2: а 1 0 1 0 1 1 0 0 a shr b 0 0 1 0 1 0 1 1 2) когда в b правых разрядах записаны 1: а = ((a div 2 + 2*~ ’) div 2 + 2*~ ‘) div 2 + 2*~ Ь раз Попробуем получить общую формулу, исследовав, например, вариант для к = 5, 2к~1 = 16. ь а или а 1 a div 2 + 16 a div 2 + 16 2 (a div 2 + 16) div 2 + 16 a div 2 div 2 + 24 3 (Сa div 2 + 16) div 2 + 16) div 2+16 a div 2 div 2 div 2 + 28 Для части выражения со знаками div общая формула a div 2Ь. Такую же формулу можно получить и для «свободного члена» (16, 24, 28, ...). Для этого составим табличку: b 1 16 31 - 15 31 - (16 - 1) u> 1 ■u 1 2 24 31-7 31 - (8 - 1) 31 - (23 - 1) 3 28 31-3 31 -(4-1) 31 — (22 — 1) из которой следует общая формула для «свободного члена»: 2*-1-(2*"*-1) = 2*-2*"*, а вся формула для расчета результата циклического сдвига будет иметь вид: a div 2 + 2к - 2 ~ь (проверьте ее для случая к = 5, Ъ = 4). 30. Число а при циклическом сдвиге влево на 1 разряд изменится следующим образом:
108 Глава 6. Логические и сдвиговые операции 1) когда в крайнем левом 8-м разряде записан 0 — число а увеличится в 2 раза: а 0 1 1 0 1 0 1 1 a shl 1 1 1 0 1 0 1 1 0 Обоснование Число а без первой двоичной цифры равно остатку от деления а на 27 (то есть совпадает с а). После приписывания справа нуля это число увеличивается в 2 раза. 2) когда в крайнем левом 8-м разряде записана 1 — число а будет равно остатку от деления а на 27, умноженному на 2, и плюс 1: 1 1 1 0 1 0 1 1 1 1 0 1 0 1 1 1 Если указанный остаток равен 127 (например, а = 255), то число а не изменится, если он меньше 127, то число а уменьшится. 31. Число а при циклическом сдвиге влево на Ъ разрядов изменится следующим образом: 1) когда в Ъ левых разрядах записаны 0 — увеличится в 2Ь раз; 2) когда в b левых разрядах записаны 1 — число а будет равно остатку от деления а на 28"ъ, умноженному на 2Ь, и плюс 2Ь - 1. 32. Для числа п, записанного в восьми двоичных разрядах, можно получить цифры следующим образом: 1) цифру в первом (крайнем справа) разряде: п and 1; 2) цифру в четвертом разряде (п shr 3) and 1; 3) цифру &-том разряде: (п shr (&- 1)) and 1. Задачи с «именами» 1. Изменим заданную в условии таблицу сложения, записав в нее нулевые значения переноса для трех первых случаев: 0 0 0 1 0 1 1 0 Ее анализ показывает, что значения г и р могут быть найдены по формулам: г=aXORЬ р=a AND Ъ 2. Обозначим первый и второй разряд заданного числа соответственно Ъ\ и Ь2 и составим таблицу, в первой строке которой запишем все возможные значения заданного числа, а в четвертой — соответствующие искомые значения:
Ответы к главе 6 109 о о 0 1 1 0 1 1 Ъх ь2 Ь\ ь2 ьх Ъ2 Ь\ ь2 Г\ Г2 Г\ Г2 Г\ гг Г\ г2 0 0 0 1 0 1 1 0 Ее анализ показывает, что значения гхя г2 могут быть найдены по формулам: rx = bx AND Ъ2 r2= bx XOR Ь2 3. г = a XOR Ъ XOR с р= (a AND Ъ) XOR (a AND с) XOR (b AND с) 4. а) v = a XOR Ъ\ б) v = a XOR Ь XOR с; в) v - ах XOR а2 XOR ... XOR ah 5. Обозначим двоичные разряды (слева направо) — a, b, с9 d и запишем все не более чем четырехзначные двоичные числа в виде: abed 0000 0001 0010 ООН 0100 0101 ОНО 0111 1000 1001 1010 1011 1100 1101 1110 1111 Анализ показывает, что: 1) цифра d' очередного числа противоположна цифре d предыдущего числа: d' =NOT d9 (6.1) где NOT — логическая операция, применяемая к числам;
110 Глава 6. Логические и сдвиговые операции 2) цифра очередного числа с': равна 0, если цифры с и d предыдущего числа одинаковые, и равна 1 — в противном случае. Эту зависимость можно записать следующим образом: c'=cXORd, (6.2) где XOR — логическая операция, применяемая к числам; 3) зависимости для цифр Ь' и а' можно словесно описать так: если в предыдущем числе все цифры справа от рассчитываемой равны 1 то если такая же цифра в предыдущем чисел равна 0 то Ь' =1 (или а' =1) иначе Ъ' =0 (или а' =0) все все или, с использованием логических операций XOR и AND: Ъ' =Ь XOR (с AND d) (6.3) a' = a XOR (b AND с AND d) (6.4) 6. 6.1. Код Грея из двоичного кода можно получить по следующим зависимостям: е = NOT a f=aXORb g = b XOR с h = сXOR d 6.2. Двоичный код из кода Грея можно получить по следующим формулам: a = е b = е XOR / c = eXORf XORg d = e XOR/ XOR g XOR h 6.3. Правило формирования очередного элемента кода Грея «на бумаге» такое. Если количество единиц в предыдущем элементе — четное, то следует инвертировать младший бит, в противном случае — инвертировать бит слева от крайнего единичного бита. Можно воспользоваться другим, эквивалентным, методом — начиная справа, найти первый бит, для которого имеет место четность его и всех битов слева, после чего инвертировать бит в данной позиции.
Ответы к главе 6 111 Правило получения «на бумаге» значения элемента кода Грея в зависимости от соответствующего порядкового номера (двоичного числа) следующее: 1) под двоичным числом записать это же число, но сдвинутое на один разряд вправо (при этом младший разряд сдвигаемой комбинации отбрасывается); 2) провести над двумя числами логическую операцию XOR. Например, при порядковом номере элемента 0101: XOR 0 1 0 0 0 111 6.4. Учитывая, что положение отдельного переключателя можно рассматривать как соответствующее нулю (вертикальное) или единице (горизонтальное), одним из методов решения является перебор двоичных представлений чисел от 1 до 15 с использованием кода Грея длины 4. Задания, связанные с инвертированными числами 1. Не может, поскольку инвертированное число всегда будет иметь меньше разрядов, чем заданное число, которое начинается на единицу. 2. Все двоичные числа, оканчивающие нулем. Обоснование Десятичные эквиваленты таких чисел — четные, а их прямых «прямых» аналогов — нечетные (нет нечетных чисел, кратных четным). 3. Чисел вида 10, 1010, 101010, ... Обоснование Если двоичное число а в два раза больше некоторого числа Ъ, то оно оканчивается на 0 и имеет вид Ь0. Например, число, в два раза большее десятичного числа 13 (11012), имеет вид 110Ю2.Итак, последняя цифра числа а — 0. Значит, в инвертированном числе b последней цифрой будет 1: а 0 Ъ 1 Но, согласно только что сделанному выводу о виде числа а, можем сказать, что 1 — предпоследняя цифра числа а: а 1 0 Итак, одно из искомых чисел получено. Продолжим рассуждения.
112 Глава 6. Логические и сдвиговые операции В инвертированном числе Ъ предпоследняя цифрой — 0, которая «перейдет» на соответствующее место в двоичную запись числа а\ ь 0 1 а 0 1 0 Анализ показывает, что второе искомое число — 1010, а все числа имеют вид, приведенный в ответе. 4. 4.1. Анализ, аналогичный проведенному применительно к заданию 2, показывает, что искомые числа имеют вид: 1100, 11001100, 110011001100, ... 4.2. Здесь можно установить, что искомые числа состоят из одного, двух, ... элементов следующего вида: 11...100...0 к еди- к ну- ниц лей Например, при к = 4: 11110000, 1111000011110000, 111100001111000011110000, ... 5. Чисел вида 110, 110, 110110110, ... Обоснование См. ответ к заданию 2. 6. 6.1. Чисел вида 1110, 11101110, 111011101110, ... 6.2. Искомые числа состоят из одного, двух, ... элементов следующего вида: 11...10 к-1 единиц Например, при к =5: 11110, 1111011110, 111101111011110, ... 7. Чисел, которые при инвертировании уменьшаются в нечетное число (в том числе и в 3) раз, нет. Обоснование Согласно ответу на вопрос 2, инвертированное число всегда нечетное, а его «прямой» аналог — четное. 8. Зю = 112 1210= 1Ю02
Ответы к главе 6 113 Нетрудно сделать вывод о том, что другие возможные «прямые» числа должны в двоичной записи иметь вид *00, где — последовательность из одних единиц (иначе при инвертировании не получится 3). И, самое главное, эти числа должны быть кратны трем. Чтобы получить двоичное число указанного вида, в котором количество единиц на 1 больше, чем в некотором числе ah необходимо выполнить следующие действия: ai+x = ((а, + 4) • 2 - 1) - З4 = 2а,- + 4. Аналогичное число, в котором единиц больше на две, может быть получено так: Я/ + 2 = ((*/ + 4) • 4 - 1) - 3 = 4я, + 12. Если я, кратно трем (я,- = 12), то а, + i не кратно трем, a ai + 2 — кратно. Значит, искомое число — 4 -12 +12 = 60. 9. Обозначим искомое число Я, соответствующее инвертированное — Я. Во-первых, можем записать: Я = 20Я. Далее можно установить следующую особенность. Если заданное число Я в двоичном виде — двузначное, то сумма его и инвертированного числа И равна 3, если трехзначное — равна 7, если четырехзначное — равна 15, ... (убедитесь в этом самостоятельно). Значит, Я + Я = 2к - 1, или 21#= 2*- 1. Итак, нужно найти такие пары чисел Я и Я, для которых 21#= 2*- 1, где к=5,6, ... Установим максимальное значение к, при котором Я < 4000. Так как первое, большее чем 4000 число, равное степени двойки, это 4096 (212), то соответствующее значение к— 12. Проверка полученного диапазона значений к показывает, что условию соответствуют два числа: 1)60 (И = 310= п2); 2)3900 (И = 19510= 110000112). Дополнительные задания 1. Определите следующее за числами 12 и 60 число, являющееся «прямым» для числа 3 и которое одновременно кратно трем. 2. Какой вывод вы можете сделать об общем виде двоичной записи «прямых» чисел, которые: 1) кратны трем? 2) кратны семи? 3) кратны 15? 4 Убедитесь в справедливости приведенной формулы.
114 Глава 6. Логические и сдвиговые операции Коды Грея. Краткая история и применение Коды Грея получили свое название по имени Франка Грея, физика из фирмы Bell Telephone Laboratories, который в 1930-х годах изобрел метод, используемый для передачи цветного телевизионного сигнала, совместимого с существующими методами передачи и получения чернобелого сигнала, то есть когда при получении цветного сигнала чернобелым приемником изображение выводится оттенками серого цвета. Свойство кодов Грея, заключающееся в том, что каждая последующая комбинация отличается от предыдущей значением только одного разряда, используется, в частности, при применении кода Грея в датчиках линейного перемещения или угла поворота. Представим себе полосу материала, которая разделена на проводящие и непроводящие области, соответствующие нулям и единицам элементов кода Грея: Рис. 6.4. Датчик линейного перемещения Каждая полоса контактирует с токопроводящей щеткой (обозначенной в виде ■). Нетрудно убедиться, что при перемещении полосы в электрической цепи будет невозможно одновременное переключение нескольких единиц на нули и/или наоборот (одновременное переключение многих элементов создает такие токовые импульсы в цепях питания схем, которые могут вызвать сбои в работе схемы). Полоса материала может быть серий концентрических круговых дорожек, как показано на рис. 6.5. В этом случае будет получен датчик углового положения. При этом, очевидно, требуется применение циклического кода Грея. Интересно, что код Г рея может быть использован для решения головоломки «Ханойские башни» (см. приложение 12). Рис. 6.5. Датчик углового перемещения
Глава 7 Об уравновешенной троичной системе счисления Уравновешенной, или симметричной, троичной системой называется система счисления с основанием 3, использующая для записи чисел цифры О, 1 и -I1. В 1840 году ее предложил французский математик и изобретатель механических устройств для вычислений Леон Лаланн. Строго говоря, работа Лаланна первой не была. Так, ещё в 1811 г. английский математик Питер Барлоу, описывая разные системы счисления, показал в одном из примеров, что десятичное число 716 в троичной системе будет равно 222112, или же З6 - З2 - 3 - 1. Сейчас мы бы сказали, что в развернутой форме записи последнее выражение можно представить в виде: 1 • З6 + 0 • З5 + 0 • З4 + О • З3 + (-1) • 32+ (-1) • З1 • (-1) • 3°, то есть с использованием цифры -1. Приведенный Барлоу пример был связан с решением задачи Баше на взвешивание (см. задачу 2.18). Обсудим связь «обычной» троичной системы и уравновешенной. Некоторое десятичное число X можно представить в троичной системе как: X (CLrfin-1 • • • ^1^о)з> т. е. (в развернутой форме записи): X— ап шЗп + ап- 1 • Зп 1 + ... + а\ • 3 + Яо, где цифры я0, яь •••> Я/,могут принимать значения 0, 1 или 2. Можно доказать, что 2 • Зт = Зт + 1 - Зт. Введем «отрицательную цифру» 1 и обозначим ее 1 . Тогда последнее равенство можно записать в виде: 2 • Зт = Зт + 1 + 1 • Зт. А это означает, что любое целое число X можно изо- 1 Почему систему называют «симметричной», понятно — значение ее цифр (-1, 0 и 1) на числовой оси расположены симметрично относительно нуля. А почему «уравновешен¬ ной» — см. решение задачи 2.18 в ответах на дополнительные задания для самостоятельной работы учащихся.
116 Глава 7. Об уравновешенной троичной системе счисления бразить в троичной системе счисления с помощью цифр 0, 1 и 1 (заменив в его развернутой записи цифры 2 на соответствующую разность): X- Ът -Зт+ Ьт_х -3",_1 + ... + Ьх' 3 + 6о> где каждый из коэффициентов Ът Ът_ \,..., Сможет быть равным 0, 1 или 1 . Иными словами, для преобразования обычной троичной записи в запись в уравновешенной троичной системе нужно для каждой двойки выполнить следующие действия: 1) заменить ее на цифру 1 ; 2) в соседнем слева разряде добавить 1 (если в этом разряде в результате получается 2, то для него указанные действия повторяются). Например, число 100, которое обычным образом записывается в троичной системе как 10201, во втором варианте будет иметь вид llloi (34 + 3Э-32+ 1 = 100). Задания для самостоятельной работы учащихся ► 1. Запишите в уравновешенной системе троичные числа: 1)210; 2) 1202. ► 2. Запишите в уравновешенной троичной системе десятичные числа: 1) 17; 2)53 . Уравновешенная троичная система счисления обладает многими весьма привлекательными свойствами. Во-первых, она дает возможность единообразно выражать как положительные, так и отрицательные числа (при использовании двоичной системы отрицательные числа в компьютере представляются в дополнительном коде). В ней знак числа определяется первым символом в записи числа в этой системе: если он равен 1, то число положительное, а если -1(1), то отрицательное. Очень просто перейти к противоположному числу, заменив 1 на -1 (1) и наоборот. В самом деле: —8ю = 1 01 з; 8ю = 10 1 з. Для округления вещественного троичного числа до ближайшего целого достаточно отбросить его дробную часть. Это свойство также достаточно очевидно, поскольку самая большая возможная положительная дробная часть, (0,111...)3, представляет сумму 1/3 + 1/9 + 1/27 + ..., которая всегда меньше, чем 1/2 (а, соответственно, самая большая по модулю отрицательная дробная часть, (0...)3, всегда больше, чем 1/2).
Глава 7. Об уравновешенной троичной системе счисления 117 Арифметические операции в троичной симметричной системе практически не сложнее двоичных, а если учесть, что в случае чисел со знаком двоичная арифметика использует искусственные коды, то окажется, что троичная даже проще. Операция сложения всякой цифры с нулем дает в результате эту же цифру. Сложение +1 с -1 дает нуль. И только сумма двух +1 или двух -1 формируется путем переноса в следующий разряд цифры того же знака, что и слагаемые, и установки в текущем разряде цифры противоположного знака. Полностью таблица сложения, которую будем пользоваться для обычного сложения чисел «столбиком», имеет вид: + I 0 1 I 11 I 0 0 I 0 1 1 0 1 ll Примечание. Запись 1 1 означает, что результат равен 1 и еще 1 переносится в следующий разряд, запись 1 1 — что результат равен 1 и еще 1 переносится в следующий разряд. Здесь же заметим, что по аналогии с битами двоичной системы счисления разряды чисел в такой троичной записи называют «тритами». Сложим в уравновешенной троичной системе числа 412 и 181: 412,0= 1200213 = 1_Т ТОП 13. 18110 = 202013 = 1 1 1 1 013. I I I 0 1 I 1 + 1 Т 1 Т о 1 II 1 1 о о у Легко проверить, что 1 1 1100 1 3 =59310. Задание для самостоятельной работы учащихся ► 3. Найдите в уравновешенной троичной системе сумму чисел: 1) 10 И I иПОТ; 2) lllOll и 1 Тон. Результаты представьте в десятичной системе. Столь же просто производиться вычитание: для этого достаточно изменить знак вычитаемого на противоположный и сложить число с уменьшаемым. Конечно, можно проводить и «непосредственное» вычитание. Для этого удобно составить таблицу вычитания. Обсудим ее, поскольку при составлении такой таблицы получается ряд интересных результатов.
118 Глава 7. Об уравновешенной троичной системе счисления Для следующих случаев ничего необычного нет: 1) 0 - 0 = 0; 2) 1 - 0 = 1; 3) 1-1=0; 4) 0 - 1 =1 (это следует из правил алгебры, и из таблицы сложения, приведенной выше); 5) 1 - 1 = 0 (по тем причинам). А теперь — то самое, интересное. Сколько будет 1 - 1 ? Конечно, 1 1 (по правилам алгебры 1 - (-1) = 2 = = 1 1). Но возникает вопрос, что происходит в соседнем слева разряде при вычитании многозначных чисел — единица заимствуется или добавляется? Для ответа рассмотрим пример: Юю - 2Ю = Ю13 - 1 13: 1 0 1 ~ 1 Т 1 О I (Результат равен 8Ш.) Анализ второго справа разряда показывает, что 1 , «перешедшая» из крайнего правого разряда складывается с цифрами 0 и 1! Аналогично, для варианта 1-1=11 цифра 1 переносится в следующий разряд, где также добавляется. Задания для самостоятельной работы учащихся ► 4. Составьте полную таблицу вычитания в уравновешенной троичной системе, в которой учитывается возможный перенос из разряда справа: Перенос из разряда справа 0 1 1 Вычитае¬ мое Уменьшаемое 1 0 1 1 0 1 1 0 1 I 0 1 ► 5. Найдите разность в уравновешенной троичной системе (используя составленную таблицу или заменив вычитание сложением): 1) 1011 - 111; 2) 11Т ТО-И 11. Результаты представьте в десятичной системе.
Ответы к главе 7 119 Таблица умножения — совсем простая: умножение на нуль дает нуль, умножение на 1 повторяет множимое, умножение на -1 инвертирует множимое (заменяет 1 на -1, а -1 на 1, то есть изменяет знак числа — см. выше): X 1 1 т 1 I 1 I 1 Умножение многозначных чисел сводится к простым операциям изменения знака (при необходимости) и сложения. Умножим, например, 510 на 1210: 5,о=1ТТ3 12ш=1103 1 I I 1 Т Т 1 I 1 I 0 или: 1 1 0 1 1 0 1 1 0 1 I 1 I 0 Переведя троичное число 1 1 1 1 0 в десятичную систему, получим 60 (то есть результат правильный). В заключение заметим, что уравновешенная троичная система счисления применялась в ЭВМ «Сетунь»2, разработанной в 1958 году в Московском государственном университете им. М. В. Ломоносова под руководством Николая Петровича Брусенцова. Ответы к главе 7 1. 1) И1_0;_ 2) И III. 2 Сетунь — название речки, протекающей неподалеку от МГУ.
120 Глава 7. Об уравновешенной троичной системе счисления 2. 1)2°Т; _ 2) 1 1 00 1. 3. 1) 10 1_1 1 + 1 То! = 101013 = 9110; 2) 111011 + 11011 = 11110Тз = 197|0. 4. Перенос из разряда справа Вычитаемое 0 1 1 Уменьшаемое 1 0 1 1 0 1 Т 0 1 I 0 1 ll 1 и 10 Т 0 1 0 I 0 1 0 1 ll Т 1 I 0 1 Т1 Т 0 I 0 1 10 Т 1 Т S. 1) ЮТ 1 - 1 1 1 = 11003 = 3610; 2) 111 ТО - И 11 = lOllT = 74,0. © Разговаривают в 60-х годах прошлого века два программиста: — Как быстро возвести число в степень? — Используя сдвиг! — А если степень тройки? — Очень просто! Покупаем вычислительную машину «Сетунь» или «Сетунь-70»...
Глава 8 Система счисления с... отрицательным основанием Оказывается, что основанием системы счисления может быть не только положительное число1, но и отрицательное! Использование системы счисления с основанием -22, как будет показано ниже, дает возможность выражать как положительные, так и отрицательные числа без явного указания их знака при представлении в двоичном виде в компьютере. В указанной системе для записи чисел используются цифры 0 и 1, как и при «обычной» двоичной системе. Как для любой позиционной системы счисления, в системе счисления с основанием -2 некоторому числу, представленному в виде последовательности цифр апа^\...а2а\ао, соответствует десятичное число, равное ап(-2)п+ + ... + а2(-2)2 + а,(-2)1 + а0. Кроме того, как и для двоичной системы, можно применить правило перевода числа anan_i...a2a\a0 в десятичное — сложить весомости тех разрядов, в которых записана цифра 1. При этом весомости будут следующими (для разрядов справа налево): 1,-2, 4,-8, 16,-32,..., то есть четные степени (или нечетные разряды, если нумеровать разряды справа, начиная с 1) — положительны, нечетные степени (или четные разряды) — отрицательны. Если провести расчеты для 1-4 битовых значений, то можно получить такую (необычную!) таблицу: 1 В уравновешенной троичной системе счисления, описанной в предыдущей главе, несмотря на использование отрицательной цифры, основание — положительное (оно равно 3). 2 Говорят, что задание «Разработайте систему счисления с основанием минус 2» предлагалось в собеседованиях, проводившихся в компании Microsoft.
122 Глава 8. Система счисления с... отрицательным основанием Таблица 8.1 Число К в системе счисления с основанием -2 Число К в десятичной системе 0 0 1 1 10 -2 11 -1 100 4 101 5 110 2 111 3 1000 -8 1001 -7 1010 -10 1011 -9 1100 -4 1101 -3 1110 -6 1111 -5 Из табл. 8.1 видно, что при представлении отрицательных чисел знак никак не обозначается (в отличие от «обычной» двоичной системы). А как, наоборот, — для заданного десятичного получить его «минус двоичный» эквивалент? Оказывается, что для этого также можно использовать метод последовательного деления на основание (см. приложение 1). Правда, при этом возникают проблемы определения целочисленного частного и остатка от деления числе на -2. Обсудим их. Начнем с определения остатка. Так как в записи чисел в обсуждаемой системе используются цифры 0 и 1, то и значения остатков должны быть только такими. Как определить их? Ясно, что для четных чисел (как положительных, так и отрицательных) остаток от деления на -2 должен быть равен 0, а противном случае — 1. Далее, так как по определению остатка г от деления а на Ъ\ a = bq + г, где q — целочисленное частное, то можем получить формулу для нахождения последнего: q -(а - г)/Ь. Учитывая это, приведем пример перевода десятичного числа -3 в систему счисления с основанием -2:
Глава 8. Система счисления с... отрицательным основанием 123 1) -3 — — остаток равен 1, целочисленное частное (-3 — 1)/—2 = 2; 2) 2 — — остаток равен 0, целочисленное частное (2 —0)/—2 = -1; 3) — остаток равен 1, целочисленное частное (-1 — 1)/—2 = 1; 4) -2 — остаток равен 1, целочисленное частное (1 — 1)/—2 = 0. Поскольку мы достигли нулевого частного, процесс перевода на этом оканчивается. Выписывая полученные остатки в обратном порядке, имеем: —3 io= 1101_2- Обсудим таблицу сложения и вычитания в системе счисления с основанием -2. Здесь есть привычные правила: 0+1 = 1и1-1=0. Поскольку 2 записывается как 110, а -1 как 11, то применимы дополнительные правила, которых наряду с обычными вполне достаточно для проведения арифметических вычислений: 1 + 1 = 110 11 + 1=0 1 + 1 + 1 = 111 0-1 = 11 11-1 = 10 Видно, что при сложении иногда имеется два бита переноса (11). Учитывая это, составим таблицу возможных вариантов сложения в некотором разряде: Перенос из соседнего справа разряда 0 1 11 0 1 11 0 1 11 0 1 11 1-е слагаемое 0 0 0 0 0 0 1 1 1 1 1 1 2-е слагаемое 0 0 0 1 1 1 0 0 0 1 1 1 Результат 0 1 1 1 0 0 0 1 1 Перенос в следующий разряд 0 0 1 0 11 0 0 11 0 11 11 0 По этой таблице можно проводить сложение многоразрядных чисел, в том числе и отрицательных, без использования дополнительных кодов.
124 Глава 8. Система счисления с... отрицательным основанием Конечно, сумматор для выполнения действий по основанию -2 существеннее сложнее сумматора для «обычной» двоичной системы. В заключение заметим, что идея использовать в качестве основания системы счисления отрицательные числа была независимо открыта разными людьми. Наиболее раннее описание такой системы сделано Витторио Грюнвальдом в 1885 (!) году. Задания для самостоятельной работы учащихся ► 1. Найдите десятичный эквивалент следующих чисел, записанных в системе счисления с основанием -2: 1) 10010; 2) 11011; 3)110100; 4) 110110. ► 2. Разработайте программу для перевода заданного десятичного числа в систему счисления с основанием -2. ► 3. С помощью этой программы или проведя расчеты на бумаге, заполните таблицу: Число К в десятичной системе Число К в системе счисления с основанием -2 Число -К в системе счисления с основанием -2 14 15 После заполнения определите, имеется ли: 1) возрастание значений во втором столбце (при возрастании чисел в первом столбце); 2) убывание значений в третьем столбце (при убывании отрицательных значений чисел в первом столбце). ► 4. Найдите сумму двух чисел, записанных в системе счисления с основанием -2: 10111 и 110110. Результат проверьте в десятичной системе. ► 5. Составьте таблицу вычитания для обсуждаемой системы счисления и с ее помощью найдите разность чисел 21 и -38. Внимание! При вычитании биты переноса, как и в случае уравновешенной троичной системы, также добавляются (к сожалению, в данном случае нельзя несложным путем свести вычитание к сложению).
Ответы к главе 8 125 Ответы к главе 8 1. 1) 14; 2)7; 3) -12; 4)-14. 2. На школьном алгоритмическом языке программа имеет вид: алг Перевод_чисел_в__систему_с_основанием_минус2 нач цел а, цел таб цифры[1:50], цел всего_цифр, остаток, i вывод нс, иа=" ввод а всего_цифр := 0 нц пока а <> 0 |Номер очередной цифры всего_цифр := всего_цифр + 1 [Определяем цифру (остаток) если mod(int(abs(а)) , 2) =0 то остаток := 0 иначе остаток := 1 все |и записываем ее в массив цифры[всего_цифр] := остаток |Определяем целочисленное частное а := int((а - остаток)/(-2)) кц |Выводим искомое число (цифры в обратном порядке) нц для i от всего_цифр до 1 шаг -1 вывод цифры[i] кц кон 3. Число К в десятичной системе Число К в системе счисления с основанием -2 Число -К в системе счисления с основанием -2 0 0 0 1 1 11 2 110 10 3 111 1101 4 100 1100 5 101 1111
126 Глава 8. Система счисления с... отрицательным основанием Окончание таблицы Число К в десятичной системе Число К в системе счисления с основанием -2 Число —К в системе счисления с основанием -2 6 11010 1110 7 11011 1001 8 11000 1000 9 11001 1011 10 11110 1010 И 11111 110101 12 11100 110100 13 11101 110111 14 10010 110110 15 10011 110001 Обратите внимание на: 1) вид десятичного числа -2 в обсуждаемой системе счисления; 2) на способ вычисления: • значения К+ 1 при известном четном положительном К; • значения К - 1 при известном нечетном отрицательном К. 4. 11 1 11 11 1 0 1 1 1 (19) 1 1 0 1 0 1 (-11) 0 1 1 0 0 0 (8) 5. Таблица вычитания: Перенос из соседнего справа разряда 0 1 11 0 1 11 0 1 11 0 1 11 Уменьшаемое 1 1 1 1 1 1 0 0 0 0 0 0 Вычитаемое 0 0 0 1 1 1 0 0 0 1 1 1 Результат 1 0 0 0 1 1 0 1 1 1 0 0 Перенос в следующий разряд 0 и 0 0 0 1 0 0 1 1 0 1 Расчеты: 1 11 1 1 10 10 1 (21) ” 1 0 1110 (-38) 1 0 0 1 1 1 1 (59)
Глава 9 Двоично-десятичное кодирование В книге [2] и в ряде других учебников и пособий упоминаются так называемые «смешанные системы счисления». Однако их преимущества и примеры использования, как правило, не приводятся. В данной главе восполняется этот недостаток — в ней разбирается двоично-десятичная система счисления и варианты ее кодирования. В случаях, когда цифровое устройство часто обменивается информацией с человеком в привычной для него десятичной системе счисления (например, в калькуляторах, счетчиках, устройствах ввода-вывода, цифровых приборах), для внутреннего представления десятичных чисел используют двоично-десятичный код1. Основным преимуществом этого кода является быстрый перевод в него из десятичной системы и обратно. Способов двоично-десятичного кодирования существует несколько. Один из них — код «8421», в котором каждая цифра десятичного числа Таблица 9.1 Десятичная цифра Ее код 0 0000 1 0001 2 0010 3 ООН 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 1 Например, такое кодирование применяется в настоящее время в отечественных калькуляторах «Электроника МК-152», «Электроника МК-152М» и «Электроника МК-161», выпускаемых Новосибирской фирмой «СЕМИКО», в калькуляторах фирмы Texas Instruments и др.
128 Глава 9. Двоично-десятичное кодирование заменяется соответствующим четырехразрядным двоичным числом (так же, как и для двоичного представления шестнадцатеричных чисел, но комбинации, большие 9, не используются) — см. табл. 9.1. Например, десятичное число 19 205 463 в двоично-десятичном коде имеет вид: 0001 1001 0010 0000 0101 0100 0110 0011 1 \9\2\°\5\4\6\3 Информация в табл. 9.1 объясняет название типа кода — «8421» (цифры соответствуют десятичным весомостям каждого разряда двоичной записи). Нетрудно также увидеть, что такое представление обладает избыточностью, поскольку четырьмя двоичными цифрами можно закодировать не 10, а 16 различных чисел. Цена округления Как известно, дроби переводятся из десятичной системы в двоичную не всегда точно. Погрешности, возникающие при переводе, могут привести к неприятным последствиям не только в финансовых вычислениях. Например, рассказывают следующую историю [7]. В 1991 году во время войны в Персидском заливе американская ракета «Патриот» не смогла перехватить иракскую ракету «Скад» из-за ошибки в определении времени. При вычислениях нужно было умножать время, отсчитываемое тактовым генератором бортового компьютера, на 1/10. В компьютере это число представлялось 24-разрядной двоичной дробью. Естественно, с ошибкой, хотя и маленькой. За сто часов работы компьютера ошибка в определении времени достигла 0,34 с. Так как скорость ракеты «Скад» составляла 1700 м/с, то ошибка в определении положения иракской ракеты достигла 500 м. Естественно, ракету перехватить не удалось, и она попала в казарму американских солдат. Погибло 28 человек... Рассмотрим особенности выполнения операции поразрядного сложения десятичных цифр, представленных в коде «8421», по правилам двоичной арифметики на нескольких примерах (см. табл. 9.2-9.4): Таблица 9.2 Первое слагаемое 1 0001 5 0101 2 0010 Второе слагаемое 2 0010 1 0001 6 0110 Сумма 3 ООП 6 0110 8 1000 Десятичная цифра суммы в данном разряде 3 6 8 Перенос в следующий (старший) разряд 0 0 0
Глава 9. Двоично-десятичное кодирование 129 Таблица 9.3 Первое слагаемое 9 1001 8 1000 9 1001 Второе слагаемое 7 0111 9 1001 9 1001 Сумма 16 10000 17 10001 18 10010 Десятичная цифра суммы в данном разряде 0 1 2 Перенос в следующий (старший) разряд 1 1 1 Таблица 9.4 Первое слагаемое 8 1000 4 0100 9 1001 Второе слагаемое 2 0010 7 0111 6 0110 Сумма 10 1010 11 1011 1111 Десятичная цифра суммы в данном разряде ? 9 ? Перенос в следующий (старший) разряд 0 0 0 Приведем также пример сложения двух многоразрядных десятичных чисел: Таблица 9.5 Десятичное значение Двоично-десятичный код Первое слагаемое 4754 0100 0111 0101 0100 Второе слагаемое 2917 0010 1001 0001 0111 Сумма 7671 0111 1 ;оооо: оно поп : Десятичные эквиваленты цифр суммы 7 0 6 п Из рассмотренных примеров видно, что отдельные тетрады полученного при сложении результата (назовем его «предварительным»), оформленные в рамке, нуждаются в коррекции. Обсудим, в чем она заключается. В табл. 9.5 для крайнего правого десятичного разряда полученное значение предварительного результата должно быть уменьшено на 10 (см. также табл. 9.4). Целесообразно заменить вычитание сложением, что обеспечивается при добавлении дополнения до 16, то есть шестерки (0110) и передаче обязательно возникающего при этом переноса в следующий старший разряд (в данном разряде сумма увеличится на 62 и уменьшится на 16 — на весомость 5-го слева двоичного разряда предварительного результата). 2 Если быть точным, то не на 6, а на (6 х весомость данного десятичного разряда). Аналогичное уточнение распространяется и на другие значения, связанные с коррекцией. Но на методику проведения коррекции в различных разрядах это не влияет.
130 Глава 9. Двоично-десятичное кодирование Анализ табл. 9.4 показывает, что такая коррекция должна проводиться в разрядах, в которых сумма тетрад, представляющих соответствующие десятичные разряды слагаемых, больше 9, но не превышает 15. Теперь о коррекции в другом разряде рассмотренного примера. Здесь сумма тетрад равна 16, поэтому был двоичный перенос в старший разряд (в табл. 9.5 он отмечен знаком «<—»). Из-за этого переноса «вклад» данного разряда в общее значение уменьшился на 16, а добавление 1 в старший разряд увеличило общее значение на 10 (весомость этого разряда в 10 раз больше весомости текущего разряда). Следовательно, здесь коррекция предварительного результата также заключается в добавлении шестерки (0110). Нетрудно понять (см., например, табл. 9.3), что такая коррекция должна проводиться в десятичных разрядах, в которых есть перенос. Таким образом, коррекция предварительной двоичной суммы при использовании кода «8421» заключается в добавлении 0110 ко всем тетрадам предварительной суммы, значение которых превышает 9 или из которых был двоичный перенос. Возникающие при коррекции переносы должны обязательно передаваться в следующую старшую тетраду. Рассмотрим еще один пример сложения в коде «8421» с учетом сформулированных правил коррекции. Таблица 9.6 Десятичное значение Двоично-десятичный код Первое слагаемое 3852 0011 1000 0010 0010 Второе слагаемое 5179 0101 0001 0111 1001 Предварительный результат 1000 1001 1100 1011 Коррекция 1010 + 0110 1 <- + 0110 1 <- Результат в данном разряде Требуется коррекция 0011 0001 Коррекция + 0110 1 <- Результат в данном разряде 1001 0000 Окончательный десятичный результат 9031 9 0 3 1 Из последнего примера видно, что межтетрадные (между десятичными разрядами) переносы, возникающие в процессе коррекции предварительной суммы, могут таким образом изменить старшие тетрады, что их также потребуется корректировать. В худшем случае количество после до-
Глава 9. Двоично-десятичное кодирование 131 вательных повторных коррекций будет равно разрядности слагаемых (рассмотрите, например, сложение 9999 + 1). На основании вышеизложенного можно отметить следующий недостаток применения кода «8421» — сложная методика коррекции предварительных сумм (которая зависит от результатов коррекции в других тетрадах). Для преодоления этого недостатка можно использовать другие коды, например, код, который называют «кодом с избытком 3», или «8421+3». При кодировании с избытком 3 каждая десятичная цифра представляется как двоичное число b = а + 112, где а — код «8421» цифры: Таблица 9.7 Десятичная цифра Код Десятичная цифра Код 0 0011 9 1100 1 0100 8 1011 2 0101 7 1010 3 оно 6 1001 4 0111 5 1000 Примечание. Расположение десятичных цифр в третьем столбце будет объяснено ниже. Обсудим особенности сложения в коде «8421+3». Сначала рассмотрим варианты, при которых переноса из тетрады нет (см. табл. 9.8). Таблица 9.8 Первое слагаемое 2 0101 3 ОНО 7 1010 Второе слагаемое 3 ОНО 5 1000 2 0101 Предварительный результат 1011 1110 1111 Нетрудно увидеть, что для рассмотренных случаев предварительный результат сформируется «с избытком 6», поэтому потребуется коррекция тетрады предварительной суммы — удаление из тетрады лишней тройки (0011). Примеры коррекции приведены в табл. 9.9. Таблица 9.9 Первое слагаемое 2 0101 3 ОНО 7 1010 Второе слагаемое 3 оно 5 1000 2 0101 Предварительный результат 1011 1110 1111 Преобразование к коду «8421+3» 1011 0011 1110 0011 1111 0011 1000 1011 1100 Десятичный эквивалент 5 8 9
132 Глава 9. Двоично-десятичное кодирование Вычитание числа 3 можно заменить сложением с дополнением до 16, то есть с числом 13ю = 11012. Обязательно возникающий при этом перенос не передается в следующую тетраду («потеря» переноса равносильна потере 16, т. е. при коррекции: +13 - 16 = -3). С учетом этого нижняя часть табл. 9.9 для трех рассмотренных случаев сложения примет вид: Предварительный результат 1011 1110 1111 Коррекция 1011 1101 1110 + 1101 1111 1101 -41000 4-1011 4-1100 Десятичный эквивалент 5 8 9 Теперь обсудим варианты, при которых перенос из тетрады происходит (см. табл. 9.10). Таблица 9.10 Первое слагаемое 8 1011 4 0111 9 1100 Второе слагаемое 2 0101 7 1010 9 1100 Предварительный результат 10000 10001 11000 Так как крайняя слева единица переносится в следующий разряд, то можно сказать, что из тетрады удаляется 16 (вес переноса), а десятичный вес переноса в следующий разряд — 10. Поэтому перенос единицы «уносит» из тетрады 6, что нужно учесть при коррекции. Но, как и ранее, сложение двух тетрад «с избытком 3» приводит к получению суммы «с избытком 6», поэтому вместо добавления шестерки достаточно добавить тройку. В разряде, куда был сделан перенос, результат (окончательный) будет равен 1. Можно также считать, что в этом разряде предварительный результат будет равен + 0011 (был ноль) 1_ (добавлена 1) 0100 который затем должен быть откорректирован: 0100 1101 0001 Итак, коррекции при сложении в коде «8421+3» подлежат все тетрады предварительной суммы, причем к тем тетрадам, из которых сформировался перенос, следует добавить константу 0011, а к тетрадам, из кото¬
Глава 9. Двоично-десятичное кодирование 133 рых не было переноса, добавить константу 1101. Возникающие при коррекции межтетрадные переносы игнорируются. Таким образом, коррекция при сложении в коде «8421+3» определяется только значением переноса из той или иной тетрады предварительной суммы. Пример сложения многозначных десятичных чисел приведен в табл. 9.11. Таблица 9.11 Десятичное значение Двоично-десятичный код Первое слагаемое 3852 0110 1011 1000 1010 Второе слагаемое 5179 1000 0100 1010 1100 Предварительный результат 1111 1 <- 0000 1 <-0011 1 <- 0001 Коррекция + 1101 + 0011 + 0011 + 0011 Окончательный результат в коде «с избытком 3» +1100 0011 0110 0100 Окончательный десятичный результат 9031 9 0 3 1 Еще одним достоинством кода «8421+3» является простой способ получения дополнения до 9 — достаточно просто инвертировать все разряды кода (см. табл. 9.7). Действительно, проинвертировав все разряды четырехразрядного двоичного числа а, мы получим его дополнение до 1111 = 15 ю, что в коде «с избытком 3» соответствует 15 - (а + 3) = (9 - а) + 3. Это свойство позволяет довольно просто реализовать операцию вычитания через сложение в обратном коде. Опишем методику вычитания двух положительных десятичных чисел, представленных в двоично-десятичном коде с избытком 3. Для вычитания следует выполнить следующее. 1. Проинвертировать все двоичные разряды вычитаемого — получим обратный код последнего. 2. Сложить полученный обратный код вычитаемого с уменьшаемым, учитывая межтетрадные переносы. 3. Если из крайней левой тетрады был перенос, то это означает, что результат вычитания — положительный, и следует: 1) перенос не учитывать; 2) прибавить 1 к младшей тетраде. 4. Провести коррекцию всех предварительных результатов (по правилам, применимым к сложению, — см. выше).
134 Глава 9. Двоично-десятичное кодирование 5. Если из крайней левой тетрады переноса не было, то это означает, что результат вычитания — отрицательный и представлен в обратном коде. В этом случае следует инвертировать все разряды всех тетрад полученной разности — получим их (тетрад) модуль в двоично-десятичном коде. 6. Каждую тетраду разности представить в виде соответствующей десятичной цифры. ♦ Пример 1. Найти разность десятичных чисел 34 и 19. Решение представлено в табл. 9.12. Таблица 9.12 Исходные данные Уменьшаемое 0110 0100 0111 1100 Вычитаемое Инвертируем вычитаемое 1011 ООП Складываем его с уменьшаемым 0110 1011 0111 ООП Предварительный результат (перенос был — разность положительна) 1<- 0001 1010 Прибавляем 1 в младшую тетраду 0001 1011 Коррекция тетрад 0001 ООП 1011 1101 Результат 0100 1000 Соответствующая десятичная цифра 1 5 Ответ: 15. ♦ Пример 2. Найти разность десятичных чисел 65 и 78. Решение представлено в табл. 9.13. Таблица 9.13 Исходные данные Уменьшаемое 1001 1010 1000 1011 Вычитаемое Инвертируем вычитаемое 0101 0100 Складываем его с уменьшаемым 1001 0101 1000 + 0100
Глава 9. Двоично-десятичное кодирование 135 Окончание таблицы 9.13 Предварительный результат (переноса не было — разность отрицательна) 1110 1100 Коррекция тетрад 1110 1101 1100 + 1101 Результат 1011 1001 Инвертируем все тетрады 0100 0110 Соответствующая десятичная цифра 1 3 Ответ: -13. В заключение еще раз отметим преимущества использования двоично-десятичного кода: 1) быстрый и простой перевод в него десятичных чисел, вводимых с цифровой клавиатуры; 2) упрощён вывод чисел на индикацию — для этого нужно просто вывести на нее цифры, соответствующие каждой тетраде (полубайту) кода. В результаты нет необходимости предусматривать аппаратную программу перевода двоичных чисел в десятичные и обратно при небольшом объеме имеющейся программной памяти; 3) для дробных чисел при переводе в двоичный вид не теряется точность (как известно, дробные числа переводятся в двоичную систему не всегда точно); 4) упрощены умножение и деление на 10, а также округление. Приведем также ряд других двоично-десятичного кодов (см. табл. 9.14). Таблица 9.14 N Тип кода 6421 5211 4221нс 2421 4221с 0 0000 0000 0000 0000 0000 1 0001 0001 0001 0001 0001 2 0010 0011 0010 0010 0010 3 0011 0101 0011 0011 0101 4 0100 0111 0110 0100 1000 5 0101 1000 0111 1011 0111 6 1000 1001 1010 1100 1010 7 1001 1011 1011 1101 1101 8 1010 1101 1110 1110 1110 9 1011 1111 1111 1111 1111
136 Глава 9. Двоично-десятичное кодирование Примечание. В крайнем правом столбце приведены значения для самодополняющегося кода, в третьем справа — несамодополняющегося кода. Вопросы и задания для самостоятельной работы учащихся ► 1. В каких случаях целесообразно использовать двоично-деся- тичное кодирование десятичных чисел? Каковы его преимущества? ► 2. В чем заключаются недостатки двоично-десятичного кода «8421»? ► 3. В чем состоит преимущество двоично-десятичного кода с избытком 3? ► 4. Представьте в коде с избытком 3: 1) цифру 8; 2) число 47 ► 5. Восстановите десятичную цифру, которая в коде с избытком 3 изображается комбинацией 0101. ► 6. Можно ли использовать в коде с избытком 3 цифру, которая изображается комбинацией 1110? ► 7. В таблице приведена информация о количестве бит, требующихся для кодирования различных десятичных чисел в двоичном коде и в двоично-десятичном коде: Десятичное число Число бит в двоичном коде Число бит в двоичнодесятичном коде 0,1 1 4 2,3 2 4 3,4 3 4 Используя электронную таблицу Microsoft Excel или подобную, определите, имеются ли десятичные числа, которые для кодирования в двоично-десятичном коде требуют: 1) столько же бит, что и при кодировании в двоичном коде; 2) меньше бит, чем при кодировании в двоичном коде. ► 8. Используя двоично-десятичное кодирование, найдите суммы чисел: 1) 178 и 856; 2)23089 и 78554. ► 9. Исследуйте особенности представления цифры 0 в одном из слагаемых, когда ноль (нули) — «начальный» («начальные»), например, при определении суммы: 4 + 123. ► 10. Обоснуйте методику учета знака разности при вычитании (добавление 1 к младшей тетраде при положительной разности и ее обратный код при отрицательной), как это сделано применительно к обоснованию коррекции предварительного результата при сложении.
Глава 9. Двоично-десятичное кодирование 137 ► 11. Используя двоично-десятичное кодирование, найдите разность чисел: 1)547 и 419; 2) 6523 и 7918. ► 12. Исследуйте особенности представления цифры 0 в вычитаемом, в том числе, когда ноль (нули) — «начальный» («начальные»), например, при определении разности 123-8. ► 13. Разработайте методику сложения чисел в двоично-десятичном коде с избытком 3 для общего случая — как для положительных, так и для отрицательных чисел. ► 14. Разработайте методику вычитания чисел в двоично-десятичном коде с избытком 3 для общего случая — как для положительных, так и для отрицательных чисел. Указания по выполнению заданий 13 и 14. Отрицательные числа следует представлять в обратном коде (см. выше).
Глава 10 Биты, исправляющие ошибки В процессе передачи информация подвергается различным воздействиям, которые мешают процессу передачи. Воздействия могут быть непреднамеренными (вызванными естественными причинами) или специально организованными (созданными) с какой-то целью некоторым «противником». Непреднамеренными воздействиями на процесс передачи (помехами) могут являться уличный шум, электрические разряды (в т. ч. молнии), магнитные возмущения (магнитные бури), туманы, взвеси (для оптических линий связи) и т. п. Эти помехи, или, как их называют специалисты, шумы, искажают информацию, которая может теряться и изменяться: искажение звука в телефоне, атмосферные помехи в радио, искажение или затемнение изображения в телевидении, ошибки при передаче в телеграфе. ► 10.1. Как найти ошибку? При двоичном кодировании во время передачи информации из-за шумов возможны изменения нуля на единицу и наоборот. Возьмем сообщение РОССИЯ, которое при системе кодирования символов, приведенной в табл. 10.11, выглядит так: 011011111100110. Таблица 10.1 Символ Код И 00 Р 01 О 10 Я 110 С 111 Если в первом знаке произойдет ошибка, то будет принято сообщение 111011111100110, которое декодируется (расшифровывается) в слово СОСЯРО2. 1 Приведенная в ней система кодирования называется «неравномерной» [2]. Такой, например, является азбука Морзе, код Хаффмана и др. 2 Убедитесь, что других вариантов декодирования нет.
Глава 10. Биты, исправляющие ошибки 139 Произошла непоправимая путаница, а ее «виновником» был всего лишь один неверно переданный бит. Чтобы обнаружить и исправить ошибку, применяют так называемое «помехоустойчивое кодирование», то есть кодируют сообщение таким образом, чтобы принимающая сторона знала, произошла ошибка или нет, и могла исправить ошибки в случае их возникновения. Это кодирование заключается в том, что в передаваемое сообщение включаются дополнительные символы. Они не несут информации, непосредственно связанной с передаваемым сообщением, но могут дать информацию о произошедших при передаче ошибках. Иными словами, их назначение — контролировать правильность передачи основного сообщения. Поэтому вводимые дополнительные символы так и называют — контрольными (или проверочными). Самый очевидный способ, позволяющий выявить и исправлять ошибки, состоит в том, что каждый информационный бит 0 повторяется блоком из п нулей, а каждый бит 1 — блоком из п единиц. Если принять, что помехи в канале связи искажают менее половины битов в каждом передаваемом блоке, то при декодировании «-битового блока, содержащего, быть может, ошибочные символы, решение принимается, так сказать, «большинством голосов» ©. Если в принятом блоке нулей больше, чем единиц, то он декодируется как 00... (т. е. считается, что был послан нулевой бит), в противном случае — как 11... 1. Если длину блока п выбрать достаточно большой, то мы практически обезопасим себя от возможных ошибок, однако передача сообщений будет идти черепашьими темпами. По этой причине указанный код (его называют «кодом с повторением»0) не имеет большого практического значения, однако правило его декодирования («голосование») содержит в себе весьма полезную идею, которая с успехом применяется в других помехоустойчивых кодах. Заметим, что если каждый информационный бит 0 или 1 повторять блоком из п нулей или единиц, не несущих полезной информации, то общая длина сообщения увеличится в п раз. В теории кодирования в этом случае говорят, что пропускная способность (или скорость) кода равна 1/(1 + п) [7]. Кроме того, используется также такое понятие, как «избыточность», или «степень избыточности» [2]. Избыточность закодированного кода — это количество проверочной информации в сообщении. Рассчитывается она по формуле: k/(i + к), где к — количество контрольных битов, i — количество информационных битов. Например, если мы передаем три бита и к ним добавляем один контрольный бит, то избыточность составит 1/(3+1) = 1/4 (25%). 3 Этот способ широко применяется в житейской практике, когда для того, чтобы быть правильно понятым, нужное сообщение (слово или фразу) повторяют несколько раз.
140 Глава 10. Биты, исправляющие ошибки Теперь постараемся выяснить, на что мы можем рассчитывать, когда к каждому передаваемому слову добавляется всего лишь один контрольный бит. Пусть Ь\Ъ2...Ъп — двоичное слово. Выберем контрольный бит Ъп + 1 с таким расчетом, чтобы на его значение одинаково влиял каждый из битов данного слова. Это естественное требование будет выполнено, если, например, принять, что контрольный бит bn + j будет равен нулю, если в слове Ьф2...Ь„ содержится четное число единиц, и единице — в противном случае. Например, присоединяя контрольный бит к слову 1010, получаем слово 10100, а из слова 1110 получим слово 11101. В математике выражение для расчета значения бита bn + i записывается следующим образом: Ьп + 1 = Ь\ + Ь2 + ... + b„ (mod 2) (запись «(mod 2)» читается — «равны по модулю 2»). Нетрудно увидеть, что все «удлиненные» слова Ьф2...ЬпЬп + 1 при этом будут содержать четное число единиц. Это можно записать так: b\ + Ь2 + ... + Ъп + bn + 1 = 0 (mod 2). (10.1.1) Допустим, что в процессе передачи удлиненного закодированного таким образом слова Ьф2...ЬпЬп+, вкралась одна ошибка или даже любое нечетное количество ошибок. Тогда в искаженном слове 6,62..i>7+] число единиц станет нечетным. Это и послужит указанием на искажение в передаче слова. В конечно итоге все сводится к проверке соотношения (10.1.1) для битов принятого слова. Итак, правило приема следующее: если равенство (10.1.1) выполняется, то считаем, что сообщение передано правильно, в противном случае отмечаем, что произошла ошибка и, когда это возможно, требуем повторить передачу слова. Понятно, что иначе ошибки не исправить. Например, если принято неправильное слово 11100, в котором был искажен один бит, то одинаково возможно, что было послано любое из слов: 01100, 10100, 11000, 11110, 11101. Описанный способ контроля выявит ошибки, которые произошли в трех и даже в пяти битах. А вот в случае двойной ошибки или вообще четного числа ошибок нас подстерегает большая неприятность — ведь тогда соотношение (10.1) не нарушится, и мы воспримем искаженное слово как верное ©. Рассмотренный метод кодирования сообщений, который называют «кодом с общей проверкой на четность», позволяет, следовательно, обнаружить любое нечетное число ошибок, но «пропускает» искажения, если число ошибок четно. Код с повторением, описанный в начале главы, и код с общей проверкой на четность — до некоторой степени антиподы. Возможности первого исправлять ошибки теоретически безграничны, но он крайне «медли¬
Глава 10. Биты, исправляющие ошибки 141 телен». Второй очень быстр (всего один дополнительный бит), но зачастую «легкомыслен» ©. В реальных каналах связи, как правило, приходится считаться с возможностью ошибок более чем в одном бите, поэтому в чистом виде код с общей проверкой на четность применяется крайне редко. Гораздо чаще применяют коды с несколькими проверочными битами (и, соответственно, с несколькими проверками на четность). Они позволяют не только обнаруживать, но и исправлять ошибки, и не только одиночные, но и кратные, и притом делать это гораздо эффективнее, чем упоминавшийся нами код с повторением. Это можно проиллюстрировать на одном красноречивом и в то же время простом примере. Рассмотрим множество всех двоичных слов длины 9 (с их помощью можно закодировать 29 = 512 сообщений). Расположим все биты каждого слова Ьф2...Ь9в квадратной таблице следующим образом: Таблица 10.2 К каждой строке и к каждому столбцу этой таблицы добавим еще по одному (проверочному) биту с таким расчетом, чтобы в строках и столбцах получившейся таблицы было четное число единиц (табл. 10.3): Таблица 10.3 Ь\ ъ2 Ъз Pi Ь4 Ъь be Р2 Ъп h ь9 Рз Р4 Ps Рб При этом, например, для первой строки и первого столбца будут выполняться проверочные соотношения: Рх = Ь\ + Ь2 + Ь3 = 0 (mod 2); р4 = Ь\ + 64 + 67 = 0 (mod 2). (Для других строк и столбцов — аналогично.) Заметим, что Р\+Рг + Рз = Р4 + Ps + Рб (mod 2).
142 Глава 10. Биты, исправляющие ошибки Обе эти суммы равны 0, если в слове b\b2...b9 четное число единиц, в противном случае обе они равны 1. Это дает возможность поместить в таблице еще один контрольный бит /?7, равный Pi = Р1 + Pi + Рз = Ра + Ръ + Рб (mod 2) — см. табл. 10.4. Таблица 10.4 Ъ\ ь2 Ьз Р\ ы Ь5 be Рг Ъп ^8 ь9 Рз Р4 Р5 Рб Pi Например, слову 011010001 отвечает следующая таблица: Таблица 10.5 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 0 Эти «маленькие хитрости» позволяют, оказывается, исправить любую одиночную ошибку, возникшую в процессе передачи, а сверх того и обнаружить любую двойную ошибку. В самом деле, если произошла одна ошибка, то нарушаются проверочные соотношения ровно для одной строки и ровно для одного столбца, как раз той строки и того столбца, на пересечении которых стоит ошибочный бит. Если же произошла двойная ошибка, то это приводит к нарушению проверок на четность либо в двух строках, либо в двух столбцах, либо сразу в двух строках и двух столбцах. По этим признакам мы и обнаруживаем двойную ошибку (однако исправить ее мы не можем — см. задание 6 для самостоятельной работы учащихся ниже). Добавим к сказанному, что данный код позволяет обнаруживать многие, хотя и не все, ошибки более высокой кратности (в трех, четырех и т. д. битах). Например, обнаруживаются тройные ошибки в битах Ь\, Ьъ
Глава 10. Биты, исправляющие ошибки 143 Ь3 или в битах ЪиЬъ Ь6. А вот тройная ошибка в битах Ьь Ъъ Ь5 не может быть обнаружена, она будет воспринята как одиночная. В рассмотренном примере передаваемые слова содержат 9 информационных битов и 7 контрольных; так что общая длина слова равна 16. Такого числа символов достаточно, чтобы исправлять любые одиночные и обнаруживать любые двойные ошибки. Чтобы достичь того же эффекта для кода с повторением, нужно каждый информационный бит повторить 4 раза, так что общая длина кодового слова будет равна 36. Сравнение явно не в пользу кода с повторением. Продемонстрированное в этом примере сочетание проверок на четность по строкам и столбцам допускает широкие обобщения. Простейший из них следующий. Пусть сообщение кодируется двоичным словом длины тп. Расположим все биты в прямоугольную таблицу (матрицу) с т строками и п столбцами: Таблица 10.6 Ь\\ Ь\2 Ь\п Ьц Ьц bin Ьт\ Ьт 2 Ьтп Как и ранее, добавим к каждой строке и к каждому столбцу по одному контрольному биту, так чтобы во всех строках получились четные суммы (табл. 10.7). Таблица 10.7 Ьп Ь\2 Ь\,п + 1 bi\ ^22 bln bl,n + 1 Ьт 1 ьт2 Ь тп Ьт,п + l Ьт + 1,1 bm + 1,2 Ьт + 1 ,п bm +1,^ + 1
144 Глава 10. Биты, исправляющие ошибки Аналогично прежнему выбираем символ Ът + ^ Полученное множество битов образует закодированное сообщение, с помощью которого можно находить и исправлять любые одиночные ошибки и обнаруживать любые двойные ошибки. Вопросы и задания для самостоятельной работы учащихся ► 1. Что такое «помехоустойчивое кодирование»? В чем оно заключается? ► 2. Определите избыточность и пропускную способность (скорость) передачи сообщения, закодированного по: а) таблице кодировки, содержащей 256 различных символов, с одним контрольным битом для каждого символа; б) таблице кодировки, содержащей 65536 различных символов, с одним контрольным битом для каждого символа. ► 3. Пусть, например, передаются только прописные русские буквы, двоичные коды которых приведены в табл. 10.8. Таблица 10.8 Буква Код Буква Код А 00000 р 10000 Б 00001 с 10001 В 00010 Т 10010 Г 00011 У 10011 д 00100 ф 10100 Е 00101 X 10101 Ж 00110 ц 10110 3 00111 ч 10111 И 01000 ш 11000 й 01001 щ 11001 к 01010 ъ 11010 л 01011 ы 11011 м 01100 ь 11100 н 01101 э 11101 О 01110 ю 11110 п 01111 я 11111 С использованием этого кода и одного контрольного бита для каждого символа должны быть переданы сообщения: 1) БАЙТ; 2) ПРИВЕТ; 3) АЛГОРИТМ;
Глава 10. Биты, исправляющие ошибки 145 4) ИНФОРМАТИКА. Были получены (соответственно) сообщения: 1)000011000000010010100100; 2)0111101000010100001100101100100010001; 3) 000000010111000110011101100011010001100100011000; 4)010001011011101000011101100001011000000000101101010001111111. Есть ли в ошибка в каждом из них? Ответ получите, не используя табл. 10.8. Какова избыточность и скорость кода в рассмотренных случаях? ► 4. Разработайте программу, с помощью которой для заданного двоичного кода символа определяется контрольный бит и формируется соответствующий «удлиненный» код символа. Заданный и «удлиненный» коды символа представляются в виде строковой величины. Программу разработайте в двух вариантах: 1) с использованием условного оператора; 2) без его использования. Указания по выполнению варианта 2 Используйте логическую операцию XOR, применяемую к числам (см. главу 6). ► 5. Можно ли с помощью проверки табл. 10.4 обнаруживать конкретный одиночный ошибочный бит без использования контрольного бита р{1 ► 6. Допустим, что в переданном сообщении, проверяемом с помощью табл. 10.4, произошла двойная ошибка. В каких случаях и что можно сказать о «месте» ошибки в этой таблице? ► 7. Разработайте программу, которая по заданному сообщению из 9 битов: 1) формирует таблицу (массив), аналогичную табл. 10.4; 2) при проверке полученного варианта таблицы устанавливает факт наличия одиночной ошибки; 3) при наличии одиночной ошибки: • определяет и исправляет ошибочный бит; • восстанавливает (декодирует) исправленное двоичное сообщение; 4) устанавливает факт наличия двойной ошибки. Примечание. В качестве проверяемых согласно заданиям 2-4 таблиц (или 16-битовых сообщений) должны вводиться значения, отличающиеся на 1-2 двоичных символа от «правильных» (или совпадающие с последними). ► 10.2. Код Хемминга Пусть нам требуется передавать сообщения из 16 букв. Для их кодирования можно использовать двоичные слова из четырех битов, но при
146 Глава 10. Биты, исправляющие ошибки этом код не будет корректировать ошибки. При использовании 5-го, контрольного, бита, как мы уже знаем, можно обнаружить, но не исправить любую одиночную ошибку. Впрочем, из предыдущего параграфа следует, что если добавить пять контрольных битов, то можно не только находить одиночные ошибки, но и обнаруживать двойные. Возникает вопрос: нельзя ли для этой цели обойтись меньшим количеством контрольных битов? Вычислим сначала, каково минимальное число контрольных битов, необходимое для исправления любых одиночных ошибок. Нетрудно убедиться, что двух добавочных символов для этого недостаточно (предлагаем читателю проверить это самостоятельно). Попробуем обойтись тремя контрольными битами, то есть будем использовать для кодирования сообщений двоичные слова длины 7 (4 + 3). Наша задача — определить, произошла ли ошибка, и если произошла, то в каком месте. Или, что то же самое, — указать одно из восьми чисел от О до 7, соответствующих номеру ошибочного бита (0 — соответствует отсутствию ошибки). Пусть требуется передать сообщение, кодируемое словом Ъ\Ъ2ЪфА. Добавим к этому слову три бита b5b6b7, определяемые равенствами (здесь и до конца параграфа все равенства берутся по модулю 2): Ь$ — b2 4 Ьъ + Ъ^\ Ъ6 = Ъх + Ъъ + Ъ4\ (10.2.1) Ь~] = Ь\ + ь2 + ь4. Оказывается, что с использованием трех указанных проверочных битов можно выяснить, допущена ли при передаче слова Ъффффффп одиночная ошибка и, если допущена, определить, где именно. Вычислим три суммы: = Z?4+ Ъ$ + Ь6 + Ь7; (10.2.2) s2= Ь2+ Ьз + Ьъ (10.2.3) s3= b\ + 63+ 65+ Ь7. (10.2.4) Рассмотрев все возможные варианты (полученные «вручную» или с использованием программы, разработанной согласно заданию 9 для самостоятельной работы учащихся), можно получить следующую таблицу (см. табл. 10.9). Из нее4 можно увидеть, что: 1) значение s 1 в правильно переданном сообщении должно быть равно 0. Если при проверке полученного сообщения оказалось, что s\= 1, то это значит, что ошибка в одном из битов fe4, b5i b6, 67; 4 Дальнейшие выводы можно сделать и на основе анализа выражений в правой части соотношений (10.2.2)—( 10.2.4).
Глава 10. Биты, исправляющие ошибки 147 2) аналогично s2 должно быть также равно нулю. В случае, когда s2 = I, ошибочно переданным является один из битов Ь2, Ь3, &6, Ъъ (см. табл. 10.9); 3) ситуация со значением s3 также аналогична (при s3 = \ ошибка в одном из битов b\, b3, b5i Ь7). Таблица 10.9 bi Ь2 ь3 ь4 Ъь Ьв bn 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 0 1 1 0 0 0 1 1 0 0 1 1 1 0 0 1 1 0 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 Анализ номеров битов в трех указанных группах показывает, что номер ошибочно переданного бита может быть найден по десятичному значению двоичной записи (вспомните также решение задачи 3.3 с фальшивыми монетами в главе 3). Пусть, например, s\ = 1, s2 = 0, = 1* Имеем sxs2s3 = 101, то есть ошибка в бите Ь5. Итак, мы имеем три проверочных соотношения: si = b4 + Ь5 + Ь6 + Ь7 = 0, s2—Ь2 +Ь3+Ьь+0, (10.2.5) s3=bi + b3+b5+b1= 0, которые позволяют либо установить, что ошибки нет (sis2s3 = 000), либо однозначно указать ее место. Изученный здесь код называется «кодом Хемминга длины 7 с четырьмя информационными символами» [4]. В середине 1940-х годов Ричард Хемминг работал в знаменитой фирме Bell Labs на вычислительной машине «Bell Model V». Это была электромеханическая машина, использующая релейные блоки, скорость которых была очень низка: один оборот за несколько секунд. Данные вводились в машину с помощью перфокарт, и поэтому в процессе чтения часто происходили ошибки. В рабочие дни использовались специальные коды, чтобы обнаруживать и исправлять найденные ошибки, при этом оператор узнавал об ошибке по свечению лампочек, исправлял и
148 Глава 10. Биты, исправляющие ошибки запускал машину. В выходные дни, когда не было операторов, при возникновении ошибки машина автоматически выходила из программы и запускала другую. Хемминг часто работал в выходные дни, и все больше и больше раздражался, потому что часто был должен перезагружать свою программу из-за ненадежности перфокарт. На протяжении нескольких лет он проводил много времени над построением эффективных алгоритмов исправления ошибок. В 1950 году Ричард опубликовал способ, который на сегодняшний день известен как код Хемминга. В общем случае слова двоичного кода Хемминга, позволяющего исправить одиночную ошибку, имеют длину 2т - 1 (т — натуральное число, т> 3). Из них т битов являются контрольными, оставшиеся (2т - 1 - т) битов — информационными. Для определения положения ошибки нужно провести т проверок. Проверки строятся по аналогии с рассмотренным случаем. Значения т проверок (sb s2, sm), как и выше, образуют номер положения ошибки. Вернемся, однако, к вопросу, поставленному в начале данного параграфа. Добавим к битам кода Хемминга длины 7 еще один контрольный бит Ь0: Ь0= Ь{ + Ь2+ Ь3 + Ь4+ Ь5+ Ь6+ Ь7 (10.2.6) а к проверочным соотношениям (10.2.5) — еще одно (общую проверку на четность): &о+ &1 + Ь2 + &з + 64+ 65 + Ъ6 + b1= 0 (10.2.7) Новая система передачи информации по-прежнему позволит передавать 16 различных слов, потому что, как и раньше, биты Ьи Ъъ Ь3, Ъ4 могут быть какими угодно; по ним из соотношений (10.2.1) определяются биты bl9 а из равенства (10.2.6) и бит Ь0. В случае одиночной ошибки добавленное соотношение (10.2.7) нарушается, а значения su s2, s3 образуют номер положения ошибки. Если же произошла двойная ошибка, то соотношение (10.2.7) будет выполнено, а хотя бы одно из равенств (10.2.5) нарушится (почему?). Это и позволяет обнаружить любую двойную ошибку. Итак, для исправления одиночных и обнаружения двойных ошибок к четырем информационным битам достаточно добавить четыре контрольных. Можно показать, что обойтись меньшим числом проверочных символов невозможно. Построенное множество слов ЪфхЪфффффп, удовлетворяющих соотношениям (10.2.1)-(10.2.7), — пример так называемого «расширенного кода Хемминга длины 8 с четырьмя информационными символами» [4]. В заключение заметим, что к настоящему времени разработано много различных систем помехоустойчивого кодирования, отличающихся друг от друга функциональным назначением, алгоритмами кодирования и декодирования, избыточность и другими параметрами.
Глава 10. Биты, исправляющие ошибки 149 Задания для самостоятельной работы учащихся ► 8. Определите положение одиночной ошибки в искаженном сообщении 110011 кода Хемминга длины 7. ► 9. Разработайте программу, которая по четырем заданным информационным битам выводит на экран 7-битовый код Хемминга длины 7. ► 10. Разработайте программу, которая определяет и исправляет (устанавливает место) одиночную ошибку в искаженном сообщении кода Хемминга длины 7. Примечания 1. На вход программе подается 7-битовое сообщение, которое от семи битов, приведенных в табл. 10.9, отличается не более чем на один бит (произвольное сообщение вводить нельзя). 2. В случае отсутствия ошибки на экран должен выводиться соответствующий текст. ► 11. Определите общее число вариантов недопустимых (ошибочных) сообщений, которые могут быть в удлиненном слове кода Хемминга длины 7, считая, что возможно любое количество ошибок.. ► 12. Определите, сколько различных слов можно передать, используя код Хемминга следующего после рассмотренного в предыдущих задачах значения длины. Каково общее число недопустимых (ошибочных) сообщений, которые могут быть при этом получены в виде удлиненного слова? Принять, что в источнике информации ошибки исключены (они возможны только при ее передаче). ► 13. Докажите, что в общем случае в коде Хемминга, позволяющем исправить одиночную ошибку, требуется именно т проверок. ► 14. Определите, какие биты (информационные и контрольные) должны быть использованы в каждом из проверочных соотношений, аналогичных соотношениям 2.5, применительно к коду Хемминга длины согласно заданию 12. ► 15. Пусть 11010011 и 11001111 — искаженные при передаче слова расширенного кода Хемминга длины 8. Установите, какое из этих слов содержит одиночную ошибку, а какое — двойную. В случае одиночной ошибки определите ее положение. ► 16. Разработайте программу, которая определяет одиночную или находит двойную ошибку в искаженном сообщении кода Хемминга длины 8. В случае одиночной ошибки должно выводиться сообщение о номере ошибочного бита. Примечание. На вход программе подается 8-битовое сообщение, в котором по сравнению с правильным кодом имеется не более чем две ошибки (произвольное 8-битовое сообщение вводить нельзя). ► 17. Ответьте (в виде рассуждений) на вопрос «почему?», заданный в скобках в конце основной части главы.
150 Глава 10. Биты, исправляющие ошибки Указания по выполнению 1. Сформулируйте условие, при котором двойная ошибка не может быть найдена при проверке по описанной методике. 2. Рассмотрите два возможных варианта: 1) один из двух ошибочных битов — Ь0; 2) ошибочные биты — среди битов йь Ъ2, b5i b6, Ь7. Ответы к главе 10 2. 1) скорость передачи — 8/9; избыточность — 1/9; 2) скорость передачи— 16/17; избыточность — 1/17. 3. В закодированных словах БАЙТ и ИНФОРМАТИКА ошибок нет, в слове ПРИВЕТ ошибочно передана буква Е, в слове АЛГОРИТМ — буква Р. Таблица 10.10 Символ Код Контрольный бит А 00000 0 Б 00001 1 В 00010 1 Г 00011 0 Е 00101 0 И 01000 1 Й 01001 0 К 01010 0 Л 01011 1 м 01100 0 н 01101 1 О 01110 1 п 01111 0 Р 10000 1 Т 10010 0 ф 10100 0 4. 1) в приведенной ниже программе на школьном алгоритмическом языке использованы следующие основные величины: исх_код — заданный двоичный код символа; контр J5um — соответствующий ему контрольный бит; удл_код — «удлиненный» код символа; кол\ — количество единиц в заданном коде.
Ответы к главе 10 151 алг Формирование_удлиненного_кода нач лит исх_код, удл_код, сим контр_бит, цел i, кол1 ввод исх_код кол1 := О нц для i от 1 до длин(исх_код) |Каждый символ исходного кода |сравниваем с единицей если исх_код[1] = "1" то кол1 := кол1 + 1 все кц |Определяем контрольный бит, |проверяя "четность” значения кол1 если mod(кол1, 2) = О то контр_бит := "0" иначе контр_бит := "1" все |Формируем удлиненный код символа удл_код := исх_код + контр_бит |Выводим ответ вывод не, удл_код кон 2) алг Формирование_удлиненного_кода нач лит исх_код, удл_код, сим контр_бит, цел i, цифр_бит, цифр_контр_бит, лог успех ввод исх_код |Значение контрольного бита в виде числа (цифры) цифр_контр_бит := 0 |Начальное значение нц для i от 1 до длин(исх_код) I Преобразуем очередной символ кода в число цифр_бит := лит_в_цел(исх_код[i], успех) |Учитываем это число в общем значении |величины цифр_контр_бит цифр_контр_бит := цифр_контр_бит ИсклИЛИ цифр_бит кц [Контрольный бит рассчитан |Преобразуем его в символ сим_контр_бит := цел_в_лит(цифр_контр_бит) |и добавляем к исходному коду удл_код := исх_код + сим_контр_бит |Выводим ответ вывод не, удл_код кон
152 Глава 10. Биты, исправляющие ошибки Примечание. Логическая операция XOR использована условно (в школьном алгоритмическом языке такая операция отсутствует). 5. Это можно сделать только в случаях, когда ошибка произошла в одном из битов ЬиЬъ Для ошибок в контрольных битах можно ус¬ тановить только номер строки или номер столбца с ошибочным битом. 6. Если обе ошибки произошли в одной строке, то можно установить только номера столбцов, в которых это имело место, если в одном столбце — только номера строк, в противном случае — номера двух столбцов и двух строк, но конкретные их сочетания с ошибками установить невозможно. 8. Ошибочный бит — второй (s{ = 0, s2 = 1, s3 = 0). 11. 27 - 24 = 112. 12. 2й (следующая длина двоичного кода Хемминга, позволяющего исправить одиночную ошибку, — 24- 1 = 15, из них контрольных битов — 4, информационных — 11). Общее число недопустимых (ошибочных) сообщений — 215 - 211 = = 30720. 13. Ошибка может иметь номер от 0 до 2т - 1. В двоичном виде число 2т - 1 — w-значное. Значит, согласно методике определения места одиночной ошибки, требуются т проверок (необходимо найти т значений контрольных сумм). 14. S\ = 68+ Ь9 + Ь\о + Ь\\ + Z>i2+ &13+ Ь\4+Ь\Ъ s2 = b4 + Ь5 + Ь6 + 67 + Ь\2 + Ьхъ + ЪХА + 615, = Ь2 + Ъ3 + Ьв + Ъп + Ью + b\ 1 + ЪХ4 + й15, -S4 = Z?i + Z>3+ 69 + Ь\\^~ 13 + Ь\ 5 . Примечание. При расчете значения s{ происходит суммирование битов, номера которых обладают следующим свойством — в их двоичной записи в четвертом справа разряде (с весомостью 8) представлена единица; при расчете значений s2, s4 — битов, двоичные номера которых имеют единицу соответственно в третьем, втором и первом справа разрядах (с весомостью 4, 2 и 1). 15. В слове 11010011 — одиночная ошибка в третьем бите (s0 = 1, S\ = 0, s2 = 1, = 1), в слове 11001111 — двойная (s0 = 0, si = 0, s2 = 0, S3 = 1). 17. Любая двойная ошибка не может быть обнаружена при проверке по описанной методике — если ни одно из равенств (10.2.5) не нарушится (при выполнении отношения (10.2.7)). Это могло бы быть, если бы имелась хотя бы одна пара битов, оба бита которой либо встречаются в отдельных равенствах (10.2.5), либо отсутствуют в них. Исследуем такую возможность.
Ответы к главе 10 153 Когда один из двух ошибочных битов — Ь0, то второй обязательно нарушит одно из равенств (10.2.5), как при одиночной ошибке. Когда ошибочные биты — среди битов 6Ь Ъ2, b3, Z?4, b5, 36, Ьъ то для любой пары из них в каком-то из равенств (10.2.5) некоторый бит пары встречается один раз (убедитесь в этом!), что также нарушит это равенство. Следовательно, при наличии двух ошибочных битов отношение (10.2.7) будет выполняться, а одно из равенств (10.2.5) — обязательно нарушится. Гений одной идеи В книге Стефана Цвейга «Звездные часы человечества» есть замечательный рассказ «Гений одной ночи» об офицере французской армии Руже де Лиле, написавшем в течение одной ночи в пылу охватившего его вдохновения знаменитую «Марсельезу». Это было в 1792 году в революционном Марселе. Песня в течение нескольких дней распространилась по Франции, быстро приобрела колоссальную популярность во всём мире и впоследствии стала национальным гимном Французской Республики. История сохранила имя Руже в памяти потомства благодаря этой единственной песне. По аналогии Ричарда Хемминга можно назвать «гением одной идеи». Он сформулировал ее в 1950 году в своей единственной научной статье, посвящённой кодам для коррекции ошибок. Статья содержала конструкцию блочного кода, корректирующего одиночные ошибки, которые возникают при передаче сообщений. Быховский Марк. Ричард Хемминг и начало теории кодирования // PC Week/RE, №21,11.06.2002 г.
Глава 11 Фокусы Хотите стать фокусником (©) и удивить своих учеников демонстрацией фокусов, связанных с недесятичными системами счисления? Если да, то эта глава — для вас. ► 11.1. Отгадывание числа Имеется достаточно известная игра на отгадывание задуманного числа, в которой один из участников игры загадывает целое число, например, меньшее 100. Второй участник должен отгадать это число, делая несколько попыток. В случае несовпадения названного и задуманного чисел первый участник сообщает, какое из них больше, после чего делается следующая попытка и т. д. до отгадывания. Вы, конечно, уже догадались, как должен действовать второй участник — в первой попытке он должен назвать число 50, потом, в зависимости от ответа, — 25 или 75 и т. п. Такой принцип, позволяющий отгадать число за минимально возможное количество попыток, называется методом бинарного поиска (деления интервала поиска пополам). А если на вопросы можно отвечать только «да» или «нет», а вопросы типа «Задуманное число больше ...?», в которых фигурируют слова «больше», «больше либо равно», «меньше», «не меньше», «превышает» и т. п., а также вопросы типа «Задуманное число находится в интервале от ... до ... ?» задавать нельзя? Как отгадать задуманное число в таком случае, например, целое число из интервала от 600 до 1000 включительно, задав не более 10 вопросов? Одна из возможных серий вопросов, заведомо приводящая к успеху, такова. 1-й вопрос: «Разделите задуманное число на 2. Является ли единица остатком при таком делении?». Если ответ да, то запишем 1, если нет — 0 (иначе говоря, мы запишем остаток от деления задуманного числа на 2). 2-й вопрос: «Разделите на 2 то частное, которое получилось при первом делении. Является ли единица остатком при таком делении?» Снова при ответе да запишем нуль, а при ответе нет — единицу. Каждый следующий вопрос будем составлять по тому же самому образцу, то есть так: «Разделите на 2 то частное, которое получилось при
Г лава 11. Фокусы 155 предыдущем делении. Является ли единица остатком при таком делении?» Всякий раз мы пишем нуль при положительном ответе и единицу при отрицательном. Повторив эту процедуру 10 раз, мы получим 10 цифр, каждая из которых есть нуль или единица. После ответов на все вопросы записанные цифры надо расположить в обратном порядке — получится двоичное число, соответствующее задуманному десятичному (оно будет 10-значным). Действительно, система наших вопросов воспроизводит ту самую процедуру, с помощью, которой делается перевод некоторого числа в двоичную систему. При этом десяти вопросов достаточно потому, что каждое число от 500 до 1000 записывается в двоичной системе с помощью не более чем десяти знаков. Переведя полученное число в десятичную систему счисления, получим задуманное число. Если считать, что задуманное число уже заранее переведено в двоичную систему, то система вопросов, с помощью которой его можно узнать: нужно о каждой его цифре спросить, равна она нулю или нет. Для этого можно задать такие вопросы: 1. «Является ли единица крайней справа цифрой двоичного числа, соответствующего задуманному десятичному числу?» 2. «Является ли единица второй справа цифрой двоичного числа, соответствующего задуманному десятичному числу?» 10. «Является ли единица десятая справа цифрой двоичного числа, соответствующего задуманному десятичному числу?» ► 11.2. Волшебная таблица Посмотрите на таблицу, показанную на рис. 11.1. С помощью этой таблицы можно отгадать любое задуманное положительное число, не большее 31, если задумавший число скажет, в каких столбцах оно встречается (номера столбцов приведены в первой строке таблицы и выделены полужирным начертанием). Например, если задумано число 22, то по названным номерам столбцов (5, 3 и 2) его можно вычислить следующим образом: 25”1 + 23-I+ 22"1 = 16 + 4 + 2 (это можно сделать, даже не смотря на таблицу). Секрет этой «волшебной» таблицы в том, что в таблице в первом столбце справа выписаны те десятичные числа, которым в двоичной системе счисления соответствуют числа, оканчивающиеся на 1, во втором — числа, у которых в двоичном представлении вторая от конца цифра равна 1, в третьем — десятичные числа, которым в двоичной системе соответствуют числа, имеющие 1 в третьем справа разряде, и т. д. Так, число 22 в двоичной системе счисления имеет вид: 10110, и записано это число
156 Г лава 11. Фокусы 5 4 3 2 1 1 16 8 4 2 1 17 9 5 3 3 18 10 6 6 5 19 11 7 7 7 20 12 12 10 9 21 13 13 11 11 22 14 14 14 13 23 15 15 15 15 24 24 20 18 17 25 25 21 19 19 26 26 22 22 21 27 27 23 23 23 28 28 28 26 25 29 29 29 27 27 30 30 30 30 29 31 31 31 31 31 Рис. 11.1 в пятом, третьем и втором столбцах. Если вспомнить правило перевода чисел из двоичной системы в десятичную, то по записи 10110 соответствующее десятичное число можно получить так: 24 + 22+ 21 (это так называемая «развернутая запись числа»), или, «привязываясь» к нашей нумерации столбцов таблицы — 25-1 + 23'1 + 22-1. Можно также для отгадывания чисел использовать веер (готовый или сделанный самостоятельно). На его пяти пластинках следует выписать числа из приведенной в условии таблицы. Тогда вы, обвевая себя веером, сможете предлагать вашим ученикам задумывать числа и указывать только те пластинки, на которых оно записано, и вы сразу же назовете задуманное число! Аналогичный фокус можно также демонстрировать, отгадывая возраст учащихся, их день и месяц рождения и т. п. Программы, моделирующие описанный и следующий фокусы, приведены в приложении 7. В приложении 8 описана методика оформления листа электронной таблицы для демонстрации этих фокусов. Вовочка приходит из школы домой. Отец: — Ну-ка, покажи дневник! Опять двойка!!! — Да, двойка, но мы со вчерашнего дня перешли на троичную систему счисления...
Г лава 11. Фокусы 157 ► 11.3. Семь табличек Подготовьте 7 табличек: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111 113 115 117 119 121 123 125 127 1 Рис. 11.2 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 36 37 38 39 44 45 46 47 52 53 54 55 60 61 62 63 68 69 70 71 76 77 78 79 84 85 86 87 92 93 94 95 100 101 102 103 108 109 110 111 116 117 118 119 124 125 126 127 3 Рис. 11.4 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 5 Рис. 11.6 2 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31 34 35 38 39 42 43 46 47 50 51 54 55 58 59 62 63 66 67 70 71 74 75 78 79 82 83 86 87 90 91 94 95 98 99 102 103 106 107 110 111 114 115 118 119 122 123 126 127 2 Рис. 11.3 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47 56 57 58 59 60 61 62 63 72 73 74 75 76 77 78 79 88 89 90 91 92 93 94 95 104 105 106 107 108 109 110 111 120 121 122 123 124 125 126 127 4 Рис. 11.5 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 6 Рис. 11.7
158 Глава 11. Фокусы 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 ИЗ 114 115 116 117 118 119 120 121 122 123 124 125 126 127 7 Рис. 11.8 С их помощью вы можете отгадать любое число от 1 до 127, если задумавший его скажет, в каких таблицах (они имеют номера от 1 до 7) это число встречается1. Запишем каждое из чисел от 1 до 127 в двоичной системе. Каждое из этих чисел содержит в двоичной записи не более семи цифр (в частности, 127 ю = 11111112). Впишем данное число А в таблицу с номером к (к = 1,2, ..., 7)2, если в его двоичной записи на А>м, считая справа налево, месте стоит единица, и не будем его туда вписывать, если в его двоичной записи на А>м месте стоит нуль. Например, число 57, которое в двоичной системе записывается как 0111001, должно быть занесено в первую, четвертую, пятую и шестую таблички, число 1 — только в первую, число 127 — во все семь табличек и т. д. Таким образом, говоря, в каких табличках содержится данное число, задумавший тем самым сообщаете его двоичную запись. Остается лишь перевести ее в десятичную. Можно поставить вопрос наоборот: укажите произвольное число от 1 до 127, и я скажу, в каких табличках оно есть, а в каких его нет. Для ответа на такой вопрос достаточно перевести названное число в двоичную систему (при некотором навыке это нетрудно сделать и в уме) и назвать номера тех разрядов, в которых получится единица. Примечание. В каждой из приведенных на рис. 11.2-11.8 табличек числа выписаны в порядке возрастания, поэтому структура этих табличек довольно легко обнаруживается. Однако внутри каждой из них числа можно было бы переставить совершенно произвольно, замаскировав, таким образом, способ построения табличек. Можно также не нумеровать карточки, а выкрасить их в разные цвета. 1 Когда вы будете демонстрировать кому-то этот фокус, можете также предложить передать вам те карточки, на которых имеется задуманное число. 2 Номер таблицы на рис. 11.2-11.8 приведен в ее нижней части.
Глава 11. Фокусы 159 Задание для самостоятельной работы учащихся ► Подготовьте таблицы, аналогичные описанным, для отгадывания чисел от 1 до 31 включительно. Сколько таблиц понадобится? ► 11.4. Волшебная карточка [6] Теперь, когда вы знаете секрет двух предыдущих фокусов, опишем аналогичный, но более эффектный. Для его демонстрации необходимо подготовить шесть3 карточек с числами (см. нижние карточки на рис. 11.9) и одну «волшебную» карточку (почему «волшебную» — скоро станет ясно). В принципе карточки с числами не отличаются от карточек, использовавшихся в предыдущем фокусе, однако числа на них не расположены в порядке возрастания, так что ключевые числа (т. е. числа, каждое из которых меньше всех остальных на данной карточке) занимают различные положения среди остальных чисел. Кроме того, некоторые числа на каждой 54 I) I» 58 63 31 26 $1 2*ф 61 50 20 2Тф 52 $6 78 ф IT 59 4» 21 60 31 ф 19 55ф 30 16 5) 6* 49 24 5? 22 52 27 П 45 6) It 10 58 9 61 42 2» S II 5Т 30 5Эфб2 15 24 ф 60 40 4Т 14 56 4&ф12 44ф Мф V 4) 15 41 31 26 62 (2 28 39 63 54 58 45 61 44 33 53 ф 57 46 43 41 ф 62 )4 40 ф 5$ 42 51 5» 35 (0 32 44 »фпф 58 36 48 50 56 52 4Г 42 37 II 38 62 51 4) 26 55 IS 10 ф 61 >5 » 19 ф 4« 14 3 ф Я 77 7 $8 18 26 ф в 47 2 39 ф 27 54 23 50 30 3» 42 II 34 5 47 28 S3 61 13 70 52 37 ф 44 30 46 М 4 7 гг бзф 12 67 14 60 31 23ф 29 54ф 15ф 6 4S 36 39 21 47 28 6) 38 33 4» 27 17 21 55 6| 39 }ф 31 51 65 43 ф О IS 7 f 19 (S 23 59 41 57 ф 29 9 ф 35ф 51 Я 5 47 85 45 33 II ЗГ Рис. 11.9 3 Для случая, когда отгадываемое число находится в диапазоне от 1 до 64.
160 Глава 11. Фокусы карточке повторяются. На всех карточках имеются отверстия (на рисунке они показаны в виде закрашенных кружков). Отверстия в «волшебной» карточке соответствуют местам, где на шести карточках расположены ключевые числа, а на каждой из шести карточек отверстия сделаны в тех же местах, что и на «магической» карточке, за исключением одного, где проставлено ключевое число данной карточки. После того как зритель отберет все карточки, на которых имеется задуманное число, вы кладете их друг на друга и накрываете «волшебной» карточкой. Теперь, чтобы получить задуманное число, нужно сложить числа, видимые сквозь отверстия. ► 11.5. Еще фокусы с карточками Еще ряд эффектных фокусов можно продемонстрировать с использованием карточек, представленных на рис. 11.10 [6]. Их можно изготовить из картона. Отверстия должны быть чуть больше диаметра карандашей, спиц и т. п. приспособлений, которые вы будете использовать при демонстрации фокусов. Отверстия можно сделать с помощью дырокола. Удобно сначала сделать пять отверстий в одной карточке, а затем использовать ее как шаблон для того, чтобы наметить отверстия на других карточках. Проделав в каждой карточке по пять отверстий, прорежьте промежуток, отделяющий некоторые отверстия от края, так, как показано на рисунке. Отверстия, доходящие до края карт, соответствуют цифре 0, остальные отверстия соответствуют цифре I4. Таким образом, каждой карте можно сопоставить некоторое двоичное число от 0 до 31 (на рис. 11.10 карточки нарисованы в случайном порядке). Срезанный правый верхний угол (см. рис. 11.10) позволяет следить за тем, чтобы карты были ориентированы одинаково (не переворачивались). Хотя изготовить карты довольно хлопотно, ваш труд будет вознагражден восхищением зрителей, которым вы будете демонстрировать фокусы. Прежде чем описывать фокусы, заметим следующее. Если собрать все карточки в колоду и, держа ее одной рукой, поставить на стол вертикально, после чего вставить, например карандаш, в одно из отверстий, а потом немного приподнять карандаш, то часть карт (их будет 16) окажется надетой на него. Если затем встряхнуть карандаш, то остальные карты (тоже 16 штук) упадут на стол. Какие именно? Ответ получить несложно — на столе окажутся карты, на которых для соответствующего отверстия прорезан промежуток до края, а на карандаше — карты, у которых такой прорези нет. Можно также сказать, что это будут 2 группы карт: у которых в выбранном отверстии «выполнен» 0 и 1 соответственно. Для краткости так и будем называть эти группы карт: «группа 0» и «группа 1». 4 Или, наоборот, что не меняет существа вопроса (именно так описан фокус в книге [6]).
Глава 11. Фокусы 161 Первый фокус — отгадывание задуманного зрителем числа из интервала 1-31. Как и ранее, задумавший число должен назвать вам столбцы таблицы на рис. 11.15, в которых оно встречается. Вы последовательно продеваете карандаш в каждое из отверстий и 5 раз проводите «манипуляции» по разделению карточек на две указанные чуть выше группы. Для отверстий, соответствующих указанным зрителем столбцам (считая отверстия, как и столбцы, справа налево), вы отбираете карты группы 1, для остальных — карты группы 0. После обработки каждого «разряда» количество отобранных карт уменьшится вдвое, и последняя отобранная карта будет соответствовать задуманному числу. Выбирать отверстия лучше так, чтобы последние «манипуляции» проводились с отверстием, соответствующим одному из столбцов, названных зрителем, — в этом случае задуманная им карта окажется на карандаше. oUooo\ ооооо\ Uoooo^i ooUULJN oooUo^j oUUolN oooolK UUoolN oUoUINj UUUoUN oUooLN UooUo\ БШШ\ UUoocA иш oolioo\ цщ ooUUcNj UUUULNj UoooLN UoUooN UooUIN UoUUU\ UoUollN oooULN oUolioN oolloCN UUUooN UUoUo\ oUUUo^j lRJUo\ Рис. 11.10 5 Такая таблица должна быть также подготовлена для демонстрации фокуса.
162 Глава 11. Фокусы Например, задумавший число назвал вам 2-й, 3-й и 4-й столбцы. Для первого справа отверстия вы отбираете 16 карт, оказавшихся на столе (группа 0), для 5-го — также карточки этой группы (их будет 8), для остальных — карточки, оставшиеся на карандаше. Последней оставшейся карточкой будет такая: UooolK Рис. 11.11 Она соответствует десятичному числу, двоичное представление которого 01110, то есть 14. Именно это число и задумал зритель. Если хотите, на каждой карточке можно заранее написать соответствующее десятичное число. Тогда вам не надо будет каждый раз переводить числа из двоичной системы в десятичную. Числа, соответствующие карточкам, изображенным на рис. 11.10, приведены в таблице: 23 31 15 24 29 18 30 6 20 2 22 13 16 7 4 27 1 19 25 0 14 11 12 8 10 28 21 26 3 5 17 9 Еще два фокуса заключаются в быстрой сортировке карт: нужно расположить их так, чтобы соответствующие карточкам числа последовательно возрастали от 0 до 31. Перетасуйте карты, как игральные, и сложите их колодой. Проденьте карандаш в крайнее правое отверстие и разделите карточки на две группы. Снимите с карандаша надетые на него карты и положите их в низ остальной колоды. Повторите аналогичные действия для 2-го, 3-го (считая справа налево) и других отверстий. В результате все карты будут расположены по порядку от 0 до 31. Если же написать на каждой из карт текст из 32 символов (включая «пробелы»), то можно, например, получить новогоднее или другое поздравление. Примеры соответствия чисел (карточек) и символов приведены на рис. 11.12-11.13.
Г лава 11. Фокусы 163 п О 3 Д р А В Л Я Ю С Н О В Ы 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 М 2 0 1 5 - м Г О д О М ! 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Рис. 11.12 п О 3 Д р А В Л Я Е М О Л ю С 0 1 2 3 4 5 6 7 8 9 10 и 12 13 14 15 16 д Н Е М Р О Ж д Е Н И Я ! 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Рис. 11.13 Задание для самостоятельной работы учащихся ► Подумайте над тем, как демонстрировать описанные фокусы, если отверстиям, доходящим до края карт, сопоставить цифру 1, а остальным отверстиям — цифру 0. ► 11.6. Фокус с октаэдром Посмотрите, пожалуйста, на рисунок 11.14. На нем изображен так называемый «октаэдр», один из пяти правильных многогранников — тело, имеющее 8 граней в виде равностороннего треугольника, 12 рёбер, 6 вершин (в каждой вершине сходятся 4 ребра). Октаэдр можно изготовить из бумаги, используя следующую развертку (рис. 11.15). Рис. 11.14 Рис. 11.15
164 Глава 11. Фокусы Удобно сначала получить один равносторонний треугольник. Для этого: 1) нарисуйте окружность радиуса 2,5— 3 см с центром в точке О (рис. 11.16). 2) начертите отрезок прямой, проходящей через центр окружности, и пересекающий ее в двух точках; пусть точки пересечения отрезка с окружностью — А и В; 3) установите ножку циркуля с иголкой в точку В и раствором циркуля, равным радиусу, сделайте засечки в точках С и D; 4) при помощи линейки попарно соедините точки А, С и D — отрезки AC, AD и CD будут являться сторонами равностороннего треугольника. Вырезав получившийся треугольник, можно затем, используя его как шаблон, нарисовать на плотной бумаге 6 треугольников как изображено выше на развертке (см. рис. 11.15). Участки развертки, ограниченные пунктирными линиями (они понадобятся при склейке октаэдра), можно потом пририсовать к треугольникам. Возникает вопрос — а причем здесь фокусы? Дело в том, что если на гранях тетраэдра написать числа, указанные на развертке (рис. 11.17), то его можно использовать для демонстрации следующего фокуса. Попросите кого-нибудь задумать любое число от 0 до 7. Положите октаэдр на стол или, держа его в руках, покажите так, чтобы загадавший мог видеть только грани с цифрами 1,3, 5 и 7, и спросите, видит ли он задуманное им число. Если он ответит положительно, то запомните про себя число 1. Затем вы переворачиваете октаэдр так, чтобы загадавшему видны только грани с цифрами 2, 3, 6 и 7, и снова задайте тот же вопрос. Если он ответит положительно, то запомните про себя число 2. В третий (и последний) раз вы повторяете свой вопрос, повернув октаэдр так, чтобы загадавший мог видеть только грани с цифрами 4, 5, 6 и 7. Утвердительный ответ в этом случае оценивается числом 4. Сложив в уме оценки всех трех ответов, вы получите задуманное число (или 0, если человек, загадавший число, трижды ответит «нет»). Например, если ответы были: «нет», «да» и «да», то задуманное число — 6 (2 + 4), а если «да», «да» и «нет», то — 3(1+2). Рис. 11.17
Г лава 11. Фокусы 165 Секрет фокуса заключается в том, что любое число от 1 до 7 можно представить как сумму чисел 1, 2 и 4: 1 = 1 2 = 2 3=2+1 4 = 4 5 = 4+1 6 = 4 + 2 7=4+2+1 Так вот, четыре числа, которые вы показываете в первый раз (1, 3, 5 и 7), «содержат в себе» единицу, во второй раз (2, 3, 6 и 7) — число 2, в третий раз (4, 5, 6 и 7) — число 4. Отвечая на вопросы, человек, загадавший число, невольно подсказывает вам, нужно ли учитывать 1, 2 или 4 в искомой сумме. Чтобы было легче отыскать нужные при демонстрации фокуса положения октаэдра, можно как-нибудь пометить три вершины, которые должны быть обращены к вам, когда вы показываете октаэдр зрителям. Например, можно в качестве меток использовать одну, две и три точки (рис. 11.18). Одну точку следует поставить у вершины, которая принадлежит граням с числами 0, 2, 4 и 8, две точки — с числами 0, 1, 4 и 5, три — с числами 0, 1, 2 и 3. При первом показе к вам должна быть обращена вершина с одной точкой, при втором — с двумя, при третьем — с тремя. Можно также не писать числа на гранях, а окрасить грани октаэдра в разные цвета и отгадывать задуманный цвет. Для этого вы должны каждому из чисел от 0 до 7 сопоставить один из восьми цве- Рис. 11.18 тов, использованные цвета показать зрителям и предложить кому-то из них выбрать и запомнить любой цвет. Вы потом этот цвет назовете. Удобно грань с номером 0 сделать белой, а для остальных использовать цвета радуги (кроме фиолетового) и черный: Число на грани Цвет 1 Красный 2 Оранжевый 3 Желтый 4 Зеленый 5 Голубой 6 Синий 7 Черный
166 Г лава 11. Фокусы Конечно, при этом вам придется запомнить эти цвета и числа (рис. 11.19). При демонстрации фокуса теперь нужно трижды показывать зрителю октаэдр и спрашивать, видит ли он «свой» цвет. В первый раз вы показываете ему красную, желтую, голубую и черную грани, во второй — оранжевую, желтую, синюю и черную, в третий — зеленую, голубую, синюю и черную. Рис. 11.19 Рис. 11.20 По полученной после ответов сумме (как и ранее) вы сможете назвать запомненный цвет. Например, если ответы были: «да», «нет» и «да», то это голубой (номер этого цвета равен 5), а если «нет», «да» и «нет» — то оранжевый (2). В таком варианте фокуса для отыскания нужного положения октаэдра также можно пометить три соответствующие вершины (рис. 11.20). ► 11.7. Фокус с цветными цифрами6 С помощью трех таблиц с цветными цифрам (рис. 11.21-11.23)7 можно отгадать задуманное зрителем число, большее 0 и меньшее 64, всего за три вопроса. Первый вопрос: «Какой цвет имеет ваше число в таблице 1?» Второй вопрос: «Какой цвет имеет ваше число в таблице 2?» Разумеется, третий вопрос — о его цвете в таблице 3. Получив ответы, можно, заглянув (или выучив ее8) в такую «шпаргалку»: Таблица 11.1 Таблица Синий Красный Черный Зеленый 1 0 1 2 3 2 0 4 8 12 3 0 16 32 48 определить задуманное число. 6 Фокус приду мал А. П. Савин, памяти которого посвящена данная книга. 7 На рисунках цвета цифр показаны буквенными индексами (ч —.черный; к — красный; с — синий;3 — зеленый. 8 О том, как это сделать, — см. далее.
Г лава 11. Фокусы 167 Если задумавший число ответил на вопросы, скажем, так: «Синий, зеленый, красный», то вы складываете числа 0, 12 и 16, стоящие на пересечении строк и столбцов, соответствующих названным цветам в соответствующих таблицах. Проверьте, что число 28 действительно имеет названные цветы в таблицах (и только оно!). Секрет фокуса в том, что использована четверичная система счисления. В ней для записи чисел применяются четыре цифры: 0, 1, 2 и 3. Хотя, конечно, это условность. Можно использовать, например, например, другие символы — букву С для нуля, букву К для 1, букву Ч для 2 и букву 3 для 4. Число 28 запишется в этой системе как 1-42 + 3- 4 + 0*1 = 1304, или в нашей буквенной записи: КЗС. Если прочесть эту запись справа налево, то получится: «синий зеленый красный». Это сочетание цветов и назовет задумавший число 28 в качестве цветов в таблицах 1, 2 и 3! 1* 2ч З3 4е 5К б4 73 8е 9* 10ч 113 12е 13* 14ч 153 16е 17к 18ч 193 20е 21 к 22ч 233 24е 25к 26ч 273 28е 29ч 30ч 313 32е 33* 34ч 353 36е 37к 38ч 393 40е 41 к 42ч 433 44е 45к 46ч 473 48е 49к 50ч 513 52е 53к 54ч 553 56е 57к 58ч 593 60е 61к 62ч 633 1 1C 2е ЗС 4к 5К 6К 7К 84 9Ч 10ч цч 123 133 143 153 16е 17е 18е 19е 20к 21к 22к 23* 244 25ч 264 274 283 293 303 313 32е 33е 34е 35е 36к 37к 38к 39к 40ч 41ч 42ч 43ч 443 453 463 4?з 48е 49е 50е 51е 52* 53к 54к 55к 564 574 58ч 59ч 603 613 623 633 2 Рис. 11.21 Рис. 11.22 1C 2е ЗС 4е 5е бс 7е 8е 9е 10е 11е 12е 13е 14е 15е 16к 17к 18к 19к 20к 21 к 22к 23к 24к 25к 26к 27к 28к 29к 30к 31 к 324 334 34ч 354 36ч 37ч 38ч 394 404 414 424 434 444 45ч 46ч 474 483 493 503 513 523 533 543 553 563 573 583 593 603 613 623 633 3 Рис. 11.23 Выпишем цифры десятичных чисел 1-63 при записи в четверичной системе (табл. 11.2). Видно, что последние цифры периодически чередуются через четыре, средние цифра сгруппированы по 4, первая — по 16. Но именно так расположены цветные числа в таблицах на рисунках. 11.16-11.18.
168 Г лава 11. Фокусы Таблица 11.2 Десятичное число Цифры числа в четверичной системе Последняя Средняя Первая 1 1 0 0 2 2 0 0 3 3 0 0 4 0 1 0 5 1 1 0 6 2 1 0 7 3 1 0 11 3 2 0 12 0 3 0 15 3 3 0 16 0 0 1 17 1 0 1 61 1 3 3 62 2 3 3 63 3 3 3 Таким образом, у синих чисел в четверичной записи стоит в конце цифра 0, у красных — 1, у черных — 2, у синих — 3. Цвета чисел в таблице 2 точно таким способом определяют вторую цифру в четверичной записи числа, а в таблице 3 — третью. То же самое говорит и «шпаргалка», с помощью которой можно определить число по его цветам в таблицах. Обратим внимание на то, что числа помещены в таблицах 7*9 для того, чтобы немного запутать зрителей — если использовать таблицы размером 8 х 8, то систему можно обнаружить гораздо быстрее: (см. рис. 11.24-11.26). ОС 1C 2е 3е 4к 5« 6« 7* 8Ч 9Ч 10ч ЦП 123 133 143 153 16е 17е 18е 19е 20к 21 к 22к 23к 244 25ч 26ч 27ч 283 293 303 313 32е 33е 34е 35е 36к 37к 38к 39к 40ч 41ч 424 43ч 443 453 463 473 48е 49е 50е 51 с 52к 53к 54« 55к 56ч 57ч 584 59ч 603 613 623 633 2 ОС 1“ 2Ч З3 4е 5К 64 73 8е 9К ЮЧ 113 12е 13к 14ч 153 16С 17» 18ч 193 20е 21 к 224 233 24е 25к 26ч 273 28е 29к 30ч 313 32е 33к 34ч 353 36е 37к 384 393 40е 41 к 42ч 433 44е 45к 46ч 473 48е 49к 50ч 513 52е 53к 54ч 553 56е 57« 58ч 593 60е 61* 62ч 633 1 Рис. 11.24 Рис. 11.25
Г лава 11. Фокусы 169 Ос 1C 2е Зс 4е 5е 6С 7е 8е 9е Юс 11е 12е 13е 14е 15е 16к 17к 18к 19к 20к 21 к 22к 23к 24* 25к 26к 27к 28к 29к 30к 31к 32ч 33ч 34ч 35ч 36ч 37ч 38ч 39ч 40ч 414 42ч 43ч 444 45ч 46ч 47ч 483 493 503 513 523 533 543 553 563 573 583 593 603 613 623 633 3 Рис. 11.26 Задание для самостоятельной работы учащихся Подготовьте таблицы, аналогичные описанным, для отгадывания чисел от 1 до 26, использующие троичную систему счисления. Сколько таблиц понадобится? Как должна выглядеть «шпаргалка» для расчетов, аналогичная табл. 11.1? ► 11.8. Фокус «15 названий» Возьмите какие-либо 15 названий — пусть, к примеру, это будут термины, связанные с информатикой и компьютерами (см. табличку на рис. 11.27). 1. Бит 2. Системный блок 3. Ноутбук 4. Монитор 5. Принтер 6. Джойстик 7. Сканер 8. Байт 9. Логика 10. Система счисления 11. «Мышка» 12. Цифра 13. Число 14. Разряд 15. Программа Рис. 11.27
170 Г лава 11. Фокусы Вы, показывая зрителям эту таблицу, просите одного из них задумать какой-нибудь термин. Потом, стоя спиной к таблицам, показанным на рис. 11.28-11.31, вы просите сказать, в каких из этих таблиц присутствует задуманное слово или словосочетание (номер таблицы указан в правом верхнем углу). Получив ответ, вы сразу называете его. Затем вы обращаетесь к другому зрителю и опять безошибочно называете задуманное слово. Зрители потрясены! 1 2 Сканер Сканер Число Система счисления Логика Программа Бит «Мышка» Принтер Системный блок Программа Ноутбук Ноутбук Разряд «Мышка» Джойстик Рис. 11.28 Рис. 11.29 3 4 Цифра Цифра Число Байт Монитор Разряд Принтер Логика Джойстик Система счисления Сканер Программа Программа Число Разряд «Мышка» Рис. 11.30 Рис. 11.31 Конечно, после разъяснений к нескольким последним фокусам, вы уже поняли, в чем секрет данного фокуса и как его демонстрировать. Единственная трудность — запомнить номера 15 слов (словосочетаний). При оформлении таблички на рис. 11.27 использованы некоторые приемы, облегчающие запоминание. Например, слова бит и байт даны соответственно под номерами 1 и 8 (1 байт = 8 битов), номер 13 («несчастливое» число) связано со словом число, а перед ним, под номером 12, приведено слово цифра. В жизни (не считая уроков информатики) мы пользуемся десятичной системой счисления, поэтому словосочетание система счисления дано под номером... правильно — 10!
Г лава 11. Фокусы 171 И еще. Чтобы больше «засекретить» фокус, можно в табличке на рис. 11.27 номера терминов не приводить (но запомнить их вам, естественно, придется). Программа, моделирующая описанный фокус, приведена в приложении 7. В приложении 8 описана методика оформления листа электронной таблицы для демонстрации этого фокуса. ► 11.9. Карточный фокус «Последняя карта» Зрителю, задумавшему некоторую карту и объявившему ее, вручают колоду карт, в которой карты расположены картинками вниз, и просят, сняв верхнюю карту, переложить ее в низ колоды. Затем снять следующую карту и выложить ее на стол. Очередную верхнюю карту снова положить в низ колоды, следующую за ней — снова выложить на стол, и т. д. до тех пор, пока в руках у зрителя не окажется одна-единственная карта. Она-то и окажется той, которую задумал зритель перед демонстрацией фокуса (естественно, что фокусник подготовил колоду соответствующим образом). Возникает вопрос — в каком месте исходной колоды должна находиться задуманная карта, чтобы в конце концов она оказалась последней, оставшейся в руках зрителя? Ясно, что положение задуманной карты в колоде, зависит от числа карт в колоде. Но где именно? Обозначим общее число карт в колоде — п, искомый номер карты — к и проанализируем несколько начальных значений п. Когда п = 2, задуманная карта должна быть первой (сначала она уйдет в низ «колоды», потом верхняя карты будет убрана на стол и останется только задуманная карта). Пусть п = 3. Так как мы знаем «правильное» положение задуманной карты при п = 2, то нам достаточно подумать над тем, где она должна находиться при п = 3, чтобы после двух «манипуляций», в результате которых п станет равно 2, эта карта оказалась первой. Из рис. 11.32 следует, что ее номер должен быть равен трем. Рис. 11.32 Рассуждая аналогично при п = 4, получаем к = 1 (после двух перемещений получим п- 3, а задуманная карта будет третьей — см. рис. 11.33-11.34). Рис. 11.33 Рис. 11.34
172 Г лава 11. Фокусы Далее можно получить, что: • при п = 5 — к = 3; • при п = 6 — к = 5; • при п-1 — к-1\ • при /7 = 8 — к= 1; • при п = 9 — к = 3. Составим таблицу: Таблица 11.3 Число карт в колоде, п Двоичное представление Номер места, к Двоичное представление 2 10 1 1 3 11 3 11 4 100 1 1 5 101 3 11 6 110 5 101 7 111 7 111 8 1000 1 1 9 1001 3 И Анализ показывает, что для определения номера места к следует записать число карт в колоде в двоичной системе счисления и перенести единицу старшего разряда в конец числа. Число, которое получится в результате такой операции, совпадает с номером того места, на котором должна находиться задуманная карта, если считать по порядку, начиная с самой верхней карты в колоде. Например, используется колода из 52 карт. В двоичной системе число 52 запишется как 110100. Перенесем единицу старшего разряда в конец: 101001. В десятичной системе это число равно 41, значит, задуманная карта должна быть 41-й, считая сверху. При демонстрации искомый номер целесообразно определять так: 1) из общего числа карт п вычесть максимальную степень двойки, не превышающую п; 2) полученную разность удвоить; 3) к результату прибавить 1. • Примеры: 1) при п = 52: • 52-32 = 20; • 20 • 2 = 40; • 40+1 =41;
Г лава 11. Фокусы 173 2) при п = 36: • 36-32 = 4; •4-2 = 8; •8+1=9. Вариант фокуса — подготовив колоду соответствующим образом, заранее объявить, какая последняя карта останется в руках у зрителя. Чтобы еще более «удивить» зрителей (©), можно при каждой демонстрации фокуса менять число карт в колоде. Задания для самостоятельной работы учащихся ► 1. Определите, сколько карт должно быть в колоде, если нужно, чтобы последней осталась: • самая верхняя карта? • самая нижняя карта? ► 2. Подумайте, может ли последней остаться карта, которая в ис- ходной колоде была второй сверху? ► 11.10. Фокус Жергонна В заключение — один очень эффектный карточный фокус. Он известен под названием задачи Жергонна о трех стопках карт (в честь французского математика Жозефа Жергонна, который первым занялся анализом этой задачи еще в начале XIX века). В нем используется колода из 27 карт. Зритель запоминает одну из них и, держа колоду открытыми картами вниз, вынимает из нее по одной карте и раскладывает их слева направо в три стопки картинками вверх (первая карта идет в первую стопку, вторая — во вторую, третья — в третью, четверная — в первую и т. д.). Каждая стопка будет состоять из девяти карт. Указав фокуснику стопку, в которой лежит запомненная карта, зритель складывает стопки в любом порядке (возможны 6 вариантов размещения стопок), не перетасовывая карты внутри стопок. Затем он опять переворачивает колоду картинками вниз и начинает еще раз раскладывать карты в три стопки картинками вверх. Показав, где теперь лежит задуманная карта, зритель повторяет ту же самую процедуру в третий раз, после чего колода, составленная из трех стопок, кладется на стол. Все это время фокусник ни разу не прикасается к картам, но, тем не менее, он мгновенно говорит, в каком месте лежит задуманная карта. Секрет фокуса, связанного с троичной системой счисления, заключается в том, чтобы заметить, куда каждый раз зритель клал стопку с задуманной картой — под колоду, в середину ее или наверх. Обозначим эти три положения цифрами 0 (когда стопка с запомненной картой находится в верхней части колоды), 1 (когда стопка лежит в середине) и 2 (когда стопка положена в самый низ). Запомнив три положения нужной стопки, фокусник составляет из этих цифр трехзначное число, имея в виду, что
174 Глава 11. Фокусы оно представлено в троичной системе счисления.. Затем он «читает» это число справа налево (можно также сразу первую из замеченных цифр ставить в младший, крайний справа разряд, следующую — во второй и последний — в старший, первый, разряд). Если перевести полученное трехзначное число, рассматривая его как троичное, в десятичную систему и прибавить единицу, то результат укажет номер искомой карты — ее можно найти, начав счет с верхней карты колоды. Например, если первый раз стопка с запомненной картой была положена вверх колоды (этому положению соответствует цифра 0), во второй раз — второй раз — в ее середину (1) и, наконец, последний раз — в самый низ (2). В результате получается троичное число 210, равное десятичному числу 21. Значит, нужная карта — 22-я сверху. Чтобы перевести троичное число в десятичную систему «в уме», следует запомнить «вклад» каждой троичной цифры в результат: Таблица 11.4 Номер цифры 1 2 3 Цифра 0 1 2 0 1 2 0 1 2 «Вклад» 0 9 18 0 3 6 0 1 2 что сделать несложно. Конечно, фокусник может все манипуляции проводить сам (а зритель только трижды называет стопку со «своей» картой). В этом случае можно, с целью облегчения расчетов, всегда класть стопку с запомненной зрителем картой в середину. При этом эффектным является нахождение карты в колоде руками, находящимися за спиной. Задания для самостоятельной работы учащихся ► 1. Объясните, почему указанная фокусником карта будет именно той, которую запомнил зритель. ► 2. Подумайте, как нужно самому демонстрировать фокус, чтобы некоторая запомненная зрителем карта оказалась в конце концов в месте, которое заранее назовет фокусник или зритель. Программа, моделирующая описанный фокус, приведена в Приложении 7. В заключение заметим следующее. К сожалению, в книгах [5, 7]9, в которых описан данный фокус, имеются неточности, из-за которых продемонстрировать фокус не удастся. Так в [5] ошибочно указано, что после 9 А также в ряде источников в Интернете.
Ответы к главе 11 175 третьего сбора трех стопок в одну ее нужно также перевернуть картинками на картах вниз. Кроме того, в книге в приведенном примере неправильно определен номер искомой карты. Эти ошибки сделаны при подготовке русского издания книги. В [7] вообще не говорится о том, что собранные стопки перед раскладыванием нужно перевернуть. Только в книге [10], выпущенной ограниченным тиражом и являющейся перепечаткой книг того же автора, изданных в 1908-1911 гг., это фокус описан правильно, хотя о двукратном переворачивании карт тоже прямо не говорится (в начале описания фокуса указывается: «карты в руках раскладывающего повернуты крапом вверх, и раскладывающий поворачивает их лицом вверх при распределении на три кучки», потом говорится, что второй раз они раскладываются «на 3 кучки, как указано выше»; о переворачивании всей колоды после третьего сбора карт ничего не говорится, что правильно). Ответы к главе 11 11.3. Понадобятся 5 таблиц: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 2 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
176 Глава 11. Фокусы 11.9 1. Поскольку двоичная запись самой верхней карты имеет вид 1, то число карт в колоде может выражаться двоичными числами 10, 100, 1000, 10000, ... (или, в десятичной системе, 2, 4, 8, 16, ...). Если требуется, чтобы в руках у зрителя осталась самая нижняя карта, то в колоде должно быть 11, 111, 1111, 11111, ... карт (число карт записано в двоичной системе), или, в десятичной системе — 3, 7, 15, 31, ... карт. 2. Нет. Более того, последняя карта никогда не может находиться в колоде на четном месте (считая сверху), поскольку порядковый номер такой карты, выраженный в двоичной системе, всегда заканчивается единицей (так как старшая цифра числа, равная 1, перемещается в конец числа), а двоичные числа, оканчивающие цифрой 1, нечетные. 11.10 1. Обсудим схему перемещения карт при демонстрации фокуса. 0 Пусть а, Ъ, с означают цифры, соответствующие поло¬ жениям стопки с запомненной картой в колоде в первый, второй и третий раз (0 — верхняя часть колоды), 1 (в середине) и 2 (стопка положена в самый низ). Итак, после первого расклада и сбора трех стопок в общую получена колода (на рис. 11.35 показан вариант при а = 1, стопка с запомненной картой оттенена). Далее формируется второй расклад: 1) вся колода переворачивается; 2) сначала распределяются по трем группам (2 - а) сто- пок10 из 9 карт, которые в сложенной колоде находились под стопкой с запомненной картой, что даст во втором раскладе 9 • (2 - а)/3 = 6-За карт в каждой стопке; 6-За 6-3 а в-За 2 Рис. 11.36 2) затем раскладывается та стопка, в которой была за- помненная карта, что добавляет еще по 3 карты в каждую Рис. 11.35 ЧУШУ второго расклада: 10 В рассматриваемом случае — одна стопка, обозначенная на рис. 11.35 цифрой 2. При а = 2 таких стопок не будет.
Ответы к главе 11 177 3 3 3 6-3 а 6-3 а в-За Рис. 11.37 3) раскладываются а стопок: За За За 3 3 3 6-3 а 6-За в-За Рис. 11.38 Так что если теперь указать стопку, в которой находится запомненная карта, то она будет там в числе последних (верхних) За+ 3 карт. Собираем стопки: За 3 6-3 а За 3 6-За За 3 6-За Рис. 11.39 После этого при третьем раскладе после переворачивания всей колоды на три группы распределяются: 1) (2 - Ь) стопок: 2) из стопки с «нужной» картой (см. рис. 11.38): • (6 - 3 а) карт; • 3 карты из тройки с запомненной картой; • За карты; 3) b стопок. В результате каждая стопка будет иметь вид:
178 Глава 11. Фокусы 3 Ь а 1 2-а 6-3 Ъ Рис. 11.40 Собираем стопки последний раз: 3 ъ а I 2-а 6-3 Ъ 3 Ь а 1 2-а 6-3 Ъ 3 Ъ а 1 2-а 6-3 Ъ Рис. 11.41 Перед стопкой с запомненной картой (она — одна из оттененных на рис. 11.41) будет размещено с стопок. Значит, эта карта будет при счете сверху вниз иметь номер: 9с + ЪЪ + а+ 1. Если вспомнить понятие «развернутая форма записи числа», то можно понять, что выражение 9с + ЗЪ + а = сЗ2 + 3b + а есть десятичное число, соответствующее троичному числу вида cba, а именно такое число и по¬ лучается при демонстрации фокуса. 2. Нужно определить места размещения стопки с запомненной картой при известном номере N карты в последней собранной колоде. Это можно сделать следующим образом: 1) вычесть из N единицу; 2) полученное число представить в виде суммы максимально возможных чисел из последней строки табл. 11.4;
Ответы к главе 11 179 3) по полученным значениям определить три цифры троичного числа, соответствующие вкладу каждого из слагаемого (также используя информацию из табл. 11.4); при необходимости указывается также цифра О, в том числе начальная; 4) цифры этого числа, прочитанные справа налево, указывают места размещения стопок: 0 — стопка с запомненная картой должна быть в верхней части колоды, 1 (в середине) и 2 (внизу). Например, если нужно, чтобы карта зрителя оказалась 12-й: 1) 12-1 = 11; 2) 11 =9 + 2; 3) соответствующее число — 102; 4) число-результат — 201 (первый раз — вниз колоды, второй раз — наверх, третий раз — в ее середину). При7У= 19: 1) 19-1 = 18; 2) 18= 18 + 0 + 0; 3) соответствующее число — 200; 4) число-результат — 002 (первые два раза стопка с запомненная картой должна быть положена в верх колоды, в третий раз — в ее низ). При N = 6: 1)6-1 =5; 2)5 = 3 + 2; 3) соответствующее число — 012; 4) число-результат — 210. О неравномерных системах кодирования символов В сноске на стр. 138 говорилось, что азбука Морзе относится к «неравномерным» системам кодирования символов, то есть таким, в которых разным символам соответствуют коды различной длины. Рассказывают, что, создавая свой код, Морзе отправился в ближайшую типографию и подсчитал число литер в наборных кассах (литера — металлический, пластмассовый или деревянный брусок прямоугольного сечения с рельефным изображением буквы или знака на одной из его сторон — см. рисунок ниже; наборная касса — ящик, в котором помещались литеры. В те времена, да и течение длительного времени потом, текст в книгах, газетах и т. п. набирался вручную из отдельных литер). Буквам и знакам, для которых литер в этих кассах было припасено больше, он сопоставил более короткие кодовые обозначения (ведь эти буквы повторяются в тексте чаще). Так, например, в русском варианте азбуки Морзе буква «е» передается одной точкой, а редко встречающаяся буква «ц» — набором из четырех символов.
Глава 12 Старинные китайские символы В статье Исаака Лейбница, упоминаемой во врезке в главе 1, и в книге [10] рассказывается о древних китайских символах, которые приписывается законодателю Китая Фо Хи1, жившему примерно за 3000 лет до н. э. Всего символов — 64, каждый из которых образован шестью находящимися друг над другом горизонтальными линиями; одни линии сплошные, другие — имеют в середине разрыв. На рис. 12.1 показаны первые 16 символов. Рис. 12.1. Первые 16 символов 1 В статье Лейбница указывается фамилия Fohy, в ряде переводов статьи на английский язык — Fuxi; в книге [7] — говорится о том, что автор книги неизвестен, а сами фигуры называются «гексаграммы Фу-Си».
Глава 12. Старинные китайские символы 181 Символы эти приводили в отчаяние как китайских, так и европейских ученых, не могших его удовлетворительно объяснить. Только Лейбниц, рассматривая различные начертания, обнаружил, что эти символы есть не что иное, как ряд 64 последовательных первых чисел, записанных в двоичной системе счисления. В самом деле, если единицу обозначить одной прямой линией , а ноль — прямой с разрывом посредине и если, кроме того, цифры высших разрядов писать не слева направо, а снизу вверх, то нетрудно увидеть, что каждый из символов, составленный из шести горизонтальных линий, может быть истолкован как двоичное число (в табл. 12.1 показаны несколько первых символов и соответствующих им чисел). Таблица 12.1 Символ Число в двоичной системе Число в десятичной системе 000000 000001 000010 000011 000100 С указанными символами связаны несколько заданий, которые можно использовать при проведении школьных конкурсов «Что? Где? Когда?», «Брейн-ринг» и викторин по информатике и/или математике. ► 1. Дан ряд фигур (рис. 12.2). Рис. 12.2
182 Глава 12. Старинные китайские символы Продолжите этот ряд (нарисуйте следующие две фигуры, соответствующие приведенной последовательности). ► 2. Дан ряд фигур (рис. 12.3). Рис. 12.3 Продолжите этот ряд (нарисуйте следующие две фигуры, соответствующие приведенной последовательности). ► 3. Дан ряд фигур (рис. 12.4). Рис. 12.4 Продолжите этот ряд (нарисуйте следующие две фигуры, соответствующие приведенной последовательности). ► 4. Дан ряд фигур (рис. 12.5). Рис. 12.5 Продолжите этот ряд (нарисуйте следующие две фигуры, соответствующие приведенной последовательности). ► 5. Дан ряд фигур (рис. 12.6). Рис. 12.6 Продолжите этот ряд (нарисуйте следующие две фигуры, соответствующие приведенной последовательности).
Глава 12. Старинные китайские символы 183 ► 6. Дан ряд фигур (рис. 12.7). Рис. 12.7 Продолжите этот ряд (нарисуйте следующие две фигуры, соответствующие приведенной последовательности). ► 7. Дан ряд фигур (рис. 12.8). Рис. 12.8 Продолжите этот ряд (нарисуйте следующие две фигуры, соответствующие приведенной последовательности). ► 8. Дан ряд фигур (рис. 12.9). Рис. 12.9 Продолжите этот ряд (нарисуйте следующие две фигуры, соответствующие приведенной последовательности). ► 9. Дан ряд фигур и соответствующих им чисел (рис. 12.10). 10 Рис. 12.10 Нарисуйте фигуры, соответствующие числам 7 и 12.
184 Глава 12. Старинные китайские символы ► 10. Дан ряд фигур и соответствующих им чисел (рис. 12.11). 1 3 10 Рис. 12.11 Нарисуйте фигуры, соответствующие числам 7 и 12. ► 11. Дан ряд фигур и соответствующих им чисел (рис. 12.12). 10 Рис. 12.12 Нарисуйте фигуры, соответствующие числам 7 и 12. ► 12. Дан ряд фигур и соответствующих им чисел (рис. 12.13). 13 Рис. 12.13 Нарисуйте фигуры, соответствующие числам 17 и 43. Программист попал в армию и стоит в строю. Офицер: «По порядку номеров — рассчитайся!» Программист: «Товарищ офицер! А в какой системе счисления считать?» Ответы к главе 12 1. См. рис. 12.14. Рис. 12.14
Ответы к главе 12 185 Решение. Если принять, что большой горизонтальный отрезок пред- ставляет цифру 1, а два маленьких (расположенные один рядом с другим) — цифру 0, то приведенные фигуры соответствуют числам 0, 1, 2 и 3, записанным в двоичной системе счисления с нулями в старших разрядах. Следующие фигуры должны соответствовать числам 4 и 5. 2. См. рис. 12.15. Рис. 12.15 Решение. Если принять, что большой вертикальный отрезок представляет цифру 1, а два маленьких (расположенные один под другим) — цифру 0, то приведенные фигуры соответствуют числам 0, 1, 2 и 3, записанным в двоичной системе счисления с нулями в старших разрядах. Следующие фигуры должны соответствовать числам 4 и 5. 3. См. рис. 12.16. Рис. 12.16 Решение. Если принять, что большой горизонтальный отрезок представляет цифру 1, а маленькие (расположенные один рядом с другим) — цифру 0, то приведенные фигуры соответствуют числам 0, 1, 2 и 3, записанным в двоичной системе счисления с нулями в старших разрядах. Следующие фигуры должны соответствовать числам 4 и 5. 4. См. рис. 12.17. Рис. 12.17 Решение. Если принять, что большой вертикальный отрезок представляет цифру 1, а маленький — цифру 0, то приведенные фигуры соответствуют числам 0, 1, 2 и 3, записанным в двоичной системе счисления с
186 Глава 12. Старинные китайские символы нулями в старших разрядах. Следующие фигуры должны соответствовать числам 4 и 5. 5. См. рис. 12.18. Рис. 12.18 Решение. Если принять, что большой горизонтальный отрезок представляет цифру 1, а два маленьких (расположенных один рядом с другим) — цифру 0, то приведенные фигуры соответствуют числам 8, 9, 10 и 1, записанным в двоичной системе счисления с нулями в старших разрядах. Следующие фигуры должны соответствовать числам 12 и 13. 6. См. рис. 12.19. Рис. 12.19 Решение. Если принять, что большой вертикальный отрезок представляет цифру 1, а два маленьких (расположенных один под другим) — цифру 0, то приведенные фигуры соответствуют числам 8, 9, 10 и 11, записанным в двоичной системе счисления с нулями в старших разрядах. Следующие фигуры должны соответствовать числам 12 и 13. 7. См. рис. 12.20. Рис. 12.20 Решение. Если принять, что большой горизонтальный отрезок представляет цифру 1, а маленькие — цифру 0, то приведенные фигуры соответствуют числам 8, 9, 10 и 11, записанным в двоичной системе счисления с нулями в старших разрядах. Следующие фигуры должны соответствовать числам 12 и 13.
Ответы к главе 12 187 8. См. рис. 12.21. И II II I Рис. 12.21 Решение. Если принять, что большой вертикальный отрезок представляет цифру 1, а маленький — цифру 0, то приведенные фигуры соответствуют числам 8, 9, 10 и 11, записанным в двоичной системе счисления с нулями в старших разрядах. Следующие фигуры должны соответствовать числам 12 и 13. 9. См. рис. 12.22. Рис. 12.22 Решение. См. ответ к заданию 12.1. 10. См. рис. 12.23. Ill II III II 7 12 Рис. 12.23 Решение. См. ответ к заданию 12.2. 11. См. рис. 12.24. 7 12 Рис. 12.24 Решение. См. ответ к заданию 12.3.
188 Глава 12. Старинные китайские символы 12. См. рис. 12.25. 17 43 Рис. 12.25 Решение. См. ответ к заданию 12.4. Двенадцатеричная система счисления В прошлом неоднократно предлагался переход на двенадцатерич- ную систему счисления. В XVII веке её сторонником был знаменитый французский естествоиспытатель Бюффон. Вольтер в «Истории Карла XII» утверждает, что этот монарх готовил указ о переходе на двенадцатерич- ную систему. Во времена Великой Французской революции была учреждена «Революционная комиссия по весам и мерам», которая длительный период рассматривала подобный проект, однако усилиями Лагранжа и других противников реформы дело удалось свернуть. В 1944 г. было организовано «Американское двенадцатеричное общество», а в 1959 г. — «Английское двенадцатеричное общество», объединившие активных сторонников такой системы счисления. Однако главным аргументом против перехода на двенадцатеричную систему всегда служили огромные затраты и неизбежная путаница при переходе.
Глава 13 Учебное домино и другие задания ► 13.1. Задания на использование двоичной системы счисления ► 13.1.1. Учебное домино по теме «Двоичные числа» Даны 10 костей домино1 (рис. 13.1), на каждой из которых на одной половине указано число, записанное в десятичной или в двоичной системах счисления (основание системы представлено в верхнем правом углу соответствующей половины). Необходимо расположить кости в одну линию так, чтобы на смежных частях костей находились числа, соответствующие одним и тем же значениям. 10 20 2 101011 10 47 2 11110 1 ) 10 2 10 2 17 100011 39 11001 t е 10 2 10 2 35 10100 25 101111 ю 13 100111 30 1001 43 1101 ю 10001 10 Рис. 13.1 ► 13.1.2. Числа-«близнецы» Условимся называть «близнецами» числа, записанные в разных системах счисления и обозначающие одно и то же количество. Например, «близнецами» являются десятичное число 5 и двоичное число 101. В представленной ниже таблице во второй и третьей колонках записаны числа в системе счисления, основание которой приведено в верхней части колонки. Необходимо указать пары порядковых номеров чисел- «близнецов». 1 Их можно изготовить, например, из картона. См. также задание 13.1.3 и 13.2.1.
190 Глава 13. Учебное домино и другие задания № п/п Основание системы счисления 10 2 1. 21 100111 2. 6 10010 3. 39 1110 4. 12 110 5. 27 1001 6. 18 11001 7. 9 10101 8. 36 11011 9. 14 100100 10. 25 1100 ► 13.1.3. Учебное домино по теме «Сложение и вычитание двоичных чисел» 0010 + 11 1001 1 11 + 11 110 6 1001 + 11 1010 11 101 + 11 1110 16 1000 11 11 21 1101 101 1010 1010 11 1100 2 1000 101 11 1001 11 1001 12 1001 10 11 17 110 + 11 1000 22 111 + 10 11 1110 11 11 3 101 11 101 8 110 11 11 13 1010 111 110 18 1110 1011 11 23 110 10 10 24 101 + 101 101 4 1100 11 1010 9 1010 + 11 1000 14 1101 11 1101 19 1100 1001 111 1001 111 101 5 111 + 11 10 10 1011 + 101 1001 15 1010 101 111 20 1101 1010 1011 25 26 27 28 Рис. 13.2
Глава 13. Учебное домино и другие задания 191 Даны 28 костей домино (рис. 13.2). На левой половине каждой кости записано действие над двоичными числами, на правой — двоичное число (каждое такое число есть результат вычислений на левой половине некоторой кости). Необходимо выложить кости в одну линию таким образом, чтобы на смежных частях костей находились действия и результаты этих действий. ► 13.2. Задания на использование других систем счисления ► 13.2.1. Учебное домино с числами в разных системах счисления Вариант 1 Даны 10 костей домино (рис. 13.3-13.5), на каждой из которых на одной половине указано число, записанное в некоторой системе счисления (основание системы представлено в верхнем правом углу соответствующей половины. Необходимо расположить кости в одну линию так, чтобы на смежных частях костей находились числа, соответствующие одним и тем же значениям. Задание 1 Задание 2 10 35 4 100 10 49 4 133 1 ) 10 4 10 4 20 203 38 13 с е 10 4 10 4 41 110 8 212 13 221 16 301 10 Рис. 13.3 10 48 8 23 10 14 8 26 1 I > 10 8 10 8 25 60 37 16 t е 10 8 10 8 29 47 43 36 31 19 35 31 112 22 10 30 10 22 54 10 Рис. 13.4
192 Глава 13. Учебное домино и другие задания Задание 3 10 16 10 16 14 31 37 29 12 19 49 1Е 10 30 16 1В 3 10 41 16 14 10 19 16 D 4 10 27 16 13 10 16 10 16 25 25 20 Е 10 Рис. 13.5 Вариант 2 Даны 15 костей домино (рис. 13.6), на каждой из которых на левой половине указано число, записанное в десятичной системе счисления, а на правой — в двоичной, четверичной, восьмеричной или шестнадцатеричной. Необходимо расположить все кости в одну линию так, чтобы на смежных частях костей находились числа, соответствующие одним и тем же значениям. 15 32 41 2F 17 1001 26 28 1 I > 5 1 \ 35 31 11 FF 30 33 21 44 С 6 г { 3 40 1010 9 131 36 11 49 23 ю 12 29 221 10 23 47 132 13 14 Рис. 13.6
Глава 13. Учебное домино и другие задания 193 ► 13.2.2. Числа-«близнецы» Условимся называть «близнецами» числа, записанные в разных системах счисления и обозначающие одно и то же количество. Например, «близнецами» являются десятичное число 5 и двоичное число 101. Задание 1 В представленных ниже таблицах во второй и третьей колонках записаны числа в системе счисления, основание которой приведено в верхней части колонки. Необходимо указать пары порядковых номеров чисел- «близнецов». Вариант 1 Вариант 2 № п/п Основание системы счисления 10 4 1. 20 21 2. 15 30 3. 33 213 4. 9 12 5. 28 201 6. 12 110 7. 30 103 8. 6 132 9. 19 33 10. 39 130 № п/п Основание системы счисления 10 2 1. 21 100111 2. 6 10010 3. 39 1110 4. 12 110 5. 27 1001 6. 18 11001 7. 9 10101 8. 36 11011 9. 14 100100 10. 25 1100 Вариант 3 Вариант 4 № п/п Основание системы счисления 10 8 1. 21 37 2. 37 31 3. 18 32 4. 9 40 5. 25 17 6. 32 22 7. 15 26 8. 26 15 9. 31 11 10. 22 45 № п/п Основание системы счисления 10 16 1. 26 18 2. 18 23 3. 38 1D 4. 30 14 5. 20 1А 6. 24 13 7. 39 1Е 8. 29 26 9. 19 12 10. 35 27
194 Глава 13. Учебное домино и другие задания Вариант 5 № п/п Основание системы счисления 2 4 1. 10011 223 2. 11011 211 3. 11110 32 4. 10010 112 5. 100101 132 6. 11000 232 7. 101011 103 8. 10110 120 9. 101110 123 10. 1110 102 Вариант 7 № п/п Основание системы счисления 2 16 1. 10001 15 2. 11110 18 3. 101001 1Е 4. 11011 2D 5. 10101 22 6. 100110 1В 7. 101100 27 8. 100010 11 9. 11000 26 10. 100111 29 Вариант 6 № п/п Основание системы счисления 2 8 1. 1110 43 2. 101011 46 3. 100011 11 4. 11011 54 5. 1001 33 6. 101001 21 7. 10100 53 8. 101100 16 9. 10001 24 10. 100110 51 Вариант 8 № п/п Основание системы счисления 4 8 1. 113 51 2. 213 33 3. 32 15 4. 123 27 5. 300 36 6. 111 16 7. 201 25 8. 31 60 9. 21 47 10. 132 41
Глава 13. Учебное домино и другие задания 195 Вариант 9 Вариант 10 № п/п Основание системы счисления 4 16 1. 211 1C 2. 111 2D 3. 301 20 4. 130 29 5. 221 25 6. 103 17 7. 200 31 8. 113 1В 9. 231 13 10. 123 15 № п/п Основание системы счисления 8 16 1. 27 31 2. 54 11 3. 36 17 4. 23 21 5. 61 27 6. 41 1F 7. 30 1Е 8. 47 18 9. 37 13 10. 21 2А Задание 2 В представленных ниже таблицах во второй, третьей и четвертой колонках записаны числа в системе счисления, основание которой приведено в верхней части колонки. Необходимо указать тройки порядковых номеров чисел-«близнецов». Вариант 1 Вариант 2 № п/п Основание системы счисления 10 2 4 1. 14 10011 221 2. 30 11011 32 3. 25 11110 21 4. 41 101111 233 5. 19 101001 121 6. 35 1100 123 7. 47 1110 203 8. 12 1001 30 9. 27 11001 103 10. 9 100011 132 № п/п Основание системы счисления 10 2 8 1. 21 101000 36 2. 37 101101 27 3. 15 11111 25 4. 40 100101 13 5. 30 10111 37 6. 45 11110 45 7. 19 1011 23 8. 11 10101 17 9. 31 10011 50 10. 23 1111 55
196 Глава 13. Учебное домино и другие задания Вариант 3 № п/п Основание системы счисления 10 2 16 1. 22 101000 1В 2. 35 10001 2D 3. 40 11110 16 4. 17 101111 1Е 5. 45 10110 2F 6. 30 100111 D 7. 13 11011 11 8. 27 100011 27 9. 39 1101 28 10. 47 101101 23 Вариант 5 № п/п Основание системы счисления 10 4 16 1. 49 211 1C 2. 37 111 2D 3. 21 301 20 4. 28 130 29 5. 45 221 25 6. 41 103 17 7. 19 200 31 8. 32 113 1В 9. 23 231 13 10. 27 123 15 Вариант 4 № п/п Основание системы счисления 10 4 8 1. 39 113 51 2. 30 213 33 3. 48 32 15 4. 14 123 27 5. 41 300 36 6. 33 111 16 7. 23 201 25 8. 13 31 60 9. 21 21 47 10. 27 132 41 Вариант 6 № п/п Основание системы счисления 10 8 16 1. 17 27 31 2. 30 54 И 3. 24 36 17 4. 49 23 21 5. 19 61 27 6. 33 41 1F 7. 23 30 1Е 8. 42 47 18 9. 39 37 13 10. 31 21 2А
Глава 13. Учебное домино и другие задания 197 Вариант 7 Вариант 8 № п/п Основание системы счисления 2 4 8 1. 100001 222 61 2. 11001 33 31 3. 1100 201 34 4. 101010 111 17 5. 10011 103 52 6. 100111 301 25 7. 1111 30 41 8. 110001 130 47 9. 11100 213 14 10. 10101 121 23 № п/п Основание системы счисления 2 4 16 1. 10101 123 29 2. 100011 121 23 3. 101110 203 19 4. 10011 301 13 5. 11011 212 15 6. 100110 232 26 7. 1101 221 D 8. 11001 111 2Е 9. 101001 31 31 10. 110001 103 1В Вариант 9 Вариант 10 № п/п Основание системы счисления 2 8 16 1. 1110 43 9 2. 101011 46 18 3. 100011 11 23 4. 11011 54 1Е 5. 1001 33 11 6. 101001 21 26 7. 10100 53 1В 8. 101100 16 2С 9. 10001 24 29 10. 100110 51 2В № п/п Основание системы счисления 4 8 16 1. 113 51 1В 2. 213 33 15 3. 32 15 17 4. 123 27 D 5. 300 36 30 6. 111 16 21 7. 201 25 29 8. 31 60 Е 9. 21 47 1Е 10. 132 41 27 Задание 3 В представленных ниже таблицах во второй, третьей, четвертой и пятой колонках записаны числа в системе счисления, основание которой приведено в верхней части колонки. Необходимо указать четверки порядковых номеров чисел-«близнецов».
198 Глава 13. Учебное домино и другие задания Вариант 1 Вариант 2 № Основание системы п/п счисления 10 2 4 8 1. 21 100001 222 61 2. 33 11001 33 31 3. 42 1100 201 34 4. 25 101010 111 17 5. 12 10011 103 52 6. 19 100111 301 25 7. 28 1111 30 41 8. 39 110001 130 47 9. 15 11100 213 14 10. 49 10101 121 23 № Основание системы п/п счисления 10 2 4 16 1. 49 10101 123 29 2. 21 100011 121 23 3. 35 101110 203 19 4. 46 10011 301 13 5. 13 11011 212 15 6. 27 100110 232 26 7. 38 1101 221 D 8. 19 11001 111 2Е 9. 25 101001 31 31 10. 41 110001 103 1В Вариант 3 Вариант 4 № Основание системы п/п счисления 10 2 8 16 1. 17 1110 43 9 2. 35 101011 46 18 3. 27 100011 11 23 4. 44 11011 54 1Е 5. 14 1001 33 11 6. 38 101001 21 26 7. 9 10100 53 1В 8. 43 101100 16 2С 9. 24 10001 24 29 10. 41 100110 51 2В № Основание системы п/п счисления 10 4 8 16 1. 39 113 51 1В 2. 30 213 33 15 3. 23 32 15 17 4. 14 123 27 D 5. 27 300 36 30 6. 48 111 16 21 7. 21 201 25 29 8. 33 31 60 Е 9. 13 21 47 1Е 10. 41 132 41 27
Ответы к главе 13 199 Вариант 5 № п/п Основание системы счисления 2 4 8 16 1. 100001 222 61 2А 2. 11001 33 31 31 3. 1100 201 34 19 4. 101010 111 17 1C 5. 10011 103 52 F 6. 100111 301 25 12 7. 1111 30 41 13 8. 110001 130 47 15 9. 11100 213 14 21 10. 10101 121 23 47 Задание 4 В представленной таблице со второй по шестую колонки записаны числа в системе счисления, основание которой приведено в верхней части колонки. Необходимо указать группы из пяти порядковых номеров чисел- «близнецов». № Основание системы счисления п/п 10 2 4 8 16 1. 21 100001 222 61 19 2. 33 11001 33 31 1C 3. 42 1100 201 34 21 4. 25 101010 111 17 31 5. 12 10011 103 52 27 6. 19 100111 301 25 С 7. 28 1111 30 41 15 8. 39 110001 130 47 F 9. 15 11100 213 14 13 10. 49 10101 121 23 2А Ответы к главе 13 13.1.1. Кости должны быть выложены в следующей последовательности (указаны номера костей, приведенные под ними): 5 — 9 — 1 — 7 — 3 — 6—10 — 2 — 4 — 8.
200 Глава 13. Учебное домино и другие задания 13.1.2. 1 — 7, 2 — 4, 3 — 1, 4 — 10, 5 — 8, 6 — 2, 7 — 5, 8 — 9, 9 — 3, 10 — 6. 13.1.3. На рис. 13.7 приведены данные для проверки правильности решения. 10 101 + 11 110 110 1000 + 1001 + 10 11 101 1000 + 11 11 110 + 11 111 1010 + 11 1101 1110 1100 + 1101 + 11 11 111 1001 + 10 110 1000 + 10 101 10 - 11 1011 1110 + 11 110 11 - 11 1000 11 - 101 1000 101 - 11 1001 110 - 11 1011 111 - 11 1001 111 - 10 1001 10 - 111 1001 11 - 110 1100 1001 - 11 1011 11 - 111 1010 101 - 101 1100 11 - 1001 1101 1010 - 11 1101 11 - 1010 1110 11 - 1011 Рис. 13.7 1110 1011 - 11 Примечание. На левой половине каждой кости домино приведены результаты вычислений на правой половине той же кости. 13.2.1 Вариант 1 Задание 1 Кости должны быть выложены в следующей последовательности (здесь и далее указаны номера костей, приведенные под ними): 3 — 9 — 5 — 1— 7 — 2 — 4 — 8—10 — 6. Задание 2 Кости должны быть выложены в следующей последовательности: 6 — 2 — 8—10 — 4 — 3— 5 — 1— 7 — 9.
Ответы к главе 13 201 Задание 3 Кости должны быть выложены в следующей последовательности 5 — 9 — 2 — 7—10—1—6 — 3 — 8 — 4. Вариант 2 Кости должны быть выложены в следующей последовательности: 8—11—3 — 10—13—2—15 — 7—1—4 — 9—14 — 5—12 — 6. Объяснение решения приведено на рис. 13.8. 10 8 21 со со 8 10 4 29 221 41 13 10 8 15 32 26 1 10 16 35 31 49 10 16 36 11 17 11 10 16 41 2F 47 2 10 16 26 28 40 4 10 4 49 23 11 10 4 9 131 29 10 10 4 30 33 15 7 10 16 10 23 35 10 2 17 1001 9 3 10 4 47 132 30 15 10 2 40 1010 10 9 10 16 11 FF 255 5 12 6 Рис. 13.8 Примечание. В нижней части правой половины костей домино указано десятичное число, соответствующее числу на кости, в верхней части — основание системы счисления, в которой представлено это число. 13.2.2 Задание 1 Вариант 1 1 — 7, 2 — 4, 3 — 1, 4 — 10, 5 — 8, 6 — 2, 7 — 5, 8 — 9, 9 — 3, 10 — 6. Примечание. В ответах к вариантам 1-4 первым указан номер числа, записанного в десятичной системе счисления. Вариант 2 1 — 6, 2 — 9, 3 — 5, 4 — 1, 5 — 10, 6 — 2, 7 — 8, 8 — 4, 9 — 7, 10 — 3. Вариант 3 1—8,2—10,3 — 6,4 — 9,5—2,6 — 4,7 — 5,8 — 3,9—1, 10 — 7.
202 Глава 13. Учебное домино и другие задания Вариант 4 1 — 5, 2 — 9, 3 — 8, 4 — 7, 5 — 5, 6 — 1, 7 — 10, 8 — 3, 9 — 6, 10 — 2. Вариант 5 1 — 7 (19), 2 — 9 (27), 3 — 5 (30), 4 — 10 (18), 5 — 2 (37), 6 — 8 (24), 7 — 1 (43), 8 — 4 (22), 9 — 6 (46), 10 — 3 (14). Примечание. В ответах к вариантам 6-10 первым указан номер числа, записанного в системе счисления, основание которой записано во второй колонке таблицы, а в скобках — соответствующее число в десятичной системе. Вариант 6 1 — 8 (14), 2 — 7 (43), 3 — 1 (35), 4 — 5 (27), 5 — 3 (9), 6— 10 (41), 7 — 9 (24), 8 — 4 (44), 9 — 6 (17), 10 — 2 (38). Вариант 7 1 — 8 (17), 2 — 3 (30), 3 — 10 (41), 4 — 6 (27), 5 — 1 (21), 6 — 9 (38), 7_4 (45), 8 — 5 (34), 9 — 2 (24), 10 — 7 (39). Вариант 8 1 — 4 (23), 2 — 9 (39), 3 — 6 (14), 4 — 2 (27), 5 — 8 (48), 6 — 7 (21), 7— 10 (33), 8 — 3 (13), 9 — 1 (41), 10 — 5 (30). Вариант 9 1 — 5 (37), 2— 10 (21), 3 — 7 (49), 4 — 1 (28), 5—4 (41), 6 — 9 (19), 7 — 3 (32), 8 — 6 (23), 9 — 2 (45), 10 — 8 (27). Вариант 10 1 — 3 (23), 2— 10 (42), 3 — 7 (30), 4 — 9 (19), 5 — 1 (49), 6 — 4 (33), 7 — 8 (24), 8 — 5 (39), 9 — 6 (31), 10 — 2 (17). Задание 2 Вариант 1 1 — 7 — 2, 2 — 3 — 10, 3 — 9 — 5, 4 — 5 — 1,5 — 1 — 9, 6 — 10 — 7, 7 — 4 — 4, 8 — 6 — 8, 9 — 2 — 6, 10 — 8 — 3. Примечание. В ответах к вариантам 1-7 первым указан номер числа, записанного во второй колонке таблицы, вторым — в третьей колонке, третьим — в четвертой колонке. Вариант 2 1 — 8 — 3, 2 — 4 — 6, 3 — 10 — 8, 4 — 1 — 9, 5 — 6 — 1,6 — 2 — 10, 7 — 9 — 7, 8 — 7 — 4, 9 — 3 — 5, 10 — 5 — 2. Вариант 3 1 — 5 — 3, 2 — 8 — 10, 3 — 5 — 9, 4 — 2 — 7, 5 — 10 — 2, 6 — 3 — 4, 7 — 9 — 6, 8 — 7 — 1,9 — 6 — 8, 10 — 4 — 5.
Ответы к главе 13 203 Вариант 4 1—2 — 9, 2 — 10 — 5, 3 — 5 — 8, 4 — 3 — 6, 5 — 9 — 1,6 — 7 — 10,7—1—4,8 —8 — 3, 10 —4 —2,9 —6 —7. Вариант 5 1—3 — 7, 2—1 — 5, 3—2 — 10,4 — 4 — 1,5 — 9 — 2, 6 — 5 — 4, 7 — 6 — 9, 8 — 7 — 3, 9 — 8 — 6, 10 — 10 — 8. Вариант 6 1 — 10 — 2,2 — 3 — 7,3—7 — 8,4 — 5 — 1,5—4 — 9,6 — 6 — 4, 7 — 1 —3, 8 —2 — 10,9 —8 —5, 10 —9 —6. Вариант 7 1 —3 — 7 (33), 2— 10 — 2 (25), 3 — 7 — 9 (12), 4— 1 —5 (42), 5 — 5 — 10 (19), 6 — 9 — 8 (39), 7 — 2 — 4 (15), 8 — 6— 1 (49), 9 — 8 — 3 (28), 10 — 4 — 6(21). Примечание. В ответах к вариантам 8—10 первым указан номер числа, записанного во второй колонке таблицы, вторым — в третьей колонке, третьим — в четвертой колонке, а в скобках — соответствующее число в десятичной системе. Вариант 8 1 — 8 — 5 (21), 2 — 4 — 2 (35), 3—6 — 8 (46), 4— 10 — 4 (19), 5 — 1 — 10 (27), 6 — 5 — 6 (38), 7— 10 — 7 (13), 8 —2 — 3 (25), 9 — 7 —1 (41), 10 — 4 — 9(49). Вариант 9 1 —8 — 4 (14), 2 — 7— 10 (43), 3— 1 —3 (35), 4 — 5 — 7 (27), 5 — 3 — 1 (9), 6 — 10 — 9 (41), 7 — 9 — 2 (24), 8 — 4 — 8 (44), 9 — 6 — 5 (17), 10 — 2 — 6(38). Вариант 10 1 —4 — 3 (23), 2 — 9— 10 (39), 3 — 6 — 8 (14), 4 — 2— 1 (27), 5 — 8 — 5 (48), 6 — 7 — 2 (21), 7 — 10 — 6 (33), 8 — 3 — 5 (13), 9— 1 — 7 (41), 10 — 5 — 9(30). Задание 3 Вариант 1 1 — 10 — 4 — 6, 2 — 1 — 3 — 7, 3 — 4 — 1 — 5,4 — 2 — 10 — 2, 5 — 3 — 7 — 9, 6 — 5 — 5 — 10, 7-— 9 — 8 — 3, 8 — 6 — 9 — 8, 9-— 7 — 2 — 4, 10 — 8 — 6—1. Примечание. В ответах к вариантам 1—4 первым указан номер числа, записанного во второй колонке таблицы, вторым — в третьей колонке, третьим — в четвертой колонке, четвертым — в пятой колонке. В ответе к
204 Глава 13. Учебное домино и другие задания варианту 5 в скобках записано соответствующее число в десятичной системе счисления. Вариант 2 1 — 10 — 4 — 9, 2—1—8 — 5, 3—2 — 4 — 2, 4 — 3 — 6 — 8, 5 — 7 — 10 — 7, 6 — 5 — 1 — 10, 7 — 6 — 5 — 6, 8 — 4 — 10 — 4, 9 — 8 — 2 — 3, 10 — 9 — 7—1. Вариант 3 1 —9 — 6 — 5, 2 — 3 — 1 — 3,3 — 4 — 5 — 7, 4 — 8 — 4 — 8, 5 — 1 — 8 — 4, 6 — 10 — 2 — 6, 7 — 5 — 3 — 1,8 — 2 — 7 — 10, 9 — 7 — 9 — 2, 10 — 6—10 — 9. Вариант 4 1—2 — 9 — 10, 2 — 10 — 5 — 9, 3 — 1—4 — 3, 4 — 3—6 — 8, 5—4 — 2 — 1,6 — 5 — 8 — 5, 7 — 6 — 7 — 2, 8 — 7 — 10 — 6, 9 — 8 — 3 — 5, 10 —9 — 1 —7. Вариант 5 1 — 3 — 7 — 9 (33), 2 — 10 — 2 — 3 (25), 3 — 7 — 9 — 6 (12), 4 — 1 —5 — 1 (42), 5 — 5 — 10 — 7 (19), 6 — 9 — 8— 10 (39), 7 — 2 — 4 — 5 (15), 8 — 6 — 1 — 2 (49), 9 — 8 — 3 — 4 (28), 10 — 4 — 6 — 8 (21). Задание 4 1 — 10 — 4 — 6 — 7, 2 — 1 — 3 — 7 — 3,3 — 4 — 1 — 5 — 10, 4 — 2 — 10 — 2 — 1,5 — 3 — 7 — 9 — 6, 6 — 5 — 5 — 10 — 9, 7 — 9 — 8 — 3 — 2, 8 — 6 — 9 — 8 — 5, 9 — 7 — 2 — 4 — 8, 10 — 8 — 6 — 1 — 4. Примечание. Первым указан номер числа, записанного во второй колонке таблицы, вторым — в третьей колонке, третьим — в четвертой колонке, четвертым — в пятой колонке, пятым в шестой колонке. И здесь двоичная система По состоянию на июнь 2012 года рекорд по вычислению значения числа пи принадлежал сотруднику корпорации Yahoo Николасу Зе (Nicholas Sze) — он установил значение двухквадриллионного знака числа пи в двоичной системе счисления. Для вычислений Зе понадобилось 23 дня и 1000 компьютеров. Расчет инженер вел с помощью системы распределенных вычислений Hadoop, в разработке которой принимала участие Yahoo. Для ускорения подсчетов он воспользовался технологией MapReduce. Она позволяет дробить сложные вычислительные задачи на несколько более простых и решать их параллельно. Так что значение числа пи в двоичной системе — «более точное» (©), чем в десятичной. Рекордсменами по вычислению в последней являются американец Александр Йи и японец Шигеру Кондо. Ими проведен расчет с точностью до 10 триллионов знаков после запятой. Кстати, сначала расчет ими велся в двоичной системе, а потом число переводилось в десятичную.
Глава 14 Числовые ребусы и кросснамбер Наверняка вашим ученикам приходилось решать числовые ребусы, в которых некоторые (или все) цифры чисел были зашифрованы буквами или звездочками. Предложите им сделать то же самое, но не с десятичными числами, а с числами, записанными в других системах счисления. Как принято в таких головоломках, одинаковые цифры представлены одинаковыми буквами, различные — разными (в разных ребусах одна и та же буква может иметь разные значения). Звездочкой может быть любая цифра. Пусть решат также так называемый «кросснамбер» — головоломку, похожую на кроссворд, в которой вместо слов нужно записать числа (в двоичной системе счисления). ► 14.1. Ребусы со звездочками В приведенных ребусах зашифрованы числа, записанные в двоичной системе счисления. Необходимо вместо звездочек записать соответствующие цифры этой системы. 1) + * 4) * * * * * * * * 1 * 2) + * 5) * 1 * * * * * * * * * * * 3) + * 1 6) + * * * * * * о * * * 1 *
206 Глава 14. Числовые ребусы и кросснамбер 7) + * о * * * 1 * * i сП" 8) + * 0 * * о * * * ] 5 9) + * * 1 * 1 * * о * * 10) + * 1 * * * * “ о * о“ 11) + * 1 * * * * * * * * о 12) + * * * * * о * * * 1 * * 13) * * * * 14) _ * * * * * 15) _ * 1 * * 1 * * 16) * * * * * * 1 17) * * * * * * * 1 18) * * * * 1 * * * 19) * * 1 0 * 0 * * * 1 20) * * 1 0 * * 1 * 0 * 21) * * 1 * * * * * * 22) * * 1 * * * * * * 23) * * 1 * * 0 * * 0 * 24) * 0 * * * 1 * * о *
Глава 14. Числовые ребусы и кросснамбер 207 25) * 0 * * 0 * * 28) * * * * * * 0 * * 1 * * 1 * 26) * 0 * 0 29) * * * 0 * * * * 1 * * 1 * * * * * 27) * 0 * 0 30) * * 1 * * 1 * * * 0 * * * * * © Сын спрашивает отца: «Сколько будет 1 + 1?». — Два. — Неправильно —10. — Хорошо, согласен. Завтра куплю одну шоколадку и еще одну. Одну съем я, другую — мама, а остальные — ты. ► 14.2. Числовые ребусы в троичной системе Здесь зашифрованы цифры троичной системы счисления. 1) 4) 7) * I * [ м + * * * N N * м м * * 2) 5) 8) + А * _1_ * * I * * 0 * * А * * в * 0 3) 6) 9) А + А * 1 , в А * * + * + А * В В
208 Глава 14. Числовые ребусы и кросснамбер 10) 15) 20) * С А А В "Г • * * * * г А В D Е А * * * 0 * 11) 16) 21) В * А В "Г А * * * А в А А D * D * * в 12) 17) 22) * Z 4_ А В 4_ А А Z Z А В А А * * * * 0 * * * 13) 18) 23) I * * I А 1 _L В * D А 1 А А D D * * * * * * 14) 19) i * А В * А А в А * * * * Программист про двоичную систему счисления: «Да! В нашем алфавите 10 символов! И тут одно из 10 — либо вы его знаете, либо нет!» ► 14.3. Ребусы в четверичной системе счисления 1) А А 3) с 2 5) с 2 ED DD 2) N N 4) 3 S 6) X X МО рр Y2
Глава 14. Числовые ребусы и кросснамбер 209 7> + 3 12) + вв 17) , xw в М W BE D0 vv 8) + А 13) + ss 18) MN 3 р + N ВС PQ MM 9) + ** 14) мм 19) SK X N К XZ NSS KS 10) + ЕЕ 15) + кк 20) + AB Е L A DF MNM DC 11) + АА 16) QP А Q BCD QQ ► 14.4. Ребусы в пятеричной системе счисления Обратим внимание на то, что некоторые ребусы имеют два решения. 1) 4) 7) + A ABC F F + A * + E В С * * К * К 2) 5) 8) Z Z D D , A A X + С + в B X * * * CCD 3) 6) 9) с с P p Z Z + с + R + X X в с R 0 Y Z Y
210 Глава 14. Числовые ребусы и кросснамбер 10) 14) 18) 4- А А _i_ F F 4. Y Y \ В В г F Е \ X Y с В D * 0 Z Z Z 11) 15) 19) S S _i_ Y Y 4_ А А 1 S S У X г В А т * т А Z Z с В D 12) 16) 20) _1_ N N А А _1_ Е Е 1 N N А С 1 F Е К * Т В * В * F F 13) 17) -L А А Р р I А С г R р С * * R ► 14.5. Числовые ребусы в шестеричной системе счисления Здесь некоторые ребусы имеют несколько решений. 1) А + А = *0 2) С + С = *2 3) X + X = *4 4) А + А + А = ВА 5) N + N + N = *0 6) X + X + X = YZ, Z ф 0 7) АА + АА + АА = ВВС 8) XX + XX + XX = PQR 9) NN + NN + NN = MNQ 10) АВ + АВ = ВС 11) MN + MN = РМ 12) XY + YZ = QX 13) ВА + СВ = AD 14) KL + LB = DK 15) MN + MN = *СС 16) АВ + АВ = *ВА 17) YX + YX = *XZ 18)3 х ZZ = YXZ 19)3 х РР = RPQ 20) 3 х ВВ = ААС ► 14.6. Еще один ребус в шестеричной системе Решите числовой ребус в шестеричной системе счисления: ММУУ = УУ х УУ. Указания по выполнению. Составьте таблицу умножения в шестеричной системе счисления и проанализируйте ее. ► 14.7. Чему равен РАДИУС? Определите, чему равно число РАДИУС в девятеричной системе счисления:
Глава 14. Числовые ребусы и кросснамбер 211 РАДИУС + Р А Д И У С ДИАМЕТР ► 14.8. Числовые ребусы в двенадцатеричной системе счисления В приведенных четырех ребусах зашифрованы числа в двенадцатеричной системе счисления. Ребус № 1 ИГРЕК ТРИ ТРИ ТРИ С К Е С Т Е ГЕК ГЕК О Ребус № 2 ЧЕТЫ Ч Р А 3 ААР ЗЕТ Ы 3 Б Е Ы 3 Б Е Ребус № 3 * * и к ИКС ПИЯВКА * * Vf ТРИ пять ДВА * * * * * * * * к о Г
212 Глава 14. Числовые ребусы и кросснамбер Ребус № 4 ТЫС Я Ч А I И К С ЛЮКС ИКС т л т ч Т Я И А Ю Р Ч А Ю Р Ч А О Приведем таблицы умножения и сложения в двенадцатеричной системе счисления (см. рис. 14.1 и 14.2.). Дополнительные цифры (10ю и 1110) обозначены соответственно А и В. 1 2 3 4 5 6 7 8 9 А В 1 1 2 3 4 5 6 7 8 9 А В 2 2 4 6 8 А 10 12 14 16 18 1А 3 3 6 9 10 13 16 19 20 23 26 29 4 4 8 10 14 18 20 24 28 30 34 38 5 5 А 13 18 21 26 2В 34 39 42 47 6 6 10 16 20 26 30 36 40 46 50 56 7 7 12 19 24 2В 36 41 48 53 5А 65 8 8 14 20 28 34 40 48 54 60 68 74 9 9 16 23 30 39 46 53 60 69 76 83 А А 18 26 34 42 50 5А 68 76 84 92 В В 1А 29 38 47 56 65 74 83 92 А1 Рис. 14.1 1 2 3 4 5 6 7 8 9 А В 1 2 3 4 5 6 7 8 9 А В 10 2 3 4 5 6 7 8 9 А В 10 11 3 4 5 6 7 8 9 А В 10 11 12 4 5 6 7 8 9 А В 10 И 12 13 5 6 7 8 9 А В 10 И 12 13 14 6 7 8 9 А В 10 11 12 13 14 15 7 8 9 А В 10 11 12 13 14 15 16 8 9 А В 10 11 12 13 14 15 16 17 9 А В 10 11 12 13 14 15 16 17 18 А В 10 11 12 13 14 15 16 17 18 19 В 10 11 12 13 14 15 16 17 18 19 1А Рис. 14.2
Глава 14. Числовые ребусы и кросснамбер 213 ► 14.9. ЧИСЛОВОЙ РЕБУС В СИСТЕМЕ СЧИСЛЕНИЯ С НЕИЗВЕСТНЫМ ОСНОВАНИЕМ При каком основании системы счисления имеет решение и какое числовой ребус: КИТО КИОТО ТОКИО ► 14.10. Числовой РЕБУС С НЕИЗВЕСТНЫМ числом Рассмотрим числовой ребус: А В с D D С в А X X X X 2 3 0 0 В нем А, В, С, D — четыре последовательные десятичные цифры, идущие в порядке возрастания. Четыре буквы X — это те же самые четыре цифры в неизвестном порядке. Какое число обозначено четырьмя буквами X? Каково все решение ребуса? Строго говоря, данная задача, так сказать, «не по теме» — в книге нас интересуют недесятичные системы счисления. Но ее анализ поможет нам решить следующую задачу. Так как в крайнем левом разряде сумма цифр, D, А и В (с учетом возможного переноса из соседнего разряда) равна 12, то можем утверждать, что в крайнем правом разряде соответствующая сумма равна 10 (и не может быть равна 20). Исследуем варианты значения цифры X, учитывая, что D = A + 3, D = B + 2, D = C+1. 1. X = А Сумма Б + А + А = ЗА + Зне может быть равна 10, значит, этот вариант невозможен. 2. X = В В этом случае D + A + B = 3A + 4 Имеем ЗА + 4 = 10, тогда А = 2, а X в последнем разряде — 3. Записав найденные цифры в ребус: 2 3 4 5 + 5 4 3 2 X X X 3 1 2 3 0 0
214 Глава 14. Числовые ребусы и кросснамбер получим решение: 2 3 4 5 + 5 4 3 2 4 5 2 3 1 2 3 0 0 3.Х = С В этом варианте D + A + C = 3A + 5 Случай, когда сумма ЗА + 5 равна 10, невозможен. 4. X = D Сумма D + A + D = 3A + 6He может быть равна ни 10. Итак, ребус имеет одно решение: 2 3 4 5 + 5 4 3 2 4 5 2 3 1 2 3 0 0 ► 14.11. ЧИСЛОВОЙ РЕБУС С НЕИЗВЕСТНЫМ ЧИСЛОМ И НЕИЗВЕСТНОЙ СИСТЕМОЙ СЧИСЛЕНИЯ А теперь предлагаем решить предыдущую задачу для случая, когда система счисления, в которой записаны числа, неизвестна. Иными словами, нужно ответить на вопрос, имеются ли другие (кроме десятичной) системы, в которых ребус имеет решение? ► 14.12. Кросснамбер «Двоичная система счисления» 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Ответы к главе 14 215 По горизонтали: 1. 101101101012 = ? 10* 3. «Чертова дюжина» в двоичной системе счисления. 6. 9110= ?2* 7. 1112 + 1012= ?2- 9. 1100102: 1012 = ?2. 11. Количество байт в сумме 1/4 Кб + 1/8 Кб + 2 байта, выраженное в двоичной системе счисления. 14. Десятичное число, которое при игре в лото называют «барабанные палочки», записанное в двоичной системе счисления. 16. 30ю: Ю2 = ?2. 18. Этому двоичному числу соответствует десятичное число, которое читается одинаково и в «нормальном» виде, и «вверх тормашками». 19. 11111010012= ?10. 20. 100010011002=?ш. По вертикачи: 1. 2110= ?2. 2. 10012 • 2ю= ?2. 3. 111002- 1112 = ?2. 4. Полтора пуда в двоичной системе счисления. 5. 16171(>= ?2. 8. 1000012: 11012= ?2. 10. Век в десятичной системе счисления. 12. Высшая школьная оценка в ...-й системе счисления. 13. Максимальное трехзначное двоичное число. 14. 1112: 112 = ?2. 15. (52)ю= ?2- 16. 11102+ 1 1012 == ?2. 17.18,0 = 72- Ответы к главе 14 14.1 1) + 1 1 ~ о- 3) 2) 4)
216 Глава 14. Числовые ребусы и кросснамбер 5) + 1 1 14) 1 0 0 1 0 0 1 1 1 1 1 1 6) + 1 1 15) 1 1 1 1 1 1 1 1 1 1 0 1 1 7) + 1 0 1 16) 1 1 1 0 1 1 1 0 1 0 1 1 8) + 1 0 1 17) 1 1 1 1 0 1 1 1 0 1 0 1 1 9) + 1 0 1 18) 1 1 1 1 1 о 1 1 1 0 1 1 1 0 0 10) + 1 1 0 19) 1 0 1 0 1 0 0 1 0 1 1 0 1 0 1 0 1 11) + 1 1 0 20) 1 0 1 1 0 0 0 1 0 1 1 1 1 0 1 0 1 12) + 1 1 1 21) 1 0 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 13) _ 1 1 22) 1 0 1 0 1 0 1 1 1 1 1 1
Ответы к главе 14 217 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0 0 1 0 27) 28) 29) 30) 1 1 0 1 0 0 1 1 1 0 1 0 0 1 1 0 1 1 1 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 10 2 2 То" з 2 ТГ 5) 6) 7) 8) 11 з 3 12 3 1 То“ з з ~ 9) 10) 11) 12) 11 1 12 22 + 2 30 33 + 3 102 11 + 3 20
218 Глава 14. Числовые ребусы и кросснамбер 13) 22 3 “зГ 16) 10 1 ТГ 19) 23 3 "32~ 14 33 1 100 17) 13 3 1Г 20) 13 1 IcT 15) 33 2 101 18) 21 1 ~22~ 14.3 1) 6) 11) , 1 + 2 I 1 + 1 + 2 2 1 2 1 1 2 2 2) 7) 12) , 1 , 2 _1_ 1 1 + 2 + 1 1 1 1 1 0 2 0 2 2 3) 8) 13) , 2 + 1 0 I 1 0 + 2 + 1 0 1 2 1 1 2 0 2 2 4) 9) 14) 1 , 1 I 2 + 1 0 2 0 2 1 1 1 2 1 1 0 0 5) 10) 15) 2 + 1 0 I 1 + 1 0 + 1 1 2 2 1 2 2 1 1 0 0
Ответы к главе 14 219 16) 19) 22) 2 1 1 0 _1_ 2 2 + 2 2 1 0 2 2 1 0 1 2 0 1 2 1 17) 20) 23) , 2 0 1 1 2 1 + 2 0 1 2 2 2 1 1 0 1 0 1 1 0 0 18) 21) + 2 1 | 2 0 + 2 1 2 0 1 1 2 1 0 0 14.4 1) 6) 10) i 4 _1_ 2 2 4_ 4 4 4 3 i 3 3 1 3 3 0 1 3 2 2) 7) 11) 1 1 + 4 4 _i_ 3 3 3 2 3 3 3 1 0 1 1 2 1 3) 8) 12) . 3 3 + 2 2 4 4 3 3 3 4 4 4 1 1 1 0 1 4 3 4) и 13) 1 0 3 + 3 3 1 1 4 2 2 + 1 2 4 4 1 1 0 2 3 5) 9) 14) , 4 4 2 2 I 1 1 4 1 4 4 “Г 1 4 1 0 3 1 2 1 3 0
220 Глава 14. Числовые ребусы и кросснамбер 15) 16) 2 2 2 3 1 0 0 3 3 3 4 1 2 2 2 2 2 4 1 0 1 17) 18) 19) 1 1 2 1 3 2 + 3 3 2 3 1 1 1 + 4 4 2 4 1 2 3 20) 4 4 3 4 1 3 3 14.5 1)3 + 3 = 10. 2)4+4= 12. 3)5 + 5 = 14. 4)3 + 3 + 3 = 13. 5) 1)2 + 2 + 2 = 10; 2) 4 + 4 + 4 = 20. 6)5 + 5 + 5=23. 7) 33 + 33 + 33 = 110. 8) 44 + 44 + 44= 132. 9) 55 + 55 + 55 = 154 10) 1) 12+ 12 = 24; 2) 13+13 = 30. 11)21 +21 =42. 12) 1)31 + 12 = 43; 2) 32 + 21 = 53; 3)41 + 13 = 54. 13) 1) 13 +21 =34; 2) 14 + 31 =45; 3) 15 + 31 =50. 14) 1)31 + 12 = 43; 2) 32 + 21 = 53; 3)41 + 13 = 54. 15) 1)41+41 = 122; 2) 52 + 52 = 144. 16) 42 + 42= 124. 17)43 +43 = 130. 18)3 '33 = 143. 19) 3-55 =253. 20) 1)3-22 = 110; 2) 3 • 44 = 220.
Ответы к главе 14 221 14.6. Составим таблицу умножения в шестеричной системе счисления: 1 2 3 4 5 1 1 2 3 4 5 2 2 4 10 12 14 3 3 10 13 20 23 4 4 12 20 24 32 5 5 14 23 32 41 Из нее видно, что только в одном случае квадрат числа-цифры оканчивается на такую же цифру, что и само число т. е. У = 4. Выполнив умножение 446 • 446, получим, что число ММУУ равно 33446. Итак, 446 • 446 = 33446. 14.7. Прежде всего, видно, что Д = 1, А = 0: Р 0 1 И У С + Р 0 1 И У С 1 И 0 М Е Т Р Каким может быть Р? Так как при сложении Р и Р получается сумма, большая 8, значит Р > 4. Возможные варианты значения Р проанализированы в таблице: № пп Р При таком P: С равно (из анализа крайнего правого разряда) И равно (из анализа разряда, в котором есть сложение Р + Р) 1 5 7 1 2 6 3 3 3 7 8 5 4 8 4 7 Видно, что варианты 1 и 2 невозможны. Исследуем оставшиеся два варианта с учетом: 1) того, что в обоих случаях М = 3; 2) возможного значения Е: № пп P С И М Е При этом У может быть равно Тогда Т равно Возможен ли вариант? 1 7 8 5 3 2(Е*1) 4 0 Нет, т. к. А = 0 2 6 4 Да 3 8 4 7 3 5 2 4 Нет, т. к. С = 4 4 6 3 Нет, т. к. М = 3 5 6 2 4 Нет, т. к. С = 4 6 5 1 Нет, т. к. Д = 1
222 Глава 14. Числовые ребусы и кросснамбер Итак, число РАДИУС равно 7015689, а ДИАМЕТР — 15032479. 14.8 Ребус № 1 1. Видно, что первая цифра частного (Т) равна 1, а цифра, соответствующая букве Е, — 0. 2. Так как И - Т = 1, то И = 2. 3. Поскольку ТРИ х ТРИ = ИГРЕК, то с учетом того, что И = 2, имеем К = 4. 4. Так как К - Т = Г, то Г = 3. 5. Записав все известные цифры в ребус: 2 3 р ° 4 | 1 Р 2 ~ 1 Р 2 1 Р 2 С 4 0 С 1 0 3 0 4 3 0 4 0 можно определить, что Р = 6 (см. таблицу умножения в двенадцатеричной системе счисления, приведенную в условии), а С = 9. Ребус № 2 1. Видно, что Е = 1 (ЗЕТ х Е = ЗЕТ). 2. Тогда из первого вычитания следует, что Р = 0. 3. Так как произведение Т х Т оканчивается на цифру 1 (цифру Е), то имеем: Т = 5, или Т = 7, или Т = В (см. таблицу умножения в двенадцатеричной системе счисления, приведенную в условии). 4. Для каждого из трех возможных значений Т, полученных в предыдущем пункте, можно найти соответствующее значение буквы Б. Для этого рассчитаем произведение ЕТ х Т: т 5 7 В ЕТ 1 5 X 5 1 7 X 7 1 в X в 7 1 В 1 1 9 1 Б 7 В 9 5. Так как Б + Т = 10 (это следует из второго вычитания), то из трех вариантов единственно возможным является: Т = 5, Б = 7 (см. таблицу сложения в двенадцатеричной системе счисления).
Ответы к главе 14 223 6. Подставим известные цифры: Ч 1 5 Ы 0 1 1 3 1 5 Ч 0 А 3 3 1 5 А А 0 3 1 5 Ы 3 7 1 ы 3 7 1 0 Видно, что А = 8. 8. Тогда из второго вычитания: 8 8 0 3 1 5 ы 3 7 следует: 3 = 6, Ы = 2. 9. Все числа выглядят так: 3 1 5 2 0 1 1 6 1 5 3 0 8 6 6 1 5 8 8 0 6 1 5 2 6 7 1 2 6 7 1 О Ребус № 3 1. Видно, что П = 1, а Я = 0. 2. Из таблицы умножения в двенадцатеричной системе счисления, приведенной в условии, следует, что есть только две цифры, квадрат которых — однозначное число. Поэтому И = 2 или И = 3 (см. второе произведение). 3. Проанализируем произведение ИКС X и ТРИ Какой может быть цифра С при известных возможных значениях И? Из только что упоминавшейся таблицы определим, что 1) при И = 2: С = 7; 2) при И = 3: С = 5 или С = 9.
224 Глава 14. Числовые ребусы и кросснамбер 4. Рассмотрим также произведение И К С в ДВА Так как произведение И х Вне может быть двузначным числом, то можем установить, что: 1) при И = 2: В = 3 или В = 4 или В = 5; 2) при И = 3: В = 2 или В = 4 или В = 5. 5. Исследовав только что указанное произведение для всех сочетаний возможных значений И, С и В (всего таких сочетаний — 9), можно установить, что допустимым является только такое: И = 3,С = 5,В = 4. 6. Так как И = 3, то из анализа произведения, рассмотренного в п. 3, следует, что К = 2, Р = 7, Т = 9. 7. Полное решение ребуса: 14 6В 4 3 В 3 4 3 1 О в 3 4 9 А В О В 2 2 В 9 Ребус № 4 1. Из второго вычитания видно, что А = 0. 2. Учитывая, что произведение С • С оканчивается на 0 (на А), по таблице умножения в двенадцатеричной системе счисления, приведенной в условии задачи, можно установить, что С = 6. 3. Так как произведение 6 • К (С • К) оканчивается на 0 (на А), то из той же таблицы видно, что К = 2 или К = 4 или К = 8 или К = А. Рассмотрим все возможные варианты умножения числа ИК6 на 6 для таких значений К: И И И 8 И А 6 6 ... 3 0 ... 3 0 Видно, что в любом случае 4 = 3. 0
Ответы к главе 14 225 4. Запишем все найденные цифры: О 1 И К 6 И К 6 о о о 5. Так как произведение 6 • И оканчивается на 6 (см. произведение ИКС на И), то по таблице можно установить, что И = 7, или И = 9, или И = В (И Ф 1, иначе первое произведение было бы однозначным). 6. Рассмотрев произведение ИК6 • И = ЛЮК6 (точнее, Кб • И = ...Кб) для всех возможных вариантов сочетания значений К и И, найденных в п.п. 3 и 5: к И Кб И (...Кб) Допустимо? 2 5 106 Нет (К ф 0) 2 7 176 Нет (К Ф 7) 2 9 2А6 Нет (К ф А) 2 В 136 Нет (К Ф 3) 4 5 1А6 Нет (К ф 4) 4 7 276 Нет (К ф 4) А 9 7А6 Да (К = А) А В 975 Нет (К Ф 7) можно определить, что К = А, И = 9. Полное решение ребуса: 8 1 6 2 3 0 | 9 А 6 “ 7 4 А 6 9 А 6 8 7 8 3 8 2 9 0 4 В 3 0 4 В 3 0 0 14.9. Обозначим искомое основание —х. Из первого столбца справа следует, что 0 = 0. Для удобства запишем это в ребус: Т Ы 6 Я 3 Л Ю К 6 Т Л Т 3 т я и о Ю Р 3 Ю Р 3
226 Глава 14. Числовые ребусы и кросснамбер КИТО КИОТО ТОКИО Это означает, что перенос единицы «в уме» происходит из второго столбца в третий и из четвертого в пятый. Значит, можем записать: Т + Т = х + И И+ 1 =к К + И = х К+ 1 =т Следовательно, х = 7, И = 3, К = 4, Т = 5. 14.11. Исследуем ребус не рассмотрением всех возможных вариантов, как решалась предыдущая задача, а, так сказать, «в общем виде». Обозначим основание системы счисления — р и перепишем ребус следующим образом: А В с D D С в А X! х2 Хз X, 2 3 0 0 Как и в предыдущей задаче, в крайнем правом разряде сумма цифр равна р (и не может быть равна 2р). В /?-ичной системе эта сумма записывается как 10, то есть единица переходит во второй справа разряд. В этом разряде сумма С + В равна D + А (учитывая возрастание и убывание цифр), а результат сложения во всем разряде такой же, как в соседнем справа. Поэтому можем утверждать, что Х3 = Х4 + 1. Аналогично, из анализа второго слева разряда следует, что Х2 = Х3 + 2 = = Х4 + 3. Можно также получить, что Xj = Х2- 2. Учитывая все это, мы можем расположить цифры в порядке возрастания: Х3, Х4, Хь Х2, что, в свою очередь, позволяет записать, что Х4 = В. Тогда в крайнем правом разряде имеем ЗА + 4 = р. Это и есть формула, позволяющая нам определить значенияр\ Так как А — цифра (целое число), то можем утверждать, что р = 7, 10, 13, 16, ... В том, что для десятичной системы счисления ребус имеет решение, мы уже убедились, решив предыдущую задачу. Приведем также решения для семеричной системы: 1 2 3 4 4 3 2 1 3 4 1 2 1 2 3 0 0
Ответы к главе 14 227 и для шестнадцатеричной: 4 5 6 7 + 7 6 5 4 6 7 4 5 1 2 3 0 0 14.12 1 4 6 1 1 1 0 1 0 0 1 0 1 1 1 0 1 1 0 1 1 0 0 1 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 0 0 1 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 Вавилонская нумерация В древнем Вавилоне примерно за 40 веков до нашего времени была создана особая система записи чисел. В вавилонских текстах, написанных характерной «клинописью» (см. рис. 14.3), числа от 1 до 59 записывались по десятичной системе. Т.1 КЖзЩг <(=/0 4^=30 Рис. 14.3 Из рис. 14.3 видно, что использовались два основных знака (для чисел 1 и 10), из которых «собирались» числа. Особенностью вавилонской системы была ее позиционность — в ней, как и в нашей, десятичной, системе счисления, одна и та же цифра могла обозначать разные
228 Глава 14. Числовые ребусы и кросснамбер числа, в зависимости от места, занимаемого этой цифрой. В вавилонской системе ту роль, которую у нас играет число 10, играло число 60. До позиционной системы счисления люди дошли не сразу. Одним из затруднений долго было отсутствие числа «нуль» (и специального знака для этого числа). Впервые знак нуля появился именно в рамках вавилонской системы (не позднее третьего века до нашей эры). Он выглядел так: Рис. 14.4 После этих разъяснений ясно, что запись: Рис. 14.5 означает число 2 593 292 (12 • 603 + 0 ■ 602 + 21 • 60 + 32).
Глава 15 Игра «ним» Ним ом называется игра, суть которой заключается в следующем. Имеется некоторое количество мелких предметов (камешки, монеты, спички и т. п.), разложенные в несколько рядов (или кучек). Два игрока по очереди забирают по одному или нескольку предметов из любого ряда. Выигрывает тот, кто возьмет последний предмет1. В наиболее известном варианте «нима» 12 предметов выкладывают в три ряда так, как показано на рис. 15.1. • • • • • • • • • • • • Рис. 15.1 Подумав и/или рассмотрев несколько возможных ходов, вы наверняка обнаружите, что добиться победы можно, если оставить сопернику два одинаковых ряда предметов (то есть с одним и тем же числом предметов в каждом ряду). Выиграть можно и в том случае, если в первом ряду останется один, во втором — две и в третьем — три предмета. Тот, кто начинает игру, наверняка побеждает, если первым ходом он забирает два предмета из верхнего ряда, а затем рационально продолжает игру. Казалось, что анализ столь простой игры не может привести к каким- либо неожиданностям, однако в начале XX века было сделано удивительное открытие. Обнаружилось, что ним допускает обобщение на любое число рядов с любым числом предметов в каждом ряду и что с помощью простой стратегии, используя двоичную систему счисления (!), любой желающий при определенных условиях может стать непобедимым игроком. Полный анализ и доказательство существования оптимальной стратегии впервые опубликовал в 1901 году Чарльз Бутон, профессор математики 1 Можно играть и наоборот — считать того, кто возьмет последний предмет, проигравшим.
230 Глава 15. Игра «ним» Гарвардского университета (США), который и описал правила игры, названной им «ним»2. Каждую комбинацию предметов в игре можно назвать либо «опасной», либо «безопасной». Если позиция перед очередным ходом игрока такова, что гарантирует ему выигрыш при правильной стратегии, она называется безопасной; в противном случае позиция называется опасной5. Так, при игре в «ним» по описанной выше схеме «3, 4, 5» (см. рис. 15.1) исходная позиция — безопасная, и он может превратить ее в опасную для соперника, взяв два предмета из верхнего ряда. Любую безопасную позицию, сделав соответствующий ход, всегда можно превратить в опасную (для соперника). Когда позиция опасная — любой ход делает ее безопасной. Следовательно, рациональная игра заключается в том, чтобы каждый раз превращать безопасную позицию в опасную. Чтобы определить, опасна или безопасна данная позиция, число предметов в каждом ряду нужно записать в двоичной системе. Если сумма чисел в каждом разряде равна нулю или четна, то позиция опасна4. Если же сумма нечетна хотя бы в одном разряде, то позиция безопасна. Записывая в двоичной системе число предметов в каждом ряду, расставленных по схеме «3, 4, 5», мы получим (см. табл. 15.1): Таблица 15.1 Число предметов Двоичная запись числа 3 1 1 4 1 0 0 5 1 0 1 Сумма цифр: 2 1 2 Сумма цифр (или количество единиц) в среднем столбце равна 1 — нечетному числу, что свидетельствует о безопасности данной позиции. Поэтому первый игрок может сделать ее опасной. Как уже объяснялось, именно это он и делает, когда забирает из верхнего ряда два предмета. В результате в верхнем ряду остается лишь 1 предмет (двоичное число — также 1) и нечетное число в последовательности сумм чисел по столбцам пропадает. Перепробовав остальные ходы, вы убедитесь в том, что только указанный ход может сделать исходную позицию опасной. 2 Очень интересная информация о происхождении игры и ее названии, в том числе убедительно опровергающая распространенные гипотезы и мифы, связанные с этим, приведена в книге В. В. Шилова «Удивительная история информатики и автоматики», М.: «Энас», 2010. 3 В книге [6] приняты «противоположные» признаки опасной и безопасной позиций, связанные с ситуацией, полученной после сделанного хода. 4 Можно также сказать, что указанная сумма равна нулю по модулю 2 — см. главу 10. При анализе игры «ним» эту сумму часто называют «ним-суммой».
Глава 15. Игра «ним» 231 Если в каждом ряду стоит не более 31 фишки, то любую позицию легко проанализировать, использовав в качестве вычислительной машины (работающей в двоичной системе!) пальцы левой руки [6]. Предположим, что в начальной позиции в первом ряду стоит 7, во втором — 13, в третьем — 24 и в четвертом — 30 фишек. Вы должны сделать первый ход. Опасна или безопасна исходная позиция? Поверните левую руку с растопыренными пальцами ладонью к себе. Большой палец будет означать коэффициент при 16, указательный — коэффициент при 8, средний — при 4, безымянный — при 2 и мизинец — коэффициент при 1. Для того чтобы ввести в вашу вычислительную машину число 7, прежде всего нужно загнуть палец, соответствующий наибольшей степени двойки, входящей в 7. Такой степенью является 4, поэтому вы загибаете средний палец. Продолжая двигаться направо, добавляйте степени двойки до тех пор, пока вы в сумме не получите 7. Для этого вам придется загнуть средний, безымянный пальцы и мизинец. Три остальных числа — 13, 24 и 30 — вводятся в вашу вычислительную машину точно так же, но, поскольку вам требуется вычислить сумму чисел, стоящих в столбцах при одной и той же степени двойки, вы, дойдя до согнутого пальца, который вам нужно согнуть еще раз, просто разгибаете его. Независимо от количества рядов позиция опасна, если по окончании работы вашей вычислительной машины на левой руке не останется ни одного загнутого пальца. Это означает, что любым ходом вы наверняка сделаете положение безопасным для вашего противника и заведомо проиграете, если он знает о «ниме» столько же, сколько и вы. В приведенном нами примере большой и указательный пальцы останутся согнутыми. Это говорит о том, что позиция безопасна и что, сделав правильный ход, вы сможете выиграть. Сегодня, в эпоху повального увлечения компьютерного играми, небезынтересно узнать, что «ним» был первой игрой, в которую человек сыграл против специально созданной для этой игры машины. Компьютерные программы, моделирующие «классический» вариант игры в «ним», приведены в приложении 11. Задания для самостоятельной работы учащихся ► 1. Определите, какова будет начальная позиция (опасная или безопасная), если количество предметов в трех рядах составляет: 1)7, 6 и 2; 2) 9, 12 и 5. ► 2. Определите, какова будет начальная позиция (опасная или безопасная), если количество предметов в четырех рядах составляет: 1) 13, 7, 9 и 11; 2) 12, 10, И и 13.
232 Глава 15. Игра «ним» ► 3. Определите, какова будет начальная позиция (опасная или безопасная), если количество предметов в трех рядах составляет 35, 36 и 34. Задачу решите, не подсчитывая количество единиц в каждом разряде двоичной записи чисел. ► 4. Определите, какова будет начальная позиция (опасная или безопасная), если количество предметов в четырех рядах составляет 17, 18, 19 и 23. Задачу решите, не подсчитывая количество единиц в каждом разряде двоичной записи чисел. ► 5. Определите, какова будет начальная позиция (опасная или безопасная), если количество предметов в трех рядах составляет 17, 12 и 5. Задачу решите, не подсчитывая количество единиц в каждом разряде двоичной записи чисел. ► 6. Определите, какова будет начальная позиция (опасная или безопасная), если количество предметов в четырех рядах составляет 9, 7, 13 и 11. Задачу решите, не подсчитывая количество единиц в каждом разряде двоичной записи чисел. ► 7. В приведенных в приложении 11 программах, моделирующих игру «ним», принято, что число рядов предметов — 3, а начальное количество предметов в каждом ряду определяется случайным образом. Какова будет при этом начальная позиция (опасная или безопасная), если количество предметов в каждом ряду выбирается из интервала 4-10? Ответ получите, не рассматривая все 343 возможных варианта ©. ► 8. На доске 2x8 стоят две белых и две чёрных ладьи (см. рис. 15.2). Двое ходят по очереди. За один ход первый передвигает одну из белых ладей на любое количество полей вправо, а второй — одну из чёрных ладей на любое количество полей влево. Перепрыгивать через чужую ладью нельзя. Тот, кто не может сделать ход, проиграл. а ж а ж Рис. 15.2 Кто выиграет в эту игру — начинающий ее или делающий второй ход? ► 9. То же условие, что и в задании 8, но все ладьи могут ходить как вправо, так и влево. ► 10. То же условие, что и в задании 8, но доска размером 3x8. ► 11. Рассмотрим наиболее популярную версию игры в ним с тремя рядами предметов. Пусть начальная позиция описывается тройкой чисел (п 1, п2, пЗ), где п\, п2 и пЗ — количество предметов в каждом из рядов.
Ответы к главе 15 233 Подсчитайте общее число опасных позиций вида (я, 2п, 3 п), где п — натуральное число: а) не превышающее 7; б) не превышающее 127. Рекомендации по выполнению Так как полный перебор всех 127 чисел является крайне трудоемким, то целесообразно определить признак, по которому можно установить, что значение п дает опасную позицию. Если вы не сможете найти такой признак ©, то не выполняйте задание. в) из интервала 8-15; Рекомендации по выполнению Используйте признак, найденный при решении задания б). г) из интервала 16-31; Рекомендации по выполнению Полный перебор здесь также не применяйте — попробуйте установить связь искомого значения с результатом, полученным для задания а). д) из интервала 128-255; Рекомендации по выполнению Определите количество искомых значений для чисел п, которые в двоичном виде являются однозначными, двузначными, трехзначными, ..., шестизначными, и найдите общую закономерность в найденных количествах. е) из интервала 1-63; Рекомендации по выполнению Используйте закономерность, найденную при решения задания д), и зависимость, установленную при выполнении задания г). Ответы к главе 15 1. 1) опасная; 2) безопасная. 2. 1) безопасная; 2) опасная. 3. Из трех заданных чисел одно — нечетное. Значит, количество единиц в последнем разряде будет равно 1 (у нечетных числе в двоичном виде последняя цифра — 1). Следовательно, позиция — безопасная. 4. Безопасная (из четырех заданных чисел три — нечетные). 5. Число 17 в двоичном виде — 5-значное, остальные — меньшей «значности». Следовательно, в пятом слева разряде количество единиц будет равно 1, то есть позиция — безопасная.
234 Глава 15. Игра «ним» 6. Число 7 в двоичном виде — трехзначное, остальные три — 4- значные. Следовательно, в четвертом слева разряде количество единиц будет равно 3, то есть позиция — безопасная. 7. Максимальная «разрядность» чисел 4-10 в двоичном виде — 4. Проанализируем двоичную запись числа предметов в трех рядах в общем виде (рис. 15.3): Рис. 15.3 В двух левых разрядах каждой строки: 1) не могут быть одновременно записаны два нуля (поскольку тогда число предметов будет меньше 4); 2) не могут быть одновременно записаны две единицы (так как при этом число предметов будет больше 10), то есть в них в каждой строке может быть только одна единица. Это означает, что в разрядах, обведенных жирной линией на рис. 15.4, будут записаны три единицы. Все эти три единицы могут быть в одном из столбцов либо две единицы в каком-то столбце и еще одна — в другом. Во всех случаях это будет говорить, что позиция безопасна. Рис. 15.4 8. Между ладьями 6 клеток. Это количество по мере ходов участников игры будет уменьшаться. Согласно условию, тот, кто не сможет сделать ход, проигрывает. Нетрудно увидеть, что по сути это аналог игры «ним» с двумя кучками предметов (недаром это задание опубликовано в главе, посвященной «ниму» ©). Анализ показывает, что позиция на рис. 15.2 — опасная, поэтому начинающий игру проиграет (если, конечно, его соперник знает выигрышную стратегию). 9. Начинающий игру проиграет (даже если после хода соперника он будет «отступать»). 10. Начинающий игру выигрывает, сведя исходную позицию к проигрышной, изображенной на рис. 15.2 (то есть он должен взять все предметы из одного из рядов).
Ответы к главе 15 235 11. а) Исследовав все 7 чисел: • при п= 1: • при п = 2: • при п = 7: 1 10 111 10 100 1110 11 110 10101 можно установить, что искомое количество равно 4; б) Как рекомендовано в условии, попробуем определить признак, по которому можно установить, что значение п дает опасную позицию. Прежде всего обратим внимание на то, что количество предметов в третьем ряду равно общему числу предметов в двух первых рядах (Ъп = = п + 2 п). Далее, двоичная запись десятичных чисел п и 2п отличается наличием дополнительного нуля справа в числе 2п: 1) п 1 0 0 1 0 1 0 2 п 1 0 0 1 0 1 0 0 2) п 1 1 0 1 1 0 0 2 п 1 1 0 1 1 0 0 0 Если во всех разрядах все единицы в двоичной записи числа п не совпадают с единицами в двоичной записи числа 2п, как это имеет место в примере 1), то двоичная сумма чисел п и 2п получится без переноса единиц «в уме» из разряда в разряд. Поэтому количество единиц в отдельных разрядах не может быть больше 1. Кроме того, в этом случае двоичные цифры числа Ъп будут совпадать количеством единиц в том или ином разряде (убедитесь в этом самостоятельно!). Это означает, что во всех разрядах количество единиц будет равно либо 2, либо 0, то есть соответствующая позиция — опасная. Если же в двоичной записи числа п имеется хотя бы одна пара рядом стоящих единиц, то тогда при сложении чисел п и 2п будет иметь место перенос единиц «в уме»: + 10110 101100 1000001
236 Глава 15. Игра «ним» А это значит, что сумма чисел п и 2п в двоичном виде будет отличаться от двоичной записи числа 3п. Это, свою очередь, означает, что как минимум в одном из разрядов количество единиц будет нечетным, т. е. позиция является безопасной. Таким образом, мы можем сделать важный вывод: позиция будет опасной, если в двоичной записи числа п нет двух рядом стоящих единиц. Анализ вариантов, полученных при решении задания а), и других показывает, что это правило подтверждается. Но даже с использованием такого правила решение задания б) является достаточно трудоемким (подсчитывать количество единиц в каждом разряде при сложении 127 троек чисел необходимости нет, но проанализировать 127 значений п придется). Поэтому попробуем разработать методику подсчета искомого количества в общем виде (см. решение задания е)); в) Три позиции: п = 8 (10002), п = 9 (10012) и п = 10 (10102); г) Числа из интервала 16-31 в двоичном виде — 5-разрядные с начальной единицей. Так как, согласно найденному признаку опасности позиции, второй слева цифрой не может быть единица, то искомые значения имеют в двоичной системе вид 10???, где “?” — 1 или 0. Следовательно, можем сказать, что количество искомых чисел равно общему числу значений п с опасной позицией для 1-3-разрядных двоичных чисел (1-7ю) и еще одно число (8ю= 10002). Первое количество мы знаем из решения задания 1), то есть общий ответ — 5; д) Найдя количество, о которых речь идет в рекомендациях по выполнению задания, можно получить таблицу: Таблица 15.2 Количество разрядов к в двоичной записи числа п Диапазон значений п Общее количество опасных позиций 1 1 1 2 2-3 1 3 4-7 2 4 8-15 3 5 16-31 5 6 32-63 8
Ответы к главе 15 237 Ее анализ показывает, что общее количество опасных позиций для значений п, которые в двоичном виде являются А>значными (назовем это количество Nk), равно iV*_2 + Nk- i(5). Следовательно, искомый ответ — 21; е) Учитывая рекомендации по выполнению задания, можно получить таблицу: Таблица 15.3 Диапазон значений п Общее количество опасных позиций Диапазон значений п Общее количество опасных позиций 1 1 1 1 - 2-3 1 1-3 2 1 4-7 2 1-7 ▼ 4 1 8-15 3 1-15 Т 7 1 16-31 5 1-31 ▼ 12 1 32-63 8 1-63 20 Ответ — 20. Дополнительные задания 1. Установите закономерность в значениях в последнем столбце таблицы. 2. Найдите ответ к заданию 2). 3. Подсчитайте общее число опасных позиций вида (п, 2п9 Ъп) где п — натуральное число из интервала 1-1023. 5 Напомним, что последовательность чисел 1,1,2, 3, 5, 8,..., в которой каждый член, начиная с третьего, равен сумме двух предыдущих, называют «последовательностью Фибоначчи».
Глава 16 Двоичная система и «Ханойские башни» Головоломка «Ханойские башни» известна уже довольно давно. Ее автором принято считать французского математика Э. Люка, создавшего головоломку на основе древних легенд. В русской литературе она впервые появилась в 1902 году в книге Е. Игнатьева «В царстве смекалки». Если вы возьмете детскую пирамиду (диски располагаются в порядке возрастания: верхний — самый маленький, а нижний — самый большой) и еще два стержня от таких же детских пирамид, то головоломка уже у вас в руках (рис. 16.1). I II III Рис. 16.1 Пронумеруем стержни: тот, на котором находятся диски, получит номер I, другие — номера II и III. Задача состоит в том, чтобы перенести диски со стержня I на стержень III, используя стержень II как промежуточный. При этом должны соблюдаться три условия: 1) за один ход можно переносить лишь один диск; 2) нельзя класть больший диск на меньший; 3) снятый диск нельзя отложить в сторону — он должен быть надет на один из стержней. Согласно легенде, в древнем Ханое стоял храм, в котором на одном из трех стержней были надеты 64 золотых диска, и монахи без устали, сменяя друг друга, переносят диски с одного стержня на другой в соответствии с описанными правилами. Когда жрецы перенесут все диски с первого стержня на третий, — гласит легенда, — наступит конец света. Давайте попробуем справиться с такой головоломкой.
Глава 16. Двоичная система и «Ханойские башни» 239 При четырех дисках задача решается легко — ее можно решить, использовав, например, монеты разного диаметра и сложив из них пирамидку. Если пронумеровать диски, начиная с самого маленького, 1, 2, 3, 4 и записывать свои действия, то можно получить следующий алгоритм (примем, что диски-монеты нужно перенести с первого «стержня» на третий): 1. 1 ^И1. 2. 2 —► III. 3. 1 III. 4. 3 —► И. 5. 1 —> I. 6. 2 -> И. 7. 1 -> II. 8. 4 —► III. 9. 1 III. 10. 2 —► I. 11. 1 ->1. 12. 3 -* III. 13. 1-> И. 14. 2 -* III. 15. 1 III. Конечно, можно решить задачу и при большем числе дисков. А каким должен быть алгоритм не в конкретном, а в общем случае, когда число количество дисков равно некоторому числу к. Чтобы ответить на это вопрос, давайте разберемся, как же перенести диски с первого стержня на третий, а заодно выясним, скоро ли наступит обещанный конец света. Если бы в пирамиде был только один диск, то решение очевидно — перенесем его на третий стержень, и дело с концом. Мы выполнили требуемое задание за один ход. А если бы было два диска? Тогда положим сначала меньший диск на второй стержень, затем положим второй диск на третий стержень, затем перенесем и меньший диск на третий стержень, положив его поверх второго. Все. За три действия мы смогли переложить оба диска на третий стержень. Отметим, что 1 = 21— 1, аЗ =22— 1. При трех дисках мы можем сначала перенести два верхних на второй стержень (такую задачу мы решили только что), потом оставшийся нижний (самый большой) диск — на третий стержень, после чего на него же можно перенести те два диска, которые находятся на втором стержне. Теперь предположим, что мы умеем перекладывать на третий стержень пирамиду из п дисков за 2п - 1 действие. Покажем, что в таком слу¬ 1 Смысл этого действия, конечно, понятен.
240 Глава 16. Двоичная система и «Ханойские башни» чае можно перенести на третий стержень и пирамиду из п + 1 дисков, притом за 2п + 1 - 1 действие. Пусть на пирамиде лежит п + 1 дисков. Сначала мы можем перенести п верхних дисков с первого стержня на второй, произведя 2п - 1 действие. На первом стержне остался лишь один диск. Перенесем его на свободный третий стержень. Теперь у нас на втором стержне лежит п дисков, первый — свободен, а на третьем лежит самый большой диск. Осталось перенести со второго стержня на третий п дисков (используя второй стержень как вспомогательный), что мы умеем делать за 2п - 1 операцию. Все. Мы собрали на третьем стержне все п + 1 дисков, совершив (2п- 1) + 1 + (2п- 1) = 2П + 1 1 U - I действие. Отсюда, в соответствии с принципом математической индукции, вытекает, что для любого натурального числа к можно, имея пирамиду с к дисками, перенести их с первого стержня на третий, соблюдая правила, за 2к- I действие. Нетрудно показать, что меньше чем за 2к- I действие перенести к дисков с первого стержня на третий невозможно. Поэтому легендарным жрецам понадобится 264 - I действие, чтобы исполнить свою работу. Если тратить на каждое действие лишь по одной секунде, то понадобится 18 446 744 073 709 551 615 сек, т. е. более 500 миллиардов лет (!). Заметим также, что переложить п дисков можно аналогично: 1) переложить (п - 1) дисков на промежуточный стержень; 2) переложить самый большой из дисков; 3) переложить (п - 1) дисков на нужный стержень. Такую логику можно распространить и на другие меньшие значения числа дисков до тех пор, пока это число не станет равно 1. В последнем случае задача решается просто — единственный диск размещается на соответствующем стержне. «Но при чем здесь двоичная система счисления?» — спросите вы. Дело в том, что, оказывается, последовательность перекладывания дисков со стержня на стержень (см. рис. 16.1) может быть найдена при использовании именно этой системы. Обозначим диски, начиная с самого маленького, соответственно 1, 2, 3, ... Далее запишем в таблицу десятичные числа п от 1 до 7, переведенные в двоичную систему (рис. 16.2). Если обозначить разряды двоичных чисел, начиная с крайнего правого, соответственно 1, 2 и 3 (рис. 16.3), то последовательность перекладывания дисков, обеспечивающую решение головоломки при трех дисках, можно получить следующим образом: при к-м ходе перекладывается тот из дисков, номер которого совпадает с номером разряда, в котором появляется «новая»2 цифра 1 (см. рис. 16.4). 2 Можно также сказать — самая правая.
Глава 16. Двоичная система и «Ханойские башни» 241 к Цифры 1 0 0 1 2 0 1 0 3 0 1 1 4 1 0 0 5 1 0 1 6 1 1 0 7 1 1 1 к Цифры 1 0 0 1 2 0 1 0 3 0 1 1 4 1 0 0 5 1 0 1 6 1 1 0 7 1 1 1 Рис. 16.2 Рис. 16.3 к Цифры Перекладывается диск 1 0 0 1 1 2 0 1 0 2 3 0 1 1 1 4 1 0 0 3 5 1 0 1 1 6 1 1 0 2 7 1 1 1 1 3 2 1 Рис. 16.4 Предложите своим ученикам убедиться в правильности сделанного вывода, а также определить последовательность перекладывания дисков в случае, когда их — 4 и 5. У внимательного читателя наверняка возник вопрос — а куда перекладывать самый маленький диск, ведь его можно разместить на любом из двух других стержней? (Для других дисков двух вариантов для размещения нет — убедитесь в этом!) Имеется стратегия выбора хода, всегда приводящая к правильному решению: если общее число дисков нечётно, то последовательность перемещений наименьшего диска имеет вид //—»7f—>77—►//—> К—> П—> ... (где И — стержень, на котором диски находятся в исходном положении, К — стержень, на котором нужно собрать диски, 77 — оставшийся стержень), а если п чётно, то И —► П —> К—> И—> 77—► К—> ... Для решения головоломки можно также применить код Грея, описанный в главе 6.
242 Глава 16. Двоичная система и «Ханойские башни» Если выписать номера разрядов, в которых появляется «новая» цифра в каждом очередном элементе кода Грея (см. табл. 6.6.), то можно получить последовательность: 1,2, 1,3, 1,2, 1,4, 1,2, 1,3, 1,2, 1, ... Числа этой последовательности соответствуют номерам дисков, которые должны перекладываться на том или ином этапе решения задачи (если диски, начиная с самого маленького, обозначить числами 1, 2, 3, ...). Особенности построения кода Грея позволяют также определить последовательность номеров перекладываемых N дисков при известном решении головоломки для (N — 1) дисков: {последовательность для [N - 1) дисков}, N, {последовательность для [N - 1) дисков}. Компьютерные программы, моделирующие решение рассматриваемой в данной главе головоломки, приведены в приложении 12. Ответ Последовательность перекладывания для четырех дисков показана на рис. 16.5. п Цис| >ры Перекладывается диск 1 0 0 0 1 1 2 0 0 1 0 2 3 0 0 1 1 1 4 0 1 0 0 3 5 0 1 0 1 1 6 0 1 1 0 2 7 0 1 1 1 1 8 1 0 0 0 4 9 1 0 0 1 1 10 1 0 1 0 2 11 1 0 1 1 1 12 1 1 0 0 3 13 1 1 0 1 1 14 1 1 1 0 2 15 1 1 1 1 1 4 3 2 1 Рис. 16.5
Глава 17 Системы счисления и электронные таблицы В данной главе приведен комплекс заданий, связанных с темой «Системы счисления», которые можно предложить учащимся при изучении электронных таблиц. Ряд заданий может быть использован на олимпиадах различного уровня по информатике. Все комментарии к заданиям и к их выполнению даны применительно к электронной таблице Microsoft Excel. ► 17.1. Разминка, или задания, выполняемые без использования формул ► 17.1.1. Получите на листе двоичные представления десятичных чисел N из интервала 0-31: А В С D Е F 1 N 2 0 0 3 1 1 4 2 1 0 33 31 1 1 1 1 1 Задание выполните двумя способами: 1) вводя все двоичные цифры «вручную»; 2) копируя однотипные блоки ячеек (например, в столбце F повторяется блок из 0 и 1). ► 17.1.2. Запишите (без использования формул) на листе таблицу сложения в двоичной системе счисления:
244 Глава 17. Системы счисления и электронные таблицы А В с D Е F G Н Г 1 1-е слагаемое: 0 0 1 1 2 2-е слагаемое: 0 1 0 1 3 Сумма: ► 17.1.3. Запишите (без использования формул) на листе таблицу вычитания в двоичной системе счисления: А В с D Е F G Н I 1 Уменьшаемое: 0 1 1 0 2 Вычитаемое: 0 0 1 1 3 Разность: Примечание. В ячейке НЗ запишите значение величины заимствования из старшего разряда. ► 17.1.4. Запишите (без использования формул) на листе таблицу истинности для логической операции AND применительно к двум двоичным цифрам X и Y (см. главу 6): А В с D Е F G Н 1 X. 0 1 1 0 2 У: 0 0 1 1 3 X AND У: ► 17.1.5. Запишите (без использования формул) на листе таблицу истинности для логической операции OR применительно к двум двоичным цифрам X и Y (см. главу 6): А В с D Е F G Н 1 X: 0 1 1 0 2 У: 0 0 1 1 3 X OR У: ► 17.1.6. Запишите (без использования формул) на листе таблицу истинности для логической операции XOR («исключающего ИЛИ») применительно к двум двоичным цифрам X и Y (см. главу 6):
Глава 17. Системы счисления и электронные таблицы 245 А В с D Е F G Н 1 X: 0 1 1 0 2 У: 0 0 1 1 3 XXOR У: ► 17.1.7. Введите в ячейки В1:11 цифры 8-значного двоичного числа X, после чего в ячейках В2:12 запишите (без использования формул) двоичный результат применения к этому числу логической операции NOT (см. главу 6): А В С D Е F G Н I 1 X: 2 NOT X: ► 17.1.8. Введите в ячейки В1:12 цифры двух двоичных чисел X и У, после чего в ячейках В3:13 запишите (без использования формул) двоичный результат применения к этим числам логической операции AND (см. главу 6): А В С D Е F G Н I 1 X: 2 У: 3 X AND У: ► 17.1.9. Введите в ячейки В1:12 цифры двух двоичных чисел X и Y, после чего в ячейках В3:13 запишите (без использования формул) двоичный результат применения к этим числам логической операции OR (см. главу 6): А В С D Е F G Н I 1 X: 0 2 У: 1 3 X OR У: ► 17.1.10. Введите в ячейки В1:12 цифры двух двоичных чисел Хи Y, после чего в ячейках В3:13 запишите (без использования формул) двоичный результат применения к этим числам логической операции XOR (см. главу 6):
246 Глава 17. Системы счисления и электронные таблицы А В С D Е F G Н I 1 X: 0 2 У: 1 3 XXOR У: ► 17.1.11. В ячейках С1:11 приведены двоичные цифры модуля отрицательного числа. В ячейках В4:14 запишите (без применения формул) дополнительный код этого числа, используя строки 2-3 для промежуточных преобразований: А В С D Е F G Н I 1 Цифры: 1 1 0 1 0 0 1 2 3 4 Дополнительный код: ► 17.1.12. В ячейках В1:И приведен дополнительный код отрицательного числа. В ячейках С4:14 запишите (без применения формул) двоичные цифры модуля этого числа, используя строки 2-3 для промежуточных преобразований: А В С D Е F G Н I 1 Дополнительный код: 1 1 1 0 1 0 0 1 2 3 4 Цифры: Возможные методы выполнения задания: 1) с вычитание единицы; 2) без вычитания единицы [2]. Комментарии к выполнению задания вторым методом 1. Инвертировать заданный дополнительный код. 2. Прибавить к результату 1. ► 17.1.13. Определите, сложением с каким числом можно заменить вычитание единицы из некоторого 8-разрядного двоичного числа. Комментарии к выполнению Вычитание единицы можно заменить сложением с дополнительным кодом числа -1. Такой код равен 11111111.
Глава 17. Системы счисления и электронные таблицы 247 ► 17.1.14. В ячейках В1:11 записываются цифры некоторого двоичного числа. Требуется в ячейках B3.I3 получить цифры результата сложения этого числа и единицы: А В С D Е F G Н I 1 Введите цифры числа: 1 1 1 0 1 0 0 1 2 1 3 Сумма: Можно при расчетах учитывать значение переноса из старшего разряда. Но можно этого не делать. Рассмотрев разные варианты, установите правило, по которому определяется цифра результата в столбцах В-Н без использования указанного переноса. Указания по выполнению Определите условие, при котором в столбцах В-Н цифра результата будет отличаться от цифры в первом слагаемом. Комментарии к выполнению Условие, при котором в ячейках ВЗ, СЗ, ..., НЗ, значения будут изменяться, удобно принять таким — «если в разряде справа происходит изменение единицы на нуль» (то есть в ячейку с рассчитываемым значением будет происходить перенос). ► 17.1.15. В ячейках В1:11 записываются цифры некоторого двоичного числа. Рассмотрев разные варианты, установите правило, по которому определяется цифры суммы этого числа и числа 11111111 в столбцах В-Н: А В С D Е F G Н I 1 Введите цифры числа: 1 1 1 0 1 0 0 1 2 Второе слагаемое 1 1 1 1 1 1 1 1 3 Сумма: Указания по выполнению Определите условие, при котором в столбцах В-Н цифра результата не будет отличаться от цифры в первом слагаемом. Установите также: • условие, при котором из разряда (столбца) справа переноса не будет. • выражение для расчета цифры результата в случае ее отличия от цифры в первом слагаемом (функцию ЕСЛИ при этом не используйте). Комментарии к выполнению Переноса из разряда (столбца) справа не будет, когда в первом слагаемом этого столбца записан 0, а в результате — 1. При этом если в те¬
248 Глава 17. Системы счисления и электронные таблицы кущем разряде в первом слагаемом записан 0, то цифра результата будет такой же, что и в первом слагаемом, в противном случае она меняется. Если же из разряда справа имеет место перенос, то цифра результата будет такой же, что и в первом слагаемом. ► 17.2. Степени целых чисел ► 17.2.1. Подготовьте лист для определения степеней числа 2: А В 1 Показатель Степень 2 0 1 3 1 2 4 2 4 11 9 512 12 10 1024 Задание выполните в трех вариантах: 1) с использованием операции возведения в степень; 2) с использованием функции СТЕПЕНЬ; 3) без использования операции возведения в степень и функции СТЕПЕНЬ. Комментарии к выполнению задания в третье варианте В ячейку В2 вводится значение 1, в ячейку ВЗ — формула =2*В2, которая затем распространяется (копируется) на ячейки диапазона В4:В12. ► 17.2.2. Подготовьте лист для определения степеней числа целого числа а: А В С 1 Введите целое число а: 3 2 3 Показатель Степень 4 0 1 5 1 3 6 2 9 13 9 19683 14 10 59049
Глава 17. Системы счисления и электронные таблицы 249 Задание выполните в трех вариантах: 1) с использованием операции возведения в степень; 2) с использованием функции СТЕПЕНЬ; 3) без использования операции возведения в степень и функции СТЕПЕНЬ. ► 17.2.3. Подготовьте лист для определения суммы степеней числа 2 от нулевой до некоторого максимального показателя в двух вариантах: 1) А В 1 Максимальный показатель Сумма 2 0 1 3 1 3 4 2 7 11 9 1023 12 10 2047 2) А В 1 Введите максимальный показатель степени: 9 2 Сумма равна: 1023 Комментарии к выполнению 1) вариант 1: в ячейку В2 вводится значение 1, в ячейку ВЗ — формула =В2+2ЛАЗ, которая затем распространяется (копируется) на ячейки диапазона В4:В12. 2) Искомое значение может быть рассчитано по формуле =2Л(В1+1)-1 (см. дополнительные задания для самостоятельной работы учащихся к задаче 2.13 в главе 2). ► 17.2.4. Подготовьте лист для нахождения максимального показателя степени числа 2, не превышающей заданного числа: А В 1 Введите целое число: 2 Максимальная степень:
250 Глава 17. Системы счисления и электронные таблицы Например, для числа 9 искомое значение — 3, для числа 16 — 4. Комментарии к выполнению Формула в ячейке В2: =I4EJ10E(L0G(B1 ;2)). ► 17.2.5. Подготовьте лист для нахождения максимальной степени числа 2, не превышающей заданного числа: А В 1 Введите целое число: 2 Максимальная степень: Например, для числа 9 искомое значение — 8 (23), для числа 16 — 16 (24). Комментарии к выполнению Формула в ячейке В2: =2Л(ЦЕЛОЕ(ЮС(В1 ;2))) (можно вспомогательные расчеты провести отдельно вне зоны видимости листа). ► 17.2.6. Подготовьте лист дня решения задачи Флавия (см. задачу 2.27) для случая, когда выбывает каждый второй человек: А В 1 Введите общее число людей: 2 Искомый номер: Комментарии к выполнению Целесообразно вне зоны видимости листа, например, в ячейке В40, рассчитать максимальную степень двойки, не превышающую общее число людей (см. предыдущее задание), после чего искомое значение определяется по формуле: =2*(В1-В40)+1. ► 17.2.7. Подготовьте лист для получения ответов на два вопроса, связанные с задачей «Банкир и конверты» (см. задачу 2.13 в главе 2): 1) какое наименьшее количество конвертов необходимо иметь, чтобы выдать некоторую сумму, задаваемую в ячейке В1 ?; 2) какова будет в этом случае полная сумма во всех конвертах? А В 1 Введите требуемую сумму: 1000 2 Наименьшее количество конвертов: 10 3 Полная сумма во всех конвертах: 1023
Глава 17. Системы счисления и электронные таблицы 251 Комментарии к выполнению Наименьшее количество конвертов равно максимальному показателю степени числа 2, не превышающей заданного числа (см. задание 17.2.4), увеличенному на 1. Формула в ячейке ВЗ: =2ЛВ2-1. ► 17.3. Перевод целых чисел из р-ичной системы счисления В ДЕСЯТИЧНУЮ И ОБРАТНО ► 17.3.1. В ячейки А2:J2 вводятся цифры заданного двоичного числа (разряд 1 — последний). Подготовьте лист для перевода этого числа в десятичную систему счисления: А В С D Е F G Н I J К 1 Введите двоичные цифры числа: 2 3 10 9 8 7 6 5 4 3 2 1 4 Разряды 5 6 Соответствующее десятичное число равно: Указания по выполнению 1. Для получения результата используйте функцию СУММПРОИЗВ. 2. Весомости разрядов, как вспомогательные данные, необходимые для расчетов, рассчитываются вне зоны видимости листа. ► 17.3.2. В ячейки А2:Н2 вводятся цифры заданного двоичного числа (цифра в ячейке Н2 — последняя). Подготовьте лист для перевода этого числа в десятичную систему счисления с использованием схемы Горнера (см. приложение 1): А В С D Е F G Н 1 Введите двоичные цифры числа: 2 3 Соответствующее десятичное число равно: Комментарии к выполнению Искомое значение рассчитывается по формуле: =(((((((А1 *2+В1 )*2)+С1 )*2+D1 )*2+Е1 )*2+F1 )*2+G1 )*2+Н1. ► 17.3.3. Подготовьте лист для получения в столбце I десятичных значений двоичных чисел, цифры которых записаны в столбцах А-Н:
252 Глава 17. Системы счисления и электронные таблицы А В С D Е F G Н I 1 1 1 2 1 1 3 3 1 1 1 7 7 1 1 1 1 1 1 1 127 8 1 1 1 1 1 1 1 1 255 Комментарии к выполнению Если весомости разрядов записать в строке 40, то формула в ячейке И — СУММПРОИЗВ(А1:Н1;А$40:Н$40) может быть распространена (скопирована) на ячейки 12:18. ► 17.3.4. В ячейку В1 вводится 8-значное двоичное число (естественно, как десятичное). Подготовьте лист для получения в ячейках В2:18 его цифр: А В С D Е F G Н I 1 Введите двоичное число: 2 Его цифры: Формулы получите путем копирования формулы в одной из ячеек. Комментарии к выполнению Для возможности копирования формул следует получить в разных ячейках аналогичные формулы. Удобно их сделать такими: • в ячейке 12: =ЦЕЛОЕ(ОСТАТ(В1 ;10)/1); • в ячейке Н2: =ЦЕЛОЕ(ОСТАТ(В1 ;100)/10); • в ячейке G2: =ЦЕЛОЕ(ОСТАТ(В1 ;1000)/100); • в ячейке В2: =ЦЕЛОЕ(ОСТАТ(В1 ;100000000)/10000000). В этом случае, если строке 40 записать значения 1, 10, 100, ..., 10000000 (это можно сделать, используя формулы и копирование): А В С D Е F G Н I 40 10000000 1000 100 10 1 то в ячейку 12 можно ввести формулу =ЦЕЛОЕ(ОСТАТ($В1 ;10*140)/140), которую затем распространить (скопировать) на ячейки В2:Н2.
Глава 17. Системы счисления и электронные таблицы 253 Можно также в строке 40 записать значения 7, 6, 5, 0: А В С D Е F G Н I 40 7 6 5 4 3 2 1 0 Тогда “базовая” формула в ячейке 12 будет такой: =ЦЕЛОЕ(ОСТАТ($В1; 10*10л140)/(10Л140)). ► 17.3.5. Подготовьте лист для перевода в десятичную систему счисления заданного не более чем 8-значного двоичного числа, которое вводится (естественно, как десятичное) в ячейку В1: А В 1 Введите двоичное число: 2 Соответствующее десятичное число равно: Комментарии к выполнению Вне зоны видимости листа получите цифры заданного числа (см. задание 17.3.4), после чего получите искомое десятичное значение как в заданиях 17.3.1 ил 17.3.2. ► 17.3.6. Подготовьте лист для перевода в десятичную систему счисления числа, заданного в системе счисления с основанием р (2 < р < 9) в виде набора цифр: А В С D Е F G Н I J 1 Введите основание системы р: 2 Введите цифры числа: 3 4 10 9 8 7 6 5 4 3 2 1 5 Разряды 6 7 Соответствующее десятичное число равно: Комментарии к выполнению Задание выполняется аналогично заданию 17.3.1. Отличие — в весомостях разрядов. Например, для троичной системы они следующие:
254 Глава 17. Системы счисления и электронные таблицы А В С D Е F G Н I J 40 27 9 3 1 ► 17.3.7. Подготовьте лист для выполнения предыдущего задания с использованием схемы Горнера (см. приложение 1). ► 17.3.8. В ячейку В1 вводится некоторое не более чем 4-значное число, заданное в системе счисления с основанием р (2 <р< 9) (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующего десятичного числа: А В 1 Введите число: 1302 2 Введите основание системы р: 4 3 Соответствующее десятичное число: 114 Комментарии к выполнению Вне зоны видимости листа получите цифры заданного числа (см. задание 17.3.4), после чего получите искомое десятичное значение как в заданиях 17.3.6 ил 17.3.7. ► 17.3.9. При использовании листа, подготовленного в заданиях 17.3.1, 17.3.2, 17.3.6, 17.3.7, выводится не только окончательный, но и промежуточные результаты (по мере ввода цифр заданного двоичного числа), а также начальный ноль. Подготовьте лист, на котором искомый результат будет выводиться только после ввода последней цифры числа. Указание по выполнению Используйте функции ЕСЛИ и ЕПУСТО. ► 17.3.10. Подготовьте лист для перевода в десятичную систему счисления некоторого шестнадцатеричного числа по его заданным цифрам: А В С D Е 1 Введите цифры заданного числа: 2 6 С 2 А 3 Соответствующее десятичное число равно:
Глава 17. Системы счисления и электронные таблицы 255 Указания по выполнению 1. Вне зоны видимости листа получите числовые эквиваленты каждой из цифр, в том числе цифр 0-9 и используйте в формуле в ячейке ЕЗ функцию СУММПРОИЗВ. 2. Для получения числовых эквивалентов цифр-букв используйте функцию КОДС И MB. Комментарии к выполнению Если числовые эквиваленты каждой из шестнадцатеричных цифр получить в строке 40, то формула для первой цифры в ячейке А40: =ЕСЛИ(А2<Ю;А2;КОДСИМВ(А2)-64+9). ► 17.3.11. Подготовьте лист для получения двоичной записи заданного целого десятичного числа из интервала 32-63: А В С D Е F G 1 Введите целое число из интервала 32-63: 51 2 Цифры его двоичного представления: 1 1 0 0 1 1 Комментарии к выполнению Для получения двоичных цифр целесообразно использовать метод выделения максимальной степени числа 2 (см. приложение 1). Для определения двоичной цифры в том или ином разряде нужно знать «оставшееся» (еще не использованное в старших разрядах) значение заданного числа. Если это значение не меньше степени двойки, соответствующей этому разряду, то двоичная цифра в данном разряде — 1, в противном случае — 0. Отслеживание этих значений можно провести вне видимости листа, например, на строке 45: А В С D Е F G 45 Осталось: Формулы, рассчитывающие оставшееся значение: • в ячейке В45: =В1; • в ячейке С45: =В45-32*В2; • в ячейке D45: =С45-16*С2; • в ячейке Е45: =D45-8*D2; • в ячейке F45: =Е45-4*Е2, а формулы, определяющие двоичные цифры:
256 Глава 17. Системы счисления и электронные таблицы • в ячейке В2: =ЕСЛИ(В45>31;1; 0) (постоянное значение 1 вводить нецелесообразно); • в ячейке С2: =ЕСЛИ(И(С45<32;С45>15);1;0); • в ячейке D2: =ЕСЛИ(И(Р45<16; D45>7);1;0); • в ячейке Е2: =ЕСЛИ(И(Е45<8; Е45>3);1;0); • в ячейке F2: =ЕСЛИ(И(Р45<4; F45>1);1;0); • в ячейке G2: =ОСТАТ(В1;2) (поэтому значение в ячейке G45 можно не рассчитывать). Однако все перечисленные формулы придется вводить «вручную». Можно упростить ввод формул, если указать весомости разрядов в отдельных ячейках (это легко сделать, используя автозаполнение ячеек): А В С D Е F G 45 Осталось: 46 Весомости 32 16 8 4 2 1 Тогда значения «остатков» могут быть вычислены по единообразной формуле, которая вводится в ячейку С45: =В45-В2*В46, а затем распространяется (копируется) на ячейки диапазона D45:G45 (формула в ячейке В45 — та же: =В1). Аналогично могут быть определены двоичные цифры: в ячейку С2 вводится формула =ЕСЛИ(И(С45<В46;С45>=С46);1 ;0), которая затем распространяется (копируется) на ячейки диапазона D2:G2 (формула в ячейке В2: =ЕСЛИ(В45>=В46;1 ;0)). ► 17.3.12. Нетрудно убедиться, что на листе, оформленном применительно к предыдущему заданию, для чисел, меньших 32, будут выводиться и начальные нули. Измените оформление листа так, чтобы они не выводились. Указания по выполнению Определите условие, при котором нулевые значения должны выводиться. Комментарии к выполнению Нулевые значения должны выводиться только в случае, если в разрядах слева есть хотя одна единица (в противном случае выводится «пустое» значение). Это условие можно формализовать так — если сумма значений во всех ячейках левее текущей больше нуля. Для ячейки В2 соответствующая формула имеет вид:
Глава 17. Системы счисления и электронные таблицы 257 =ЕСЛИ(В45>=В46;1 ;ЕСЛИ(СУММ($А2:А2)>0;0;"")). Она может быть распространена (скопирована) на ячейки диапазона C2:G2. Однако при этом в ячейках C45:G45 будет ошибка (в них будет использоваться пустое значение “”). Устранить ее можно, рассуждая так — значение в указанных ячейках должно быть уменьшено только если в предыдущем разряде была цифра 1 (в противном случае значение не изменится). Соответствующая формула в ячейке С45: =ЕСЛИ(В2=1 ;В45-В2*В46;В45). Она также может быть распространена на ячейки диапазона D45:G45. ► 17.3.13. В ячейку В1 вводится десятичное число от 1 до 127. Подготовьте лист для получения в ячейках В2:12 тех степеней числа 2, из которых можно сформировать это число: А В С D Е F G I 1 Введите десятичное число: 83 2 Используются степени двойки: 64 16 2 1 Комментарии к выполнению После перевода заданного числа в двоичную систему в ячейках В2:12 вывести весомости соответствующих разрядов, используя функцию ЕСЛИ. ► 17.3.14. (См. задачу 2.12 «Семь кошельков») Подготовьте лист для получения в ячейках В2:12 номеров кошельков, которые следует выдать с суммой от 1 до 127 рублей, задаваемой в ячейке В2: А В С D Е F G I 1 Введите сумму денег: 2 Надо выдать кошельки с номерами: 7 5 2 1 Комментарии к выполнению После перевода заданной суммы в двоичную систему в ячейках В2:12 вывести требуемые номера кошельков (разрядов), записав их и используя функцию ЕСЛИ. ► 17.3.16. (См. задачу 2.13 «Банкир и конверты») Подготовьте лист для получения номеров конвертов, которые следует выдать с суммой от 1 до 1 ООО ООО у.е., задаваемой в ячейке В2:
258 Глава 17. Системы счисления и электронные таблицы ► 17.3.17. Получите на листе двоичные представления десятичных чисел N из интервала 1-15: А В С D Е F 1 N 2 1 1 3 1 0 2 4 1 1 3 15 14 16 1 1 1 1 15 Комментарии к выполнению Весомости разрядов запишите, например, в строке 60, а значения «остатков» для каждого из 15 чисел получите в строках 41-55. В строке 41: • формула в ячейке В41: =F2; •формула в ячейке С41: =ЕСЛИ(В2=1 ;В41-В2*В$60;В41) — может быть распространена (скопирована) на ячейки D41 :Е41. Все формулы строки 41 могут быть скопированы в соответствующие ячейки строк 42-55. ► 17.3.18. Подготовьте лист для получения в ячейках B3:G3 записи заданного целого десятичного числа в системе счисления с основанием 2-9, задаваемым в ячейке В1: А В С D Е F G 1 Введите основание системы: 2 Введите целое число: 3 Его запись в этой системе: Примечание При вводе исходных данных следует учитывать ограничения на разрядность выводимого в ячейках B3:G3 результата. Комментарии к выполнению Задание выполняется во многом аналогично заданию 17.3.11. Отличие: 1) в весомостях разрядов. Например, для троичной системы они следующие:
Глава 17. Системы счисления и электронные таблицы 259 А В С D Е F G 45 Осталось: 46 Весомости 243 81 27 9 3 1 2) цифры в ячейках могут B2:G2 могут быть больше 1 и определяются как целая часть от деления величины остатка на весомость соответствующего разряда; 3) значения в строке 45 определяются с учетом не только весомости, но и цифры в предыдущем (старшем) разряде. ► 17.4. Взаимосвязь между системами счисления с основаниями q = p” Методики перевода чисел из системы счисления с основанием р в систему с основанием q = рп и из системы счисления с основанием q = рт в систему с основанием р, где т — натуральное число, приведены в приложении 1. ► 17.4.1. В ячейку В1 вводится цифра четверичной системы счисления. Подготовьте лист для получения в ячейках В2 и С2 цифр соответствующего двоичного числа (в том числе возможного начального нуля или двух нулей): А В С 1 Введите четверичную цифру: 2 2 Цифры соответствующего двоичного числа: 1 0 ► 17.4.2. В ячейку В1 вводится одна из цифр четверичной системы счисления — 1,2 или 3. Подготовьте лист для получения в ячейке В2 соответствующего сочетания двух двоичных цифр (с возможным начальным нулем): А В 1 Введите четверичную цифру: 1 2 Соответствующее сочетание двоичных цифр: 01 Возможные способы выполнения задания: 1) использованием трех функций ЕСЛИ; 2) без использования указанной функции;
260 Глава 17. Системы счисления и электронные таблицы Указание по выполнению Используйте функцию ВЫБОР 3) без использования функций ЕСЛИ и ВЫБОР. Комментарии к выполнению 2) формула в ячейке В2: =ВЫБОР(В1;,,01,,;,,10,,;,,1Г); 3) после выделения отдельных цифр используйте функцию СЦЕПИТЬ. ► 17.4.3. Выполните предыдущее задание для случая использования функции ВЫБОР, когда в ячейку В1 вводится и цифра 0. Комментарии к выполнению Так как в функции ВЫБОР значение ее первого аргумента не может быть равно нулю (оно равно 1, 2, 3, ...), то приходится «хитрить» (©) — использовать в формуле значение в ячейке В1 (которое может быть равно и нулю), увеличенное на 1: =ВЫБОР(В1+1 ;"00,,;м01 ";"10";"11"). ► 17.4.4. В ячейку В1 вводится цифра восьмеричной системы счисления. Подготовьте лист для получения в ячейках B2:D2 цифр соответствующего трехзначного двоичного числа (в том числе возможного начального нуля, или двух начальных нулей, или трех нулей): А В С D 1 Введите восьмеричную цифру: 6 2 Цифры соответствующего двоичного числа: 1 1 0 Комментарии к выполнению Наиболее простой вариант формул в ячейках В2 и D2 — соответственно =ЦЕЛОЕ(В1/4) и =ОСТАТ(В1;2). Формула в ячейке С2: =ЦЕЛОЕ((В1- В2*4)/2) или =ОСТАТ(ЦЕЛОЕ(В1/2);2). ► 17.4.5. В ячейку В1 вводится одна из восьми цифр восьмеричной системы счисления. Подготовьте лист для получения в ячейке В2 соответствующего сочетания трех двоичных цифр (с возможными начальными нулями или в виде трех нулей): А В 1 Введите восьмеричную цифру. 5 2 Соответствующее сочетание двоичных цифр: 101 Функцию ЕСЛИ не использовать.
Глава 17. Системы счисления и электронные таблицы 261 Комментарии к выполнению См. комментарии к выполнению задания 17.4.2. ► 17.4.6. В ячейку В1 вводится одно из чисел от 0 до 15. Подготовьте лист для получения в ячейке В2 соответствующей цифры шестнадцатеричной системы счисления: А В 1 Введите число: 12 2 Соответствующая 16-ичная цифра: С ► 17.4.7. В ячейку В1 вводится одна из цифр шестнадцатеричной системы счисления (0, 1,2, ..., 9, А, В, ..., F). Подготовьте лист для получения в ячейке В2 соответствующего десятичного числа: А В 1 Введите 16-ичную цифру: С 2 Соответствующее число: 12 Указания по выполнению 1. Используйте в формуле функцию ЕСЛИ. 2. Для цифр-букв используйте функцию КОДСИМВ. 3. Коды прописных латинских букв установите самостоятельно. Комментарии к выполнению Формула в ячейке В2: =ЕСЛИ(В1<10;В1 ;КОДСИМВ(В1)-64+9). ► 17.4.8. В ячейку В1 вводится двузначное шестнадцатеричное число, состоящее только из цифр, совпадающих с десятичными цифрами (естественно, оно вводится как десятичное). Подготовьте лист для получения в ячейках В2 и С2 цифр заданного числа: А В С 1 Введите шестнадцатеричное число: 92 2 Его цифры: 9 2 ► 17.4.9. В ячейку В1 вводится двузначное шестнадцатеричное число, состоящее только из цифр-букв (естественно, оно вводится как текст). Подготовьте лист для получения в ячейках В2 и С2 его цифр:
262 Глава 17. Системы счисления и электронные таблицы А В С 1 Введите шестнадцатеричное число: СА 2 Его цифры: С А Указания по выполнению Используйте функции ЛЕВСИМВ и ПРАВСИМВ. ► 17.4.10. В ячейку В1 вводится двузначное шестнадцатеричное число (естественно, как десятичное или как текст). Подготовьте лист для получения в ячейках В2 и С2 его цифр: А В С 1 Введите шестнадцатеричное число: 2D 2 Его цифры: 2 D Указания по выполнению Используйте функции ЕСЛИ, ЕЧИСЛО и др. Комментарии к выполнению Формулы в ячейках В1 и С1 соответственно: =ЕСЛИ(ЕЧИСЛО(В1);ЦЕЛОЕ(В1/Ю);ЛЕВСИМВ(В1;1)) =ЕСЛИ(ЕЧИСЛО(В1);ОСТАТ(В1;Ю);ПРАВСИМВ(В1;1)). ► 17.4.11. В ячейку В1 вводится одно из чисел от 0 до 15 (числа 10-15 — условные цифры шестнадцатеричной системы счисления). Подготовьте лист для получения в ячейках В2:Е2 цифр соответствующего двоичного числа (в том числе возможных начальных нулей или четырех нулей): А В С D Е 1 Введите число: 9 2 Цифры соответствующего двоичного числа: 1 0 0 1 Комментарии к выполнению Наиболее простые варианты формул в ячейках В2, С2, D2, Е2 — соответственно: =ЦЕЛОЕ(В1/8), =ЦЕЛОЕ((В1 -В2*8)/4), =ОСТАТ(ЦЕЛОЕ(В11/2);2), =ОСТАТ(В1;2).
Глава 17. Системы счисления и электронные таблицы 263 ► 17.4.12. В ячейку В1 вводится одна из цифр шестнадцатеричной системы счисления (0, 1, 2, ..., 9, А, В, ..., F). Подготовьте лист для получения в ячейках В2:Е2 цифр соответствующего 4-значного двоичного числа (с возможными начальными нулями): А В С D Е 1 Введите шестнадцатеричную цифру: С 2 Цифры соответствующего двоичного числа: 1 1 0 0 Комментарии к выполнению Вне зоны видимости листа получите числовой эквивалент введенной цифры (см. задание 17.4.7), после чего, используя его, определите четыре искомые цифры как в предыдущем задании. ► 17.4.13. В ячейку В1 вводится одно из чисел от 0 до 15 (числа 10-15 — условные цифры шестнадцатеричной системы счисления). Подготовьте лист для получения в ячейке В2 сочетания четырех двоичных цифр, соответствующего заданному числу (с возможными начальными нулями или виде четырех нулей): А В 1 Введите число: 12 2 Соответствующее сочетание двоичных цифр: 1100 ► 17.4.14. В ячейку В1 вводится одна из цифр шестнадцатеричной системы счисления (0, 1,2, ..., 9, А, В, ..., F). Подготовьте лист для получения в ячейке В2 сочетания четырех двоичных цифр, соответствующего заданной цифре (с возможными начальными нулями или в виде четырех нулей): А В 1 Введите шестнадцатеричную цифру: D 2 Соответствующее сочетание двоичных цифр: 1101 Комментарии к выполнению Вне зоны видимости листа получите числовой эквивалент введенной цифры (см. задание 17.4.7), после чего, используя его, определите искомое сочетание как в предыдущей задаче.
264 Глава 17. Системы счисления и электронные таблицы ► 17.4.15. В ячейку В1 вводится одно из чисел от 0 до 15 (числа 10-15 — условные цифры шестнадцатеричной системы счисления). Подготовьте лист для получения в ячейках В2:С2 цифр соответствующего четверичного числа (в том числе возможного начального нуля или двух нулей): А В С 1 Введите число: 13 2 Цифры соответствующего четверичного числа: 3 1 Комментарии к выполнению Формулы в ячейках В2 и С2 соответственно =ЦЕЛОЕ(В1/4) и =ОСТАТ(В1 ;4). ► 17.4.16. В ячейку В1 вводится одно из чисел от 0 до 15 (числа 10-15 — условные цифры шестнадцатеричной системы счисления). Подготовьте лист для получения в ячейке В2 сочетания двух четверичных цифр, соответствующего заданному числу (с возможным начальным нулем или в виде двух нулей): А В 1 Введите число: 13 2 Соответствующее сочетание четверичных цифр: 31 ► 17.4.17. В ячейку В1 вводится одна из цифр шестнадцатеричной системы счисления (0, 1,2, ..., 9, А, В, ..., F). Подготовьте лист для получения в ячейках В2:С2 цифр соответствующего двузначного четверичного числа (в том числе возможного начального нуля или двух нулей): А В С 1 Введите шестнадцатеричную цифру: С 2 Цифры соответствующего четверичного числа: 3 0 ► 17.4.18. В ячейку В1 вводится одна из цифр шестнадцатеричной системы счисления (0, 1, 2, ..., 9, А, В, ..., F). Подготовьте лист для получения в ячейке В2 сочетания двух четверичных цифр, соответствующего заданному числу (с возможным начальным нулем или в виде двух нулей):
Глава 17. Системы счисления и электронные таблицы 265 А В 1 Введите шестнадцатеричную цифру: D 2 Соответствующее сочетание четверичных цифр: 31 ► 17.4.19. В ячейки В1 и С1 вводятся одна или две цифры некоторого двоичного числа. Подготовьте лист для получения в ячейке В2 соответствующей четверичной цифры: А В С 1 Введите 1-2 двоичные цифры. 1 1 2 Соответствующая четверичная цифра: 3 Комментарии к выполнению Формула в ячейке В2: =В1*2+С1. ► 17.4.20. В ячейку В1 вводится одно- или двузначное двоичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующей четверичной цифры: А В 1 Введите двоичное число: 11 2 Соответствующая четверичная цифра: 3 Возможные способы выполнения задания: 1) с использованием трех функций ЕСЛИ; 2) без использования указанной функции. Комментарии к выполнению 2) вне зоны видимости листа получите две цифры заданного числа, после чего, рассматривая их как двоичные, сформируйте в ячейке В2 соответствующее десятичное (четверичное) число. ► 17.4.21. В ячейки B1:D1 вводятся 1-3 цифры некоторого двоичного числа. Подготовьте лист для получения в ячейке В2 соответствующего восьмеричного числа: А В С D 1 Введите 1-3 двоичные цифры: 1 0 1 2 Цифры соответствующего восьмеричного числа: 5
266 Глава 17. Системы счисления и электронные таблицы Комментарии к выполнению Формула в ячейке В2: =B1*4+C1*2+D2. ► 17.4.22. В ячейку В1 вводится не более чем трехзначное двоичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующей восьмеричной цифры: А В 1 Введите двоичное число: 101 2 Соответствующая восьмеричная цифра: 5 Функцию ЕСЛИ не использовать. Комментарии к выполнению Вне зоны видимости листа получите три цифры заданного числа, после чего, рассматривая их как двоичные, сформируйте в ячейке В2 соответствующее десятичное (восьмеричное) число. ► 17.4.23. В ячейки В1:Е1 вводятся 1-4 цифры некоторого двоичного числа, не превышающего 910. Подготовьте лист для получения в ячейке В2 соответствующей шестнадцатеричной цифры: А В С D Е 1 Введите 1-4 двоичные цифры: 1 0 0 1 2 Соответствующая 16-ичная цифра: 9 Комментарии к выполнению Формула в ячейке В2: =B1*8+C1*4+D1*2+E1. ► 17.4.24. Выполните предыдущее задание для случая, когда в ячейки В1:Е1 вводятся 1-4 цифры некоторого двоичного числа, не превышающего 1510. Комментарии к выполнению Рассчитать (например, в ячейке В40) соответствующее десятичное число (как в предыдущем задании). После этого искомое значение в ячейке В2 определяется с использованием функции ВЫБОР, ► 17.4.25. В ячейку В1 вводится не более чем четырехзначное двоичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующей шестнадцатеричной цифры:
Глава 17. Системы счисления и электронные таблицы 267 А В 1 Введите двоичное число: 1101 2 Соответствующая 16-ичная цифра: D ► 17.4.26. В ячейки В1:С1 вводятся 1-2 цифры некоторого четверичного числа, не большего 214. Подготовьте лист для получения в ячейке В2 соответствующей шестнадцатеричной цифры: А В С 1 Введите 1-2 четверичные цифры: 1 3 2 Соответствующая 16-ичная цифра: 7 ► 17.4.27. В ячейки В1:С1 вводятся 1-2 цифры некоторого четверичного числа. Подготовьте лист для получения в ячейке В2 соответствующей шестнадцатеричной цифры: А В С 1 Введите 1-4 двоичные цифры: 2 3 2 Соответствующая 16-ичная цифра: В ► 17.4.28. В ячейку В1 вводится не более чем двухзначное четверичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующей шестнадцатеричной цифры: А В 1 Введите четверичное число: 23 2 Соответствующая 16-ичная цифра: В ► 17.4.29. В ячейки В1 :К1 вводятся 9-10 цифр некоторого двоичного числа. Подготовьте лист для получения в ячейках B2:F2 цифр соответствующего четверичного числа: А В С D Е F G Н I J к 1 Введите 9-10 двоичных цифр числа: 1 1 0 0 0 1 0 1 1 2 Цифры соответствующего четверичного числа: 1 2 0 2 3
268 Глава 17. Системы счисления и электронные таблицы Комментарии к выполнению Формула в ячейке В2: =2*В1+С1, в ячейке С2: =2*D1+E1, ... ► 17.4.30. Если на листе, подготовленном для выполнения предыдущего задания, ввести менее чем 9 цифр, то в результате будут выведены начальные или конечные нули. Кроме того, нули будут выводиться, когда после ввода в ячейки некоторых значений они будут очищены. Устраните эти недостатки. ► 17.4.31. В ячейку В1 вводится некоторое 3-4-значное двоичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 и С2 цифр соответствующего четверичного числа: А В С 1 Введите двоичное число: 1110 2 Цифры соответствующего четверичного числа: 3 2 Задание выполните двумя способами: 1) с переводом заданного двоичного числа в десятичную систему; 2) без такого перевода. Какой способ, по вашему мнению, лучше? Комментарии к выполнению Первый способ Вне зоны видимости листа получите двоичные цифры заданного числа и соответствующее десятичное число: А В С D Е 40 Цифры заданного числа: 1 1 1 0 41 Соответствующее десятичное число: 14 После этого искомые цифры могут быть получены по формулам: • в ячейке В2: =ЦЕЛОЕ(В41/4); • в ячейке С2: =ОСТАТ(В41 ;4). Второй способ После расчета отдельных цифр заданного числа искомые цифры рассчитываются следующим образом: • в ячейке В2: =В40*2+С40; • в ячейке С2: =D40*2+E40. Видно, что второй способ лучше.
Глава 17. Системы счисления и электронные таблицы 269 ► 17.4.32. В ячейку В1 вводится некоторое 3-4-значное двоичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующего четверичного числа: А В 1 Введите двоичное число: 1110 2 Соответствующее четверичное число: 32 ► 17.4.33. В ячейки B1:F1 вводятся 5 цифр некоторого числа в четверичной системе счисления. Подготовьте лист для получения в ячейках В2:К2 цифр соответствующего двоичного числа: А В С D Е F G Н I J К 1 Введите 5 цифр числа в четверичной системе: 1 0 2 3 2 2 Цифры соответствующего двоичного числа: 1 0 0 1 0 1 1 1 0 Указания по выполнению В ячейке В2 возможный начальный ноль выводиться не должен. ► 17.4.34. Выполните предыдущее задание таким образом, что формулы в ячейках D2 и Е2, F2 и G2, Н2 и 12, J2 и К2 вводились путем копирования формул в ячейках В2 и С2 (при этом возможный начальный ноль в ячейке В2 может выводиться). Комментарии к выполнению Вне зоны видимости листа получите (используя формулы) «копии» заданных цифр: А В С D Е F G Н I J К 40 1 0 2 3 2 ► 17.4.35. В ячейку В1 вводится некоторое 4-значное четверичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующего двоичного числа (при этом возможный начальный ноль в ячейке В2 должен выводиться): А В 1 Введите четверичное число: 1023 2 Соответствующее двоичное число: 01001011
270 Глава 17. Системы счисления и электронные таблицы Комментарии к выполнению Получите вне зоны видимости листа отдельные цифры заданного числа, а затем соответствующие им двухсимвольные сочетания, после чего используйте в ячейке В2 функцию СЦЕПИТЬ. ► 17.4.36. В ячейки B1:J1 вводятся 7-9 цифр некоторого двоичного числа. Подготовьте лист для получения в ячейках B2:D2 цифр соответствующего восьмеричного числа: А В С D Е F G Н I J 1 Введите 7-9 двоичных цифр числа: 1 1 0 0 0 1 1 0 2 Цифры соответствующего восьмеричного числа 3 0 6 Комментарии к выполнению Формула в ячейке В2: =4*B1+2*C1+D1, в ячейке С2: =4*E1+2*F1+G1, в ячейке D2: =4*Н1+2*И+Л. ► 17.4.37. Если на листе, подготовленном для решения предыдущей задачи, ввести менее чем 7 цифр, то в результате будут выведены начальные или конечные нули. Кроме того, нули будут выводиться, когда после ввода в ячейки B1:J1 некоторых значений они будут очищены. Устраните эти недостатки. ► 17.4.38. В ячейку В1 вводится некоторое 4-6-значное двоичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 и С2 цифр соответствующего восьмеричного числа: А В С 1 Введите двоичное число: 11110 2 Цифры соответствующего четверичного числа: 3 6 ► 17.4.39. В ячейку В1 вводится некоторое 4-6-значное двоичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующего восьмеричного числа: А В 1 Введите двоичное число: 11110 2 Соответствующее восьмеричное число: 36 ► 17.4.40. В ячейки B1:D1 вводятся 3 цифры некоторого числа в восьмеричной системе счисления. Подготовьте лист для получения в ячейках B2:J2 цифр соответствующего двоичного числа:
Глава 17. Системы счисления и электронные таблицы 271 А В С D Е F G Н I J 1 Введите 3 цифры числа в восьмеричной системе: 5 2 6 2 Цифры соответствующего двоичного числа: 1 0 1 0 1 0 1 1 0 Указания по выполнению В ячейке В2 возможный начальный ноль выводиться не должен. ► 17.4.41. В ячейку В1 вводится некоторое трехзначное восьмеричное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующего двоичного числа (при этом возможные начальные нули в ячейке В2 должны выводиться): А В 1 Введите восьмеричное число: 352 2 Соответствующее двоичное число: 011101010 ► 17.4.42. В ячейки В1:11 вводятся 5-8 цифр некоторого двоичного числа. Подготовьте лист для получения в ячейках В2 и С2 цифр соответствующего шестнадцатеричного числа: А В С D Е F G Н I 1 Введите 5-8 двоичных цифр числа: 1 1 0 1 1 1 0 2 Цифры соответствующего шестнадцатеричного числа: 6 Е Комментарии к выполнению Вне зоны видимости листа получите десятичные числовые значения цифр заданного числа: А В С 40 6 14 После этого искомые цифры могут быть получены с использованием функции ВЫБОР (см. задание 17.4.6). ► 17.4.43. В ячейку В1 вводится некоторое 5-8-значное двоичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 и С2 цифр соответствующего шестнадцатеричного числа:
272 Глава 17. Системы счисления и электронные таблицы А В С 1 Введите двоичное число: 1101110 2 Цифры соответствующего шестнадцатеричного числа: 6 Е ► 17.4.44. В ячейку В1 вводится некоторое не более чем 8-значное двоичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующего шестнадцатеричного числа: А В 1 Введите двоичное число: 1101110 2 Соответствующее шестнадцатеричное число: 6Е ► 17.4.45. В ячейки В1:С1 вводятся две цифры некоторого числа в шестнадцатеричной системе счисления. Подготовьте лист для получения в ячейках В2:12 цифр соответствующего двоичного числа: А В С D Е F G Н I 1 Введите 2 цифры числа в 16-ичной системе: 5 А 2 Цифры соответствующего двоичного числа: 1 0 1 1 0 1 0 ► 17.4.46. В ячейку В1 вводится некоторое двузначное шестнадцатеричное число (естественно, как десятичное или как текст). Подготовьте лист для получения в ячейке В2 соответствующего двоичного числа (при этом возможные начальные нули в ячейке В2 должны выводиться): А В 1 Введите 16-ичное число: 6Е 2 Соответствующее двоичное число: 01101110 Комментарии к выполнению Вне зоны видимости листа получить: 1) отдельные цифры заданного числа (см. задание 17.4.10); 2) их десятичные числовые эквиваленты (см. задание 17.4.7); 3) соответствующие сочетания четырех двоичного цифр (см. задание 17.4.13).
Глава 17. Системы счисления и электронные таблицы 273 А В С 40 Цифры заданного числа: 6 Е 41 Их десятичные числовые эквиваленты: 6 14 42 Соответствующие сочетания четырех двоичных цифр: 0110 1110 В ячейке В2 используйте функцию СЦЕПИТЬ. ► 17.4.47. В ячейки В1:11 вводятся 5-6 цифр некоторого четверичного числа. Подготовьте лист для получения в ячейках B2:D2 цифр соответствующего шестнадцатеричного числа: А В С D Е F G 1 Введите 5-6 четверичных цифр числа: 3 1 2 3 0 3 2 Цифры соответствующего шестнадцатеричного числа: 7 В 3 ► 17.4.48. В ячейку В1 вводится некоторое 5-6-значное четверичное число (естественно, как десятичное). Подготовьте лист для получения в ячейках B2:D2 цифр соответствующего шестнадцатеричного числа: А В С D 1 Введите четверичное число: 231201 2 Цифры соответствующего шестнадцатеричного числа: В 6 1 ► 17.4.49. В ячейку В1 вводится некоторое не более чем 6-значное четверичное число (естественно, как десятичное). Подготовьте лист для получения в ячейке В2 соответствующего шестнадцатеричного числа: А В 1 Введите четверичное число: 231201 2 Соответствующее шестнадцатеричное число: В61 ► 17.4.50. В ячейки B1:D1 вводятся три цифры некоторого числа в шестнадцатеричной системе счисления. Подготовьте лист для получения в ячейках B2:G2 цифр соответствующего четверичного числа:
274 Глава 17. Системы счисления и электронные таблицы А В С D Е F G 1 Введите 3 цифры числа в шестнадцатеричной системе: 5 А D 2 Цифры соответствующего четверичного числа: 1 1 2 2 3 1 ► 17.4.51. В ячейку В1 вводится некоторое двузначное шестнадцатеричное число (естественно, как десятичное или как текст). Подготовьте лист для получения в ячейке В2 соответствующего четверичного числа (при этом возможные начальные нули в ячейке В2 могут выводиться): А В 1 Введите шестнадцатеричное число: 6Е 2 Соответствующее четверичное число: 2232 ► 17.5. Представление целых чисел ► 17.5.1. Подготовьте лист для получения в ячейках В2:12 прямого кода целого отрицательного числа N из интервала -128 до -1, вводимого в ячейку В1: А В С D Е F G Н I 1 Введите число N: -10 2 Прямой код: 1 0 0 0 1 0 1 0 Комментарии к выполнению Вне зоны видимости листа получить модуль заданного числа и его двоичное представление (см. раздел 17.3). Обратите внимание на значение в ячейке В2. ► 17.5.2. Подготовьте лист для получения в ячейках В2:12 прямого кода целого числа N из интервала -128 до 127, вводимого в ячейку В1: А В С D Е F G Н I 1 Введите число N: 10 2 Прямой код: 0 0 0 0 1 0 1 0 Комментарии к выполнению Вне зоны видимости листа получите модуль заданного числа и его двоичное представление (см. раздел 17.3). Значение в ячейке В2 зависит от знака заданного числа.
Глава 17. Системы счисления и электронные таблицы 275 ► 17.5.3. В ячейки В1:11 вводятся цифры прямого кода модуля некоторого отрицательного числа из интервала -128 до -1. Подготовьте лист для получения в ячейках В2:12 обратного кода этого числа: А В С D Е F G Н I 1 Прямой код модуля: 0 1 0 1 1 1 0 0 2 Обратный код: 1 0 1 0 0 1 0 0 Задание выполните двумя способами: 1) с использованием функции ЕСЛИ; 2) без использования указанной функции. Комментарии к выполнению 2) формула в ячейке В2: =1-В1 (она может быть скопирована на ячейки С2:12). ► 17.5.4. Подготовьте лист для получения в ячейках В2:12 прямого кода целого числа N из интервала -128 до 127 (значение N вводится в ячейку В1): А В С D Е F G Н I 1 Введите число N: 2 Прямой код: ► 17.5.5. В ячейки В1:11 вводятся двоичные цифры прямого кода модуля некоторого отрицательного числа из интервала -1..-128. Оформите лист для получения в ячейках В2:12 представления дополнительного кода заданного числа: А В С D Е F G Н I 1 Введите двоичные цифры прямого кода модуля: 0 1 1 1 1 1 1 1 2 Дополнительный код числа: 1 0 0 0 0 0 0. 1 Комментарии к выполнению Вне зоны видимости листа получите: 1) обратный код заданного модуля (см. задание 17.5.3); 2) двоичное число, на 1 большее обратного кода (см. задания 17.7.7- 17.7.8).
276 Глава 17. Системы счисления и электронные таблицы ► 17.5.6. Подготовьте лист для получения в ячейках В2:Н2 внутреннего представления отрицательного числа из интервала -128 до -1, вводимого в ячейку В1: А В С D Е F G Н I 1 Введите число N: -127 2 Его представление: 1 0 0 0 0 0 0 1 ► 17.5.7. Оформите лист для получения в ячейках В2:12 двоичного кода задаваемого в ячейке В1 целого десятичного числа из интервала -128... 127. Для отрицательных значений должен быть выведен дополнительный код: А В С D Е F G Н I 1 Введите десятичное число: 2 Двоичное представление этого числа: Указания по выполнению Вне зоны видимости листа, например, в строке 40, получите прямой код модуля заданного числа (см. раздел 17.3), а в строке 43 — дополнительный код отрицательного числа с полученным модулем (см. задание 17.5.5): А В С D Е F G Н I 40 Прямой код модуля: 41 Обратный код: 42 43 Дополнительный код: Для вывода требуемого результата используйте функцию ЕСЛИ. ► 17.5.8. В ячейки В1:11 вводятся двоичные цифры внутреннего представления некоторого отрицательного числа (то есть цифры его дополнительного кода). Оформите лист для получения в ячейках В2:12 двоичных цифр модуля этого числа: А В С D Е F G Н I 1 Введите цифры. 2 Цифры модуля этого числа:
Глава 17. Системы счисления и электронные таблицы 277 Возможные методы выполнения задания: 1) с вычитанием единицы; 2) без вычитания единицы [2]. Комментарии к выполнению 1) о вычитании единицы — см. задания 17.1.13 и 17.7.11; 2) см. задание 17.1.12. ► 17.5.9. В ячейки В1:11 вводятся двоичные цифры внутреннего представления некоторого десятичного числа со знаком (для отрицательного числа — его дополнительного кода). Оформите лист для получения в ячейках В2:12 двоичных цифр модуля этого числа: А В С D Е F G Н I 1 Введите цифры: 2 Цифры модуля этого числа: Комментарии к выполнению Для положительного числа двоичные цифры модуля совпадают с заданными, для отрицательного — искомые цифры надо восстановить, как в предыдущем задании. Получив вне зоны видимости листа два возможных варианта ответа, для вывода требуемого результата используйте функцию ЕСЛИ. ► 17.5.10. В ячейки В1:11 вводятся двоичные цифры внутреннего представления некоторого десятичного числа со знаком (для отрицательного числа — его дополнительного кода). Оформите лист для получения в ячейке В2 этого числа: А В С D Е F G Н I 1 Введите цифры: 2 Цифры модуля этого числа: ► 17.6. Логические и сдвиговые операции В данном разделе приведены задания на использование поразрядных логических и сдвиговых операций с числами (см. главу 6). ► 17.6.1. Подготовьте лист для определения результата логической операции AND применительно к двум двоичным цифрам X и Y: А В 1 X: 2 У: 3 X AND У:
278 Глава 17. Системы счисления и электронные таблицы Возможные варианты решения: 1) с рассмотрением всех четырех возможных вариантов (использование трех функций ЕСЛИ); 2) с использованием логических функций И и ИЛИ; 3) с использованием только логической функций И; 4) без использования функций И и ИЛИ. Комментарии к выполнению Формулы в ячейке ВЗ для вариантов задания: 3) =ЕСЛИ(И(В1=1; В2=1);1;0); 4) =ЕСЛИ(В1+ В2=2;1;0). ► 17.6.2. Подготовьте лист для определения результата логической операции AND применительно к трем двоичным цифрам X, Y и Z: А В 1 X: 2 У: 3 Z: 4 X AND У AND Z: Логические функции И и ИЛИ не использовать. Комментарии к выполнению Формула в ячейке В4: =ЕСЛИ(В1+ В2 + ВЗ = 3;1 ;0). ► 17.6.3. Подготовьте лист для определения результата логической операции AND применительно к пяти двоичным цифрам: А В 1 А. 2 В: 3 С: 4 D: 5 Е: 6 A AND В AND С AND D AND Е: Логические функции И и ИЛИ не использовать. Комментарии к выполнению Формула в ячейке В4: =ЕСЛИ(СУММ(В1:В5) = 5;1;0). ► 17.6.4. Подготовьте лист для определения результата логической операции OR применительно к двум двоичным цифрам:
Глава 17. Системы счисления и электронные таблицы 279 А В 1 X: 2 У: 3 X OR У: Возможные варианты решения: 1) с рассмотрением всех четырех возможных вариантов (использование трех функций ЕСЛИ); 2) с использованием логических функций И и ИЛИ; 3) с использованием только логической функций И; 4) без использования функций И и ИЛИ. Комментарии к выполнению Формулы в ячейке ВЗ для вариантов задания: 3) =ЕСЛИ(И(В1=0; В2=0);0;1); 4) =ЕСЛИ(В1+ В2>0;1;0). ► 17.6.5. Подготовьте лист для определения результата логической операции XOR («исключающего ИЛИ») применительно к двум двоичным цифрам: А В 1 X: 2 У: 3 XXOR У: Возможные методы выполнения задания: 1) с рассмотрением всех четырех возможных вариантов (использование трех функций ЕСЛИ); 2) с использованием формулы, работающей по схеме: если с функциями ИЛИ и И то 1 иначе О все 3) без использования логических функций И и ИЛИ; 4) без использования трех указанных функций. Комментарии к выполнению Задание выполняется аналогично заданию 17.7.1.
280 Глава 17. Системы счисления и электронные таблицы ► 17.6.6. В ячейках В1:Н1 вводятся цифры 8-значного двоичного представления некоторого числа N. Смоделируйте на листе действие логической операции NOT над этим числом, то есть получите двоичную запись, в которой единицы заменены на нуль и наоборот: А В С D Е F G н I 1 N: 1 1 0 1 1 1 0 0 2 NOT N: 0 0 1 0 0 0 1 1 Задание выполните двумя способами: 1) с использованием функции ЕСЛИ; 2) без использования указанной функции. Комментарии к выполнению задания вторым способом Формула в ячейке В2: =1-В1 (она может быть скопирована на ячейки С2:12). ► 17.6.7. Если на листе, оформленном применительно к предыдущей задаче, ввести менее чем 8-значное представление числа N, то в строке 2 будут выведены начальные нули. Оформите лист таким образом, чтобы возможные начальные нули не выводились. Указания по выполнению Определите условие, при котором нулевые значения должны выводиться. Комментарии к выполнению Нулевые значения должны выводиться только в случае, если в разрядах слева есть хотя одна единица (в противном случае выводится «пустое» значение). Это условие можно формализовать так — если сумма значений во всех ячейках левее текущей больше нуля. Так как для всех ячеек желательно получить аналогичную формулу, то указанное условие следует применить и к ячейке В2. Для нее соответствующая формула примет вид: =ЕСЛИ(В1 =0;1 ;ЕСЛИ(СУММ(А2:А2)>0;0;ММ)); • для ячейки С2: =ЕСЛИ(С1=0;1 ;ЕСЛИ(СУММ(А2:В2)>0;0;"")); • для ячейки D2: =ЕСЛИ(01=0;1;ЕСЛИ(СУММ(А2:С2)>0;0;"")) и т. п. Анализ показывает, что можно записать в ячейку В2 общую формулу со смешанным адресом: =ЕСЛИ(В1=0;1;ЕСЛИ(СУММ($А2:А2)>0;0;"")), после чего распространить (скопировать) ее на ячейки диапазона С2:12.
Глава 17. Системы счисления и электронные таблицы 281 ► 17.6.8. Подготовьте лист для получения в ячейках ВЗ:НЗ двоичного представления результата применения логической операции AND к двум двоичным числам, цифры которых задаются в ячейках В1 :Н2: А В С D Е F G Н 1 X: 2 У: 3 X AND У: ► 17.6.9. Подготовьте лист для получения в ячейках ВЗ:НЗ двоичного представления результата применения логической операции OR к двум двоичным числам, цифры которых задаются в ячейках В1 :Н2: А В с D Е F G Н 1 X: 2 У: 3 X OR У ► 17.6.10. Подготовьте лист для получения в ячейках ВЗ:НЗ двоичного представления результата применения логической операции XOR к двум двоичным числам, цифры которых задаются в ячейках В1 :Н2: А В с D Е F G Н 1 X: 2 У: 3 XXOR У ► 17.6.11. В ячейку В1 вводятся положительное целое десятичное число N, не превышающее 255. Подготовьте лист для получения в ячейках В2:Н2 двоичной записи значения NOT N, где NOT — логическая операция, применяемая к числу: А В С D Е F G Н I 1 N: 17 2 Двоичная запись числа NOT N: 1 1 1 0 1 1 1 0 Комментарии к выполнению Получить (вне зоны видимости листа) двоичное представление числа N (см. раздел 17.3), после чего применить к нему логическую операцию NOT (см. решение задания 17.6.4).
282 Глава 17. Системы счисления и электронные таблицы ► 17.6.12. В ячейки В1 и В2 вводятся положительные целые десятичные числаХ и Y, не превышающие 255. Подготовьте лист для получения в ячейках ВЗ:НЗ двоичной записи значения X AND Y, где AND — логическая операция, применяемая к числам: А В С D Е F G Н 1 X: 2 У: 3 X AND У: ► 17.6.13. В ячейки В1 и В2 вводятся положительные целые десятичные числам и Y, не превышающие 255. Подготовьте лист для получения в ячейках ВЗ:НЗ двоичной записи значения X OR У, где OR — логическая операция, применяемая к числам: А В С D Е F G Н 1 X: 2 У: 3 X OR У: ► 17.6.14. В ячейки В1 и В2 вводятся положительные целые десятичные числаХ и Y, не превышающие 255. Подготовьте лист для получения в ячейках ВЗ:НЗ двоичной записи значения XXOR У, где XOR — логическая операция, применяемая к числам: А В С D Е F G Н 1 X: 2 У: 3 XXOR У: ► 17.6.15. В ячейку В1 вводятся положительное целое десятичное число N, не превышающее 255. Подготовьте лист для получения в ячейке В2 десятичного числа, равного NOT N, где NOT — логическая операция, применяемая к числу: А В 1 N: 17 2 NOT N: 18
Глава 17. Системы счисления и электронные таблицы 283 Комментарии к выполнению Получите (вне зоны видимости листа) двоичное представление числа, равного NOT N (см. задание 17.6.9), после чего определите искомое десятичное значение с учетом его знака (см. разделы 17.3 и 17.5). ► 17.6.16. В ячейки В1 и В2 вводятся положительные целые десятичные числаХ и У, не превышающие 255. Подготовьте лист для получения в ячейке ВЗ десятичного числа, равного X AND 7, где AND — логическая операция, применяемая к числам: А В 1 X: 25 2 У: 43 3 X AND У: 9 Получите (вне зоны видимости листа) двоичное представление числа, равного X AND Y (см. задание 17.6.10), после чего определите искомое десятичное значение (см. раздел 17.3). ► 17.6.17. В ячейки В1 и В2 вводятся положительные целые десятичные числаХ и Y, не превышающие 255. Подготовьте лист для получения в ячейке ВЗ десятичного числа, равного X OR Y, где OR — логическая операция, применяемая к числам: А В 1 X: 25 2 У: 43 3 X OR У: 59 ► 17.6.18. В ячейки В1 и В2 вводятся положительные целые десятичные числа X и У, не превышающие 255. Подготовьте лист для получения в ячейке ВЗ десятичного числа, равного X XOR Y, где XOR — логическая операция, применяемая к числам: А В 1 X: 25 2 У: 43 3 XXOR У: 50 ► 17.6.19. В ячейку В1 вводятся отрицательное целое десятичное число N, не меньшее -128. Подготовьте лист для получения в ячейках
284 Глава 17. Системы счисления и электронные таблицы В2:Н2 двоичной записи значения NOT N, где NOT — логическая операция, применяемая к числу: А В С D Е F G Н I 1 /V: -17 2 Двоичная запись числа NOT N: 0 0 0 1 0 0 0 0 Комментарии к выполнению Получите (вне зоны видимости листа) дополнительный код числа N (см. задание 17.5.6): 41 abs(N): 0 0 0 1 0 0 0 1 42 NOT abs(N): 1 1 1 0 1 1 1 0 43 Дополнительный код 1 1 1 0 1 1 1 1 — после чего примените к нему логическую операцию NOT (см. задание 17.6.4). ► 17.6.20. В ячейки В1 и В2 вводятся отрицательные целые десятичные числа X и У, не меньшие -128. Подготовьте лист для получения в ячейках ВЗ:НЗ двоичной записи значения X AND У, где AND — логическая операция, применяемая к числам: А В С D Е F G Н I 1 X: -17 2 У: -5 3 X AND У 1 1 1 0 1 0 1 1 Комментарии к выполнению Получите дополнительные коды заданных чисел, после чего примените к ним логическую операцию AND (см. задание 17.6.6): 41 abs(X): 0 0 0 1 0 0 0 1 42 NOT abs(X): 1 1 1 0 1 1 1 0 43 Дополнительный кодХ 1 1 1 0 1 1 1 1 51 abs(y): 1 0 1 52 NOT abs(y): 1 1 1 1 1 0 1 0 53 Дополнительный код У 1 1 1 1 1 0 1 1
Глава 17. Системы счисления и электронные таблицы 285 ► 17.6.21. В ячейки В1 и В2 вводятся отрицательные целые десятичные числа X и 7, не меньшие -128. Подготовьте лист для получения в ячейках ВЗ:НЗ двоичной записи значения X OR 7, где OR — логическая операция, применяемая к числам: А В С D Е F G Н I 1 X: -17 2 У: -5 3 X OR У 1 1 1 1 1 1 1 1 ► 17.6.22. В ячейки В1 и В2 вводятся отрицательные целые десятичные числа X и 7, не меньшие -128. Подготовьте лист для получения в ячейках ВЗ:НЗ двоичной записи значения X XOR 7, где XOR — логическая операция, применяемая к числам: А В С D Е F G Н I 1 X: -17 2 У: -5 3 XXOR У 0 0 0 1 0 1 0 0 ► 17.6.23. В ячейку В1 вводятся отрицательное целое десятичное число N, не меньшее -128. Подготовьте лист для получения в ячейке В2 десятичного числа, равного NOT N, где NOT — логическая операция, применяемая к числу: А В 1 /V: -17 2 NOT N: 16 Комментарии к выполнению Получите (вне зоны видимости листа) двоичное представление числа, равного NOT N (см. задание 17.6.13) после чего определите искомое десятичное значение (см. раздел 17.3). ► 17.6.24. В ячейки В1 и В2 вводятся отрицательные целые десятичные числа X и 7, не меньшие -128. Подготовьте лист для получения в ячейке ВЗ десятичного числа, равного X AND 7, где AND — логическая операция, применяемая к числам:
286 Глава 17. Системы счисления и электронные таблицы А В 1 X. -17 2 У: -5 3 X AND У -21 Комментарии к выполнению Получите (вне зоны видимости листа) двоичное представление числа, равного X AND Y (см. задание 17.6.20) после чего определите искомое десятичное значение с учетом его знака (см. разделы 17.3 и 17.5). ► 17.6.25. В ячейки В1 и В2 вводятся отрицательные целые десятичные числа X и У, не меньшие -128. Подготовьте лист для получения в ячейке ВЗ десятичного числа, равного X OR У, где OR — логическая операция, применяемая к числам: А В 1 X: -17 2 У: -5 3 X OR У -1 ► 17.6.26. В ячейки В1 и В2 вводятся отрицательные целые десятичные числа X и 7, не меньшие -128. Подготовьте лист для получения в ячейке ВЗ десятичного числа, равного X XOR Y, где XOR — логическая операция, применяемая к числам: А В 1 X: -17 2 У: -5 3 XXOR У 20 В заданиях 17.6.27-17.6.32 в ячейках В1:Н1 хранятся двоичные цифры беззнакового представления некоторого числа N. ► 17.6.27. Смоделируйте на листе действие сдвиговой операции SHR 1 (сдвиг вправо) на 1 над этим числом, то есть получите в ячейках В2:Н2 двоичные цифры числа, равного N SHR 1: А В С D Е F G Н I 1 Введите 8 двоичных цифр: 1 1 0 1 1 1 0 1 2 Двоичные цифры числа N SHR 1 0 1 1 0 1 1 1 0
Глава 17. Системы счисления и электронные таблицы 287 Решение Формула в ячейке С2 (=В1) распространяется (копируется) на ячейки диапазона D2:I2. Однако при этом еще до первого ввода числа N в ячейках С2:12 будут представлены нули, а после ввода значения N в ячейке В2 будет выводиться «пустое» значение (вместо требуемого нуля). Устраните эти недостатки, причем оформите лист так, чтобы искомое значение выводилось после ввода всех цифр числа N. Указание по выполнению Используйте функцию ЕПУСТО. ► 17.6.28. Смоделируйте на листе действие сдвиговой операции SHL 1 (сдвиг влево) на 1 над этим числом, то есть получите в ячейках В2:Н2 двоичные цифры числа, равного N SHL 1: А В С D Е F G Н I 1 Введите 8 двоичных цифр: 1 1 0 1 1 1 0 1 2 Двоичные цифры числа N SHL 1 1 0 1 1 1 0 1 0 ► 17.6.29. Смоделируйте на листе действие сдвиговых операций SHR (сдвиг вправо) над этим числом: 1) на 2; 2) на 3; 3) на 6. ► 17.6.30. Смоделируйте на листе действие сдвиговых операций SHL (сдвиг влево) над этим числом: 1) на 2; 2) на 3; 3) на 6. ► 17.6.31. Смоделируйте на листе действие сдвиговой операции SHR (сдвиг вправо) над этим числом на величину сдвига, задаваемую в ячейке В2: А В С D Е F G Н I 1 Введите 8 двоичных цифр: 1 1 0 1 1 1 0 1 2 Введите величину сдвига s (s > 0): 4 3 Двоичные цифры числа A/SHRs 0 0 0 0 1 1 0 1
288 Глава 17. Системы счисления и электронные таблицы Указания по выполнению Используйте функцию ВЫБОР. Решение Проанализировав таблицу с значениями в ячейках В3:13 при различных значениях величины сдвига s: S ВЗ СЗ D3 ЕЗ F3 G3 НЗ 13 1 0 В1 С1 D1 Е1 F1 G1 Н1 2 0 0 В1 С1 D1 Е1 F1 G1 3 0 0 0 В1 С1 D1 Е1 F1 4 0 0 0 0 В1 С1 D1 Е1 5 0 0 0 0 0 В1 С1 D1 6 0 0 0 0 0 0 В1 С1 7 0 0 0 0 0 0 0 В1 можно установить зависимости, которые используются в формулах в ячейках СЗ: 13 (соответственно): =ВЫБОР($В2;В1 ;0;0;0;0;0;0); =ВЫБОР($В2;С1 ;В1 ;0;0;0;0;0); =BblBOP($B2;D1 ;С1 ;В1 ;0;0;0;0); =ВЫБОР($В2;Е1 ;D1 ;С1 ;В1 ;0;0;0); =Bbl50P($B2;F1 ;Е1 ;D1 ;С1 ;В1 ;0;0); =Bbl50P($B2;G1 ;F1 ;Е1 ;D1 ;С1 ;В1 ;0); =ВЫБОР($В2;Н1 ;G1;F1;E1;D1;C1;B1). В ячейку ВЗ можно ввести постоянное значение 0 (в ячейках СЗ и D3 можно использовать функцию ЕСЛИ). ► 17.6.32. Смоделируйте на листе действие сдвиговой операции SHL (сдвиг влево) над этим числом на величину сдвига, задаваемую в ячейке В2: А В С D Е F G Н I 1 Введите 8 двоичных цифр: 1 1 1 0 1 1 0 1 2 Введите величину сдвига s (s> 0): 4 3 Двоичные цифры числа A/SHLs 1 1 0 1 0 0 0 0 ► 17.6.33. В ячейку В1 вводится целое положительное число N, не превышающее 255. Получите на листе двоичное представление результата сдвиговой операции SHR 1 (сдвиг вправо на 1) над этим числом:
Глава 17. Системы счисления и электронные таблицы 289 А В С D Е F G Н I 1 Введите число N: 2 Двоичные цифры числа N SHR 1 ► 17.6.34. В ячейку В1 вводится целое положительное число N, не превышающее 255. Получите на листе двоичное представление результата сдвиговой операции SHL 1 (сдвиг влево на 1) над этим числом: А В С D Е F G Н I 1 Введите число N: 2 Двоичные цифры числа N SHL 1 ► 17.6.35. В ячейку В1 вводится целое положительное число N, не превышающее 255. Получите на листе двоичное представление результата сдвиговой операции SHR над этим числом на величину сдвига, задаваемую в ячейке В2: А В С D Е F G Н I 1 Введите число N: 2 Введите величину сдвига s (s > 0у. 3 Двоичные цифры числа A/SHRs ► 17.6.36. В ячейку В1 вводится целое положительное число N, не превышающее 255. Получите на листе двоичное представление результата сдвиговой операции SHL над этим числом на величину сдвига, задаваемую в ячейке В2: А В С D Е F G Н I 1 Введите число N: 2 Введите величину сдвига s (s > 0): 3 Двоичные цифры числа A/SHLs ► 17.6.37. В ячейку В1 вводится целое положительное число N, не превышающее 255. Получите на листе десятичный результат сдвиговой операции SHR 1 над этим числом:
290 Глава 17. Системы счисления и электронные таблицы А В 1 Введите число А/: 109 2 А/ SHR 1 54 ► 17.6.38. В ячейку В1 вводится целое положительное число N, не превышающее 255. Получите на листе десятичный результат сдвиговой операции SHL 1 над этим числом: А В 1 Введите число N: 35 2 N SHL 1 70 ► 17.6.39. В ячейку В1 вводится целое положительное число N, не превышающее 255. Получите на листе десятичный результат сдвиговой операции SHR над этим числом на величину сдвига, задаваемую в ячейке В2: А В 1 Введите число N: 109 2 Введите величину сдвига s (s > 0): 5 3 A/SHRs 3 ► 17.6.40. В ячейку В1 вводится целое положительное число N, не превышающее 255. Получите на листе десятичный результат сдвиговой операции SHL над этим числом на величину сдвига, задаваемую в ячейке В2: А В 1 Введите число N: 217 2 Введите величину сдвига s (s > 0): 4 3 A/SHLs 208 ► 17.7. Сложение целых чисел ► 17.7.1. Подготовьте лист для определения двоичной цифры — результата сложения двух других двоичных цифр (без учета переноса в старший разряд):
Глава 17. Системы счисления и электронные таблицы 291 А В 1 1-е слагаемое: 2 2-е слагаемое: 3 Цифра результата: Возможные методы выполнения задания: 1) с рассмотрением всех четырех возможных вариантов (использование трех функций ЕСЛИ); 2) с использованием формулы, работающей по схеме: если с функциями ИЛИ и И то 1 иначе О все 3) без использования логических функций И и ИЛИ; 4) без использования трех указанных функций. Комментарии к выполнению 2) =ЕСЛИ(ИЛИ(И(В1=1;В2=0);И(В1=1 ;В2=0));1;0); 3) =ЕСЛИ(В1=В2);0;1); 4) =ОСТАТ((В1+В2);2). ► 17.7.2. Подготовьте лист для определения двоичной цифры — значения переноса в старший разряд при сложении двух двоичных цифр: А В 1 1-е слагаемое: 2 2-е слагаемое: 3 Перенос равен: Возможные методы выполнения задания: 1) с рассмотрением всех четырех возможных вариантов (использование трех функций ЕСЛИ); 2) с использованием формулы, работающей по схеме: если с функцией И то иначе все
292 Глава 17. Системы счисления и электронные таблицы 3) без использования функции ЕСЛИ. Комментарии к выполнению 2) =ЕСЛИ(И(В1=1;В2=1);1 ;0); 3) =ЦЕЛОЕ((В1+В2)/2). ► 17.7.3. Подготовьте лист для определения двоичной цифры — результата сложения двух других двоичных цифр и переноса из младшего разряда: А В 1 1-е слагаемое: 2 2-е слагаемое: 3 Перенос: 4 Цифра результата: Возможные методы выполнения задания: 1) с рассмотрением всех восьми возможных вариантов с семью разными условиями (что нерационально); 2) с использованием формулы, работающей по схеме: если то Рассмотрение четырех вариантов иначе Рассмотрение тех же четырех вариантов все 3) с использованием формулы, работающей по схеме: если только с функцией ИЛИ то иначе все 4) с использованием функции ЕСЛИ, но без использования логической функции ИЛИ; 5) без использования указанных функций. Комментарии к выполнению 2) если перенос = О то
Глава 17. Системы счисления и электронные таблицы 293 Рассматриваются варианты из задания 17.7.1 иначе Рассматриваются те же варианты все 3) =ЕСЛИ(ИЛИ(В1+В2+ВЗ=0;В1+В2+ВЗ=2);0;1); 4) =ЕСЛИ(ОСТАТ(В1+В2+В3;2)=0;0; 1); 5) =ОСТАТ(В1+В2+ВЗ;2). ► 17.7.4. Подготовьте лист для определения двоичной цифры — значения переноса в старший разряд при сложении двух двоичных цифр с учетом переноса из младшего разряда: А В 1 1-е слагаемое: 2 2-е слагаемое: 3 Перенос: 4 Перенос равен: Возможные методы выполнения задания: 1) с рассмотрением всех восьми возможных вариантов с семью разными условиями (что нерационально); 2) с использованием формулы, работающей по схеме: если то Рассмотрение четырех вариантов иначе Рассмотрение тех же четырех вариантов все 3) с использованием формулы, работающей по схеме: если то если с функцией И то иначе все иначе если с функцией И то
294 Глава 17. Системы счисления и электронные таблицы иначе все все 4) с использованием формулы, работающей по схеме: если то иначе все 5) без использования логических функций. Комментарии к выполнению 3) =ЕСЛИ(ВЗ=0;ЕСЛИ(И(В1=1;В2=1);1 ;0); ЕСЛ И(И(В1 =0;В2=0);0; 1)); 4) =ЕСЛИ(В1+В2+В3>1;1;0); 5) =ЦЕЛОЕ((В1 +В2+ВЗ)/2). ► 17.7.5. Подготовьте лист для определения в ячейках ВЗ и СЗ результата сложении двух двоичных цифр: А В С 1 1-е слагаемое: + 2 2-е слагаемое: 3 Результат равен: Комментарии к выполнению Значение в ячейке СЗ определяется, как и в предыдущих заданиях, например, следующим образом: =ОСТАТ((С1+С2);2), значение в ячейке ВЗ — аналогично, но выводится только цифра 1: =ЕСЛИ(ЦЕЛОЕ((С1+С2)/2)=1 ;1 ► 17.7.6. Подготовьте лист для расчета суммы двузначного двоичного числа, цифры которого вводятся в ячейки С1 :D1, и числа 1: А В С D 1 Введите в ячейки C1. D1 цифры числа: + 2 1 3 Результат:
Глава 17. Системы счисления и электронные таблицы 295 Задание выполните в двух вариантах: 1) с расчетом значения переноса и использованием функции ОСТАТ; 2) без расчета значения переноса и без использования указанной функции. Комментарии к выполнению 1) значение в ячейке СЗ определяется, как и в предыдущих заданиях, по формуле: =ОСТАТ((С1+С40);2), где С40 — значение переноса из младшего разряда (см. задание 5.2), а значение в ячейке ВЗ по формуле: =ЕСЛИ(В40=1;1;""), где В40 — значение переноса из младшего разряда; 2) все три рассчитываемые по формулам значения зависят от значения в ячейке D1: В С D 1 =ЕСЛИ(01=1;1;"") =ЕСЛИ(01=1;0;1) =ЕСЛ l/l(D1=1 ;0; 1) ► 17.7.7. Подготовьте лист для нахождения двоичного представления суммы 6-значного двоичного числа, вводимого в ячейки С1:Н1, и числа 1, используя значения переноса из младших разрядов: А В С D Е F G Н 1 Введите в ячейки С1.Н1 6- значное двоичное число: 2 1 3 Цифры результата: Комментарии к выполнению Формула в ячейке НЗ очевидна: =ЕСЛИ(Н1=1;0;1). Если в ячейке G40 определить величину переноса из крайнего справа разряда (=ЦЕЛОЕ((Н1+Н2)/2)), то цифру в ячейке G3 можно рассчитать по формуле: =OCTAT((G1+G40);2), которую затем скопировать в ячейки диапазона C3:F3 (скопированы должны быть и формулы для расчета значения переноса в строке 40).
296 Глава 17. Системы счисления и электронные таблицы А вот в ячейке ВЗ формула «особая»: =ЕСЛИ(В40=1 ;1 ► 17.7.8. Подготовьте лист для нахождения двоичного представления суммы 6-значного двоичного числа, вводимого в ячейки С1:Н1, и числа 1, не используя при расчетах значения переноса из младших разрядов: А В С D Е F G Н 1 Введите в ячейки С1.Н1 6- значное двоичное число: + 2 1 3 Цифры результата: Указания по выполнению. Установите условие, при котором в ячейках G3, F3, ... значения будут изменяться. Комментарии к выполнению Формула в ячейке НЗ такая же, как и в задании МЛ Л. Условие, при котором в ячейках G3, F3, ... значения будут изменяться, удобно принять таким — «если в разряде справа происходит изменение единицы на нуль» (то есть в ячейку с рассчитываемым значением будет происходить перенос). Значит, в ячейку G3 можно ввести формулу: =ЕСЛИ(И(Н1 =1 ;H3=0);1-G1 ;G1), которую затем скопировать в ячейки диапазона C3:F3 (обратите внимание на способ изменения значения в ячейке G3). Естественно, что и здесь в ячейке ВЗ формула «особая»: =ЕСЛИ(И(С1=1;СЗ=1);"";1). ► 17.7.9. Если на листе, подготовленном для выполнения задания 17.7.7, ввести в строке 1 менее чем 6-значное двоичное число, то в строке результата будут выведены начальные нули: А В С D Е F G Н 1 Введите в ячейки С1.Н1 цифры двоичного числа: + 1 0 1 1 2 1 3 Цифры результата: 0 0 0 1 1 0 0 Оформите лист так, чтобы этого не происходило. Указания по выполнению. Установите условие, при котором в ячейках F3, ЕЗ, D3, ... значения должны выводиться.
Глава 17. Системы счисления и электронные таблицы 297 Комментарии к выполнению В ячейках F3, ЕЗ, D3, ... значения должны выводиться, если в соответствующем столбце в первом слагаемом не записано «пустое значение». Кроме того, в них может быть выведена единица и в противном случае, если перенос в данный разряд равен 1. Для ячейки F3 сказанное можно записать так: =ЕСЛ H(F1 <>"n;OCTAT((F1 +F40);2);E(^H(F40=1 ;1 Эта формула может быть скопирована в ячейки диапазона ВЗ:ЕЗ, а также (для единообразия) — ив ячейку G3. Можно (и даже проще и логичнее) также использовать идею, описанную применительно к заданию 17.6.5 — выводить в качестве результата ноль, если слева была хотя бы одна единица. «Базовая» формула в ячейке ВЗ: =ЕСЛИ(ОСТАТ((В1+В40);2)=1;1;ЕСЛИ(СУММ($АЗ:АЗ)>0;0;МИ)). ► 17.7.10. Если на листе, подготовленном при выполнении задания 17.7.8, ввести в строке 1 менее чем 6-значное двоичное число, то в строке результата будут выведены начальные нули. Оформите лист так, чтобы этого не происходило: А В С D Е F G Н 1 Введите в ячейки С1.Н1 цифры двоичного числа: + 1 0 1 1 2 1 3 Цифры результата: 1 1 0 0 Указания по выполнению. Установите условие, при котором в ячейках F3, ЕЗ, D3, ... значения не должны выводиться. Комментарии к выполнению Условие, при котором в ячейках F3, ЕЗ, D3, ... значения не должны выводиться, такое — «в разряде справа в первом слагаемом записано “пустое” значение или в разряде справа представлены две единицы». Для ячейки F3 это условие такое: ИЛ H(G1 =,М,;И(С1=1 ;G3=1 а вся формула следующая: =ЕСЛИ(ИЛИ(С1="";И(С1 = 1;СЗ=1));ИМ; ЕСЛ И(И(С1 =1 ;G3=0); 1-F1 ;F1)). Она может быть скопирована в ячейки диапазона ВЗ: ЕЗ.
298 Глава 17. Системы счисления и электронные таблицы Небольшое, но полезное отступление © Имеется неочевидный способ получения двоичного числа, на 1 больше заданного. Он основан на зависимостях, установленных в ответе на задачу 5 для самостоятельной работы учащихся раздела «Задачи с именами» в главе 6. Проиллюстрируем его на примере не более чем четырехзначных двоичных чисел. Задание. Подготовьте лист для получения не более чем четырехзначного двоичного числа, на 1 большего заданного числа N: А В С D Е 1 /V: 0 1 0 1 2 N+ 1: 0 1 1 0 Комментарии к выполнению Формулы в ячейках Е2 и D2, учитывающие приведенные в главе 6 зависимости (6.1) и (6.2), выглядят так: • в Е2: =1—Е1; • в D2: =ECJ1M(D1=E1;0;1); Для ячеек С2 и В2 следует вспомнить методику определения результата логические операции XOR — (см. задание 17.6.5). Учитывая ее, а также зависимости (6.3) и (6.4), приведенные в главе 6, можно записать структуру формул в ячейках С2 и В2 в общем виде следующим образом: • в ячейке С2: =ЕСЛИ(С1 равно результату применения операции AND к двум цифрам;0;1); • в ячейке В2: =ЕСЛИ(В1 равно результату применения операции AND к двум цифрам;0;1). Соответствующие формулы полностью имеют вид: •в ячейке С2: =ЕСЛИ(С1=ЕСЛИ(01+Е1=2;1;0);0;1) — см. задание 17.6.1; •в ячейке В2: =ЕСЛИ(В1=ЕСЛИ(С1+01+Е1=3;1;0);0;1) — см. задание 17.6.2. Применим аналогичную методику для получения не более чем восьмизначного двоичного числа, на 1 большего заданного числа N: А В С D Е F G Н I 1 N: 1 1 0 1 1 0 1 1 2 Л/ + 1: 1 1 0 1 1 1 0 0
Глава 17. Системы счисления и электронные таблицы 299 Комментарии к выполнению Формулы в ячейках 12 и Н2 — аналогичны формулам, соответственно, в ячейках Е2 и D2 при выполнении предыдущего задания (=1-11 и =ЕСЛИ(Н1=И;0;1)). Если в ячейках B2:G2 использовать формулы, аналогичные формулам в ячейках С2 и В2 при выполнении предыдущего задания, то все они будут разными, и некоторые из них будут достаточно громоздкими. Сделаем так, чтобы эти формулы можно было получить путем копирования одной из них. Для ячеек B2:G2 формула для определения некоторой цифры z' должна быть основана на зависимости: zf = z XOR (... AND ... AND ...) где многоточия — значения двоичных цифр справа от рассчитываемой в числе N. Учитывая результат выполнения логической операции AND для нескольких операндов (см. задание 17.6.3), можно выписать (на бумаге!) формулы в ячейках B2:G2 (соответственно, справа налево): =ЕСЛИ(С1=ЕСЛИ(СУММ(Н1:11)=2;1;0);0;1) =ЕСЛИ(Р1=ЕСЛИ(СУММ(С1:11 )=3; 1 ;0);0; 1) =ЕСЛИ(Е1=ЕСЛИ(СУММ(Р1:11)=4;1;0);0;1) =ЕСЛИ(В1=ЕСЛИ(СУММ(С1:11 )=7; 1 ;0);0; 1) Эти формулы на листе путем копирования можно получить, если значения 2, 3, ..., 7 записать вне зоны видимости листа, например, на строке 40: А В С D Е F G 40 7 6 5 4 3 2 а также использовать смешанную адресацию ячейки II. Например, формула в ячейке G2 будет выглядеть так: =ЕСЛИ(С1=ЕСЛИ(СУММ(Н1 :$I1)=G$40;1 ;0);0;1). Ее можно распространить на остальные ячейки. ► 17.7.11. Подготовьте лист для нахождения двоичного представления суммы 6-значного двоичного числа, вводимого в ячейки С1:Н1, и числа 111111:
300 Глава 17. Системы счисления и электронные таблицы А В С D Е F G Н 1 Введите в ячейки С1:Н1 6- значное двоичное число: + 2 1 1 1 1 1 1 3 Цифры результата: Указания по выполнению Определите условие, при котором в столбцах С-G цифра результата не будет отличаться от цифры в первом слагаемом. Установите также: • условие, при котором из разряда (столбца) справа переноса не будет. • выражение для расчета цифры результата в случае ее отличия от цифры в первом слагаемом (функцию ЕСЛИ при этом не используйте). Комментарии к выполнению Переноса из разряда (столбца) справа не будет, когда в первом слагаемом этого столбца записан 0, а в результате — 1. При этом если в текущем разряде в первом слагаемом записан 0, то цифра результата будет такой же, что и в первом слагаемом, в противном случае она меняется. Если же из разряда справа имеет место перенос, то цифра результата будет такой же, что и в первом слагаемом. Соответствующая формула в ячейке СЗ: =ЕСЛИ(Р1< 03;ЕСЛИ(С1=0;С1 ;1-С1);С1) (она может быть скопирована в ячейки D3:G3). ► 17.7.12. Подготовьте лист для нахождения двоичного представления суммы двух 6-значных двоичных чисел: А В С D Е F G Н 1 1-е слагаемое: + 2 2-е слагаемое: 3 Цифры результата: ► 17.7.13. Подготовьте лист для нахождения двоичного представления суммы двух не более чем 7-значных двоичных чисел: А В С D Е F G н I 1 7-е слагаемое: 1 0 1 2 2-е слагаемое: т 1 0 1 1 3 Цифры результата: 1 0 0 0 0 Возможные начальные нули не должны выводиться.
Глава 17. Системы счисления и электронные таблицы 301 ► 17.7.14. В ячейки В1 и В2 вводятся два целых положительных десятичных числа, каждое из которых не более 127. Подготовьте лист для нахождения двоичного представления их суммы (с возможными начальными нулями): А В С D Е F G Н I 1 Введите 1-е число: 5 2 Введите 2-е число: 3 3 Цифры результата: 0 0 0 0 1 0 0 0 ► 17.7.15. В ячейки В1 и В2 вводятся два целых положительных десятичных числа, каждое из которых не более 255. Подготовьте лист для расчета их суммы, приняв, что она в двоичном представлении может быть не более чем 8-значной: А В 1 Введите 1-е число: 5 2 Введите 2-е число: 3 3 Сумма: 8 Проанализируйте результаты для трех случаев, при которых слагаемые равны: 1) 120 и 115; 2) 200 и 56; 3)200 и 58. Прокомментируйте их. ► 17.7.16. Подготовьте лист для нахождения десятичного значения суммы двух 8-разрядных двоичных чисел, представляющих целые числа со знаком, если известно, что сумма — отрицательное число: А В С D Е F G Н I 1 1-е слагаемое: 2 2-е слагаемое: 3 Сумма: Комментарии к выполнению Вне зоны видимости листа получите двоичное представление суммы (см. задание 17.7.12), после чего восстановите соответствующее отрицательное число (см. раздел 17.5). ► 17.7.17. Выполните предыдущее задание для случая, когда знак суммы заранее неизвестен.
302 Глава 17. Системы счисления и электронные таблицы Комментарии к выполнению После получения двоичного представления суммы восстановите соответствующее отрицательное или положительное число (см. раздел 17.5). ► 17.7.18. В ячейки В1 и В2 вводятся два целых десятичных числа со знаком, абсолютная величина каждого из которых не более 127. Подготовьте лист для расчета их суммы, если известно, что первое слагаемое — положительное, а второе — отрицательное: А В 1 Введите 1-е число: 25 2 Введите 2-е число: -3 3 Сумма: 22 Комментарии к выполнению Получите и используйте дополнительный код второго слагаемого ► 17.7.19. В ячейки В1 и В2 вводятся два целых десятичных числа со знаком, абсолютная величина каждого из которых не более 127. Подготовьте лист для расчета их суммы, если известно, что первое слагаемое — положительное, а второе — положительное или отрицательное: А В 1 Введите 1-е число: 25 2 Введите 2-е число: 3 3 Сумма: 28 Комментарии к выполнению Получите и используйте двоичное представление второго слагаемого, рассмотрев два варианта его знака. ► 17.7.20. В ячейки В1 и В2 вводятся два целых десятичных числа со знаком, абсолютная величина каждого из которых не более 127. Подготовьте лист для расчета их суммы, если известно, что оба слагаемых могут быть положительным или отрицательным: А В 1 Введите 1-е число: -25 2 Введите 2-е число: 3 3 Сумма: -22
Глава 17. Системы счисления и электронные таблицы 303 Комментарии к выполнению Получите и используйте двоичное представление каждого из слагаемых. ► 17.7.21. В ячейки В1 и В2 вводятся два целых десятичных числа со знаком, абсолютная величина каждого из которых не более 127. Подготовьте лист для расчета их разности, заменив вычитание сложением с соответствующим числом: А В 1 Введите уменьшаемое: 25 2 Введите вычитаемое: -3 3 Разность: 28 ► 17.8. Разные задания ► 17.8.1. На листе в ячейках А1:К1 записывается двоичное представление некоторого числа: А В С D Е F G Н I J К 1 1 1 0 1 0 0 1 0 0 1 1 2 Подготовьте лист для подсчета: 1) количества единиц в заданном представлении; 2) количества единиц и количества нулей в нем. Комментарии к выполнению 1) следует использовать функцию СЧЕТЕСЛИ; 2) здесь дважды использовать СЧЕТЕСЛИ необходимости нет. После расчета одного из искомых значений второе может быть найдено как разность числа 11 и рассчитанного. ► 17.8.2. В ячейки А1 :К1 вводятся двоичные цифры. Подготовьте лист для получения в ячейках А2:К2 цифр, упорядоченных по возрастанию: А В С D Е F G Н I J К 1 1 1 0 1 1 0 1 0 0 1 1 2 0 0 0 0 1 1 1 1 1 1 1 Комментарии к выполнению Вне зоны видимости листа запишите номера разрядов и подсчитайте количество одной из цифр:
304 Глава 17. Системы счисления и электронные таблицы А В С D Е F G Н I J К 40 Число нулей 4 41 1 2 3 4 5 6 7 8 9 10 11 после чего используйте в ячейках А2:К2 «общую» формулу с функцией ЕСЛИ. ► 17.8.3. После выполнения последнего задания измените лист так, чтобы в ячейках А2:К2 цифры выводились только после ввода всех значений в ячейки А1 :К1. ► 17.8.4. В ячейки А1 :К1 вводятся троичные цифры. Подготовьте лист для получения в ячейках А2:К2 цифр, упорядоченных по возрастанию: А В С D Е F G Н I J К 1 1 2 2 0 0 0 1 1 1 0 1 2 0 0 0 0 1 1 1 1 1 2 2 Комментарии к выполнению Формула в ячейке А2: =ЕСЛИ(А42<=$В40;0;ЕСЛИ(А42<=$В40+$В41 ;1 ;2)) может быть распространена (скопирована) на ячейки В2:К2. А В С D Е F G Н I J К 40 Число нулей 4 41 Число единиц 5 42 1 2 3 4 5 6 7 8 9 10 11 после чего используйте в ячейках А2:К2 «общую» формулу с функцией ЕСЛИ. ► 17.8.5. Подготовьте лист для вывода в диапазоне ячеек A4:F4 состава пиццы (см. задачу 2.10 в главе 2) по «отмеченным» в диапазоне A2.F2 компонентам: А В С D Е F 1 Введите 1 для используемых компонентов (перец, лук, грибы, помидоры, морковь, анчоусы): 2 1 1 1 1 3 Состав пиццы: 4 Перец Грибы Помидоры Анчоусы
Глава 17. Системы счисления и электронные таблицы 305 Возможные варианты решения: 1) с указанием в формулах в диапазоне A4:F4 названий компонентов; 2) с указанием в формулах ссылок на ячейки с названиями компонентов (это позволит копировать одну введенную «вручную» формулу). Названия компонентов, как вспомогательную информацию, целесообразно привести вне зоны видимости листа. Комментарии к выполнению 2) если названия компонентов записать, например, в строке 40, то «базовая» для копирования формула в ячейке А4 будет иметь вид: =ЕСЛИ(А2=1;А40;""). ► 17.8.6. Подготовьте лист для вывода всех возможных составов пиццы (см. задачу 2.10): А В CD Е F G 1 №№ Состав пиццы: 2 1 перец лук грибы помидоры морковь анчоусы 3 2 перец лук грибы помидоры морковь 4 3 перец лук грибы помидоры анчоусы 5 4 перец лук грибы помидоры 6 5 перец лук грибы морковь анчоусы 7 6 перец лук грибы морковь 62 61 морковь анчоусы 63 62 морковь 64 63 анчоусы Комментарии к выполнению Вне зоны видимости листа запишите двоичные представления чисел 63, 62, ..., 3, 2, 1, а также названия компонентов. Например, если двоичные представления записаны начиная со столбца R, а названия компонентов — в строке 101, то формула для ячейки В2 будет такой: =ЕСЛИ(К2=1 ;В$101 Ее можно распространить (скопировать) на все ячейки диапазона B2:G64. ► 17.8.7. Подготовьте лист для вывода всех возможных составов пиццы (см. задачу 2.10), не выписывая «вручную» двоичные представления номеров составов:
306 Глава 17. Системы счисления и электронные таблицы А В CD Е F G 1 №№ Состав пиццы: 2 . 1 анчоусы 3 2 морковь 4 3 морковь анчоусы 5 4 помидоры 6 5 помидоры анчоусы 7 6 помидоры морковь 61 60 перец лук грибы помидоры 62 61 перец лук грибы помидоры анчоусы 63 62 перец лук грибы помидоры морковь 64 63 перец лук грибы помидоры морковь анчоусы Задание выполните двумя способами: 1) получив двоичные представления номеров составов пиццы путем перевода каждого десятичного значения номера (см. раздел 17.3); 2) получив двоичные представления номеров путем увеличения на 1 двоичного представления предыдущего номера (см. задания 17.7.6-17.7.8). Указания по выполнению задания вторым способом 1. Двоичные представления номеров могут быть получены с начальными нулями. 2. Для номера 1 двоичное представление вводится «вручную». ► 17.8.9. Подготовьте лист для определения характера позиции (опасная или безопасная) при игре в «ним» (см. главу 15) по известному двоичному представлению каждого из количеств предметов в трех рядах. Принять, что указанные представления — не более чем 5-значные: А В С D Е F 1 Введите двоичные цифры каждого из трех чисел: 2 1-е число 1 1 0 3 2-е число 1 0 0 1 0 4 3-е число 1 1 0 0 5 6 Такая позиция:
Глава 17. Системы счисления и электронные таблицы 307 Комментарии к выполнению Вне зоны видимости листа, например, в строках 40 и 41, получить суммы значений в каждом из пяти разрядов, а также остаток от деления каждой суммы на 2: А В С D Е F 40 Сумма 1 1 2 2 0 41 Остаток 1 1 0 0 0 После этого ответ в ячейке В6 может быть определен по формуле: =ЕСЛИ(СУММ(В41:Е41)=0;"опасная";ибезопасная") ► 17.8.10. Дополните лист, подготовленный для выполнения последнего задания, так, чтобы в случае, когда оцениваемая позиция — безопасная, в разрядах с нечетной суммой значений выводились некоторые отметки: А В С D Е F 1 Введите двоичные i трех чисел: цифры каждого из 2 1-е число 1 1 0 3 2-е число 1 0 0 1 0 4 3-е число 1 1 0 0 5 6 Такая позиция: безопасная 7 Нечетная сумма в разрядах: + + Как отмечалось в главе 6, приемы, аналогичные используемым при выполнении заданий 17.8.10-17.8.14, часто применяются при низкоуровневом программировании [14]. ► 17.8.11. На листе в ячейках А1:Н1 записывается двоичное представление некоторого числа. Подготовьте лист так, чтобы в ячейках А2:Н2 было записано это число, но крайняя справа единица в нем должна быть заменена на ноль: А В С D Е F G Н 1 0 1 0 1 1 0 0 0 2 0 1 0 1 0 0 0 0
308 Глава 17. Системы счисления и электронные таблицы Комментарии к выполнению См. задачу 17 для самостоятельной работы учащихся в главе 6. ► 17:8.12. На листе в ячейках А1:Н1 записывается двоичное представление некоторого числа. Подготовьте лист так, чтобы в ячейках А2:Н2 единица была представлена только там, где в заданном числе записана в крайняя справа единица: А В С D Е F G Н 1 0 1 0 1 1 0 0 0 2 0 0 0 0 1 0 0 0 Комментарии к выполнению См. задачу 20 для самостоятельной работы учащихся в главе 6. ► 17.8.13. На листе в ячейках А1:Н1 записывается двоичное представление некоторого числа. Подготовьте лист так, чтобы в ячейках А2:Н2 выделялись завершающие нулевые цифры числа в виде единиц: А В С D Е F G Н 1 0 1 0 1 1 0 0 0 2 0 0 0 0 0 1 1 1 Комментарии к выполнению См. задачу 21 для самостоятельной работы учащихся в главе 6. ► 17.8.14. На листе в ячейках А1:Н1 записывается двоичное представление некоторого числа. Подготовьте лист так, чтобы в ячейках А2.Н2 выделялась крайняя справа единица и все завершающие нули этого числа в виде последовательности единиц: А В С D Е F G Н 1 0 1 0 1 1 0 0 0 2 0 0 0 0 1 1 1 1 Комментарии к выполнению См. задачу 22 для самостоятельной работы учащихся в главе 6. ► 17.8.15. На листе в ячейках А1:Н1 записывается двоичное представление некоторого числа. Подготовьте лист так, чтобы в ячейках А2:Н2 крайняя справа единица заданного числа «распространялась» вправо:
Глава 17. Системы счисления и электронные таблицы 309 А В С D Е F G Н 1 0 1 0 1 1 0 0 0 2 0 0 0 1 1 1 1 1 Комментарии к выполнению См. задачу 23 для самостоятельной работы учащихся в главе 6. ► 17.8.16. В ячейку В1 вводится целое положительное число. Подготовьте лист для получения ответа на вопрос, является ли оно степенью двойки: А В 1 Введите число: 128 2 Это число степенью двойки является Комментарии к выполнению См. задачу 18 для самостоятельной работы учащихся в главе 6. ► 17.8.17. В ячейку В1 вводится целое положительное числа. Подготовьте лист для получения ответа на вопрос, является ли оно числом вида 2*- 1: А В 1 Введите число: 127 2 Является Комментарии к выполнению См. задачу 19 для самостоятельной работы учащихся в главе 6.
Глава 18 Вопросы для конкурсов «Что? Где? Когда?» и «Брейн-ринг» по информатике В данной главе приведены вопросы, связанные с системами счисления, которые можно предложить участникам школьных конкурсов «Что? Где? Когда?» и «Брейн-ринг». ► 1. Одну из радиостанций, вещающих в FM-диапазоне, — «Серебряный дождь» — можно назвать «двоичной». Почему? Вариант вопроса К так называемому «FM-диапазону» работы радиостанций относятся частоты от 88 до 108 мегагерц. Одну из радиостанций, вещающих в этом диапазоне, — «Серебряный дождь» — можно назвать «двоичной». Почему? ► 2. Когда справедливо следующее равенство1: 1001 : 11 = 11 ► 3. Программист попал в армию и стоит в строю. Какой вопрос он задаст офицеру, давшему команду: «По порядку номеров — рассчитайся!»? ► 4. В этом выражении (задание предлагается участникам конкурса в письменном виде): 101-102=1 переместите одну цифру так, чтобы оно стало верным. Вариант вопроса То же задание, но с добавлением условия «Операция возведения в степень» применяться не должна. 1 Изображение демонстрируется участникам конкурса (о двоичных числах 1001 и 11 нельзя сказать «тысяча один» и «одиннадцать»).
Глава 18. Вопросы для конкурсов 311 ► 5. Перед вами — 9 табличек: V 5 • 01110110 00110101 00101110 I 1 01001001 00110001 001011000 X 0 01011000 00110000 00100000 Почему на одной из табличек символ отсутствует? ► 6. Слова после чисел Определите, какие слова должны быть записаны во второй строке: 1, 10, 11, 100, 101, ► 7. Почему трижды? В процессе передачи информации в двоичном виде из-за различных воздействий могут возникать, ошибки в одной из двоичных цифр. В таких случаях для выявления редких, но возможных ошибок требуются какие-то методы. Один из таких методов — передача каждой цифры трижды, т. е. три раза подряд. Например, вместо 1100111 нужно передать 111 111 000 000 111 111 111. Почему именно так? ► 8. Посмотрите, пожалуйста, на следующую таблицу: Код Контрольный бит 00000 0 00001 1 00010 1 00011 0 00101 0 01000 1 01001 0 01010 0 01011 1 01100 0 01101 1 01110 1 01111 0 10000 1 10010 0 10100 0
312 Глава 18. Вопросы для конкурсов По какому принципу определяется число в правом столбце? Вариант вопроса Отличается отсутствием «шапки» в показываемой таблице: 00000 0 ► 9. Пожалуйста, посмотрите на табличку: 0 000 1 001 1 2 010 2 3 011 1 4 100 3 5 101 1 6 110 2 7 111 1 8 1000 7 Какое число, по вашему мнению, должно стоять на месте вопросительного знака? ► 10. Пожалуйста, посмотрите на табличку: 0000 0001 1 0011 2 0010 1 оно 3 0111 1 0101 2 0100 1 1100 4 1101 1 1111 9 Какое число, по вашему мнению, должно стоять на месте вопросительного знака? ► 11. Вы, наверное, слышали о головоломке «Ханойские башни». Ее простейший вариант изображен на картинке2: 2 При наличии головоломки ее можно предъявить участникам конкурса. Можно также использовать монеты разного диаметра.
Глава 18. Вопросы для конкурсов 313 Напомню, что в ней имеются еще два вертикальных стержня. Задача состоит в том, чтобы перенести диски с исходного стержня на какой-то другой, используя третий стержень как промежуточный. При этом должны соблюдаться три условия: 1) за один ход можно переносить лишь один диск, 2) нельзя класть больший диск на меньший, 3) снятый диск нельзя отложить в сторону — он должен быть надет на один из стержней. А теперь внимание — вопрос: «Какое отношение имеется к головоломке “Ханойские башни” следующая табличка?»: 2 1_ 3 J_ 2 Вариант вопроса Какое отношение имеется к головоломке «Ханойские башни» следующая последовательность чисел: 121312141213121 ► 12. Как вы можете объяснить следующие записи: 101101102 = 182ю 101101102 = -74ю Вариант вопроса Как вы можете объяснить следующие записи: 101101102 = 182ю 101101102^ 182ю
314 Глава 18. Вопросы для конкурсов 2-й вариант вопроса Как вы можете объяснить следующую запись: 101101102 ^ 182ю ► 13. Какое число, по вашему мнению, должно быть записано вместо вопросительного знака в таблице: 93 10010011 64 ? Вариант вопроса (отличается содержанием таблицы) 93 10010011 51 01010001 64 ? ► 14. Какое число, по вашему мнению, должно быть записано вместо вопросительного знака в таблице: 2 0101 8 1011 5 ? Вариант вопроса (отличается содержанием таблицы) 2 0101 8 1011 3 0110 5 ? ► 15. Когда мы смотрим на число 10, а говорим: «Два» и когда мы смотрим на число 2, а говорим: «Десять»? Примечание. Число 10 следует показать участникам конкурса напечатанным на листе бумаге (о нем в данном случае нельзя сказать «десять»). ► 16. Этого литературного героя можно назвать предшественником компьютера, ведь именно он, проводя расчеты, пользовался двоичной системой счисления, утверждая, что «единожды нуль — нуль», а «нуль да нуль — нуль». Еще пытался определить, сколько будет «Один да один». Кто этот герой?
Глава 18. Вопросы для конкурсов 315 Вариант вопроса Вы, наверное, помните героя комедии Д. И. Фонвизина «Недоросль» Митрофанушку. Почему его можно назвать первым, кто пользовался двоичной системой счисления? ► 17. Винни Пух нашел листок со следующими изображением: Пожалуйста, помогите Пуху разобраться, что изображено на листке. 1-й вариант вопроса Винни Пух нашел обрывок листка со следующими изображением: • i V. 1 V ^ ^ V Пожалуйста, помогите Пуху разобраться, что изображено на листке.
316 Глава 18. Вопросы для конкурсов 2-й вариант вопроса Винни Пух нашел обрывок листка со следующими изображением: Он понял, что на нем изображен фрагмент примера сложения двух чисел, записанных в системе счисления, в которой используются две цифры — «капуста» и «морковка». А вот на вопрос: «Может ли капуста соответствовать единице, а морковка — нулю» — у Пуха ответа не было. А у вас есть? ► 18. Как вы думаете, что такое «трит»? Вариант вопроса Вы, конечно, знаете, что такое «бит». А что такое «трит»? ► 19. В электронно-вычислительных машинах первых поколений программа оформлялась в виде номеров ячеек, в которых размещались команды для решения задачи. Номера ячеек указывались относительно некоторого начального номера, например, в виде, показанном в таблице: Номер ячейки Команда в ячейке а + 0 а + 1 а+ 2 а + 3 а + 4 а + 5 а + 6 а + 1 а+ 10 а + 11
Глава 18. Вопросы для конкурсов 317 Почему номер ячейки, оформленный в таблице полужирным начертанием и большим кеглем, именно такой? 20. Ученик в документе текстового редактора Microsoft Word подготовил верное равенство, скопировал его в буфер обмена, а потом вставил скопированный фрагмент в презентацию Microsoft PowerPoint. Этот фрагмент стал выглядеть так: 102 = 210 Почему? Вариант вопроса Посмотрите, пожалуйста, на табличку: 102 = 210 Как, не меняя цифры местами, получить верное равенство? ► 21. Вопрос (в двух вариантах) аналогичен предыдущему, но используется табличка вида: 112 = 310 ► 22. Если 5 AND 3 = 1, то чему равно 5 OR 3? Примечание. Выражения «5 AND 3 = 1» и «5 OR 3» предъявляются участникам конкурса в письменном виде или демонстрируются на экране монитора. ► 23. Ученик в документе текстового редактора Microsoft Word подготовил верное равенство, скопировал его в буфер обмена, а потом вставил скопированный фрагмент в презентацию Microsoft PowerPoint. Этот фрагмент стал выглядеть так: 102 = 210 Почему? Вариант вопроса Посмотрите, пожалуйста, на табличку: 102 = 210 Как, не меняя цифры местами, получить верное равенство? ► 24. Вопрос (в двух вариантах) аналогичен предыдущему, но используется табличка вида: 112 = 310
318 Глава 18. Вопросы для конкурсов ► 25. Когда число, представляемое в компьютере как 11100000, меньше числа, представляемого 00000111? ► 26, Посмотрите, пожалуйста, на две таблицы: 00000 00001 00011 00111 01111 11111 11110 11100 11000 10000 Что общего между ними (естественно, кроме того, что в них записаны только единицы и нули)? Ответы к главе 18 1. Потому что она работает на частоте, выражаемой с использованием цифрами 0 и 1 (100,1 мегагерц). 2. Когда указанные действия выполняются в двоичной системе счисления (10012 = 9ю, 112 = Зю, Ю012: 112 = П2). 3. «А в какой системе счисления считать?» 4. Возможны два варианта ответа: 1) 101 — 102= 1 в десятичной системе; 2) 110 — 102 = 1 в троичной системе счисления. Ответ на вариант вопроса — только с использованием троичной системы счисления. 5. На табличках приведены символы и их коды стандарта ASCII в двоичном виде. Код 00100000 соответствует пробелу, который, естественно, и не представлен на табличке. 6. «Вышел зайчик погулять» (в первой строке записаны числа от 1 до 5 в двоичной системе счисления). 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000
Ответы к главе 18 319 7. Трехкратное повторение каждой двоичной цифры позволяет в случае ошибки выявить ее. Так, для примера, приведенного в статье, если будет принято число 111 101 ООО ООО 111 111 111, то это означает, что при передаче второй цифры была допущена ошибка, и принявший ее (человек или компьютер по специальной программе проверки) сможет прочесть правильный вариант. Если передавать каждую цифру только два раза, то этого достаточно, чтобы выявить, была допущена ошибка при передаче или нет. Но для того, чтобы определить, какова ошибка, двойного повторения мало. 8. Число в правом столбце равно нулю, если в числе, записанном в левом столбце соответствующей строки, имеется четное число единиц, и равно 1 — в противном случае. Общее значение («основные» биты и один дополнительный бит), сформированное с учетом этого правила, позволяет контролировать наличие возможной ошибки, возникшей при передаче в одном их битов. 9. 4 — число в крайнем правом столбце равно номеру разряда (при нумерации справа налево), в котором в числах во втором столбце появляется «новая» (крайняя справа) цифра 1. 10.2 — число в правом столбце равно номеру разряда (при нумерации справа налево), в котором в числах в левом столбце появляется «новая» цифра в каждом очередном элементе 11. Если диски, начиная с самого маленького, обозначить соответственно 1, 2, и 3, то последовательность их перекладывания при решении головоломки совпадет с последовательностью чисел в показанной таблице. Ответ на вариант вопроса Если дисков — четыре и если обозначить их, начиная с самого маленького, соответственно 1, 2, 3 и 4, то последовательность перекладывания дисков при решении головоломки совпадет с показанной последовательностью чисел. 12. В первом случае двоичное число является числом без знака, во втором — со знаком и представлено в так называемом «дополнительном коде». Для получения модуля десятичного значения числа по его дополнительному коду необходимо: 1)из дополнительного кода вычесть 1 (10110110-1 =10110101); 2) инвертировать полученный код (01001010); 3) перевести полученное число в десятичную систему (010010102 = = 26 + 23 + 21 = 64 + 8 + 2 = 74). Ответ на вариант вопроса Во второй записи имеется в виду, что в левой части неравенства записано число со знаком (оно представлено в так называемом «дополнительном коде»). Модуль соответствующего десятичного значения равен 74 (см. выше).
320 Глава 18. Вопросы для конкурсов Ответ на 2-й вариант вопроса Имеется в виду, что в левой части неравенства записано число со знаком (оно представлено в так называемом «дополнительном коде»). Модуль соответствующего десятичного значения равен 74 (см. выше). 13. 01100100 (в правом столбце таблицы записаны числа из левого столбца в двоично-десятичной системе счисления, в которой каждая цифра десятичного числа представляется в виде соответствующего четырехзначного двоичного числа). 14. 1000 (в правом столбце таблицы записаны цифры из левого столбца в так называемом «двоично-десятичном коде с избытком 3», в котором каждая цифра десятичного числа представляется как двоичное число b = а + 0011, где а — четырехзначное двоичное число, соответствующее данной цифре). Примечание. Правильным следует считать ответ, в котором будет указано на двоичное представление цифр из левого столбца (с учетом добавления двоичного числа 11, или десятичного числа 3). 15. Первая часть вопроса: так происходит, когда число 10 представляет собой двоичную запись десятичного числа 2 (Еще раз напомним, что о двоичном числе 10 говорить «десять» нельзя). Вторая часть вопроса: это имеет место, когда мы смотрим на часы. 16. Митрофанушка из комедии Д. И. Фонвизина «Недоросль». Ответ на вариант вопроса Потому, что, проводя расчеты, он утверждал, что «единожды нуль — нуль», а «нуль да нуль — нуль», что совпадает с действиями в двоичной системе. Еще пытался он определить, сколько будет «Один да один», правда, при этом Митрофанушка задумался... 17. На листке изображен пример сложения двух чисел, записанных в системе счисления, в которой используются две цифры — «капуста» (соответствует нулю) и «морковка» (соответствует единице). Ответ на 1-й вариант вопроса Здесь возможны два варианта: 1) «капуста» соответствует нулю, а «морковка» соответствует единице; 2) «капуста» соответствует единице, а «морковка» — нулю (если в крайний справа разряд перешла «в уме» единица из соседнего, не представленного на обрывке листа, разряда). Ответ на 2-й вариант вопроса Может (см. ответ 1-й вариант вопроса). 18. Как известно, бит — элементарная единица измерения информации, представленной в двоичном виде (в двоичной системе). Трит — аналогичная единица при использовании троичной системы счисления (на этой системе было основана ЭВМ «Сетунь»).
Ответы к главе 18 321 19. После номера а + 7 следовал номер а + 10, так как запись велась в восьмеричной системе счисления (810 = 108). 20. При копирование был изменен формат символов. В текстового редакторе Microsoft Word числа 2 и 10 были представлены в виде подстрочного знака (нижнего индекса), которым обозначается основание системы счисления, в которой записываются числа: Юг = 2ю Ответ на вариант вопроса Надо числа 2 и 10 представить в виде подстрочного знака (нижнего индекса): Юг = 2ю Примечание. Вариант ответа I02 = 21° не является правильным, так как в математике запись I02 не используется. 21. 112 = 3 ю или I12 = 31°. 22. В приведенных выражениях используются логические операции AND и OR над числами. Выполняются эти операции в процессоре компьютера (поэтому их называют также логическими командами) над числами, представленным в двоичном виде. Таблицы истинности для них совпадают с таблицами истинности для логические операций над значениями Истина и Ложь. Число 1 соответствует значению Истина, число 0 — значению Ложь. Эти операции являются поразрядными — в каждом разряде действия проводятся изолированно, то есть результат не зависит от значения переноса из старшего разряда: AND | ' » J 0 О 1 OR 5 10 1 3 1 1 1 1 1 Итак, ответ: 7 (1112). 23. При копирование был изменен формат символов. В текстового редакторе Microsoft Word числа 2 и 10 были представлены в виде подстрочного знака (нижнего индекса), которым обозначается основание системы счисления, в которой записываются числа: Юг = 2ю
322 Глава 18. Вопросы для конкурсов Ответ на вариант вопроса Надо числа 2 и 10 представить в виде подстрочного знака (нижнего индекса): Юг = 2ю Примечание. Вариант ответа I02 = 21° не является правильным, так как в математике запись I02 не используется. 24. 112 = 3 ю или 112 = 31°. 25. Это может быть, когда приведенные представления — это представления чисел в 8-разрядной ячейке со знаком. Первое представление соответствует отрицательному числу (старший, знаковый, разряд равен 1), второе — положительному. 26. В обеих таблицах числа в двух соседних строках отличаются только в одном разряде. В левой таблице представлены числа так называемого «кода Грея», в правой — так называемого «кода Джонсона».
Ответы на дополнительные задания Глава 2 Задача 2.13 1. Ответы можно получить, проанализировав табл. Д1: Таблица Д1 Номер конверта Показатель степени двойки Сумма в конверте 1 0 1 2 1 2 3 2 4 4 3 8 5 4 16 6 5 32 7 6 64 8 7 128 9 8 256 10 9 512 11 10 1024 12 11 2048 13 12 4096 14 13 8192 15 14 16384 16 15 32768 17 16 65536 18 17 131072 19 18 262144 20 19 524288 21 20 1048576 Сумма, большая в 4, 8 и 2г раз, получается в конвертах с номерами соответственно А: + 2, ^ + 3 и Н z. Из табл. Д1 видно, что, если, например, сумма 8 находится в 4-м конверте, то сумма 82 = 64 — в 7-м. Можно установить, что сумма, равная квадрату
324 Ответы на дополнительные задания некоторой суммы 5, будет в конверте, номер которого может быть рассчитан 2к - 1, где п — номер конверта с суммой s. Например, если сумма 16 находится в 5-я конверте, то сумма 162 = 256 будет в конверте номер 2 5-1=9, конверт с суммой 2562 = 65536 —в конверте номер 2*9-1 = 17. 2. Это можно сделать для значений, являющихся степенями двойки, а также их суммами: • 1, 2, 4, 8, 16 (один конверт); • 3, 5, 9, 17 (два конверта); • 7, 11, 14, 19, 22 (три конверта); • 15, 23 (четыре конверта). 3. Исследовав несколько вариантов: 1 +2=3 =22- 1; 1 +2 + 22= 7 = 23- 1; 1 +2 + 22+23= 15 = 24 — 1; можно установить общую формулу: 1 + 2 + 22+ 23 +... 2k=2k+l- 1, из которой следует, что 1 + 21 + 22 + ... + 29 = 2ю- 1 = 1023. О совершенных числах Интересно, что приведенная чуть выше сумма 1 + 2 + 22+ 23+... 2к- = 2/f + 1“ 1 была использована в III веке до н. э. древнегреческим математиком Евклидом в способе, позволяющем обнаруживать так называемые «совершенные числа» (натуральные числа, равных сумме своих собственных делителей; совершенными, например, являются числа 6, 28 и 496). В своей книге «Начала» Евклид писал: «Если от единицы откладывается сколь угодно последовательно [пропорционально] чисел в двойном отношении до тех пор, пока вся [их] совокупность сложенная не сделается первым [числом] и вся совокупность, умноженная на последнее [число], произведет что-то, то возникающее [число] будет совершенным» (уточнения в квадратных скобках — переводчика «Начал» Дмитрия Дмитриевича Мор- духай-Болтовского). На языке современной математики сказанное можно сформулировать так: «Если число р = 1 + + 2 + 22 + 23 +... 2к = 2к +1 - 1 — простое, то число 2кр — совершенное». Подумайте только — приведенные строки были написаны около двух с половиной тысяч лет назад! Задача 2.14 1. Надо получить 1, 2, 4 и 8 звеньев. Для этого следует расцепить третье или тринадцатое звенья — цепочка распадется на три части: в одной 2 звена, в другой — 12 звеньев, а в третьей части — одно (разъединенное) звено. После этого надо фрагмент цепочки из 12 звеньев разделить на две части — из восьми и четырех звеньев (для этого после разделения фрагмента разъединенное звено соединить с одной из двух других
Ответы на дополнительные задания 325 получившихся частей). Возможны и другие варианты разделения цепочки на соответствующие 4 части. 2. Выпишем двоичные представления чисел 1-15: Номер разряда, к 4 3 2 1 1 1 2 1 0 3 1 1 4 1 0 0 5 1 0 1 6 1 1 0 7 1 1 1 8 1 0 0 0 9 1 0 0 1 10 1 0 1 0 Далее будем считать числа в левом столбце номером дня проживания. Анализ показывает, что можно сформулировать следующие правила: 1. Если в крайнем справа разряде 0 заменяется на 1, то путешественник должен в этот день отдать одно звено цепочки. 2. Если в двоичной записи числа, соответствующего тому или иному дню проживания, появляется новый (дополнительный) к-й разряд, то путешественник должен отдать часть, содержащую 2к ~1 звеньев, а все части, которые были у хозяина гостиницы, тот должен вернуть. 3. Если на 1 заменяется непоследний ноль (в некотором к-м разряде), то путешественник должен отдать часть, содержащую 2 " 1 звеньев, а хозяин гостиницы должен вернуть все части, в которых число звеньев меньше, чем 2к~ \ Можно все приведенные правила объединить в одном: «Каждый день путешественник должен отдать часть, содержащую 2к ~ 1 звеньев, где — номер разряда, в котором для этого дня в двоичной записи появляется «новая» единица». Задача 2.18 Для решения задачи следует использовать уравновешенную троичную систему счисления (см. главу 7). Пусть груз, который надо взвесить, весит А кг. Это число в «обычной» троичной системе имеет вид: _ 1... <Я1«о)з> где цифры я0, tfi,, ««могут принимать значения 0, 1 или 2.
326 Ответы на дополнительные задания В главе 7 показано, что если «отрицательную цифру» 1 обозначить 1, то число А можно представить следующим образом: А = Ът -Зт+ Ьт_ \ • 3W~1 + ... + Ъ\ • 3 + &о> где каждый из коэффициентов Ът Ьт_ {,..., Z>0может быть равным 0, 1 или I. Следовательно, чтобы уравновесить груз в А граммов1 нужно положить его на первую чашу весов, а гирю в 1 грамм поставить на вторую чашу, если b0= 1, и на первую чашу, если bo = 1 (если Ь0 = 0, то гирю в 1 грамм вообще не используется); далее, гиря весом в 3 грамма ставится на вторую чашу, если b\= 1, и на первую, если Ъх= 1, и т. д. Легко понять, что, расставив гири по такому принципу, мы уравновесим груз А. Поясним сказанное на примере. Предположим, что у нас имеется груз в 200 граммов. Переводя 200 в троичную запись, мы получим: 200 3 198 66 3 2 66 22 3 0 21 7 3 1 6 2 1 Следовательно, 200ш = 211023, или с использованием цифры 1 — 1 1 111 1, то есть: 200 = 243-81 +27 + 9 + 3- 1. Таким образом, чтобы уравновесить груз в 200 граммов, положенный на чашу весов, нужно на ту же чашу положить гири в 1 грамм и 81 грамм, а на противоположную — гири в 3, 9, 27 и 243 грамма. Интересной задачей программирования является разработка программы для определения способа взвешивания некоторого груза на чашечных весах без гирь. Методика разработки такой программы приведена в приложении 3. Задача 2.20 1. Может. Возможные варианты приведены в табл. Д2: 1 В задаче 2.18 и в задании для самостоятельной работы речь шла о взвешивании грузов весом 1 кг и более. Здесь же будем рассматривать более легкие грузы и гири массой 1, 3. 9, ... г. Ясно, что суть от этого не меняется.
Ответы на дополнительные задания 327 Таблица Д2 Фактический возраст Основание системы счисления, в которой написаны возрасты 11 и 12 лет 6 12 и 14 лет 7 13 и 16 лет 8 2. Может. Возможные варианты представлены в табл. ДЗ: Таблица ДЗ Фактический возраст Основание системы счисления, в которой написаны возрасты 15 и 16 лет 8 16 и 18 лет 9 17 и 20 лет 10 Задача 2.27 1. В задаче Иосифа Флавия при любых значениях п при к = 2 всегда последним останется человек с нечетным порядковым номером (так как в двоичной записи этого номера последней цифрой является 1). 2. «Кот и мыши» Первая задача. Если начать счет с белой мышки и вести его по кругу по часовой стрелке или против, то последней будет съедена та серая мышь, которая будет одиннадцатой при счете. Вторая задача. Чтобы последней съесть белую мышку, кот должен: при счете по кругу по часовой стрелке — начать счет с третьей (считая в этом направлении) мыши от белой. В случае счета против часовой стрелки — с третьей в таком направлении. Глава 3 Задача 3.1 Решение задачи для шести мешков В этом случае задача решается аналогично задаче с пятью мешками, с той разницей, что на левой чашке размещается 31 монета из 6-го мешка. Если в этом мешке нет фальшивых монет, то решение совпадает с рассмотренным ранее. Если же в 6-м мешке есть фальшивые монеты, то показание весов будет отрицательным. В таких случаях для нахождения номеров мешков с фальшивыми монетами необходимо абсолютную величину показания представить в шестиразрядном двоичном виде, а затем полученное двоичное число инвертировать (все нули заменить на единицы, а единицы — на нули).
328 Ответы на дополнительные задания Задача 3.2 2. п взвешиваний. Задача 3.3 Можно, если представить условные номера монет в виде четырехразрядных двоичных чисел и провести четыре взвешивания. Задача 3.4 Следует представить условные номера монет в виде трехразрядных троичных чисел и провести три взвешивания. Задача 3.5 1. 1)3 раба; 2) 4 раба; 3) к рабов. 2. Если использовать двух рабов, то в случаях, когда находится яд в бочках с условными номерами 110 или 111 (оба раба умрут), решить задачу нельзя. В остальных случаях можно. 3. Если рассмотреть все 8 возможных вариантов размещения яда, то выяснится, что в некоторых случаях 1-й вариант лучше, в остальных — 2-й. Общий вывод о том, какой вариант «гуманнее», сделать нельзя. Задача 3.6 1. 1) 3 раба; 2) 4 раба; 3) к рабов. 4) если п равно степени тройки, то искомое значение равно log3«, в противном случае — log3[«] + 1, где log3« — логарифм числа п по основанию 3, [п\ — наибольшая степень тройки, не превосходящая п, 2. При 16384 бочках (понадобится 14 и 9 рабов). Глава 6 Дополнительные задания, связанные с инвертированными числами 1.4-60 + 12 = 252. 2. 1): , , 1...100 Четное число единиц
Ответы на дополнительные задания 329 Примеры: 11002(12ю), 111 1002(6010), 111111002(252,0), ... 2): 1...1000 к единиц где к — число, кратное трем 3) 1...10000 где к — число, кратное четырем. к единиц Глава 11 Фокус 11.7 Выпишем цифры десятичных чисел 1-26 при записи их в троичной четверичной системе: Десятичное число Цифры числа в троичной системе Последняя Средняя Первая 1 1 0 0 2 2 0 0 3 0 1 0 7 1 2 0 8 2 2 0 9 0 0 1 10 1 0 1 11 2 0 1 14 2 1 1 15 0 2 1 16 1 2 1 17 2 2 1 18 0 0 2 19 1 0 2 25 1 2 2 26 2 2 2 Если цифрам 0-2 сопоставить такие цвета: 0 — красная, 1 — синяя, 2 — черная, то для демонстрации фокуса можно составить три таблицы определения:
330 Ответы на дополнительные задания 1) последней цифры троичной записи искомого числа: 8ч 4е 26ч 1C 114 25е 20ч 21к 5Ч 6К 15к ЮС 13е 22е 16С 12к 14ч 24к У 17ч 18« 2ч 7е 19е 23ч 9* 1 2) средней цифры: 2К 4е 16ч 22е 25ч 1К ЦК 14е 15ч 19к 20к 5е 8Ч 13е 12е 9К 3е 6Ч 23е 18к 17ч 7Ч 2бч 21 с 244 10к 2 3) первой цифры: 17е 4к 9е 23 12е бк 20ч ЮС 16е 18ч 2к 26^ 214 15е 8К 25ч 13е 24ч 1к 14е 5К 22ч Зк 19ч 7К цс 3 Таблица-«шпаргалка» для расчетов в данном случае выглядит так: Таблица Красный Синий Черный 1 0 1 2 2 0 3 6 3 0 9 18 Глава 15 1. Общее количество опасных позиций в последнем столбце /-й строки Kt равно К, _ 2 + Kj _ i + 1. 2.33. 3. 143.
Литература 1. Алфутова К Б., Устинов А. В. Алгебра и теория чисел. М.: Мцнмо, 2002. 2. Андреева Е. В., Босова Л. Л., Фалина И. Н. Математические основы информатики. М.: Бином. Лаборатория знаний, 2005. 3. Апокин И. А., МайстровЛ.Е. История вычислительной техники. М.: Наука, 1990. 4. Аршинов М. Садовский Л. Е. Коды и математика. М.: Наука, 1983. 5. Гарднер М. Математические досуги. М.: Мир, 1972. 6. Гарднер М. Математические головоломки и развлечения. М.: Мир, 1999. 7. Гашков С. Б. Занимательная компьютерная арифметика. Математика и искусство счета на компьютерах и без них. М.: Книжный дом «JIh6pokom»/URSS, 2015. 8. Златопольский Д. М. Программирование: типовые задачи, алгоритмы, методы. М.: Бином. Лаборатория знаний, 2007. 9. Златопольский Д. М, УсенковД. Ю. Задачи на взвешивания // Информатика. 2011. № 17. 10. Игнатьев Е. И. В царстве смекалки. Ростов н/Д.: Ростовское книжное изд-во, 1995. 11. Перельман Я. И. Занимательная арифметика. Загадки и диковинки в мире чисел. М.: Детгиз, 1954. 12. Петцольд Ч. Код. М.: Издательско-торговый дом «Русская редакция», 2001. 13. Савин А. П. Угадай число // Квант. 1987. № 9. 14. Уоррен Г. Алгоритмические трюки для программистов. М.: Издательский дом «Вильямс», 2003. 15. Фомин С. В. Системы счисления. М.: Наука, 1987. 16. Шилов В. В. Уравновешенная троичная система счисления и Томас Фаулер // http://www.computer-museum.ru/precomp/fauler.htm Задачу 1.24 и вопрос 6 в главе 18 предложил В. С. Зайцев, Москва. Задачи 1.5 и 1.6 подготовлены по материалам сайта http://www.informatika.gym9.edusite.ru/zadzan8_2.htm
Приложения
Приложение 1 Методики перевода целых чисел из одной системы счисления в другую ► П1.1. Перевод чисел из десятичной системы Для перевода целого десятичного числа в систему счисления с основанием р следует разделить нацело на р исходное число, а затем все промежуточные частные, выписывая при этом получающиеся остатки, до тех пор, пока частное не станет меньше р. Результат получается выписыванием последнего частного и всех остатков в обратном порядке. Например, при переводе числа 13 в двоичную систему: Результат равен 11012 (цифры результата выделены полужирным начертанием)1. При переводе числа 148 в пятеричную систему имеем: 4 4 2 2 О Результат равен 10435. В случаях, когда р > 10, остаток может быть двузначным и должен быть заменен на соответствующую цифру /?-ичной системы. Например, 12310 = 7В16. Можно также описанный метод сформулировать так: «Для перевода десятичного числа в систему счисления с основанием р следует разделить 1 Здесь и далее в виде нижнего индекса указывается основание системы счисления, в которой представлено число.
Методики перевода целых чисел из одной системы счисления в другую 335 нацело на р исходное число, а затем все промежуточные частные, выписывая при этом получающиеся остатки, до тех пор, пока частное не станет равно нулю. Результат получается выписыванием всех остатков в обратном порядке». Описанный метод перевода чисел (в двух рассмотренных вариантах) называется «метод последовательного деления на основание». Возможен и другой метод — метод выделения наибольшей степени числа р. Применительно к переводу из десятичной системы в двоичную его суть основана на методике решения задач 2.12 «Семь кошельков» и 2.13 «Банкир и конверты». Проиллюстрируем этот метод на примере перевода числа 91 в двоичную систему. Составив и проанализировав таблицу степеней двойки (или вспомнив стихотворение из главы 1 ©), можно установить, что максимальная степени числа 2, не превосходящая 91, равна 64 (26). Значит, двоичная запись числа 91 будет состоять из семи цифр (первая слева цифра, естественно, — 1). Для нахождения второй слева цифры надо найти остаток от деления 91 на 64, что в данном случае можно сделать, вычтя 64 из 91. Так как 27 меньше, чем следующая после 64 в сторону уменьшения степень двойки — 32, то следующая двоичная цифра — 0, а остаток не изменился. Для следующей степени (16) имеем: 27 > 16, то есть третья слева цифра равна 1, а остаток — 27 - 16 = 11. Продолжая аналогичные расчеты, получим, что 91 ш = 10110112. Можно также сказать, что в двоичной записи числа N единицы должны быть записаны в тех разрядах, весомости2 которых «участвуют» в наборе суммы N (остальные цифры равны нулю3). Заметим, что преимуществом метода выделения наибольшей степени числа р является естественный порядок записи получающихся при расчетах /?-ичных цифр (слева направо), что бывает важно при программировании — очередная полученная цифра сразу же может выводиться на экран, принтер и т. п. При использовании метода последовательного деления на основание необходимо сначала запомнить все цифры (например, в массиве) для последующей распечатки результата в порядке, обратном их получению. Но для применения метода выделения наибольшей степени числа р надо знать все степени р, не превосходящие заданное число. Программы, осуществляющие перевод чисел из десятичной системы в систему с основанием 2-9, и методика их разработки приведены в приложении 44, а методики использования для перевода электронных таблиц описаны в главе 17. 2 О весомостях — см. чуть ниже пункт П1.2. 3 При переводе в систему счисления с основанием р> 2 следует иметь в виду, что возможны и другие цифры. 4 Там же представлены программы для перевода, рассмотренные в разделе П1.2.
336 Приложение 1 ► П1.2. Перевод чисел в десятичную систему Прежде чем знакомить учащихся с методикой перевода чисел в десятичную систему, полезно напомнить им о так называемой «развернутой форме записи» десятичных чисел: 2173 = 2 • 1000 н- 1 * 100 + 7*10 + 31 = = 2 • 103+ 1 • 102 + 7 • 10' +3 • 10°. Значения 1 (10°), 10 (101), 100 (102) и т. д. называют «весом», или «ве- сомостью», того или иного разряда числа. Видно, что весомость разряда равна 10", где п — номер разряда при условии, что последние нумеруются справа налево, начиная с нуля. Перевод целого числа из системы счисления с основанием р в десятичную можно провести следующим образом. Пусть р = 2, исходное число равно 1101012. 1. Пронумеруем разряды заданного числа справа налево, начиная с нуля: 1 П Го П I 0 I 1 5 4 3 2 1 0 2. Начиная с крайнего правого разряда, выпишем числа 1, 2, 4, ... (очередное число равно удвоенному «предыдущему»5): 1 1 0 1 0 1 5 4 3 2 1 0 32 16 8 4 2 1 3. Сложим те из чисел, оформленных полужирным начертанием, для которых соответствующая цифра заданного числа равна 1: 32 + 16 + 4+ 1 = 53. Полученная сумма и будет равна искомому числу. Итак, 1101012 = = 5310. Примечание. Если числа 1, 2, 4, ... назвать «весомостью разрядов двоичных чисел» (2°, 21, 22, ...), то можно сказать, что для перевода двоичного числа в десятичное необходимо сложить весомости тех двоичных разрядов, в которых записана цифра 1. Пустьр = 4, исходное число равно 13024. 1. Пронумеруем разряды заданного числа справа налево, начиная с нуля: 5 Учащимся, знакомым с понятием «геометрическая прогрессия», можно дать соответствующий комментарий.
Методики перевода целых чисел из одной системы счисления в другую 337 2 1 О 2. Начиная с крайнего правого разряда, выпишем числа 1, 4, 16, ... (очередное число в 4 раза больше «предыдущего»): 1 О 1 64 16 4 1 Можно считать, что числа, оформленные полужирным начертанием, есть весомости разрядов в четверичной системе счисления (1 = 4°, 4 = 41, 16 = 42, ...). 3. Искомый результат получить как сумму произведений всех цифр заданного числа на весомость соответствующего разряда: 1-64 + 3- 16 + 0-4 + 2- 1 = 11410. В общем случае алгоритм перевода целого /?-ичного числа в десятичную систему следующий. 1. Каждая цифра заданного числа переводится в десятичную систему. 2. Полученные числа нумеруются справа налево, начиная с нуля. 3. Число р переводится в десятичную систему. 4. Десятичное число, соответствующее каждой /7-ичной цифре, умножается на рк, где к — номер этого числа (п. 2). Результаты складываются, причем все арифметические действия выполняются в десятичной системе. ♦ Пример. Перевести шестнадцатеричное число B0F9 в десятичную систему. Решение. B0F9I6= [11,0][0][1510][9] = 11 ш• 16?0 + 15 • 16|0 + 9 = 45305ш. Для перевода чисел в десятичную систему может быть использована так называемая «схема Горнера» (правило Горнера, метод Горнера) — алгоритм вычисления значения многочлена записанного в виде суммы одночленов: апрп + ап_\рп~ 1 + ап_2рп2+ ••• + в\Р + ао- Пусть дано число 2345, записанное в системе счисления с основанием р. Если вспомнить так называемую «развернутую форму записи» чисел, то можно сказать, что десятичный эквивалент заданного числа будет равен: 2 • р3 + 3 ■ р2 + 4 • р1 + 5 ■ р°. Указанное выражение можно записать по-другому: 2р ' р ' р + 3 •/?-/? + 4-/? + 5 = (2 ' р - р + 3 •/? + 4 )р + 5 = = ((2 р + 3)р + 4)р + 5 = (((0 -р + 2)р + 3)р + 4)р + 5.
338 Приложение 1 Анализ показывает, что алгоритм вычислений состоит в следующем — для каждой цифры заданного числа, начиная с первой: 1) на основание р исходной системы счисления умножается «старое» значение рассчитываемой (искомой) величины 2) к произведению прибавляется данная цифра; 3) полученная сумма используется как «старое» значение для следующей цифры. Для первой цифры «старое» значение равно нулю. ► П1.3. Перевод чисел в системах счисления с основаниями, РАВНЫМИ СТЕПЕНИ ДВОЙКИ При переводе целых чисел из системы в систему, в случаях, когда их основания равны 2, 4, 8 и 16, промежуточный перевод исходных чисел в десятичную систему можно не проводить. ► П1.3.1. Перевод чисел из четверичной системы счисления в двоичную и обратно ► П 1.3.1.1. Для перевода целого четверичного числа в двоичную систему счисления необходимо: 1) каждую цифру заданного числа, рассматривая ее как десятичную, представить в виде двухразрядного двоичного числа (может быть — с начальным нулем или состоящим из двух нулей); 2) из полученных двухразрядных двоичных чисел сформировать единое число (без возможного начального нуля), которое и будет являться искомым результатом. ♦ Пример. Дано четверичное число 1023. Перевести его в двоичную систему счисления. Решение 1) Цифры заданного числа 1 0 2 3 Соответствующее двоичное число 01 00 10 и 2) результат равен 10010112. ► П1.3.1.2. Для перевода целого двоичного числа в четверичную систему счисления необходимо: 1) начиная с правых разрядов, разбить цифры заданного числа на группы из двух цифр (в крайней слева группе может оказаться одна цифра); 2) число, образованное цифрами в каждой группе, перевести в десятичную систему (так как при этом не могут получиться числа, большие 3, то их можно рассматривать как цифры четверичной системы счисления); 3) из полученных на предыдущем этапе чисел сформировать единое число, которое и будет являться искомым результатом.
Методики перевода целых чисел из одной системы счисления в другую 339 ♦ Пример. Дано двоичное число 111001001. Перевести его в четверичную систему счисления. Решение о Группы цифр заданного числа 1 11 00 10 01 Соответствующее четверичное число 1 3 0 2 1 2) результат равен 130214. ► П1.3.2. Перевод чисел из восьмеричной системы счисления в двоичную и обратно ► П1.3.2.1. Для перевода целого восьмеричного числа в двоичную систему счисления необходимо: 1) каждую цифру заданного числа, рассматривая ее как десятичную, представить в виде трехразрядного двоичного числа (может быть — с начальным нулем, с начальным нулями или состоящим из трех нулей); 2) из полученных двоичных чисел сформировать единое число (без возможных начальных нулей), которое и будет являться искомым результатом. ♦ Пример. Дано восьмеричное число 3061. Перевести его в двоичную систему счисления. Решение 1) Цифры заданного числа 3 0 6 1 Соответствующее двоичное число 011 000 110 001 2) результат равен 110001100012. ► П1.3.2.2. Для перевода целого двоичного числа в восьмеричную систему счисления необходимо: 1) начиная с правых разрядов, разбить цифры заданного числа на триады — группы из трех цифр (в крайней слева группе может оказаться одна или две цифры); 2) число, образованное цифрами в каждой группе, перевести в десятичную систему (так как при этом не могут получиться числа, большие 7, то их можно рассматривать как цифры восьмеричной системы счисления); 3) из полученных на предыдущем этапе чисел сформировать единое число, которое и будет являться искомым результатом.
340 Приложение 1 ♦ Пример. Дано двоичное число 11111001101. Перевести его в восьмеричную систему счисления. Решение о Группы цифр заданного числа И 111 001 101 Соответствующее восьмеричное число 3 7 1 5 2) результат равен 37158. ► П1.3.3. Перевод чисел из шестнадцатеричной системы счисления в двоичную и обратно ► П1.3.2.1. Для перевода целого шестнадцатеричного числа в двоичную систему счисления необходимо: 1) каждую цифру заданного числа, рассматривая ее как десятичную, представить в виде четырехразрядного двоичного числа (может быть — с начальным нулем, с начальным нулями или состоящим из четырех нулей); 2) из полученных двоичных чисел сформировать единое число (без возможных начальных нулей), которое и будет являться искомым результатом. ♦ Пример. Дано шестнадцатеричное число ЗА1С. Перевести его в двоичную систему счисления. Решение 1) Цифры заданного числа 3 А 1 с Соответствующее двоичное число ООН 1010 0001 1100 2) результат равен 111010000111002. ► П1.3.3.2. Для перевода целого двоичного числа в шестнадцатеричную систему счисления необходимо: 1) начиная с правых разрядов, разбить цифры заданного числа на тетрады — группы из четырех цифр (в крайней слева группе может оказаться одна, две или три цифры); 2) число, образованное цифрами в каждой группе, перевести в десятичную систему. Так как при этом не могут получиться числа, большие 15, то их можно рассматривать как цифры шестнадцатеричной системы счисления (при наличии чисел, больших 9, их следует записать с использованием обозначений для соответствующих цифр — А, В, ..., F);
Методики перевода целых чисел из одной системы счисления в другую 341 3) из полученных на предыдущем этапе цифр сформировать единое число, которое и будет являться искомым результатом. ♦ Пример. Дано двоичное число 1010111001101. Перевести его в шестнадцатеричную систему счисления. Решение о Группы цифр заданного числа 1 0101 1100 1101 Соответствующее шестнадцатеричное число 1 5 С (12) D (13) 2) результат равен 15CD16. ► П1.3.4. Перевод чисел из шестнадцатеричной системы счисления в четверичную и обратно ► П1.3.4.1. Для перевода целого шестнадцатеричного числа в четверичную систему счисления необходимо: 1) каждую цифру заданного числа представить в виде двухразрядного четверичного числа (может быть — с начальным нулем или состоящим из двух нулей); 2) из полученных двухразрядных четверичных чисел сформировать единое число (без возможного начального нуля), которое и будет являться искомым результатом. ♦ Пример. Дано шестнадцатеричное число 5Е0С. Перевести его в четверичную систему счисления. Решение 1) Цифры заданного числа 5 Е (14) 0 С (12) Соответствующее четверичное число 11 32 00 30 2) результат равен 113 2 0 0 3 04. ► П1.3.4.2. Для перевода целого четверичного числа в шестнадцатеричную систему счисления необходимо: 1) начиная с правых разрядов, разбить цифры заданного числа на группы из двух цифр (в крайней слева группе может оказаться одна цифра); 2) четверичное число, образованное цифрами в каждой группе, перевести в шестнадцатеричную систему (при наличии чисел, больших 9, их следует записать с использованием обозначений для соответствующих цифр —А, В, ..., F);
342 Приложение 1 3) из полученных на предыдущем этапе чисел сформировать единое число, которое и будет являться искомым результатом. ♦ Пример. Дано четверичное число 3021023. Перевести его в шестнадцатеричную систему счисления. Решение о Группы цифр заданного числа 3 02 10 23 Соответствующее шестнадцатеричное число 3 2 4 В (11) 2) результат равен 324Вi6. Обращаем внимание на то, что при переводе чисел из четверичной системы в восьмеричную и обратно и из восьмеричной системы в 16- ичную и обратно описанную методику применять нельзя. Описанную методику перевода можно применить к системам счисления с основаниями р и q в случаях, когда р является степенью q или наоборот. В заключение заметим, что быстрый перевод целых чисел из двоичной системы в десятичную был предложен в 1953 году Соденом [7]. Он заключается в следующем. Сначала надо перевести число из двоичной системы в восьмеричную (это можно сделать «в уме» по методике, описанной в п. П1.3.2). Далее для полученного и-значного восьмеричного числа выполняются (п - 1) шагов по переводу его в десятичную систему. Проиллюстрируем все на примере. Пусть надо перевести в десятичную систему двоичное число 1111110000. 11111100002 = 17608. Число 1760 — 4-значное (п = 4). На первом шаге надо из числа 1760, рассматривая его как десятичное, вычесть удвоенное произведение его первой цифры на 100 (на 10'7-2): 1760 - 200 (При большом количестве конечных нулей их, с целью экономии времени, можно не выписывать.) 1560 На втором шаге надо из полученной разности (также рассматривая ее как десятичную), вычесть удвоенное произведение 2-значного числа, образованного первой и второй цифрами разности, на 10 (на 10"~3):
Методики перевода целых чисел из одной системы счисления в другую 343 1560 300 1260 На третье, в данном случае последнем, шаге вычитается удвоенное произведение трехзначного числа, образованного тремя первыми цифрами последней разности, на 1 (на 10°, или на 10"-4): 1260 252 1008 Полученное число и будет искомым десятичным (проверьте!). Видно, что при переводе используется только умножение на 2 и вычитание. Чтобы оценить преимущества описанного способа, переведите им в десятичную систему двоичное число 11101110010101011. Имеется также алгоритм быстрого перевода чисел из десятичной системы в двоичную, предложенный Ш. Розье в 1962 году [7]. Он почти такой же, что и описанный чуть выше (только, можно сказать, «наоборот»). Сначала переводим заданное число в восьмеричную систему по методике, которую проиллюстрируем на примере десятичного числа 1945. Надо выполнить три шага (число 1945 — 4-значное): 1-й шаг: 1945 + 200 (Внимание! Все действия здесь и ниже выполняются в восьмеричной системе.) 2345 2-й шаг: 2345 460 3025 3-й шаг: 3025 604 3631 Итак, 194510 = 36318. После этого осталось перевести полученное восьмеричное число в двоичную систему (см. п. П1.3.4): 36318 = 111100110012. Конечно, методами Содена и Розье6 можно осуществлять и только взаимный перевод десятичных и восьмеричных чисел. 6 К сожалению, в книге [7] не указаны имена авторов методов и страны, в которых они проживали. Нам также не удалось найти такую информацию.
344 Приложение 1 Задания для самостоятельной работы учащихся ► 1. Определите, какое из чисел больше — двоичное 11010110 или восьмеричное 412, не переводя каждое из чисел полностью в другую систему. ► 2. Не используя перевод в десятичную систему, переведите шестнадцатеричное число ABCD в восьмеричную систему счисления. ► 3. В 25-ичной системе счисления для обозначения чисел от 0 до 24 будем использовать соответственно цифры 0, 1, 2, .., 8, 9, А, В, С, D, Е, F, G, Н, I, J, К, L, М, N и Р (последняя применяется вместо буквы О, похожей на 0). Не используя перевод в десятичную систему, переведите: 1) 25-ичное число 3L0A в пятеричную систему счисления; 2) пятеричное число 32061243 в 25-ичную систему счисления. ► 4. Даны два числа, записанные в 100-ичной системе счисления. Предложите методику расчета их суммы, в которой таблица сложения в указанной системе не используется. ► 5. Установите, существует ли треугольник, длины сторон которого выражаются числами 128, 11,6 и 110112? ► 6. Переведите в двоичную систему способом Розье десятичное число 1234567890987654321. ► 7. Для перевода десятичного числа 241 762 в двоичную систему методом последовательного деления числа на основание понадобится выполнить 17 операций деления. Предложите методику перевода, согласно которой можно решить задачу за гораздо меньшее число операций деления. Методика должна быть такой, чтобы ее можно было продемонстрировать, например, у классной доски. Ответы 1. Если вспомнить методику перевода двоичного числа в восьмеричное (см. пункт П 1.3.2.2), то можно сказать, что восьмеричное представление двоичного числа 11010110 есть трехзначное число, первая цифра которого равна 3. Значит, это число меньше числа 4128. 2. 125715 (следует сначала перевести заданное число в двоичную систему). 3. Необходимо учесть, что 25 = 52: 1)3410020; 2) H6CN. 4. Нужно перевести оба числа в десятичную систему, выполнить сложение в ней, а результат представить в 100-ичной системе. 5. Прежде всего, следует выразить все три длины в одной системе счисления, причем рациональнее не в десятичной, а в двоичной: 128,= 10102; 1116 = 100012.
Методики перевода целых чисел из одной системы счисления в другую 345 Далее нужно вспомнить (или убедиться), что треугольник со сторонами а, Ъ и с существует, если каждая из сторон меньше суммы двух других сторон, то есть при а<Ь + снЬ<а + сис<а + Ь. Если принять а = 10102, Ъ = 100012, с = 110112, то имеем: \)Ь + с= 10001 +11011= 101100, а =1010; 2)я + с=1010 + 11011 = 100101, Ъ = 10001; 3) а + Ь= 1010+ 10001 = 11011, с = 11011. В двух первый вариантах требуемое неравенство соблюдается, в третьем нет, причем а + Ъ = с. Это значит, что при указанных длинах сторон треугольник не существует, а «вырождается» в линию (убедитесь в этом!). Примечание. Использование для длин всех трех сторон шестнадцатеричной или восьмеричной систем нерационально, так как взаимный перевод чисел в таких системах является более трудоемким. 7. Необходимо запомнить, например, двоичные представления восьмеричных цифр: 0 — 000 1—001 2 — 010 3 — 011 4—100 5 — 101 6—110 7—111, а затем методом последовательного деления на основание перевести заданное число в восьмеричную систему счисления (всего понадобится 5 операций деления): 2 4 1 7 6 2 \ 8 2 4 1 7 6 0 3 0 2 2 0 \ 8 2 3 0 2 1 6 3 7 7 7 U 4 3 7 7 6 4 7 2 1 8 1 4 7 2 5 9 \ 8 0 _5 6_ 7 3 после чего в полученном числе 730142 заменить каждую цифру ее двоичным представлением: 111011000001100010. При использовании в качестве «промежуточной» не восьмеричной, а шестнадцатеричной системы счисления количество операций деления будет еще меньше.
Приложение 2 О переводе из одной системы счисления в другую дробей В данном приложении описываются методы перевода из десятичной системы счисления в р-ичную и обратно дробей (в том числе периодических), которые, в отличие от методов перевода целых чисел, в учебниках и учебных пособиях представлены недостаточно полно1. Рассмотренные вопросы могут быть использованы как на уроках, так и в проектной деятельности учащихся. ► П2.1. Общие вопросы ► П2.1.1. Основные определения П2.1.1.1. Обыкновенная (или простая) дробь — запись рационально- т го числа в виде ±— или ± т/п, где пф 0. п П2.1.1.2. Десятичная дробь — разновидность дроби, которая представляет собой способ записи действительных чисел в виде: — dm... d\dfod-\d_2' • • 5 где: ± — знак дроби (либо «+», либо «-»); ?— десятичная запятая, служащая разделителем между целой и дробной частью числа; die — десятичные цифры. П2.1.1.3. Десятичная дробь называется конечной, если она содержит конечное число цифр после запятой, то есть имеет вид: ± аьа\а2...ап (П2.1.1) П2.1.4. Бесконечная десятичная дробь имеет вид: а0,а{а2... (П2.1.2) Бесконечные десятичные дроби делятся на периодические и непериодические. 1 Одной из немногих книг, в которых рассмотрены эти методы, является учебное пособие [2].
О переводе из одной системы счисления в другую дробей 347 Бесконечная десятичная дробь называется периодической, если её последовательность цифр после запятой, начиная с некоторого места, представляет собой периодически повторяющуюся группу цифр. Другими словами, периодическая дробь — десятичная дробь, имеющая вид: 0,a{a2...am b\b2...bib\b2... bt... Такую дробь принято кратко записывать следующим образом: 0,a]a2...am(b]b2...bi). Повторяющаяся группа цифр b\b2...bi называется периодом дроби, количество цифр в этой группе — длиной периода. Если в периодической дроби период следует сразу после запятой, то дробь называется чисто периодической или чистой периодической (мы будем использовать первое название). Если же между запятой и первым периодом имеются цифры, дробь называется смешанной периодической, а число, стоящее между целой часть и периодом, — предпериодом дроби. Например, дробь 0,(23) = 0,2323... является чисто периодической, а дробь 0,1(23) = 0,12323... — смешанной периодической. ► П2.1.2. Определение вида десятичной дроби, соответствующей заданной обыкновенной дроби Под видом дроби будем понимать — конечная, чисто периодическая или смешанная периодическая. В соответствии с определением десятичной дроби, дробь (П2.1.1) представляет число: Легко видеть, что это число можно представить в виде обыкновенной литель с равен числу, составленному из цифр дробной части (без возмож- 1. Если знаменатель п не имеет простых делителей, отличных от 2 и 5 (или, что то же самое, представляет собой степень двойки, степень пятерки или их произведение), то соответствующая десятичная дробь является конечной. л. v ± х °к'10 *• с ных начальных нулей). Представим заданную дробь в виде несократимой вида т/п 2 и рассмотрим варианты значения п. 2 Обозначение п с использованным в (П2.1.1) не связано.
348 Приложение 2 2. Если знаменатель п не имеет простых делителей, равных 2 или 5, то соответствующая десятичная дробь является бесконечной — чисто периодической (см. выше). 3. Если знаменатель п имеет простые делители, как равные 2 или 5, так и отличные от них, то соответствующая десятичная дробь является бесконечной — смешанной периодической. Первый вывод достаточно очевиден, доказательство остальных оставим за рамками книги. ► П2.1.3. Уточнение Везде далее будут рассматриваться только правильные дроби — дроби, меньшие 1. При переводе из одной системы счисления в другую смешанных дробей (дробей, имеющих ненулевую целую часть) целая часть переводится отдельно по соответствующим правилам [2]. ► П2.2. Перевод дробей из десятичной системы счисления в Р-ИЧНУЮ ► П2.2.1. Перевод конечных десятичных дробей Методика перевода конечной десятичной дроби3 в р-ичную систему счисления следующая: 1) умножить заданную десятичную дробь на основание системы счисления р\ 2) если дробная часть полученного произведения не равна нулю, умножить ее на/?; 3) выполнять пункт 2 до тех пор, пока дробная часть полученного произведения не станет равной нулю или не выделится период (признаком этого является момент, когда дробная часть окажется равной исходной дробной части или дробной части, уже получавшейся ранее). Результат представляется в виде числа, первая цифра которого после запятой равна целой части произведения, полученного на этапе 1, остальные — целым частям произведений, полученных на этапе 2 (в случае его выполнения). В вариантах, когда р > 10, целые части, большие 9, заменяются на соответствующую цифру в р-ичной системе. ♦ Пример 2.L Переведем число 0,5 в двоичную систему счисления. Решение 0,5 -_2 1,0 3 Еще раз обратим внимание на то, что рассматриваются только правильные дроби.
О переводе из одной системы счисления в другую дробей 349 Больше умножения не выполняются. Ответ: 0,5 ю = 0,12 (конечная дробь). ♦ Пример 2.2. Переведем число 0,375 в двоичную систему счисления. Решение 0,375 : 2 0,750 (умножения продолжаются) • 2 1,50 _2 1.0 (дробная часть стала равной нулю) Ответ: 0,375ю = 0,0112(конечная дробь). ♦ Пример 2.3. Переведем число 0,515625 в четверичную систему счисления. Решение 0,515625 ; 4 2,0625 : 4 0,25 ♦ 4 1.00 (дробная часть стала равной нулю) Ответ: 0,51562510 = 0,2014. ♦ Пример 2.4. Переведем число 0,109375 в шестнадцатеричную систему счисления. Решение 0,109375 : 16 1,75000 • 16 12,00 (дробная часть стала равной нулю) Ответ: 0,109375ю = 0, 1Ci6. ♦ Пример 2.5. Переведем число 0,2 в шестеричную систему счисления. Решение 0,2
350 Приложение 2 Дробная часть последнего произведения равна исходной, следовательно, следующие цифры будут повторяться (и будут равными 1), то есть получен период, равный 1. Примечание. Строго говоря, приведенное решение не совсем соответствует указанной методике перевода — этап 2 не выполняется, хотя дробная часть полученного произведения не равно нулю. Можно провести еще одно умножение, в результате которого будет получена дробная часть, равная уже получавшейся ранее, то есть будет установлен период, равный 1. Ответ: 0,210 = 0,(1)6 (чисто периодическая дробь). ♦ Пример 2.6. Переведем число 0,1 в девятеричную систему счисления. Решение 0,1 _9 0,9 _9 8,1 Дробная часть последнего произведения равна исходной, следовательно, следующие цифры будут такими, как и уже рассчитанные (08), то есть получен период, равный 08. Ответ: 0,1 ш = 0,(08)9 (чисто периодическая дробь). ♦ Пример 2.7. Переведем число 0,321 в пятеричную систему счисления. Решение 0,321 : 5 1,605 ; 5 3.025 : 5 0,125 : 5 0,625 : 5 3.025 ; 5 0,125 Дробная часть последнего произведения равна уже получавшейся ранее, следовательно, следующие цифры будут такими, как и ранее после дробной части 0,125 (03), то есть получен период, равный 03. Ответ: 0,32110 = 0,130(03)5 (смешанная периодическая дробь).
О переводе из одной системы счисления в другую дробей 351 Описанный метод называется «метод последовательного умножения на основание» (по аналогии с методом последовательного деления на основание, используемого для перевода целых чисел — см. приложение 1). Внимание! В ряде случаев признаком результата — периодической дроби является приближенное равенство дробной части последнего произведения уже встречавшейся ранее. Пример — перевод в двоичную систему числа 0,33: 0,33 ■ 2 0,66 ; 2 1,32 Получена дробная часть, примерно равная уже встречавшейся (исходной). Для проверки можно продолжить расчеты и выявить повтор группы цифр периода: ♦ 2 0,64 _2 1,28 Результат равен 0,(01). Появление в целых частях произведений группы цифр, которая уже встречалась при предыдущих расчетах, является исчерпывающим признаком результата — периодической дроби. Задания для самостоятельной работы учащихся ► 1. Переведите десятичные числа: а) 0,5 в шестеричную систему счисления; б) 0,078125 в четверичную систему счисления; в) 0,8 в шестеричную систему счисления; г) 0,8 в троичную систему счисления; д) 0,3 в восьмеричную систему счисления. ► 2. Подготовьте лист электронной таблицы для определения цифр дроби в /?-ичной системе счисления (без нуля в целой части), соответствующей заданной конечной десятичной дроби: А В 1 Основание р (2-9): 2 2 Заданная дробь: 0.3754 4 Здесь и далее во фрагментах листов электронной таблицы в качестве разделителя целой и дробной частей используется точка.
352 Приложение 2 3 0 4 1 5 1 6 0 12 0 Указания по выполнению 1. Искомые цифры должны быть получены в столбце А. 2. Количество цифр должно быть равно 10 (без учета нуля в целой части дроби) даже в случае, когда получаемая /?-ичная дробь — конечная. 3. Используйте функцию ОТБР. ► 3. Разработайте программу для перевода заданной конечной десятичной дроби в /?-ичную систему счисления (при 2<р<9). Указания по выполнению 1. На вход программе подается правильная десятичная дробь. 2. В результате работы программы должно быть выведено соответствующее /7-ичное значение (естественно, как десятичное число): 1) без его расчета (вывод отдельных цифр); 2) с расчетом искомого значения. 3. Обеспечьте вывод 10 цифр после запятой (в том числе для результатов — конечных дробей). ► 4. Разработайте также вариант программы, в которой конечные дроби будут выводиться без нулей в конце. Возникает интересный вопрос: можно ли, не переводя заданную десятичную дробь в /7-ичную систему счисления, определить, какой дробью — конечной или периодической (чисто периодической/смешанной периодической) — она будет в этой системе? Оказывается, можно. Чтобы ответить на этот вопрос, нужно: 1) обратить заданную десятичную дробь в обыкновенную; как уже отмечалось, ее можно представить в виде несократимой обыкновенной дроби вида т/п; 2) исследовать знаменатель обыкновенной дроби п по следующей методике, во многом аналогичной рассмотренной выше для десятичной системы. 1. Если знаменатель п не имеет простых делителей, отличных от делителей р (или, что то же самое, представляет собой степени делителей числа р или их произведение), то соответствующая /7-ичная дробь является конечной.
О переводе из одной системы счисления в другую дробей 353 ♦ Пример 2.8. Определим вид десятичной дроби 0,375 в двоичной системе счисления. Решение 375 3 0,375ю= —- = 1000 8 Число 8 — степень двойки, значит в двоичной системе соответствующая дробь также конечная (она равна 0,011). 2. Если знаменатель п не имеет простые делители, равных делителям р, то соответствующая р-ичная дробь является бесконечной — чисто периодической. ♦ Пример 2.9. Определим вид десятичной дроби 0,375 в троичной системе счисления. Решение 375 3 0,375 ю' 1000 8 В троичной системе соответствующая дробь — чисто периодическая (так как 3 не является делителем знаменателя 8). Расчеты показывают, что соответствующее значение равно 0,(10)3. 3. Если знаменатель п имеет простых делителей, как равные делителям р, так и отличные от него, то соответствующая десятичная дробь является бесконечной — смешанной периодической. ♦ Пример 2.10. Определим вид десятичной дроби 0,1 в пятеричной системе счисления. Решение 0,1 = _L = _L. 10 2-5 В пятеричной системе соответствующая дробь — смешанная периодическая (так как у знаменателя 10, кроме делителя, равного 5, есть делитель 2). Соответствующее значение равно 0,0(2)5. Задания для самостоятельной работы учащихся ► 4. Выше для определения вида заданной конечной десятичной дроби в р-ичной системе счисления были рассмотрены три отдельных варианта (условия). Запишите все варианты вида дроби по следующей схеме: если <условие 1> то если <условие 2> то <Один из видов дроби> иначе
354 Приложение 2 <Другой из видов дроби> все иначе <Третий вид дроби> все или по схеме: если условие <условие 1> то <Один из видов дроби> иначе если <условие 2> то <Другой из видов дроби> иначе <Третий вид дроби> все все ► 5. Определите вид (конечная/чисто периодическая/смешанная периодическая) десятичной дроби: а) 0,28 в пятеричной системе счисления; б) 0,1 в семеричной системе счисления; в) 0,7 в троичной системе счисления; г) 0,123 в восьмеричной системе счисления; д) 0,42 в троичной системе счисления; е) 0,15 в шестеричной системе счисления; ► 6. Заполните приведенную ниже таблицу, указав, может ли заданная конечная десятичная дробь быть одним из трех видов дроби в р-ичной системе счисления: р Вид дроби в р-ичной системе Может ли быть? 2 Конечная Чисто периодическая Смешанная периодическая 3 Конечная Чисто периодическая Смешанная периодическая 9 Конечная Чисто периодическая Смешанная периодическая В случаях, если соответствующая р-ичная дробь возможна, приведите ее пример.
О переводе из одной системы счисления в другую дробей 355 ► П2.2.2. Перевод бесконечных десятичных дробей Перевод бесконечных десятичных дробей в /?-ичную систему счисления в общем случае проводится аналогично конечным — методом последовательного умножения на основание. Обратим внимание на то, что для бесконечной периодической десятичной дроби, период которой состоит из одной цифры, таких как 0,(3), 0,(5) и т. п., при переводе методом последовательного умножения на основание может возникнуть проблема учета количества цифр периода. Например, при переводе в двоичную систему числа 0,(3)ю: 0,3 • 2 0,6 • 2 1,2 • 2 0,4 • 2 0,8 • 2 1,6 результат равен 0,0(100)2. Переведя его в десятичную систему (методами, описанными ниже), получим периодическую дробь 0,285714, отличающуюся от заданной на 14,3%. Если же при расчетах использовать число 0,33, то, как уже отмечалось выше, можно получить результат 0,(01). Этот результат соответствует исходному десятичному — 0,(3). При переводе в двоичную систему числа 0,(5) с одной цифрой после запятой: 0,5 • 2 1,0 в результате получается дробь 0,12, обратный перевод которой в десятичную систему (см. ниже) дает конечную десятичную дробь, равную 0,5. Если же использовать при расчетах число 0,55, то результатом будет периодическая дробь 0,10(0011)2, которой в десятичной системе соответствует конечная дробь 0,55. Анализ показывает, что при «ручном» расчете дая таких дробей в качестве исходного следует использовать значение с тремя-четырьмя цифрами в дробной части, а при использовании электронных таблиц (см. задание 2 для самостоятельной работы учащихся выше) — значение в виде обыкновенной дроби, определяемое по методике, описанной в разделе П2.2.3.
356 Приложение 2 Задание для самостоятельной работы учащихся ► 7. Переведите десятичные числа: а) 0,(6) в двоичную систему счисления; б) 0,(7) в пятеричную систему счисления. ► П2.3. Определение вида дроби Как и для конечных дробей, рассмотрим задачу определения вида заданной периодической десятичной дроби в р-ичной системе счисления. Ее решение аналогично и также сводится к двум этапам: 1) обращение заданной десятичной дроби в обыкновенную; 2) анализ значения знаменателя полученной дроби. Задачу обращения периодической десятичной дроби в обыкновенную можно решить несколькими методами. Один из них назовем «методом уравнения». Проиллюстрируем его на ряде примеров. ♦ Пример 2.11. Обратим десятичную дробь 0,(3) в обыкновенную. Решение Идея решения заключается в том, что надо «избавиться» от периода. Для этого следует из заданной дроби получить смешанную дробь с таким же периодом. В данном случае это можно сделать, умножив заданную дробь на 10: Д= 0,(3) (П2.2.1) 1 ОД =3,(3) (П2.2.2) Вычтя из равенства (П2.2.2) равенство (П2.2.1), получим уравнение: 9Д=3, откуда Д=- = ~. 9 3 В общем случае, когда заданная десятичная дробь — чисто периодическая (а именно такой она является в рассмотренном примере), искомая обыкновенная дробь имеет вид: "3™? (П2.2.3) | qq.iuhq_периооа j v 7 Можно также сказать, что числителем искомой обыкновенной дроби является период, а в знаменателе — записывается цифра 9 столько раз, сколько цифр в периоде; при возможности, проводится сокращение дроби. Рассмотрим также другие варианты периодической дроби.
О переводе из одной системы счисления в другую дробей 357 1. Заданная десятичная дробь — смешанная периодическая, предпе- риод которой состоит из одних нулей. ♦ Пример 2.12. Обратим десятичную дробь 0,00(123) в обыкновенную. Решение Здесь умножение исходного выражения Д = 0,00(123) понадобится выполнять дважды: 1) 100Д= 0,(123) (П2.2.4) 2) 100000Д = 123,(123) (П2.2.5) Вычитая из равенства (П2.2.5) равенство (П2.2.4), получим: (100000- 100)Д = 123, откуда 123 123 123 д- 100000-100 105 -102 99900 Общий вид искомой обыкновенной дроби: период | Qcliutia _ периода+длина _предпериода _ j q<длина _ предпериода (П2.2.6) Можно также сказать, что числителем искомой обыкновенной дроби является период, а в знаменателе — записывается цифра 9 столько раз, сколько цифр в периоде, после чего к ним приписывается столько нулей, сколько цифр в пред периоде; при возможности, проводится сокращение дроби. ♦ Пример 2.13. Обратим десятичную дробь 0,0(57) в обыкновенную. Ответ: — = — . 990 330 2. Заданная десятичная дробь — смешанная периодическая, предпе- риод которой не состоит из одних нулей. ♦ Пример 2.14. Обратим десятичную дробь 0,1(73) в обыкновенную. Решение Здесь умножение исходного выражения Д= 0,1(73) также выполняется дважды: 1) 1 ОД =1,(73) (П2.2.7) 2) 1000Д= 173,(73) (П2.2.8) После вычитания имеем: (1000- 10)Д= 173-1,
358 Приложение 2 Д 1000-10 103 -10' 990 495 173-1 173-1 172 86 откуда Общий вид искомой обыкновенной дроби: предпериод & период - предпериод (П2.2.9) ^длина _ периода+длина _предпериода -i г\длина предтриода ’ где & — знак «сцепления», «склейки» двух десятичных значений. Можно также сказать, что числителем искомой обыкновенной дроби является разность, смысл которой следует из формулы (П2.2.9), а в знаменателе — записывается цифра 9 столько раз, сколько цифр в периоде, после чего к ним приписывается столько нулей, сколько цифр в предперио- де; при возможности, проводится сокращение дроби. ♦ Пример 2.15. Обратим десятичную дробь 0,13(48) в обыкновенную. 9900 9900 660 ’ Задания для самостоятельной работы учащихся ► 8. Убедитесь, что формулы (П2.2.3) и (П2.2.6) являются частными случаями формулы (П2.2.9). ► 9. Обратите в обыкновенную дробь описанным способом следующие десятичные дроби: Другой способ обращения периодической десятичной дроби в обыкновенную заключается в следующем. Запишем заданную бесконечную периодическую р-ичную дробь §,с\с2...ст\а2...ака\а2...ака\а2... в виде бесконечной суммы: 0,с\с2...ст + а\а2...ак' 10~* + а\а2...ак- \0 2к + а\а2...ак• 10~3*+ ... Нетрудно увидеть, что за исключением непериодической части 0,с\с2...ст она соответствует сумме членов бесконечной геометрической прогрессии с первым членом, равным а\а2...ак • 10~Л, и знаменателем 10-А. Так как знаменатель прогрессии меньше 1, то прогрессия — убывающая. Известно, что сумма членов такой прогрессии равна: Ответ: 1348-13 1335 89 а) 0,(531); б) 0,00(69); в) 0,7(21). аха2... ак _ период (П2.2.10) 10w -(10*-1) iow-(io*-i)
О переводе из одной системы счисления в другую дробей 359 Следовательно, для получения обыкновенной дроби, соответствующей заданной смешанной периодической, нужно к отношению (П2.2.10) прибавить непериодическую (конечную) часть как обыкновенную дробь вида , где числитель с равен числу, составленному из цифр предпериода (без возможных начальных нулей — см. раздел П2.1.2). При возможности, проводится сокращение полученной дроби. ♦ Пример 2.16. Обратим десятичную дробь 0,11(3) в обыкновенную. Решение Значение выражения (2.10): 3 3 102-(10'-1)- 900 Предпериод: . 100 3 11 102 17 Сумма: 1 = = . 900 100 900 150 Ответ: -IZ_. 150 Задание для самостоятельной работы учащихся ► 10. Обратите в обыкновенную дробь только что описанным способом следующие десятичные дроби: а) 0,(315); б) 0,0(24); в) 0,3(14). Методика выполнения этапа 2 — анализа значения знаменателя полученной дроби для определения вида заданной периодической десятичной дроби в р-ичной системе счисления (см. начало данного раздела) — аналогична описанной в разделе П2.1.2. Задания для самостоятельной работы учащихся ► 11. Оформите лист электронной таблицы для получения числового значения чисто периодической дроби, задаваемой как текст: А В 1 Периодическая дробь 0,(123) 2 Ее числовое значение 0.12312312
360 Приложение 2 Указания по выполнению. Вспомогательные расчеты проведите вне зоны видимости листа ► 12. Оформите лист электронной таблицы для получения числового значения смешанной периодической дроби, задаваемой как текст, когда предпериод дроби состоит из одних нулей: А В 1 Периодическая дробь 0,00(12) 2 Ее числовое значение 0.001212121 ► 13. Оформите лист электронной таблицы для получения числового значения смешанной периодической дроби, задаваемой как текст, когда предпериод дроби не состоит из одних нулей: А В 1 Периодическая дробь 0,012(34) 2 Ее числовое значение 0.012343434 ► 14. Оформите лист электронной таблицы для перевода в р-ичную систему счисления заданной периодической дроби (она может быть любого вида). ► 15. Разработайте программу для получения числового значения чисто периодической десятичной дроби, задаваемой как текст. ► 16. Разработайте программу для получения числового значения смешанной десятичной периодической дроби, задаваемой как текст. Подготовьте два варианта: 1) для смешанной периодической дроби, предпериод которой состоит из одних нулей; 2) для смешанной периодической дроби, предпериод которой не состоит из одних нулей. ► 17. Определите вид (конечная/чисто периодическая/смешанная периодическая): а) десятичной дроби 0,(2) в двоичной системе счисления; б) десятичной дроби 0,(3) в шестеричной системе счисления; в) десятичной дроби 0,(03) в девятеричной системе счисления; г) десятичной дроби 0,0(2) в пятеричной системе счисления; д) десятичной дроби 0,0(18) в шестеричной системе счисления; е) десятичной дроби 0,0(2) в восьмеричной системе счисления; ж) десятичной дроби 0,0(1) в девятеричной системе счисления; 3) десятичной дроби 0,1(3) в двоичной системе счисления.
О переводе из одной системы счисления в другую дробей 361 ► 18. Заполните приведенную ниже таблицу, указав, может ли заданная чисто периодическая десятичная дробь быть одним их трех видов дроби в р-ичной системе счисления: р Вид дроби в р-ичной системе Может ли быть? 2 Конечная Чисто периодическая Смешанная периодическая 3 Конечная Чисто периодическая Смешанная периодическая 9 Конечная Чисто периодическая Смешанная периодическая В случаях, если соответствующая р-ичная дробь возможна, приведите ее пример. ► 19. Заполните приведенную ниже таблицу, указав, может ли заданная чисто смешанная периодическая десятичная дробь, предпериод которой состоит из одних нулей, быть одним их трех видов дроби в р- ичной системе счисления: Р Вид дроби в р-ичной системе Может ли быть? 2 Конечная Чисто периодическая Смешанная периодическая 3 Конечная Чисто периодическая Смешанная периодическая 9 Конечная Чисто периодическая Смешанная периодическая В случаях, если та или иная р-ичная дробь возможна, приведите пример соответствующей десятичной дроби (в />-ичную систему ее можно не переводить). ► 20. Установите, изменится ли содержание последней таблицы, когда заданная десятичная дробь — смешанная периодическая, предпериод которой не состоит из одних нулей.
362 Приложение 2 ► П2.3. Перевод дробей из р-ичной системы счисления в десятичную ► П2.3.1. Перевод конечных/ьичных дробей Возможны два способа перевода. Способ 1 Согласно этому способу, алгоритм перевода правильных конечных р-ичных дробей в десятичную систему следующий. 1. Пронумеровать все цифры дробной части слева направо, начиная с 1. 2. Каждую цифру дробной части умножить на р~к9 где к — номер цифры. 3. Результаты сложить. Примечание. Все арифметические действия проводятся в десятичной системе. Если значения р~к назвать «весомостью А>го дробного разряда», то можно также сказать, что искомый результат равен сумме произведений каждой цифры дробной части заданной дроби на весомость ее (цифры) разряда. ♦ Пример 3.1. Переведем число 0,20123 в десятичную систему счисления. Решение 0,20123 = 2 • 3"' + 1 • З'3 + 2 • 3^= 0,728395061728,0. Когда р > 9 каждая цифра дробной части предварительно переводится в десятичную систему. ♦ Пример 3.2. Переведем число 0,А0В216 в десятичную систему счисления. Решение 0,А0В216= [1010] [010] [11 ,о] [2,0] = = 10 • 16-1 + 11 • 16“3 + 2 • 16_4= 0,627716064453,0. При использовании описанного способа перевода рекомендуется пользоваться так называемой «схемой Горнера», что минимизирует количество арифметических действий и позволяет избежать при расчетах возведения в степень [2]. Для того чтобы получить схему Горнера для вычисления /?-ичной дроби 0,аха2... аь выпишем цифры дроби в обратном порядке с учетом весомости соответствующих разрядов: акр~к + ак-1р~к+'+ ... + а ,/Г1 = {а$Гк + 1 + ак. \р~к + 2 + ... + а,)/Г' = ((акР~к + 2 + ак-\Р~к + 3 + • • • + а 2)Р~')Р~' = {...(((акр"' + ак^х)р~1 + ак^2)р~1 + ак-ъ)р~х + ... + ах)р~\
О переводе из одной системы счисления в другую дробей 363 Можно сказать, что схема Горнера для дробей «работает» так: последняя цифра р-ичной дроби делится на р, к частному прибавляется предпоследняя цифра, сумма делится на р, к частному прибавляется пред- предпоследняя цифра и т. д. до первой цифры дроби, после чего сумма также делится на р. ♦ Пример 3.3. Переведем число в десятичную систему счисления по схеме Горнера число 0,11012. Решение 0,11012= 1 -2^+0 • 2“3+ 1 -2~2+ 1 -2~' =(1 -2~3 + 0 • 2'2 + 1 -Тх + 1)-2~' = = ((1 -2'2+0-2_1 + 1) • 2“' + 1) • 2~] = (((1 • 2~' + 0) • 2"') + 1) • 2'1 + 1) • 2“' = = (((1 : 2 + 0): 2 + 1) : 2 + 1) : 2 = — + 1):2 + 1):2 =(1,25 : 2 + 1) : 2 = = (0,625 + 1): 2 = 0,8125ш. Задания для самостоятельной работы учащихся ► 21. Переведите в десятичную систему счисления описанным способом без использования схемы Горнера следующие числа: а) 0,12024; б) 0,31215; в) 0,B0F916. ► 22. Переведите в десятичную систему счисления описанным способом с использованием схемы Г орнера следующие числа: а) 0,101012; б) 0,21213. ► 23. Подготовьте лист электронной таблицы для перевода /?-ичной дроби, заданной в виде отдельных цифр дробной части, в десятичную систему счисления без использования схемы Г орнера: А В С D Е I 1 Введите цифры дроби 0 1 1 2 Введите основание системы счисления р 2 3 Соответствующая десятичная дробь равна 0.375 Указания по выполнению 1. Заданные цифры должны вводиться в столбцы В-I (не более 8 цифр). 2. Вспомогательные расчеты проведите вне зоны видимости листа. 3. Используйте функцию СУММПРОИЗВ.
364 Приложение 2 ► 24. Подготовьте лист электронной таблицы для перевода р-ичной дроби, заданной в виде отдельных цифр дробной части, в десятичную систему счисления с использованием схемы Горнера. ► 25. Подготовьте лист электронной таблицы для перевода р-ичной дроби, заданной в виде числа (естественно, как десятичного), в десятичную систему счисления: А В С 1 Введите правильную р-ичную дробь 0.011 2 Введите основание системы счисления р 2 3 Соответствующая десятичная дробь равна 0.375 Указания по выполнению 1. Учтите, что дробная часть исходной дроби может содержать до 8 цифр. 2. Вспомогательные расчеты проведите вне зоны видимости листа. ► 26. Разработайте программу для перевода заданной правильной конечной р-ичной дроби в десятичную систему счисления описанным способом: а) без использования схемы Г орнера; б) с ее использованием. Указание по выполнению При расчетах искомой дроби число цифр дробной части должно быть равно 8. Способ 2 Этот способ перевода правильных конечных р-ичных дробей в десятичную систему заключается в следующем. 1. Представить заданную р-ичную дробь в виде обыкновенной дроби в десятичной системе. Для этого: 1) в качестве числителя искомой дроби записать число, стоящее после запятой в заданной дроби (естественно, без возможных начальных нулей), а в качестве знаменателя — рк, где к — количество цифр в дробной части (знаменатель записывается в десятичной системе): (<дробная _ часть _ как _ целое _ число) р . / количество_ццфр_дроюной часги \ \Р /10 2) заменить числитель соответствующим десятичным числом: (<дробная _ часть _ как _ целое _ число) 10 / количество ццфр дроюной части \ \Р /10
О переводе из одной системы счисления в другую дробей 365 2. Полученную обыкновенную дробь записать в виде десятичной дроби (конечной или периодической). ♦ Пример 3.4. Переведем число 0,101102 в десятичную систему Решение 0,10112 =10112 _ 11 ю = 0.687510 24 16,0 После возможного сокращения полученной обыкновенной десятичной дроби можно определить, какой дробью — конечной или периодической (чисто периодической/смешанной периодической) — она будет. Для этого следует исследовать знаменатель сокращенной дроби (см. раздел П2.1.2). Задания для самостоятельной работы учащихся ► 27. Переведите в десятичную систему счисления описанным способом следующие числа: а) 0,123; б) 0,3124. ► 28. Представьте в виде обыкновенной десятичной дроби следующие числа: а) 0,11012; б) 0,2123; в) 0,1024. ► 29. Определите вид (конечная/чисто периодическая/смешанная периодическая) в десятичной системе следующих дробей: а) 0,101012; б) 0,036; в) 0,59. ► 30. Заполните приведенную ниже таблицу, указав, может ли заданная в р-ичной системе счисления конечная дробь быть одним их трех видов дроби в десятичной системе: р Вид дроби в десятичной системе Может ли быть? 2 Конечная Чисто периодическая Смешанная периодическая 3 Конечная Чисто периодическая Смешанная периодическая 9 Конечная Чисто периодическая Смешанная периодическая
366 Приложение 2 ► П2.3.2. Перевод периодическихр-ичных дробей Здесь также возможны различные методы перевода. Способ 1 Этот способ состоит в следующем. 1. Заданная периодическая р-ичная дробь представляется в виде обыкновенной дроби в десятичной системе. 2. Полученная обыкновенная дробь переводится в десятичную. Задачу обращения заданной дроби в обыкновенную можно решить методом уравнения, уже упоминавшимся в части 2. Как и для случая обращения дроби в десятичной системе (см. раздел П2.2.3), при его использовании следует «избавиться» от периода. Для этого нужно из заданной дроби получить одну или две дроби с таким же периодом. Рассмотрим возможные варианты. 1. Исходная дробь — чисто периодическая. ♦ Пример 3.5. Переведем в десятичную систему число 0,(110)2. Решение Д = 0,(110)2 (П2.3.1) Умножим обе части равенства (П2.3.1) на 23 = 10002: 10002*Д= 110,(110)2 (П2.3.2) Вычтя из равенства (П2.3.2) равенство (П2.3.1), получим уравнение: 111Д = 110, откуда: Д= 1102 _610 = 0,857143к,. 710 Общее правило Чисто периодической р-ичной дроби в десятичной системе счисления соответствует обыкновенная дробь, в числителе которой будет записан период в развернутой форме, а в знаменателе — число р в степени, равной длине периода, уменьшенное на единицу: (период)р _ (период _в _ развернутой _форме)]0 з з) ( р длина _ пери°да длина _ периода Обратим внимание, что, согласно последней формуле, 0,111...2 = = 0,(1)2 = 110, а в общем случае чисто периодическая р-ичная дробь 0 ,(р ~ 1)/?= 110- 2. Исходная дробь — смешанная периодическая, предпериод которой состоит из одних нулей.
О переводе из одной системы счисления в другую дробей 367 ♦ Пример 3.6. Переведем в десятичную систему число 0,00(1001)2. Решение Здесь умножение исходного выражения Д = 0,00(1001)2 понадобится выполнять дважды: Д-2г = 0,(1001)2 (П2.3.4) Д-2б= 1001,(1001)2 (П2.3.5) Вычтя из равенства (П2.3.5) равенство (П2.3.4), получим уравнение: Д • (26-22) = 11012, откуда Д= 10012 = =0,15. 26 - 22 6010 Общий вид искомой обыкновенной дроби в десятичной системе счисления: (период\0 рдлина периода*длина предпериода _ ^длина предпериода (П2.3.6) Можно также сформулировать такое правило представления заданной /7-ичной дроби в виде обыкновенной дроби в десятичной системе: 1) получить обыкновенную дробь, в числителе которой будет записан период в развернутой форме, а в знаменателе — число р в степени, равной длине периода, уменьшенное на единицу: {период) 10 рдлина_периода j 2) умножить полученную дробь на величину, обратную значению р в степени, равной длине предпериода: {период) 10 . 1 рдлина периода j ^длина_предпериода Например, при переводе числа 0,00(1001)2: 0,00(1001)2 A J_ = _2_. I = = 0,15. 2 -1 2 15 4 60 3. Исходная дробь — смешанная периодическая, предпериод которой не состоит из одних нулей. ♦ Пример 3.7. Переведем в десятичную систему число 0,11(1001)2. Решение Здесь также умножение исходного выражения Д- 0,11(1001 ^выполняется дважды:
368 Приложение 2 Д-22= 11,(Ю01)2 (П2.3.7) Д-26= 111001,(1001)2 (П2.3.8) Вычтя из равенства (П2.3.8) равенство (П2.3.7), получим уравнение: Д-(26-22) = (111001-11)2, откуда _(111001-11)2 _ 1101102 _ 54,0_09 26 -22 6010 6010 Общая формула для расчета искомой десятичной дроби: (предпериод2 &период2 -период2)Х0 з 9) р длина _ периода+длина _ предпериода _ ^ длина _ предпериода где & — знак «сцепления», «склейки» двух р-ичных значений. Можно также получить искомую дробь следующим образом: 1) представить /?-ичный предпериод (конечную дробь) в виде обыкновенной дроби в десятичной системе (см. раздел П2.3.1); 2) получить обыкновенную дробь, в числителе которой будет записан период в развернутой форме, а в знаменателе — число р в степени, равной длине периода, уменьшенное на единицу: (период) 10 р длина _ периода j 3) умножить полученную на этапе 2 дробь на величину, обратную значению р в степени, равной длине предпериода: (период) 10 1 р длина _ периода _j ^ длина _ предпериода 4) результат прибавить к значению, полученному на этапе 1. Например, для перевода в десятичную систему числа 0,11(1001)2: i..! + 2-5! = _9-0,9. 15 4 4 60 10 Задания для самостоятельной работы учащихся ► 31. Переведите в десятичную систему счисления описанным способом, используя формулы (П2.3.3), (П2.3.6) или (П2.3.9), следующие числа: а) 0,(101)3; б) 0,0(21)4; в) 0,10(21)5.
О переводе из одной системы счисления в другую дробей 369 ► 32. Переведите в десятичную систему счисления описанным способом, не используя формулы (П2.3.6) и (П2.3.9), следующие числа: а) 0,00(12)4; б) 0,10(101)3. Способ 2 Запишем заданную бесконечную периодическую /?-ичную дробь 0,С[С2... стаха2.. .ака\а2.. .акаха2... в виде бесконечной суммы: 0,С]С2... ст + р~т~к аха2... ак + р~т~2к аха2...ак + р~т~зк аха2...ак+ ... Нетрудно увидеть, что за исключением непериодической части 0,cic2...cm она соответствует сумме членов бесконечной геометрической прогрессии с первым членом, равным р~т~каха2...аь и знаменателем р~к. Так как знаменатель прогрессии меньше 1, то прогрессия — убывающая. Известно, что сумма членов такой прогрессии равна: —озар- (п2.з.10) KV-о 1) Следовательно, для получения десятичной дроби, соответствующей заданной р-ичной дроби, нужно записать числитель и знаменатель отношения (П2.3.10) в десятичной системе и прибавить к результату непериодическую (конечную) часть дроби, предварительно переведенную в десятичную систему (см. раздел П2.3.1, способ 2). ♦ Пример 3.8. Переведем в десятичную систему число 0,11(1101)2. Решение Значение выражения (3.10): (Ю01)2 _ 910 _ 3,0 = 0,15. 2 -(2 -1) 6010 2010 Предпериод: 0,112=1io. = 0,75. 4,о Результат 0,15 + 0,75 = 0,9. Можно также: 1) получить обыкновенную дробь по формуле (П2.3.10); 2) представить непериодическую часть — конечную р-ичную дробь — в виде обыкновенной дроби в десятичной системе; 3) сложить обе обыкновенные дроби; 4) разделить числитель результата на знаменатель.
370 Приложение 2 ♦ Пример 3.9. Переведем в десятичную систему число 0,11(1101)2. Решение 1) значение выражения (3.10): (1001)2 9,0 ^ 3,„ , 22 (24 -1) 60,о 2010’ 2) предпериод: 3) сумма: А + 2 = JL 20 4 10 ’ 4) искомый результат: 0,9. При использовании всех возможных вариантов перевода в десятичную систему счисления заданной р-ичной периодической дроби рассчитывается обыкновенная дробь, соответствующая искомому результату. После возможного сокращения полученной обыкновенной дроби можно определить, какой дробью — конечной или периодической (чисто периодической/смешанной периодической) — она будет в десятичной системе. Для этого следует исследовать знаменатель сокращенной дроби (см. раздел П2.1.2). Задания для самостоятельной работы учащихся ► 33. Переведите в десятичную систему счисления описанным способом следующие дроби: а) 0,(1101)2; б) 0,0(221)3; в) 0,1(123)3. ► 34. Заполните приведенную ниже таблицу, указав, может ли заданная в /7-ичной системе счисления чисто периодическая дробь быть одним их трех видов дроби в десятичной системе: р Вид дроби в десятичной системе Может ли быть? 2 Конечная Чисто периодическая Смешанная периодическая 3 Конечная Чисто периодическая Смешанная периодическая 9 Конечная Чисто периодическая Смешанная периодическая
О переводе из одной системы счисления в другую дробей 371 ► 35. Заполните приведенную ниже таблицу, указав, может ли заданная в /7-ичной системе счисления смешанная периодическая дробь, предпериод которой состоит из одних нулей, быть одним их трех видов дроби в десятичной системе: р Вид дроби в десятичной системе Может ли быть? 2 Конечная Чисто периодическая Смешанная периодическая 3 Конечная Чисто периодическая Смешанная периодическая 9 Конечная Чисто периодическая Смешанная периодическая ► 36. Установите, изменится ли содержание последней таблицы, когда заданная десятичная дробь — смешанная периодическая, предпериод которой не состоит из одних нулей. ► П2.4. Взаимосвязь между системами счисления с основаниями Q = Р1" Как и для целых чисел, перевод правильных дробей из системы счисления с основанием р в систему с основанием q = рт и из системы счисления с основанием q = рт в систему с основанием р, где т — натуральное число, может быть проведен без промежуточного перевода в десятичную систему. ► П2.4.1. Перевод из системы счисления с основанием р в систему с основанием q-pm Метод перевода проиллюстрируем на примере. ♦ Пример 4.1. Переведем в восьмеричную систему число ОД 100112. Решение Разобьем цифры дробной части, начиная с первой цифры после запятой, на группы из трех цифр (число 8 — 3-я степень числа 2): 110011 Каждую тройку двоичных цифр заменим соответствующей восьмеричной цифрой (она будет равна десятичному числу, рассчитанному по развернутой форме тройки цифр): 1102 = 610, 112 = Зю-
372 Приложение 2 Полученные восьмеричные цифры определяют дробную часть искомого результата. Обоснование 0,1100112 = 1 • 2“' + 1 • 2~2 + 0 • 2"3 + 0 • 2^* + 1 • 2“5+ 1-2^ = _(\ 1 0V (1 1 0^_ 1-4 + 1-2 + 0-1 0-4 + 1-2 + 1-1 _ 6 3 _ 1 1— 4- 1 1— — 1 1 . U 4 SJ \2 4 SJ 8 8 8 64 Полученная сумма представляет собой развернутую форму записи восьмеричной дроби с цифрами 6 и 3. Ответ: 0,1100112 = 0,638. ♦ Пример 4.2. Переведем в восьмеричную систему число 0,11012. Решение Здесь количество цифр дробной части не кратно трем. В таких случаях в последнюю группу цифр добавляются конечные нули (в данном случае — два): 110 100 1102 = 6 ю, 1002 = 4ю- Ответ: 0,11012= 0,648. Общее правило перевода правильных дробей из системы счисления с основанием р в систему с основанием q = рт, где т — натуральное число: 1) цифры /7-ичной дроби группируются по т штук, начиная с первой цифры после запятой (если последняя группа содержит менее т цифр, то к ней добавляют справа соответствующее количество нулей); 2) каждая группа цифр заменяется соответствующей g-ичной цифрой (с использованием десятичной системы в качестве промежуточной). Задания для самостоятельной работы учащихся ► 37. Переведите: а) троичное число 0,220112 в девятеричную систему счисления; б) двоичное число 0,00011011 в восьмеричную систему счисления; в) четверичное число 0,013 в шестнадцатеричную систему счисления. ► 38. Обоснуйте приведенное общее правило перевода с помощью формул, как это сделано для примера 4.1. ► П2.4.2. Перевод из системы счисления с основанием q=pm в систему с основанием р Здесь методика перевода (как бы «обратная» к описанной) такая: каждая цифра дробной части g-ичной дроби переводится в р-ичную систему и заменяется соответствующей группой из т цифр (при необходимости — с начальными нулями или группой из одних нулей). Возможные незначащие нули после крайней правой ненулевой цифры результата не учитываются.
О переводе из одной системы счисления в другую дробей 373 ♦ Пример 4.3. Переведем в двоичную систему число 0,6038. Решение 68 = 1102 38=112 Ответ: 0,6038 = 0,1100000112. ♦ Пример 4.5. Переведем в троичную систему число 0,2769. Решение 29 = 23 79 = 213 69 = 20з Ответ: 0,2769= 0,022123. Задание для самостоятельной работы учащихся ► 39. Переведите: а) число 0,73 59 в троичную систему счисления; б) число 0,32014 в двоичную систему счисления; в) число 0,1С816 в четверичную систему счисления. В заключение заметим, что доказательства теорем, подтверждающих правила перевода чисел из системы счисления с основанием р в систему с основанием q = рт и из системы счисления с основанием q = рт в систему с основанием р, где т — натуральное число, приведены в [2]. Ответы на задания 1. а) 0,5,о = 0,36; б) 0,0781251(> = 0,0114; в) 0,8,о = 0,(4)б5 г) 0,8,о= 0,(2101)3; д) 0,3,о = 0,2(3146)8. 2. Как и при «ручном» переводе, удобно записывать также дробные части произведений: А В 1 Основание р (2-9): 2 2 Заданная дробь: 0.375 3 0 0.75 4 1 0.5 5 1 0 6 0 0 12 0 0
374 Приложение 2 Формулы в ячейках АЗ и ВЗ соответственно: =ОТБР(В2*В$1) и =В2*В$1-А4 могут быть скопированы на остальные строки. 3. Программы для перевода заданной конечной десятичной дроби в /?-ичную систему счисления в разных вариантах описаны в приложении 5. 4. 1) если знаменатель п имеет простые делители, равные делителям р то если знаменатель п не имеет простых делителей, отличных от делителей р (или, что то же самое, представляет собой произведение степеней делителей числа р), то соответствующая в р-ичная дробь является конечной иначе соответствующая десятичная дробь является бесконечной — смешанной периодической все иначе |знаменатель п не имеет простых делителей, |равных делителям р соответствующая р-ичная дробь является бесконечной — чисто периодической все 2) если знаменатель п не имеет простых делителей, равных делителям р то соответствующая р-ичная дробь является бесконечной — чисто периодической иначе если знаменатель п не имеет простых делителей, отличных от делителей р (или, что то же самое, представляет собой произведение степеней делителей числа /?), то соответствующая в р-ичная дробь является конечной иначе соответствующая десятичная дробь является бесконечной — смешанной периодической все все
О переводе из одной системы счисления в другую дробей 375 5. а) конечная; б) смешанная периодическая; в) чисто периодическая; г) конечная; д) чисто периодическая; е) смешанная периодическая. 6. р Вид дроби в р-ичной системе Может ли быть? Обоснование Пример 2 2.1 Конечная Да В случае, когда знаменатель п (см. выше) равен степени числа 2 0,375,0= | = О = 0,0112 2.2 Чисто периодическая Да В случае, когда знаменатель п не равен степени числа 2 0,210= | = = 0,(0011)2 2.3 Смешанная периодическая Да В случае, когда простыми делителями знаменателя п являются не только двойки, но и пятерки °’1,0=^1 = = 0,0(0011)2 3 3.1 Конечная Нет См. п. 3.2 3.2 Чисто периодическая Да Знаменатель обыкновенной дроби имеет вид 10* и не может иметь простыми делителями число 3 0,1 = 0,(0022)3 3.3 Смешанная периодическая Нет См. п. 3.2 4 4.1 Конечная Да В случае, когда знаменатель п равен степени числа 2 0,375,о = ~ = О = 0,124 4.2 Чисто периодическая Да В случае, когда знаменатель п не равен степени числа 2 0,2,о 4 = = о,(3)4 4.3 Смешанная периодическая Да В случае, когда простыми делителями знаменателя п являются не только двойки, но и пятерки “•'"-■г?- = 0,0(12)4
376 Приложение 2 Продолжение таблицы р Вид дроби в /7-ичной системе Может ли быть? Обоснование Пример 5.1 Конечная Да В случае, когда знаменатель п равен степени числа 5 0,00810 = — = 125 = 0,0015 5 5.2 Чисто периодическая Да В случае, когда знаменатель п не равен степени числа 5 0,375,0= | = О = 0,(14)5 5.3 Смешанная периодическая Да В случае, когда простыми делителями знаменателя п являются не только пятерки, но и двойки 0,003,о = 3 5-5-2*2 = 0,000(14)5 6.1 Конечная Да В случае, когда знаменатель п равен степени числа 2 0,5,о = — = 0,36 6 6.2 Чисто периодическая Да В случае, когда знаменатель п не равен степени числа 2, а равен степени 5 0,2,о= ^ = = 0,(1)6 6.3 Смешанная периодическая Да В случае, когда простыми делителями знаменателя п являются не только двойки, но и пятерки ОДю = “— 2' = 0,0(3)6 7.1 Конечная Нет См. п. 7.2 7 7.2 Чисто периодическая Да Знаменатель обыкновенной дроби имеет вид 10* и не может иметь простыми делителями число 7 0,1,.-^- 0,(0462)7 7.3 Смешанная периодическая Нет См. п. 7.2 8.1 Конечная Да В случае, когда знаменатель п равен степени числа 2 0,5,0= \ = 0Лг 8 8.2 Чисто периодическая Да В случае, когда знаменатель п не равен степени числа 2 0,210= j = = 0,(1463)8
О переводе из одной системы счисления в другую дробей 377 Окончание таблицы р Вид дроби в р-ичной системе Может ли быть? Обоснование Пример 8.3 Смешанная периодическая Да В случае, когда простыми делителями знаменателя п являются не только двойки, но и пятерки 0,1ю= = 2о = 0,(6314)8 9 9.1 Конечная Нет См. п. 9.2 9.2 Чисто периодическая Да Знаменатель обыкновенной дроби имеет вид 10* и не может иметь простыми делителями число 9 0,1,.-^- = 0,(08), 9.3 Смешанная периодическая Нет См. п. 9.2 7. а) 0,(6)ю = 0,(10)2; б) 0,(7)10 = 0,(10)2. Примечание. Приведены результаты, рассчитанные с использованием электронных таблиц и значениями в виде обыкновенной дроби, соответствующей заданной периодической (см. раздел П2.2.3). 10. 59 . ч 35 а) —; 111 Ill’ 23 . 3300 б) _±_; 165 119 ч 313 в) . 990 495 11. Вспомогательные расчеты (например, в столбце М) следует проводить по формулам, представленным в последнем столбце: О М 1 Вспомогательные расчеты 2 Позиция «)» 7 =найти(")";В1) 3 Период как текст 123 =ПСТР(В1;4;М2-4-1 + 1) 4 Период как число 123 =ЗНАЧЕН(МЗ) 5 Длина периода 3 =ДЛСТР(МЗ) 6 Степень числа 10 1000 =СТЕПЕНЬ(10;М5) 7 Знаменатель дроби 999 = М6-1
378 Приложение 2 Искомое значение в ячейке В2 рассчитывается по формуле: =М4/М7. 12. Вспомогательные расчеты (например, в столбце М) следует проводить по формулам, представленным в последнем столбце: О М 1 Вспомогательные расчеты 2 Позиция «(« 5 =найти(Т;В1) 3 Позиция «)» 8 =НАЙТИ(7';В1) 4 Период как текст 12 =ПСТР(В1;М2+1;(МЗ-1)-(М2+1)+1) 5 Период как число 12 =ЗНАЧЕН(М4) 6 Длина периода 2 =ДЛСТР(М4) 7 Степень числа 10 ,100 =СТЕПЕНЬ(10;М6) 8 Знаменатель периода 99 =М7-1 9 Предпериод как текст 00 =ПСТР(В1;3;М2-1-3+1) 10 Длина предпериода 2 =ДЛСТР(М9) 11 Степень числа 10 100 =СТЕПЕНЬ(10;М10) 12 Уменьшение периода 0.01 =1/М11 Формула в ячейке В2: =М12*М5/М8. 13. Вспомогательные расчеты (например, в столбце М) следует проводить по формулам, представленным в последнем столбце: О М 1 Вспомогательные расчеты 2 Позиция «(« 6 =НАЙТИ("(М;В1) 3 Позиция «)» 9 =НАЙТИ(У;В1) 4 Период как текст 34 =ПСТР(В1 ;М2+1 ;(МЗ-1)-(М2+1)+1) 5 Период как число 34 =ЗНАЧЕН(М4) 6 Длина периода 2 =ДЛСТР(М4) 7 Степень числа 10 100 =СТЕПЕНЬ(10;М6) 8 Знаменатель периода 99 =М7-1 9 Предпериод как текст 012 =ПСТР(В1;3;М2-1-3+1) 10 Длина предпериода 3 =ДЛСТР(М9) 11 Степень числа 10 1000 =СТЕПЕНЬ(10;М10) 12 Уменьшение периода 0.001 =1/М11 13 Предпериод как число 12 =ЗНАЧЕН(М9) 14 Вклад предпериода 0.012 =М13/М11 Формула в ячейке В2: =М14+М12*М5/М8. 14. Задание выполняется как «сумма» заданий 13 (общий случай вида периодической дроби) и 2.
О переводе из одной системы счисления в другую дробей 379 15. Решение задачи получение числового представления чисто периодической дроби, задаваемой как текст, сводится к выполнению следующих основных этапов — см. формулу (П2.2.3). 1. Определение позиции закрывающей скобки в периодической дроби, заданной как строковая величина. 2. Определение значения периода как строковой величины. 3. Определение значения периода как целого числа. 4. Определение знаменателя обыкновенной дроби. 5. Вывод искомого значения — отношения периода как числа к знаменателю. Программная реализация этих этапов зависит от используемого языка программирования. 16. 1) расчет проводится по формуле (П2.2.6). Дополнительно к предыдущей задаче определяется позиция открывающей скобки в периодической дроби и длина предпериода. 2) рассчитывается и учитывается также числовое значение предпериода— см. формулу (П2.2.10). 17. а) чисто периодическая; б) конечная; в) смешанная периодическая; г) смешанная периодическая; д) чисто периодическая; е) чисто периодическая; ж) смешанная периодическая; 3) смешанная периодическая. 18. р Вид дроби в р-ичной системе Может ли быть? Обоснование Пример 2.1 Конечная Нет См. п. 2.2 2 2.2 Чисто периодическая Да Знаменатель обыкновенной дроби, соответствующий заданной десятичной (далее в этой таблице — «знаменатель»), имеет вид 9..9 и не может иметь простыми делителями число 2 0,(2),„=! = = 0,(001110)2
380 Приложение 2 Продолжение таблицы р Вид дроби в р-ичной системе Может ли быть? Обоснование Пример 2.3 Смешанная периодическая Нет См. п. 2.2 3.1 Конечная Да В случае, когда знаменатель сокращенной обыкновенной дроби равен степени числа 3 3 1 0,(3)ю = 9 ~ з = = 0,13 0,(037)10 = 37 _ 1 = 999 ~ 21 = = 0,0013 3 3.2 Чисто периодическая Да В случае, когда знаменатель сокращенной обыкновенной дроби не имеет простых делителей, равных 3 0,(09)|0 = 9 _ 1 99 “ 11 = 0,(00211)3 3.3 Смешанная периодическая Да В случае, когда знаменатель сокращенной обыкновенной дроби имеет простые делители число, как равные 3, так и отличные от 3 0,(03)10 = 3 1 99 3-11 = 0,0(00211)з 4.1 Конечная Нет См. п. 4.2 4 4.2 Чисто периодическая Да Знаменатель имеет вид 9..9 и не может иметь простыми делителями число 4 0,(2)ю = — = = 0,(032)4 4.3 Смешанная периодическая Нет См. п. 4.2 5 5.1 Конечная Нет См. п. 5.2 5.2 Чисто периодическая Да Знаменатель имеет вид 9..9 и не может иметь простыми делителями число 5 0,(2)10=| = = 0,(102342)5 5.3 Смешанная периодическая Нет См. п. 5.2 6 6.1 Конечная Да В случае, когда знаменатель сокращенной обыкновенной дроби равен степени числа 3 0,(3)10= 1=0,26 3
О переводе из одной системы счисления в другую дробей 381 Окончание таблицы р Вид дроби В /7-ИЧНОЙ системе Может ли быть? Обоснование Пример 6.2 Чисто периодическая Да В случае, когда знаменатель сокращенной обыкновенной дроби не имеет простых делителей, равных 3 0,(09)10 = 9 _ 1 99 ~ 11 = 0,(0313452421)6 6.3 Смешанная периодическая Да В случае, когда знаменатель сокращенной обыкновенной дроби имеет простые делители число, как равные 3, так и отличные от 3 0,(03)ш = 3 1 99 ~ 3 • 11 = 0,0(1031345242)6 7.1 Конечная Нет См. п. 7.2 1 7.2 Чисто периодическая Да Знаменатель имеет вид 9..9 и не может иметь простыми делителями число 7 0,(2)ю= — = 0,(136)7 7.3 Смешанная периодическая Нет См. п. 7.2 8.1 Конечная Нет См. п. 8.2 8 8.2 Чисто периодическая Да Знаменатель имеет вид 9..9 и не может иметь простыми делителями число 2 0,(2)10= |= 0,(16)* 8.3 Смешанная периодическая Нет См. п. 8.2 9 9.1 Конечная Да В случае, когда знаменатель сокращенной обыкновенной дроби равен степени числа 3 0>(3)ю = ~ = 0,3, 9.2 Чисто периодическая Да В случае, когда знаменатель сокращенной обыкновенной дроби не имеет простых делителей, равных 3 0,(63) 10 = = 63 - 7 99 ~ 11 = 0,(56481), 9.3 Смешанная периодическая Да В случае, когда знаменатель сокращенной обыкновенной дроби имеет простые делители число, как равные 3, так и отличные от 3 0,(03)ш = 3 1 99 3 11 = 0,0(24073),
382 Приложение 2 19. Общее замечание Знаменатель обыкновенной дроби, соответствующей заданной десятичной, имеет вид 10* • (99...9), где к — длина предпериода. Далее в таблице будет фигурировать знаменатель п этой дроби после сокращения. р Вид дроби в р- ичной системе Может ли быть? Обоснование Пример 2 2.1 Конечная Нет Знаменатель п не может быть равен степени числа 2 (см. общее замечание) 2.2 Чисто периодическая Да В случае, когда знаменатель п имеет только простые делители, отличные от 2 0,0(2)10 = 1 2 1 10 9 3-3-5 2.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители как равные 2,так и другие 0,0(1 )ю = 1 1 1 10 9 2 • 3 - 3 - 5 3 3.1 Конечная Нет Знаменатель п не может быть равен степени числа 3 3.2 Чисто периодическая Да В случае, когда знаменатель п имеет только простые делители, отличные от 3 0,0(9).о = 1 9_ 1 10 9 ” 2-5 3.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители как равные 3, так и другие 0,0(3) ,о = 1 3 1 10 9 2-5-3 4 4.1 Конечная Нет Знаменатель п не может быть равен степени числа 2
О переводе из одной системы счисления в другую дробей 383 Продолжение таблицы р Вид дроби в/ьичной системе Может ли быть? Обоснование Пример 4.2 Чисто периодическая Да В случае, когда знаменатель п имеет только простые делители, отличные от 2 0,0(2)10 = 1 2 1 10 9 3-3-5 4.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители как равные 2, так и другие 0,0(1)10 = 1 1 1 10 9 2-5-3-3 5 5.1 Конечная Нет Знаменатель п не может быть равен степени числа 5 5.2 Чисто периодическая Да В случае, когда знаменатель п имеет только простые делители, отличные от 5 0,0(05)ю = 1 5 1 10 9 2-3-3-11 5.3 Смешанная периодическая Да В случае, когда знаменатель п имеет только простые делители, отличные от 2 0,0(2)ю = 1 2 1 10 9 3-3-5 6 6.1 Конечная Нет Знаменатель п не может быть равен степени числа 2 или степени числа 3 или их произведению 6.2 Чисто периодическая Да В случае, когда знаменатель имеет только простые делители, отличные от 2 и 3 0,0(18)10 = 1 18 1 10 99 5-11 6.3 Смешанная периодическая Да В случае, когда знаменатель имеет простые делители как равные 2 или 3,так и другие 0,0(1)ю = 1 1 1 10 9 2-5-3-3
384 Приложение 2 Окончание таблицы р Вид дроби в р-ичной системе Может ли быть? Обоснование Пример 7 7.1 Конечная Нет См. п. 7.2 7.2 Чисто периодическая Да Знаменатель п не может иметь простыми делителями число 7 7.3 Смешанная периодическая Нет См. п. 7.2 8 8.1 Конечная Нет Знаменатель п не может быть равен степени числа 2 8.2 Чисто периодическая Да В случае, когда знаменатель п имеет только простые делители, отличные от 2 0,0(2)10 = 1 2 1 10 9 3-3-5 8.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители как равные 2, так и другие 0,0(1)|0 = 1 1 1 10 9 2-5-3-3 9 9.1 Конечная Нет Знаменатель п не может быть равен степени числа 3 9.2 Чисто периодическая Да В случае, когда знаменатель п имеет только простые делители, отличные от 3 0,0(9)]0 = —— • — = —-— 10 9 2-5 9.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители как равные 3, так и другие 0,0(1)10 = 1 1 1 10 9 2-5-3-3 20. Учет значения предпериода периодической дроби не изменит значения знаменателя соответствующей обыкновенной дроби, поэтому вид 4-го слева столбца последней таблицы не изменится.
О переводе из одной системы счисления в другую дробей 385 ♦ Пример Определим обыкновенную дробь, соответствующую смешанной десятичной дроби 0,0(2): _1_ 2__2_ 10 9 ~ 90 Простые делители знаменателя сокращенной дроби: 3, 3 и 5, то есть соответствующие двоичная, четверичная и восьмеричная дроби — чисто периодические. Для десятичной дроби 0,1(3) имеем: J_ _1_ 1-11 10 + 109~90 Простые делители знаменателя сокращенной дроби: 3 и 5; соответствующие дроби в только что перечисленных системах счисления — также чисто периодические. 21. а) 0,12024 = 0.3828125ю; б) 0,31215= 0,657610; в) 0,B0F916= 0,6912994310. 22. а) 0,101012 = 0,6562510; б) 0,2121 з = 0.8641975310. 23. Если весомости разрядов записать, например, в строке 42 (см. ниже), то искомое значение в ячейке ВЗ может быть рассчитано по формуле: =СУММПРОИЗВ(В1:11;В42:142). Расчет весомостей может быть проведен следующим образом: 1) в ячейки В41:141 вводятся номера разрядов (это можно сделать, используя автозаполнение); 2) в ячейку В42 вводится формула =СТЕПЕНЬ($В2;-С41), которая затем распространяется (копируется) на остальные ячейки. А В С D Е I 1 Введите цифры правильной р-ичной дроби 0 1 1 2 Введите основание системы счисления р 2 3 Соответствующая десятичная дробь равна 0.375 41 Номер разряда 1 2 3 6 8 42 Весомость разряда 0.5 0.25 0.125 0.01562 0.0039
386 Приложение 2 24. Вспомогательные расчеты можно провести, например, в строке 41: А В С D Е F G Н I 1 Введите цифры правильной р-ичной дроби 0 1 1 2 Введите основание системы счисления р 2 3 Соответствующая десятичная дробь равна 0.375 41 Вспомогательные расчеты 1 2 3 4 5 6 7 8 Формула в ячейке 141: =(J21+I1)/$B2 может быть распространена (скопирована) на остальные ячейки диапазона В41 :Н41. Приведенный пример наглядно демонстрирует преимущества использования для расчетов схемы Г орнера. 25. Здесь нужно получить отдельные цифры заданной дроби, после чего задача сводится к одной из двух предыдущих. Цифра в разряде 1 может быть рассчитана по формуле: =ОСТАТ(ОТБР($В 1 *10); 10) в разряде 2: =ОСТАТ (ОТБР($В1 *100); 10) в разряде 3: =ОСТАТ (ОТБР($В1 *1000); 10) (убедитесь в правильности указанных формул). Если степени числа 10 определить, например, в строке 43 (см. ниже), то формула в ячейке В40: =ОСТАТ (ОТБР($В1 *В43); 10) может быть распространена (скопирована) на остальные ячейки. А В С D Е I 40 Цифры заданной дроби 0 1 1 41 Номер разряда 1 2 3 4 8 42 Весомость разряда 0.5 0.25 0.125 0.0625 0.003906 43 Степени числа 10 10 100 1000 10000 1Е+08 26. Программы для перевод а заданной правильной конечной /?-ичной дроби в десятичную систему счисления описанным в разделе П2.3.1 способом приведены в Приложении 5.
О переводе из одной системы счисления в другую дробей 387 27. а) 0,12з = 0,(5)10; б) 0,3124 = 0,(6)|0. 28. а) 0,11012 = —; б) 0,2123 = —; в)0,1024=—. 16 27 32 29. а) конечная; в) смешанная периодическая; б) чисто периодическая. 30. р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 2 2.1 Конечная Да Знаменатель соответствующей обыкновенной дроби в десятичной системе (далее в этой таблице — «знаменатель») всегда равен степени числа 2 (см. раздел П2.1.2) o,oi i2= 2 = 8 0,375 jo 2.2 Чисто периодическая Нет См. п. 2.1 2.3 Смешанная периодическая Нет См. п. 2.1 3.1 Конечная Нет См. п. 3.2 3 3.2 Чисто периодическая Да Знаменатель равен степени числа 3 и не может быть равен степени числа 2 или степени числа 5 или их произведению 0,213 = 1 = 9 = 0,(7)10 3.3 Смешанная периодическая Нет См. п. 3.2 4 4.1 Конечная Да Знаменатель всегда равен степени числа 4, а значит, и степени числа 2 0,124= — = 16 = 1 =0,375,0 8 4.2 Чисто периодическая Нет См. п. 4.1 4.3 Смешанная периодическая Нет См. п. 4.1
388 Приложение 2 Продолжение таблицы р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 5 5.1 Конечная Да Знаменатель всегда равен степени числа 5 0,0015= — = 125 = 0,008,о 5.2 Чисто периодическая Нет См. п. 5.1 5.3 Смешанная периодическая Нет См. п. 5.1 6 6.1 Конечная Да В случае, когда знаменатель сокращенной дроби равен степени числа 2 0,36= - = 6 = - =0,5,о 2 6.2 Чисто периодическая Да В случае, когда знаменатель сокращенной дроби равен степени числа 3 0,26= 1 = 6 = - = 0,(3),0 3 6.3 Смешанная периодическая Да В случае, когда знаменатель сокращенной дроби произведению равен степени числа 2 на степень числа 3 0,036= — = 36 1 22 -3 = 0,8(3)|0 7 7.1 Конечная Нет См. п. 7.2 7.2 Чисто периодическая Да Знаменатель равен степени числа 7 и не может быть равен степени числа 2 или степени числа 5 или их произведению 0,57= - = 7 = 0,(714285)ю 7.3 Смешанная периодическая Нет См. п. 7.2 8 8.1 Конечная Да Знаменатель всегда равен степени числа 8, а значит, и степени числа 2 0,48 = — = 0,5 ю 2 8.2 Чисто периодическая Нет См. п. 8.1
О переводе из одной системы счисления в другую дробей 389 Окончание таблицы р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 8.3 Смешанная периодическая Нет См. п. 8.1 9 9.1 Конечная Нет См. п. 9.2 9.2 Чисто периодическая Да Знаменатель равен степени числа 9 и не может быть равен степени числа 2 или степени числа 5 или их произведению 5 0,59= - = 9 = 0,(5)10 9.3 Смешанная периодическая Нет См. п. 9.2 31. а) 0,(101)3 = 0,(384615),0; б) 0,0(21)4 = 0,15,0; в) 0,10(21)5 = 0,218(3),о. 32. а) 0,00(12)4 = 0,025,0; б) 0,10(101)з= 0,(376068),0. 33. а) 0,(1101)2= 0,8(6)10; б) 0,0(221)3 = 0,3(2051286)]0; в) 0,1(123)3 = 0,(396825)10. 34. Общее замечание Знаменатель обыкновенной дроби, соответствующей анализируемой десятичной, имеет вид рк - 1, где к — длина периода. Далее в таблице будет фигурировать знаменатель п этой дроби после сокращения. Р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 2 2.1 Конечная Да В случае, когда знаменатель п равен 5 0,(0011)2 = - 3 1-02 — = — — и,/,о 15 5
390 Приложение 2 Продолжение таблицы р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 2.2 Чисто периодическая Да В случае, когда знаменатель п имеет не имеет простых делителей, равных 5 0,(011)2= - = 7 = 0,(428571),о 2.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители как равные 5, так и другие 4 0,(0100)2= — = 15 = J_ = 0,2(6)lo 3-5 3 3.1 Конечная Да В случае, когда знаменатель п является степенью числа 2 или произведением степени числа 2 на 5 0,(1)3= — = 0,5,о 2 о,(п)з=2 = 8 = А = 0,375ю 23 0,(0001)з= = 80 _ 1 _ 24 -5 = 0,0125ю 3.2 Чисто периодическая Да В случае, когда знаменатель п не имеет простых делителей, равных 2 или 5 0,(002)3 = 2 _ 1 26 “ 13 = 0,(076923),о 3.3 Смешанная периодическая Да В случае, когда знаменатель п имеет как простые делители, равные 2 или 5, так и другие 0,(001)3 = = 1 1 = 26 2-13 = 0,0(384615),0 4 4.1 Конечная Да В случае, когда знаменатель п равен 5 3 1 0,(03)4= —= - = 15 5 0,2,о 4.2 Чисто периодическая Да В случае, когда знаменатель п не имеет простых делителей, равных 5 0,(11)4 = 5 _ 1 = 15 " 3 = 0,(3),о
О переводе из одной системы счисления в другую дробей 391 Продолжение таблицы р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 4.3 Смешанная периодическая Да В случае, когда знаменатель п имеет как простой делитель, равный 5, так и другие 0,03)4 = I?= = 0,4(6) |о 5.1 Конечная Да В случае, когда знаменатель п является степенью числа 2 0,(03)5 = = 3 _1 _ 1 = 24 “ 8 ~ 23 = 0,125ю 5 5.2 Чисто периодическая Да В случае, когда знаменатель п не имеет простых делителей, равных 2 0,(13)j = = 8 _ 1 = 24 " 3 = 0,(3),о 5.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители как равные 2, так и другие 0,(01 >5= — = 24 1 2-2-2-3 = 0,041 (6),о 6.1 Конечная Да В случае, когда знаменатель п равен 5 1 0,(1)б=- = 0,2,о 6 6.2 Чисто периодическая Да В случае, когда знаменатель п не имеет простых делителей, равных 5 0,(05)6 = 5 _ 1 = 35 " 7 = 0,(142857),о 6.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители как равные 5, так и другие 0,(05)6 = 1 _ 1 35 ~ 5-7 = 0,0(285714)10 7 7.1 Конечная Да В случае, когда знаменатель п является степенью числа 2 0,(06), = 6 _ 1 _ 1 48 ~ 8 “ 23 = 0,125,о 7.2 Чисто периодическая Да В случае, когда знаменатель п не имеет простых делителей, равных 2 2 1 0,(2)7= — = — = 6 3 = 0,(3),о
392 Приложение 2 Окончание таблицы р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 7.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители как равные 2, так и другие 0,0)7= I = 6 =— =0,1(6),о 2-3 8 8.1 Конечная Нет См. п. 8.2 8.2 Чисто периодическая Да Знаменатель несокращенной обыкновенной дроби имеет вид 8* - 1 и не является степенью числа 2, или степенью числа 5, или их произведением 0,(3)g= - = 7 = 0,(428571),о 8.3 Смешанная периодическая Нет См. п. 8.2 9 9.1 Конечная Да В случае, когда знаменатель п является степенью числа 2 или произведением степени числа 2 на 5 0,(2), = - 2 _ 1 _ 1 8 " 4 " 22 = 0,25ю 0,(08), = 8 _ 1 80 " 10 ■— - 0,1,о 2-5 9.2 Чисто периодическая Да В случае, когда знаменатель п не имеет простых делителей, равных 2 0,(008), = 8 _ 1 728 “ 91 1 7-13 = 0,(010989)ю 9.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители, как равные 2, так и другие 0,(004), = 4 _ 1 728 ~ 182 1 2-7-13 = 0,0(054945)ю
О переводе из одной системы счисления в другую дробей 393 25. Общее замечание Знаменатель обыкновенной дроби, соответствующей анализируемой десятичной, имеет ВИД рдлина-^еРиода • ^иатриода _ 1} Да. лее в таблице будет фигурировать знаменатель п этой дроби после сокращения. р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 2.1 Конечная Да В случае, когда знаменатель п равен степени 2 или произведению степени 2 на 5 0,00)2=1.1 = 1 = 2 1 2 ~ 0,510 0,0(0011)2=1. — = 2 15 = —1— = —=0,1,о 2-5 10 2 2.2 Чисто периодическая Нет Знаменатель п не может не иметь простых делителей, равных 2 и 5 2.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители, как равные 2 или 5, так и другие 0,0(01)2 = = 1 1 - 1 2 ' 3 _ 2-3 = 0,1(6)10 3.1 Конечная Нет Знаменатель п не может иметь только простые делители, равные 2 или 5 3 3.2 Чисто периодическая Да В случае, когда знаменатель п не имеет простых делителей, равных 2 или 5 0,0(002)з = _ 1 2 _ 1 3 26 3-13 = 0,(025641),о 3.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители, как равные 2, так и другие 0,0(001)з=1.— = 3 26 1 2-3-13 = 0,0(128205),о
394 Приложение 2 Продолжение таблицы р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 4 4.1 Конечная Да В случае, когда знаменатель п имеет только простые делители, равные 2 и 5 0,0(03)4= - = 4 15 1 . 0,05|0 2-2-5 4.2 Чисто периодическая Нет Знаменатель п не может не иметь простых делителей, равных 2 и 5 4.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители, как равные 2 или 5, так и другие 0,0(2)4 =1.1 = 4 3 = — =0,1(6)|0 2-3 5 5.1 Конечная Да В случае, когда знаменатель п имеет только простые делители, равные 2 и 5 0,0(1)5= 1.1 = 5 4 = 1 = 0,1 (6)10 2-2-5 5.2 Чисто периодическая Нет Знаменатель п не может не иметь простых делителей, равных 2 и 5 5.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители, как равные 2 или 5, так и другие 1 4 0,0(04)5= = 5 24 = 1 =0,0(3)ш 2-3-5 6 6.1 Конечная Да В единственном случае, когда знаменатель п имеет только простые делители, равные 2 и 5 1 3 0,0(3)6= - = 6 5 = _L =0,1|0 2-5 6.2 Чисто периодическая Нет Знаменатель п не может не иметь простых делителей, равных 2 и 5
О переводе из одной системы счисления в другую дробей 395 Продолжение таблицы р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 6.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители, как равные 2 или 5, так и другие 0,0(1 )6= = 6 5 = 1 = 0,0(3)10 2-3-5 1 7.1 Конечная Нет Знаменатель п не может иметь только простые делители, равные 2 или 5 7.2 Чисто периодическая Да В случае, когда знаменатель п не имеет простых делителей, равных 2 0,0(2), = 1.1 = 7 6 = 1 = 3-7 = 0,(047619) j о 7.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители, как равные 2, так и другие 0,0(1 )7= = 7 6 1 2-3-7 = 0,0(238095)lo 8 8.1 Конечная Да В единственном случае, когда знаменатель п имеет только простые делители, равные 2 1 7 0,0(7)8= = 8 7 = 1 =0,125,0 2-2-2 8.2 Чисто периодическая Нет Знаменатель п не может не иметь простых делителей, равных 2 или 5 8.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители, как равные 2, так и другие 1 2 0,о(2)8 = 8 7 1 = 2-2-7 = 0,035(714285)ю 9 9.1 Конечная Нет Знаменатель п не может иметь только простые делители, равные 2 или 5
396 Приложение 2 Окончание таблицы р Вид дроби в десятичной системе Может ли быть? Обоснование Пример 9.2 Чисто периодическая Да В случае, когда знаменатель п не имеет простых делителей, равных 2 0,0(8),= !.- = 9 8 = _L = 0,(1)ю 3-3 9.3 Смешанная периодическая Да В случае, когда знаменатель п имеет простые делители не только равные 2 и 5 0,0(1),= 1.1 = 9 8 1 2-2-2-2-3-3 0,013(8)ю 36. Учет значения предпериода периодической дроби не изменит значения знаменателя соответствующей обыкновенной дроби, поэтому содержание 4-го слева столбца последней таблицы не изменится. 37. а) 0,2201123 = 8159; б) 0,000110112 = 0,668; в) 0,0134 = 0,1С|6. 39. а) 0,735,= 0,2110123; б) 0,32014= 0,111000012; в) 0,1С81б= 0,013024.
Приложение 3 Программы решения ряда задач, приведенных в главе 2 ► П3.1. Задача определения номеров конвертов, необходимых ДЛЯ СБОРА ТРЕБУЕМОЙ СУММЫ (СМ. ЗАДАЧУ 2.13) Подробное условие задачи: «В конвертах с номерами 1, 2, 3, 4, ... находятся соответственно суммы 1, 2, 4, 8, ... . Требуется определить номера конвертов, общая сумма денег в которых равна некоторому числу п». Идея решения задачи такая. Нужно найти конверт, сумма в котором является максимальной среди сумм, не превышающих п. Если оставшаяся часть п равна нулю, то задача решена — следует использовать только один найденный конверт. В противном случае следует опять выбирается конверт с наибольшей суммой денег, не превосходящей оставшуюся и т. д. Эти действия необходимо прекратить, когда оставшееся значение равно нулю (значение п набрано). Видно, что для решения следует уметь решать две частные задачи: 1) задачу нахождения максимального числа, являющегося степенью двойки, не превышающего п\ 2) задачу определения номера конверта, в котором находится заданная сумма денег (равная степени двойки). Обсудим методику их решения. Задача 1 В программе на школьном алгоритмическом языке1 используем следующие переменные величины (кроме заданного числа п)\ — степень2 — значения, равные степени двойки (1, 2, 4, ...); — макс_степенъ2 — искомая величина. При решении необходимо последовательно рассматривать значения степень2, равные 1, 2, 4, ..., пока эти значения не превышают число п. Так как количество сравнений неизвестно, применим оператор цикла с условием (например, с предусловием). Соответствующий фрагмент: 1 С применением этого языка мы будем проводить анализ решения и других задач.
398 Приложение 3 степень2 := 1 нц пока степень2 <= п |Рассчитываем следующее значение степень2 степень2 :=степень2 * 2 кц Использованный оператор цикла закончится при степень2 > п, а искомое значение будет равно предыдущему значению величины степень2. Вся программа имеет вид: алг Максимальная_степень_2 нач цел п, макс_степень2, степень2 |Ввод значения л ввод п |Рассматриваем степени двойки степень2 := 1 нц пока степень2 <= п степень2 := степень2 * 2 кц |Определяем ответ (предыдущую степень) макс_степень2 := div(степень2, 2) |и выводим его вывод не, макс_степень2 кон где div — функция, определяющая целочисленное частное от деления своего первого аргумента на второй (в других языках программирования для этого используется не функция, а специальная операция). Язык Паскаль {Максимальная степень двойки для заданного числа} Uses CRT; Var n, max_stepen2, stepen2: word; BEGIN {Ввод значения n} readln(n); {Рассматриваем степени двойки} stepen2 := 1; while stepen2 <= n do stepen2 := stepen2 * 2; {Определяем ответ (предыдущую степень)} max_stepen2 := stepen2 div 2; {и выводим его} writeln(max_stepen2) END. Задача 2 Заданную сумму денег в программе назовем сумма (напомним, что она представляет собой степень двойки), а искомую величину — номер.
Программы решения ряда задач, приведенных в главе 2 399 Данную задачу можно решить, определив такой показатель степени числа 2, при котором эта степень равна сумма. Для его определения следует многократно делить значение сумма на 2 до тех пор, пока не получится 1 — количество операций деления и даст значение показателя (имя этой величины — показатель_степени2). Искомое же значение величины номер будет на 1 больше, чем показатель_степени2. Вся программа: алг Номер_конверта_по_сумме нач цел сумма, номер, показатель_степени2 ввод сумма показатель_степени2 := О нц пока сумма о 1 (Многократно делим значение сумма на 2, сумма := div(сумма, 2) (подсчитывая количество операций деления показатель_степени2 := показатель_степени2 + 1 кц I Определяем ответ номер := показатель_степени2 + 1 |и выводим его вывод номер кон Язык Паскаль {Номер конверта по сумме в нем} Uses CRT; Var summa, nomer, pokazatel_stepeni2: word; BEGIN {Ввод значения summa} readln(summa); pokazatel_stepeni2 := 0; while summa <> 1 do begin {Многократно делим значение summa на 2,} summa := summa div 2; {подсчитывая количество операций деления} pokazatel_stepeni2 := pokazatel_stepeni2 + 1 end; {Определяем ответ} nomer := pokazatel_stepeni2 + 1; {и выводим его} writeln(nomer) END.
400 Приложение 3 После решения двух частных задач «главную» задачу можно решить так. Если оставшуюся не набранной до значения п сумму обозначить именем осталось, то схема алгоритма решения задачи согласно описанной в начале идеи будет такой: цикл пока значение осталось не равна нулю 1. Найти максимальное число, являющееся степенью двойки и не превышающее осталось 2. Определить номер соответствующего конверта 3. Вывести его 4. Рассчитать новое (после использования найденного конверта)значение величины осталось конец цикла Кроме величины остаюсь, в программе используем следующие, уже рассмотренные ранее, величины: п, макс _степень2, степень2, номер, показатель _степени2 . Пункт 1 мы выполнять умеем. Решение пункта 2 аналогично решению второй из рассмотренных частных задач, если в качестве значения сумма использовать значение макс_степень2. Начальное значение величины осталось равно п, а меняющее при повторении действий: осталось := осталось - макс_степень2 Внимание! Так как при выполнении этапа 2 значение макс_степень2 будет меняться, то для правильного определения нового значения осталось действия этапа 3 следует на этапе 2 использовать «копию» значения макс_степень2. В этом случае полностью программа решения задачи имеет вид: алг Разложение_суммы_по_конвертам нач цел п, макс_степень2, степень2, осталось, номер, показатель_степени2, макс_степень2_копия ввод п осталось := п вывод не, "Необходимо использовать конверты с номерами: " нц пока осталось > 0 |Определяем максимальную степень двойки, I не превышающую значение осталось степень2 := 1 нц пока степень2 <= осталось степень2 := степень2 * 2 кц макс_степень2 := div(степень2, 2) (Максимальная степень двойки найдена
Программы решения ряда задач, приведенных в главе 2 401 |Определяем номер конверта с такой суммой показатель_степени2 := 0 макс_степень2_копия := макс_степень2 нц пока макс_степень2_копия о 1 макс_степень2_копия :=div(макс_степень2_копия, 2) показатель_степени2 := показатель_степени2 + 1 кц номер := показатель_степени2 + 1 |и выводим его вывод номер, 11 11 |Рассчитываем новое значение величины осталось осталось := осталось - макс_степень2 кц кон Язык Паскаль {Разложение суммы денег л по конвертам} Uses CRT; Var n, max_stepen2, stepen2, ostalos, nomer, pokazatel_stepeni2, max_stepen2_kopia: word; BEGIN {Ввод значения суммы л} readln(n); ostalos := n; writeln(1 Необходимо использовать конверты с номерами: '); while ostalos > 0 do begin {Определяем максимальную степень двойки, не превышающую значение осталось} stepen2 := 1; while stepen2 <= ostalos do stepen2 := stepen2 * 2; max_stepen2 := stepen2 div 2; {Максимальная степень двойки найдена. Определяем номер конверта с такой суммой} pokazatel_stepeni2 := 0; max_stepen2_kopia := max_stepen2; while max_stepen2_kopia <> 1 do begin max_stepen2_kopia := max_stepen2_kopia div 2; pokazatel_stepeni2 := pokazatel_stepeni2 + 1 end; nomer := pokazatel_stepeni2 + 1; {и выводим его} write(nomer, ' 1 ); {Рассчитываем новое значение величины ostalos}
402 Приложение 3 ostalos := ostalos - max_stepen2 end END. Возникает вопрос — а нельзя две указанные выше вспомогательные задачи решать одновременно? Оказывается — можно. Задания для самостоятельной работы учащихся ► 1. Разработайте вариант программы, в котором число при определении максимальной степени двойки одновременно будет находиться и номер соответствующего разряда. ► 2. Разработайте программу решения задачи Флавия (см. п. 2.26) для частного случая — когда к - 2. ► П3.2. Программа к задаче 2.18 «Бедный торговец» Еще раз сформулируем задачу. Имеются гири массой 1, 3, 9, 27, ... г. Нужно определить, какие гири надо класть вместе с грузом, а какие — на свободную чашку, чтобы при грузе массой п г весы были в равновесии. Методика разработки программы Прежде всего, переведем число п в «обычную» троичную систему. Применим метод последовательного деления на основание (см. приложение 1). В приведенном ниже фрагменте программы использованы также следующие переменные величины: — цифры — массив с данными целого типа, в котором будут храниться цифры «нового» числа. Размер этого массива следует определить с учетом возможной длины новой записи числа; — кол_цифр — фактическое количество цифр в троичной записи числа. Соответствующий фрагмент: кол_цифр := 0 нц пока п > 0 |Увеличиваем значение кол_цифр кол_цифр := кол_цифр + 1 |Определяем очередную цифру и записываем ее в массив цифры[кол_цифр] := mod(n, 3) |Определяем целочисленное частное n := div(n, 3) кц где mod — функция, определяющая остаток от деления своего первого аргумента на второй (в других языках программирования для этого используется не функция, а специальная операция. Как правило, ее имя также mod).
Программы решения ряда задач, приведенных в главе 2 403 Обратим внимание на то, что в массив цифры записываются, начиная с последней цифры новой записи. После этого получим представление числа п в уравновешенной троичной системе. Для этого пройдем по массиву, начиная с первого элемента (то есть с последней цифры троичной записи). При уточнении значений цифр в каждом /-м разряде будем учитывать возможный перенос из предыдущего разряда: цифры[i] := цифры[i] + перенос Возможны следующие варианты уточнения: при цифры[i] = 2: |Уточняем цифру цифры[i] := -1 I Новое значение переноса перенос := 1 при цифры[i] = 3: цифры[i] := 0 перенос := 1 иначе перенос := 0 Так мы обработаем все цифры «обычной» троичной записи. Ясно, что возможно появление еще одной цифры. Этот факт можно зафиксировать по условию перенос = 1: если перенос = 1 то |Уточняем общее количество цифр кол_цифр := кол_цифр + 1 |Новая цифра цифры[кол_цифр] := 1 все Итак, представление числа п в уравновешенной троичной системе получено. Согласно методике, описанной в ответах на дополнительные задания для самостоятельной работы учащихся (см. ответ к задаче 2.18), вместе с грузом нужно положить гири, масса которых равна весомости тех разрядов, в которых стоит цифра 1 (-1), а на другую — весомости тех разрядов, в которых стоит цифра 1. Соответствующие гири найти, пройдя дважды по массиву цифры, рассчитывая для каждого разряда, его весомость: вывод нс, "Вместе с грузом должны быть размещены гири весом (г): " вес := 1 |Весомость младшего разряда нц для i от 1 до кол_цифр если цифры[i] = -1
404 Приложение 3 то вывод вес, " " все I Новое значение весомости вес := вес * 3 кц вывод нс, "На другой чашке весов должны быть гири весом (г): " вес := 1 нц для i от 1 до кол_цифр если цифры[i] =1 то вывод вес, " " все вес := вес * 3 кц Полностью всю программу соберите самостоятельно. Язык Паскаль Var n, ves: word; perenos, i, kol_zifr: byte; zifri: array[1..20] of shortint; BEGIN writeln(1 Введите массу груза в граммах '); readln(n); {Переводим число л в троичную систему} kol_zifr := 0; while n > 0 do begin {Увеличиваем значение kol_zifr} kol_zifr := kol_zifr + 1; {Определяем очередную цифру и записываем ее в массив} zifri[kol_zifг] := n mod 3; {Отбрасываем последнюю цифру числа п} n := n div 3 end; {Получаем запись в уравновешенной системе} perenos := 0; for i := 1 to kol_zifr do begin zifri[i] := zifri[i] + perenos; case zifri[i] of 2: begin {Уточняем цифру} zifri[i] := -1; {Новое значение переноса} perenos := 1
Программы решения ряда задач, приведенных в главе 2 405 end; 3: begin zifri[i] := 0; perenos := 1 end; else perenos := 0 end end; if perenos = 1 then begin {Уточняем общее количество цифр} kol_zifr := kol_zifr + 1; {Новая цифра} zifri[kol_zifг] := 1 end; {Как размещать гири} write('Вместе с грузом должны быть размещены гири весом (г): ' ) ; ves := 1; {Весомость младшего разряда} for i := 1 to kol_zifr do begin if zifri[i] = -1 then write(ves, 1 ’); ves := ves * 3 {Новое значение весомости} end; writeln; write('На другой чашке весов должны быть гири весом (г): '); ves := 1; for i := 1 to kol_zifr do begin if zifri[i] = 1 then write(ves, 1 ?); ves := ves * 3 end END.
Приложение 4 Программы для перевода целых чисел из одной системы счисления в другую ► П4.1. Перевод заданного натурального числа в систему СЧИСЛЕНИЯ С ОСНОВАНИЕМ, МЕНЬШИМ ИЛИ РАВНЫМ 10 ► П4.1.1. Метод последовательного деления на основание Обозначим заданное натуральное десятичное число — я, а основание системы счисления, в которую нужно перевести заданное — основание. Идея решения задачи — получить все цифры записи числа п в системе с основанием основание и записать каждую из них в массив. Конечно, нужно получить и всю новую запись числа. Напомним методику перевода целых чисел из десятичной системы счисления в систему с другим основанием. Необходимо определять остаток от деления заданного числа и всех промежуточных целочисленных частных на основание и делать это до тех пор, пока частное не станет равно нулю. Полученные остатки и представляют собой цифры новой записи числа. В приведенном ниже фрагменте программы, кроме величин п и основание, использованы также следующие переменные величины: — цифры — массив с данными целого типа, в котором будут храниться цифры «нового» числа. Размер этого массива следует определить с учетом возможной длины новой записи числа; — кол_цифр — фактическое количество цифр в новой записи числа. Обратим внимание на то, что в массив цифры записываются, начиная с последней цифры новой записи. кол_цифр := 0 нц пока п > 0 (Увеличиваем значение кол_цифр кол_цифр := кол_цифр + 1 (Определяем очередную цифру |и записываем ее в массив цифры[кол_цифр] := mod(n, основание) I Определяем целочисленное частное n := div(n, основание)
Программы для перевода целых чисел 407 кц |Выводим ответ (цифры в обратном порядке) вывод не, "Запись числа п в новой системе счисления: " нц для i от кол_цифр до 1 шаг -1 вывод цифры[л_] кц Язык Паскаль kol_zifr := 0; while n > 0 do begin {Увеличиваем значение kol_zifr} kol_zifr := kol_zifr + 1; {Определяем очередную цифру} zifri[kol_zifr] := n mod osnovanie; {Определяем целочисленное частное} n := n div osnovanie end; {Выводим ответ (цифры в обратном порядке)} write(’Запись числа п в новой системе счисления: '); for i := kolzifr downto 1 do write(zifri[i]); Если же считать, что в условии задачи требуется получить строковую (в терминах языка программирования Паскаль) величину новое, представляющую собой запись заданного числа в системе с основанием основание, то массив можно не использовать. Можно формировать значение величины новое, добавляя очередную найденную цифру в начало уже имеющегося значения: новое := "" нц пока п > 0 |Определяем очередную цифру цифра :== mod(n, основание) |Добавляем ее строковое представление |к значению новое новое := цел_в_лит(цифра) + новое n := div(n, основание) кц вывод нс, "Запись числа в новой системе счисления: ", новое В последнем варианте применена величина цифра (смысл которой понятен), а также стандартная функция школьного алгоритмического языка цел_в_лит, осуществляющая преобразование числового значения в его символьное представление.
408 Приложение 4 Язык Паскаль \ novoe := 1’; while n > 0 do begin {.Определяем очередную цифру} zifra := n mod osnovanie; {Преобразуем ее в строку (символ)} Str(zifra, str_zifra); {и добавляем к значению novoe} novoe := str_zifra + novoe; n := n div osnovanie end; {Выводим ответ} write(’Запись числа n в новой системе счисления: \ novoe); Примечание. Str — процедура, преобразовывающая число — первый аргумент (в нашем случае — zifra) в строку символов — второй аргумент (str_zifra). Разработаем также программу для перевода десятичного числа в двоичную систему счисления, основанную на логических и сдвиговых операциях (см. главу 6). Если проанализировать результат выполнения оператора присваивания со сдвиговой операцией shr: а := a shr 1 при четном и при нечетном а, то можно установить, что новое значение величины а будет представлять собой целочисленное частное от деления «старого» значения на 2 (убедитесь в этом!). Кроме того, вспомним, что младший разряд (последнюю цифру) двоичного числа можно выделить при применении при логической операции and с маской, равной 1 (см. ответ на задание 2 для самостоятельной работы учащихся). Эти обстоятельства и позволяют использовать операции and и shr для решения задачи перевода заданного натурального числа в двоичную систему счисления методом последовательного деления на основание (см. приложение 1, пункт П 1.1). Разбор методики решения задачи также будем проводить с использованием школьного алгоритмического языка, для которого условно примем, что в нем имеются нужные нам операции: 1) и — аналог поразрядной логической операции and; 2) СдвигВправоНа — аналог сдвиговой операции shr; Рассмотрим несколько вариантов решения. В первом двоичные цифры запишем в массив с целыми элементами с именем цифры. Размер этого массива следует определить с учетом воз¬
Программы для перевода целых чисел 409 можной длины двоичной записи числа. Используем также величину кол_цифр — фактическое количество цифр в новой записи числа. Приводя фрагмент программы решения задачи, обратим внимание на то, что в массив цифры записываются, начиная с последней цифры двоичной записи: кол_цифр := 0 нц пока п > 0 I Увеличиваем значение кол_цифр кол_цифр := кол_цифр + 1 |Определяем последнюю двоичную цифру | (используя логическую операцию И) |и записываем ее в массив цифры[кол_цифр] := п И 1 I"Отбрасываем" последнюю цифру, |определяя целочисленное частное |с помощью сдвиговой операции n := п СдвигВправоНа 1 кц |Выводим ответ |(цифры в обратном порядке) вывод не, "Запись числа п в двоичной системе счисления: " нц для i от кол_цифр до 1 шаг -1 вывод цифры[i] кц где п — заданное натуральное десятичное число. Язык Паскаль Uses CRT; Var n: word; kol_zifr, i: byte; zifri: array [1..20] of byte; BEGIN {Ввод значения л} readln(n); kol_zifr := 0; while n > 0 do begin {Увеличиваем значение kol_zifr} kol_zifr := kol_zifr + 1; {Определяем последнюю двоичную цифру (используя логическую операцию and) "и записываем ее в массив} zifri[kol_zifг] := n and 1; {"Отбрасываем" последнюю цифру, определяя целочисленное частное с помощью сдвиговой операции}
410 Приложение 4 n := n Shr 1 end; {Выводим ответ (цифры в обратном порядке)} write(1 Запись числа п в двоичной системе счисления; '); for i := kol_zifr downto 1 do write(zifri[i]); END. В приведенном варианте массив был нужен для запоминания цифр и их последующего вывода в обратном порядке. Вместо использования массива можно применить прием, называемый «рекурсией» [8]. Создадим рекурсивную (вызывающую саму себя в качестве вспомогательной) процедуру ВыделениеЦифрыИЕеВывод, работающую так, как описано в комментариях: алг ВыделениеЦифрыИЕеВывод(арг цел п) нач цел цифра если п > 0 |Только в этом случае то |Выделяем очередную цифру цифра:= п И 1 |(но пока не выводим) |Отбрасываем ее в числе п п := n shr 1 |Вызываем эту же процедуру |с новым значением параметра п ВыделениеЦифрыИЕеВывод(п) |После окончания работы вызванной процедуры |выводим цифру, выделенную в текущей процедуре вывод цифра все кон Основная часть программы оформляется в виде: алг Вывод_двоичного_представления_числа нач цел п вывод нс, "Введите натуральное число " ввод п вывод нс, "Запись этого числа в двоичной системе счисления: " ВыделениеЦифрыИЕеВывод(п) кон Язык Паскаль Uses CRT; Var n: word; Procedure VidelenieZifrilVivod(n: word);
Программы для перевода целых чисел 411 Var zifra: byte; begin if n > 0 {Только в этом случае} then begin {Выделяем очередную цифру} zifra:= n and 1; {(но пока не выводим). Отбрасываем ее в числе л} n := n shr 1; {Вызываем эту же процедуру с новым значением параметра л} VidelenieZifrilVivod(n); {После окончания работы вызванной процедуры выводим цифру, выделенную в текущей процедуре} write(zifra) end end; BEGIN write(’Введите натуральное число ’); readln(n); write('Запись этого числа в двоичной системе счисления: ’); VidelenieZifrilVivod(n) END. В третьем варианте решения будем считать, что требуется получить строковую (в терминах языка программирования Паскаль) величину я2, представляющую собой запись заданного числа в двоичной системе. Здесь массив можно не использовать, а формировать значение величины п2, добавляя очередную найденную цифру (ее имя — цифра) в начало уже полученного ранее значения величины п2: п2 := ”” |Начальное значение нц пока п > О |Определяем последнюю двоичную цифру цифра := п И 1 |Добавляем ее строковое представление х|в начало "старого" значения п2 |Рассматриваем 2 варианта если цифра = 1 то n2 := "1" + п2 иначе |цифра = О п2 := "0" + п2 все |"Отбрасываем" последнюю цифру
412 Приложение 4 n := п СдвигВправоНа 1 кц |Выводим ответ (значение величины п2) вывод не, "Соответствующее двоичное число: ", п2 Язык Паскаль Var n: word; zifга: byte; n2: string; BEGIN readln(n); n2 := ’{Начальное значение искомой величины} while n > 0 do begin {Определяем последнюю двоичную цифру} zifra := n and 1; {Добавляем ее строковое представление в начало "старого” значения л2. Рассматриваем 2 варианта} if zifra = 1 then n2 := 11’ + n2 else {zifra = 0} n2 := ’O' + n2; {"Отбрасываем" последнюю цифру} n := n Shr 1 end; {Выводим ответ (значение величины л2)} write(тСоответствующее двоичное число: ’, п2); END. Задания для самостоятельной работы учащихся ► 1. Разработайте две модификации последнего варианта фрагмента программы 1) в которой условный оператор (команда если) не используется; 2) в которой применяется рекурсия. ► 2. Разработайте программы решения задач: 1) нахождения количества цифр в двоичной записи заданного натурального числа; 2) нахождения количества цифр 1 в двоичной записи заданного натурального числа; 3) нахождения количества цифр 0 и количества цифр 1 в двоичной записи заданного натурального числа. Во всех случаях массив для хранения отдельных цифр не использовать.
Программы для перевода целых чисел 413 Здесь же приведем вариант программы, в которой искомое двоичное значение формируется с использованием рекурсии. Рекурсивная процедура формирования двоичного числа п2, соответствующего десятичному числу п, выглядит так: алг Формирование_двоичного_числа(арг цел п) нач лит цифра если п > 0 |Только в этом случае то |Определяем очередную двоичную цифру |и преобразуем ее в символ цифра := цел_в_лит(mod(п, 2)) |но пока ее не используем |Рекурсивно вызываем процедуру с новым значением п Формирование_двоичного_числа(div(п, 2)) I После окончания работы вызванной процедуры [учитываем цифру, выделенную в текущей процедуре |(добавляем ее к "предыдущему" значению п2) п2 := п2 + цифра все кон Основная часть программы оформляется следующим образом: лит п2 |Глобальная переменная алг Перевод_десятичного_числа_в_двоичную_систему нач цел п вывод нс, "Введите натуральное число " ввод п п2 := " " Формирование_двоичного_числа(п) вывод нс, "Соответствующее двоичное число: ", п2 кон Язык Паскаль Uses CRT; Var n: word; n2: string; Procedure FormirovanieDvoichnogoChisla(n: word); Var zifra: byte; bbgin if n > 0 {Только в этом случае} then begin {Определяем очередную двоичную цифру} zifra := n mod 2; {но пока ее не используем. Рекурсивно вызываем процедуру с новым значением л}
414 Приложение 4 FormirovanieDvoichnogoChisla(n div 2); {После окончания работы вызванной Процедуры учитываем цифру, выделенную в текущей процедуре (добавляем ее символьное представление к "предыдущему" значению п2)} п2 := n2 + Chr(Ord('Of) + zifra) end end; BEGIN write(’Введите натуральное число ’); readln(n); n2 : = FormirovanieDvoichnogoChisla(n); write(’Соответствующее двоичное число: ', n2); END. Задание для самостоятельной работы учащихся Разработайте программу для перевода заданного десятичного числа в систему счисления в систему счисления с основанием, равным 2-9. Примечание. В программе на языке Паскаль преобразование числового значения цифры в символьное может быть проведено так, как это сделано в последнем варианте программы: Chr(Ord(’O') + zifra) ► П4.1.2. Метод выделения наибольшей степени основания системы счисления р (для случая р = 2) Применительно к переводу из десятичной системы в двоичную идея метода аналогична методике решения задачи нахождения номеров конвертов (см. задачу 2.14 «Банкир и конверты» и п. П4.1 выше). На основе программы, представленной в п. П4.1, можем разработать программу, в которой определяются номера разрядов двоичной записи десятичного числа я, в которых стоят единицы: алг Перевод_десятичного_числа_в_двоичное I методом выделения наибольшей степени числа 2 нач цел п, макс_степень2, степень2, осталось, разряд, показатель_степени, макс_степень2_копия ввод п осталось := п вывод нс, "Разряды с единицей: " нц пока осталось > О |Определяем максимальную степень двойки, |не превышающую значение осталось степень2 := 1
Программы для перевода целых чисел 415 нц пока степень2 <= осталось степень2 := степень2 * 2 кц макс_степень2 := div(степень2, 2) (Максимальная степень двойки найдена |Определяем номер разряда показатель_степени:=0 макс_степень2_копия := макс__степень2 нц пока макс_степень2_копия о 1 макс_степень2_копия := div(макс_степень2_копия, 2) показатель_степени := показатель_степени + 1 кц разряд := показатель_степени + 1 вывод разряд, " " I Рассчитываем новое значение величины осталось осталось := осталось - макс__степень2 кц кон В найденных разрядах двоичного числа стоят единицы, в остальных — нули. Язык Паскаль {Перевод_десятичного_числа_в_двоичное методом выделения наибольшей степени числа 2} Var n, max_stepen2, stepen2, ostalos, razryad, pokazatel_stepeni2, max_stepen2_copia: word; BEGIN readln(n); ostalos := n; write('Разряды с единицей: ’); while ostalos > 0 do begin {Определяем максимальную степень двойки, \ |не превышающую значение ostalos} stepen2 := 1; while stepen2 <= ostalos do stepen2 := stepen2 * 2; max_stepen2 := stepen2 div 2; {Максимальная степень двойки найдена Определяем номер разряда} pokazatel_stepeni2 := 0; max_stepen2_copia := max_stepen2; while max_stepen2_copia <> 1 do begin max_stepen2_copia := max_stepen2_copia div 2; pokazatel_stepeni2 := pokazatel_stepeni2 + 1
416 Приложение 4 end; razryad := pokazatel_stepeni2 + 1; write(razryad, ’ '); {Рассчитываем новое значение величины ostalos} ostalos := ostalos - max_stepen2 end END. Как и в п. 3.1, задачи выделения максимальной степени двойки и определения номера соответствующего разряда можно решать одновременно. Такой вариант программы разработайте самостоятельно. Разработаем теперь программу, в которой искомое двоичное число выводится полностью (в виде последовательности единиц и нулей). - Ясно, что крайняя слева единица в двоичной записи заданного числа будет в разряде, которому соответствует максимальная степень двойки, не превышающая п. Значит первые три этапа алгоритма решения обсуждаемой задачи такие: 1. Определение максимальной степени двойки, не превышающей п (такую задачу мы решать умеем). 2. Нахождение номера соответствующего разряда (подобная задача также решалась ранее). 3. Вывод на экран единицы, представленной в этом разряде. Используем в программе следующие переменные величины (кроме заданного числа п): — степень2 — значения, равные степени двойки (1, 2, 4, ...); — макс_степень2 — величина, о которой шла речь чуть выше; —разряд — номер разряда, соответствующего величине макс_степень2. Например, при переводе числа 21: — макс_степень2 = 16; —разряд = 5. Осталось найти остальные цифры двоичной записи. Десятичное значение, которое они составляют, равно п - макс_степень2 (в последнем примере оно равно 5). Назовем эту величину — остаюсь. Для решения надо для каждого из остальных разрядов следует сравнить степень двойки, ему соответствующую, со значением осталось: если осталось >= степень2 то |Встретился разряд с единицей вывод 1 |Рассчитываем новое значение величины осталось осталось := осталось - степень2 иначе |Встретился разряд с нулем
Программы для перевода целых чисел 417 вывод О все Для каждого следующего разряда значение степень2 в 2 раза меньше предыдущего, а для найденного крайнего слева разряда: степень2 := макс_степень2 С учетом сказанного вся программа, в которой использованы также величины показатель_степени2 и макс_степень2_копия, аналогичные применявшимся в п. П4.1: алг Перевод_ десятичного_числа_в_двоичное нач цел п, макс_степень2, степень2, осталось, разряд, показатель_степени2, макс_степень2_копия, i ввод п вывод нс, "Соответствующее двоичное число: " |Определяем максимальную степень двойки, |не превышающую значение п степень2 := 1 нц пока степень2 <= п степень2 := степень2 * 2 кц макс_степень2 := div(степень2, 2) (Максимальная степень двойки найдена. (Определяем номер соответствующего разряда показатель_степени2 := О макс_степень2_копия := макс_степень2 нц пока макс_степень2_копия о 1 макс_степень2_копия := div(макс_степень2_копия, 2) показатель_степени2 := показатель_степени2 + 1 ' кц разряд := показатель_степени2 + 1 |Выводим единицу вывод 1 (Проверяем остальные разряды осталось := п - макс_степень2 степень2 := макс_степень2 нц для i от разряд - 1 до 1 шаг -1 степень2 := div(степень2, 2) если осталось >= степень2 то (Встретился разряд с единицей вывод 1 |Рассчитываем новое значение величины осталось осталось := осталось - степень2 иначе |Встретился разряд с нулем вывод О
418 Приложение 4 все кц кон Язык Паскаль Var n, max_stepen2, stepen2, ostalos, razryad, pokazatel_stepeni2, max_stepen2_copia, i: byte; BEGIN readln(n); ostalos := n; write('Соответствующее двоичное число: ’); {Определяем максимальную степень двойки, не превышающую значение л} stepen2 := 1; while stepen2 <= n do stepen2 := stepen2 * 2; max_stepen2 := stepen2 div 2; {Максимальная степень двойки найдена. Определяем номер соответствующего разряда} pokazatel_stepeni2:=0; max_stepen2_copia := max_stepen2; while max_stepen2_copia о 1 do begin max_stepen2_copia := max_stepen2_copia div 2; pokazatel_stepeni2 := pokazatel_stepeni2 + 1 end; razryad := pokazatel_stepeni2 + 1; {Выводим единицу} write(1, ’ 1); {Проверяем остальные разряды} ostalos := ostalos - max_stepen2; stepen2 := max_stepen2; for i := razryad - 1 downto 1 do begin stepen2 := stepen2 div 2; if ostalos >= stepen2 then {Встретился разряд с единицей} begin write (1, ' 1); {Рассчитываем новое значение величины ostalos} ostalos := ostalos - stepen2 end else {Встретился разряд с нулем} write(0, ' 1) end END.
Программы для перевода целых чисел 419 Задание для самостоятельной работы учащихся Разработайте вариант программы, в котором число в двоичной системе будет получено в виде десятичного значения (а не в виде выводимой строки символов). Указания по выполнению. После выделения очередной цифры цифра ее следует учесть в общем значении получаемого числа: общее_значение := общее_значение * 2 + цифра ► П4.1.3. Метод выделения наибольшей степени числа р — основания системы счисления (для случаяр - 2, 3,..., 9) Отличия от предыдущей задачи следующие: 1) вместо умножения и деления на 2 эти действия проводятся с величиной основанием 2) в разрядах, в которых в предыдущей программе выводилось 1, в данном случае может быть любая цифра из интервала 1 - (основание - 1). Значение этой цифры рассчитывается следующим образом: цифра := div(осталось, степень) Полностью программа имеет вид: алг Перевод_десятичного_числа |в систему счисления с основанием 2,3, ..., 9 |методом выделения наибольшей степени |числа основание нач цел п, основание, макс_степень, степень, осталось, разряд, показатель_степени, макс_степень_копия, i, цифра вывод нс, "Введите десятичное число " ввод п вывод нс, "Введите основание системы счисления" ввод основание вывод нс, "Соответствующее число в этой системе: " I Определяем максимальную степень числа основание, |не превышающую значение л степень := 1 нц пока степень <= п степень := степень * основание кц макс_степень := div(степень, основание) |Максимальная степень найдена. |Определяем соответствующего номер разряда показатель_степени := О макс_степень_копия := макс_степень нц пока макс степень копия <> 1
420 Приложение 4 макс_степень_копия := div(макс_степень_копия, основание) показатель_степени := показатель_степени + 1 кц разряд := показатель_степени + 1 |Определяем и выводим цифру в этом разряде цифра := div(n, макс_степень) вывод цифра |Проверяем остальные разряды осталось := п - макс_степень * цифра степень := макс_степень нц для i от разряд - 1 до 1 шаг -1 степень := div(степень, основание) если осталось >= степень то |Встретился разряд с ненулевой цифрой цифра := div(осталось, степень) вывод цифра |Рассчитываем новое значение величины осталось осталось := осталось - степень * цифра иначе вывод 0 все кц кон Язык Паскаль {Перевод_десятичного_числа в систему счисления с основанием 2,3, ..., 9 методом выделения наибольшей степени числа osnovanie} Var n, osnovanie, max_stepen, stepen, ostalos, razryad, pokazatel_stepeni, max_stepen_copia, zifra, i: byte; BEGIN write('Введите десятичное число f); readln(n); write('Введите основание системы счисления '); readln(osnovanie); ostalos := n; write(Соответствующее число в этой системе:1); {Определяем максимальную степень числа osnovanie, не превышающую значение л} stepen := 1; while stepen <= n do stepen := stepen * osnovanie; max_stepen := stepen div osnovanie; {Максимальная степень найдена. Определяем соответствующего номер разряда} pokazatel_stepeni : =0;
Программы для перевода целых чисел 421 max_stepen_copia := max_stepen; while max_stepen_copia о 1 do begin max_stepen_copia := max_stepen_copia div osnovanie; pokazatel_stepeni := pokazatel_stepeni + 1 end; razryad := pokazatel_stepeni + 1; {Определяем и выводим цифру в этом разряде} zifra := n div max_stepen; write(zifra); {Проверяем остальные разряды} ostalos := ostalos - max_stepen * zifra; stepen := max_stepen; for i := razryad - 1 downto 1 do begin stepen := stepen div osnovanie; if ostalos >= stepen then {Встретился разряд с ненулевой цифрой} begin zifra := ostalos div stepen; write(zifra); {Рассчитываем новое значение величины ostalos} ostalos := ostalos - stepen * zifra end else {Встретился разряд с нулем} write (0, f ’) end END. Задание для самостоятельной работы учащихся Разработайте вариант программы, в котором число в новой системе будет получено в виде десятичного значения (а не в виде выводимой строки символов). Указания по выполнению. После выделения очередной цифры цифра ее следует учесть в общем значении получаемого числа: общее_значение := общее_значение * основание + цифра ► П4.2. Перевод числа из системы счисления, с основанием МЕНЬШИМ ИЛИ РАВНЫМ 10, В ДЕСЯТИЧНУЮ СИСТЕМУ Программа основана на использовании развернутой формы записи исходного числа. Согласно ей, искомое десятичное число рассчитывается как сумма произведений каждой цифры исходного числа на весомость разряда, в котором она записана.
422 Приложение 4 Примем, что это исходное число представлено в программе как строковая (в терминах языка программирования Паскаль) величина. Основные переменные величины, используемые в программе: — число — заданное число; — основание — основание системы счисления, в которой оно представлено; — п — искомое десятичное число; — цифра — очередная цифра заданного числа; — весомость — весомость разряда, в котором она записана; — вклад — произведение величин цифра и весомость. Представляя программу, заметим, что в ней применена стандартная функция школьного алгоритмического языка лит_в_цел, осуществляющая преобразование символьного представления числа в число. Одним из ее аргументов является величина логического типа успех. алг Перевод_чисел_в_десятичную_систему нач лит число, цел п, основание, цифра, весомость, вклад, i, лог успех |Ввод исходных данных вывод нс, "Введите исходное число " ввод число вывод нс, "Введите основание системы счисления, в которой оно записано " ввод основание п := О I Весомость младшего разряда весомость := 1 I Для каждого i-ro разряда нц для i от длин(число) до 1 шаг -1 |Определяем i-ю цифру цифра := лит_в_цел(число[i], успех) I Рассчитываем вклад i-й цифры вклад := цифра * весомость I Определяем общее значение для обработанных цифр n := п + вклад |Рассчитываем весомость следующей цифры весомость := весомость* основание кц |Вывод результата вывод нс, "Соответствующее число в десятичной системе счисления: ", п кон
Программы для перевода целых чисел 423 Язык Паскаль {Перевод чисел в десятичную систему} Var chislo: string; n, vesomost, vklad: longint; osnovanie, zifra, i: integer; uspeh: integer; BEGIN {Ввод исходных данных} write('Введите исходное число 1); readln(chislo); write('Введите основание системы счисления, в которой оно записано ’); readln(osnovanie); n : = 0; {Весомость младшего разряда} vesomost := 1; {Для каждого i-го разряда} for i := length(chislo) downto 1 do begin {Определяем i-ю цифру} Val(chislo[i], zifra, uspeh); {Рассчитываем вклад i-й цифры} vklad := zifra * vesomost; {Определяем общее значение для обработанных цифр} n := n + vklad; {Рассчитываем весомость следующей цифры} vesomost := vesomost * osnovanie end; {Вывод результата} writeln(1 Соответствующее число в десятичной системе счисления: ’, п) END. Задание для самостоятельной работы учащихся Разработайте вариант программы, в котором исходное число задано как десятичное (а не в виде строки символов). Использование схемы Г орнера В программе, реализующей перевод числа в десятичную систему по схеме Горнера, используем следующие переменные величины: — число — заданное число; — основание — основание системы счисления, в которой оно записано; — п — искомое десятичное число; — цифры — массив с данными целого типа, в котором будут храниться цифры заданного числа. Размер этого массива следует определить с учетом возможной длины записи числа.
424 Приложение 4 Примем, что заданное число представляет собой последовательность символов-цифр (является строковой величиной). Соответствующая программа: алг Перевод_чисел_в_десятичную_систему_по_схеме_Горнера нач лит число, цел п, основание, i, лог успех, цел таб цифры[1:20] |Ввод исходных данных вывод нс, "Введите исходное число " ввод число вывод нс, "Введите основание системы счисления, в которой оно записано " ввод основание |Заполняем массив цифры нц для i от 1 до длин(число) |Определяем очередную i-ю цифру |и записываем ее в массив цифры[i] := лит_в_цел(число[i], успех) кц |Реализуем схему Горнера п := 0 нц для i от 1 до длин(число) n := п * основание + цифры[i] кц |Выводим результат вывод нс, "Соответствующее число в десятичной системе счисления: ", п кон Язык Паскаль {Перевод чисел в десятичную систему по схеме Горнера} Var chislo: string; n, uspeh: integer; osnovanie, i: byte; zifri: array [1..20] of integer; BEGIN {Ввод исходных данных} write(1 Введите исходное число '); readln(chislo); write(?Введите основание системы счисления, в которой оно записано '); readln(osnovanie); {Заполняем массив zifri} for i := 1 to length(chislo) do {Определяем очередную i-ю цифру и записываем ее в массив} Val(chislo[i], zifri[i], uspeh); {Реализуем схему Горнера}
Программы для перевода целых чисел 425 п : = 0 ; for i := 1 to length(chislo) do n := n * osnovanie + zifri[i]; {Выводим результат} writeln(’Соответствующее число в десятичной системе счисления: п) END. Задание для самостоятельной работы учащихся Разработайте варианты программы для перевода целого р-ичного числа в десятичную систему счисления по схеме Г орнера: 1) в котором массив цифры не используется; 2) в котором исходное число задано как целое десятичное, например, троичное 20213 как 2021. > П4.3. Программы для перевода чисел в системах счисления С ОСНОВАНИЯМИ, РАВНЫМИ СТЕПЕНИ ДВОЙКИ Как отмечалось в приложении 1 (см. пункт П1.3.1) при переводе целых чисел из системы в систему, в случаях, когда их основания равны 2, 4, 8 и 16, промежуточный перевод исходных чисел в десятичную систему можно не проводить. Сначала рассмотрим варианты, когда основание исходной системы счисления меньше. Программы для таких вариантов аналогичны, поэтому приведем в качестве примера программу для перевода двоичного числа в восьмеричное. Обозначим исходное число — число, а значение, которое нужно получить, — п. Обе эти величины будем рассматривать как величины строкового типа. Пусть, например, число = «11110000101». Согласно методике, для перевода нужно, начиная справа, разбить его цифры на триады — группы из трех цифр (110 000 101), и для каждой группы двоичных цифр получить соответствующее десятичное число (восьмеричную цифру). Каждую новую цифру приписать в начало «старого» значения величины п (получится значение «605»). В рассматриваемом случае останутся «необработанными» две цифры исходного числа («11»). Для них также надо найти соответствующую восьмеричную цифру («3») и также добавить ее к «старому» значению п. Итак, результат будет равен «3605» В общем виде схема действий по переводу значений для вариантов, о которых шла речь выше, такая:
426 Приложение 4 1. Обработать все полные группы цифр исходного числа, начиная с его конца, и для каждой из них найти соответствующую цифру «новой» системы. Размер таких групп зависит от оснований систем счисления. 2. Каждую новую цифру приписать в начало «старого» значения величины л. 3. Если в исходном числе остались «необработанными» цифры, то для них найти соответствующую цифру «новой» системы и также приписать ее в начало величины л. В программе на школьном алгоритмическом языке, кроме величин число и и, используем также следующие величины: — триада — группа из трех цифр исходного числа; — цифра — восьмеричная цифра (см. выше); — неполн — оставшиеся «необработанными» цифры (одна или две). Для разбиения на группы из трех цифр и для контроля того факта, что все полные группы обработаны, применим также величину послед — номер последней еще не «обработанной» цифры исходного числа. Начальное значение этой величины равно общему количеству числу цифр в значении число, в ходе обработки оно каждый раз уменьшается на 3, а условие для обработки всех полных групп: послед >= 3 Для «перевода» последовательности двоичных цифр в восьмеричную цифру целесообразно использовать оператор варианта (в программе на языке Паскаль — несколько неполных условных операторов). Вся программа имеет вид: алг Перевод_чисел_из_двоичной_системы_в_восьмеричную нач лит число, п, триада, неполн, сим цифра, цел поелед вывод нс, "Введите исходное число " ввод число послед := длин(число) п := "" [Первоначальное значение |Обрабатываем триады нц пока послед >= 3 |Выделяем 3 очередные цифры триада := число[послед - 2 : послед] |Находим соответствующую восьмеричную цифру выбор при триада = "ООО": цифра := "О" при триада = "001": цифра := "1" при триада = "010": цифра := "2" при триада = "011": цифра := "3" при триада = "100": цифра := "4"
Программы для перевода целых чисел 427 при триада = "101": цифра := "5 при триада = "110": цифра := "б при триада = "111": цифра := "7 все |и добавляем ее в начало "старого" значения л п := цифра + п |Изменяем значение послед послед :=послед - 3 кц [Обрабатываем возможные 1-2 цифры если послед > О то неполн := число[1 : послед] |Находим соответствующую восьмеричную цифру выбор при неполн = "1": цифра := "1" при неполн = "10": цифра := "2" при неполн = "11": цифра := "3" все |и учитываем ее п := цифра + п все вывод нс, "Полученное число: ", п кон Язык Паскаль {Перевод чисел из двоичной системы в восьмеричную} Var chislo, n, triada, nepoln : string; zifra: char; posled: byte; BEGIN write(1 Введите исходное число '); readln(chislo); posled := length(chislo); n := ''; {Первоначальное значение} {Обрабатываем триады} while posled >= 3 do begin {Выделяем 3 очередные цифры} triada := Copy(chislo, posled - 2, 3); {Находим соответствующую восьмеричную цифру} if triada = ’000’ then zifra := '0 if triada = '001' then zifra := '1 if triada = f 010’ then zifra := '2 if triada = 'Oil1 then zifra := 1 3 if triada = f 100f then zifra := '4 if triada = '101' then zifra := '5 if triada = f 110' then zifra := ' 6
428 Приложение 4 if triada = '111’ then zifra := '7'; {и добавляем ее в начало "старого" значения л} n := zifra + п; {Изменяем значение posled} . posled :=posled - 3 end; {Обрабатываем возможные 1-2 цифры} if posled > 0 then begin nepoln := Copy(chislo, 1,posled); {Находим соответствующую восьмеричную цифру} if nepoln = ’l1 then zifra := '1'; if nepoln = '10’ then zifra := '2'; if nepoln = '11' then zifra := '3'; {и учитываем ее} n := zifra + n end; writeln('Полученное число: ', n); END. Задание для самостоятельной работы учащихся Разработайте программы для перевода целого числа: 1) из двоичной системы в четверичную; 2) из двоичной системы в шестнадцатеричную; 3) из четверичной системы в шестнадцатеричную. Теперь обсудим рассмотрим варианты программ, когда основание системы счисления, в которой представлено исходное число, больше, и в качестве примера — перевод восьмеричного числа в двоичное. Обозначим в программе исходное число — п, а значение, которое нужно получить, — число (обе величины будем — строкового типа). Согласно методике (см. приложение 1, п. 1.3.2.1), каждую цифру заданного числа, рассматривая ее как десятичную, нужно представить^ виде трехразрядного двоичного числа (может быть — с начальным нулем, с начальным нулями или состоящим из трех нулей) и из полученных двоичных чисел сформировать единое число (без возможных начальных нулей). Это означает, что в программе первая слева цифра должна быть обработана отдельно. Учитывая это, в программе используем также следующие величины: — цифра — отдельные цифры исходного восьмеричного числа; — триада — группа из трех двоичных цифр; — пере — последовательность двоичных цифр, соответствующая первой цифре исходного числа.
Программы для перевода целых чисел 429 Программа: алг Перевод_чисел_из_восьмеричной_системы_в_двоичную нач лит п, число, триада, перв, сим цифра, цел послед вывод нс, "Введите исходное число " ввод п число := "" [Первоначальное значение [Обрабатываем все символы величины л, кроме 1-го нц для i от длин(п) до 2 шаг -1 v I Выделяем каждую цифру цифра := n [ i] |Находим соответствующую триаду выбор при цифра = "0" триада : = "ООО при цифра = If м триада : = "001 при цифра = "2" триада : = "010 при цифра = "3" триада : = "011 при цифра = п ^ м триада : = "100 при цифра = "5" триада : = "101 при цифра = "б" триада : = "110 при цифра = и 7 п триада : = "111 все |и добавляем ее в начало "старого" значения I величины число число := триада + число кц [Обрабатываем 1-ю цифру I Определяем ее цифра := n [ 1] I Находим соответствующее двоичное представление выбор при цифра = "1": перв _ п п при цифра = "2": перв = "10" при цифра = "3": перв = "11" при цифра = "4": перв = "100 при цифра = "5": перв = "101 при цифра = "б": перв = "110 при цифра = "7": лерв = "111 все |и также добавляем его число := перв + число вывод нс, "Полученное число: ", число кон Язык Паскаль {Перевод чисел из восьмеричной системы в двоичную} Var chislo, n, triada, perv: string; zifra: char; i:byte;
430 Приложение 4 BEGIN write('Введите исходное число '); readln(n); chislo := 11; {Первоначальное значение} {Обрабатываем все символы величины п, кроме 1-го} for i:=length(n) downto 2 do begin {Выделяем каждую цифру} zifra := n[i]; {Находим соответствующую триаду} case zifra of triada triada triada triada triada triada triada triada {В данном случае использовать оператор варианта можно} := 'ООО' '001' '010' 'ОН' 1100 1 11011 'НО' '1111 '0' : Ч' : ’2’ : ’3’ '4 ' 1 5 ' '6' '7 ' end; {и добавляем ее в начало "старого" значения величины chislo} chislo := triada + chislo end; {Обрабатываем 1-ю цифру. Определяем ее} zifra :=n[1]; {Находим соответствующее двоичное представление} case zifra of 1' perv := 11' ; 2' perv := '10'; 3’ perv := 1111 ; 4 ' perv := 400' ; 5' perv := ’101'; б' perv := ’110' ; 7 1 perv := 'lll'; end; {и также добавляем его} chislo := perv + chislo; writeln(1 Полученное число: END. chislo) Задание для самостоятельной работы учащихся Разработайте программы для перевода целого числа: 1) из четверичной системы в двоичную; 2) из шестнадцатеричной системы в двоичную; 3) из шестнадцатеричной системы в четверичную.
Приложение 5 Программы для перевода из одной системы счисления в другую дробей ► П5.1. Программы для перевода конечных дробей из десятичной СИСТЕМЫ СЧИСЛЕНИЯ В Р-ИЧНУЮ ► П5.1.1. Перевод без расчета искомого значения (вывод отдельных цифр) Основные используемые величины: десят_дробъ — заданная правильная десятичная дробь; р — основание системы счисления, в которую она переводится; целая_часть — целая часть произведений, рассчитываемых при переводе (см. приложение 2, раздел П2.2.1); дробная_частъ — дробная часть произведений. Программа на школьном алгоритмическом языке: алг Перевод_конечных_дробей_1 нач вещ десят_дробь, дробная_часть, цел р, i, целая_часть вывод не, "Введите правильную десятичную дробь " ввод десят_дробь вывод нс, "Введите основание р системы счисления " ввод р |Вывод цифр искомого значения вывод нс, "Заданная дробь в этой системе: О," дробная_часть := десят_дробь [Начальное значение нц для i от 1 до 10 I Определяем очередную цифру I как целую часть произведения целая_часть := int(дробная_часть * р) I Выводим ее вывод целая_часть |Определяем новую дробную часть дробная_часть := дробная_часть * р - целая_часть кц кон
432 Приложение 5 ► П5.1.2. Перевод без расчета искомого значения (вывод отдельных цифр) Здесь после расчета очередной цифры ее следует учесть в общем значении с учетом весомости соответствующего разряда. Основные используемые величины (кроме величин, использовавшихся в предыдущей программе): дробь_р — искомое значение дроби в р-ичной системе (естественно, как десятичное число); вес — весомость того или иного разряда (также как десятичное значение). Программа: алг Перевод_конечных_дробей_2 нач вещ десят_дробь, дробь_р, дробная_часть, вес, цел р, i, целая_часть |Ввод исходных данных вывод нс, "Введите правильную десятичную дробь " (Начальные значения дробная_часть := десят_дробь дробь_р := О вес := 0.1 |Первый разряд дроби нц для i от 1 до 10 |Определяем очередную цифру |как целую часть произведения целая_часть := int(дробная_часть * р) |Учитываем ее в искомом числе дробь_р := дробь_р + целая_часть * вес |Определяем весомость следующего разряда вес := вес * 0.1 |Определяем новую дробную часть дробная_часть := дробная_часть * р - целая_часть кц |Вывод результата вывод нс, "Заданная дробь в этой системе: ", дробь_р кон ► П5.1.3. Перевод с выводом результата без конечных нулей В разработанных выше программах конечные /?-ичные дроби будут выводиться с нулями в конце. Чтобы эти нули не выводились, запишем все 10 цифр в массив, определим номер последней ненулевой цифры и используем при выводе (или при расчете) искомого значения только нужное количество цифр.
Программы для перевода из одной системы счисления в другую дробей 433 Соответствующая программа: алг Перевод_конечных_дробей_3 нач вещ десят_дробь, дробная_часть цел р, целая_часть, послед, i цел таб цифры[1:10] |Ввод исходных данных ' вывод нс, "Введите правильную десятичную дробь " I Заполнение массива цифр нц для i от 1 до 10 |Определяем очередную цифру целая_часть := int(flpo6b_10 * р) |Записываем ее в массив цифры[i] := целая_часть |Определяем новую дробную часть десят_дробь := десят_дробь * р - целая_часть кц |Определяем номер последней ненулевой цифры послед := 10 |Проверяем с конца массива нц пока цифры[послед] = 0 |Переходим к следующему элементу массива послед := послед - 1 кц I Вывод цифр искомого значения вывод нс, "Заданная дробь в этой системе: 0," I Выводим только нужные цифры дробной части нц для i от 1 до послед вывод цифры[i] кц кон ► П5.2. Программы для перевода конечных дробей из р-ич- НОЙ СИСТЕМЫ СЧИСЛЕНИЯ В ДЕСЯТИЧНУЮ Перевод способом 1 (см. раздел П2.3.1) Основные используемые величины: р_дробь — заданная р-ичная дробь; р — основание системы счисления, из которой она переводится; десят_дробъ — искомая десятичная дробь; цифра — отдельная цифра дробной части заданной дроби; вес — весомость соответствующего /личного разряда. Цифра в первом дробном разряде заданной дроби может быть рассчитана по формуле: цифра := mod(int(р_дробь * 10), 10)
434 Приложение 5 во втором: цифра := mod(int(р_дробь * 100), 10) в третьем: цифра := mod(int(р_дробь * 1000), 10) (Убедитесь в правильности указанных формул!) Программа: алг Перевод_конечных_р_ричных_дробей_по_развернутой_форме нач вещ р_дробь, десят_дробь, вес, цел р, i, цифра вывод нс, "Введите правильную р-ичную дробь " ввод р_дробь вывод нс, "Введите основание р системы счисления " ввод р |Определяем искомое значение десят_дробь := 0 нц для i от 1 до 8 |Выделяем каждую цифру цифра := mod(int(р_дробь * 10**i), 10) |Определяем ее весомость вес := 1/(р ** i) |Учитываем цифру десят_дробь := десят_дробь + цифра * вес кц |Выводим результат вывод нс, "Соответствующая десятичная дробь равна ", десят_дробь кон Можно не определять весомость каждого разряда (используя возведение в степень), а уменьшать предыдущей значение весомости в р раз: |Определяем искомое значение десят_дробь := 0 вес := 1 нц для i от 1 до 8 |Выделяем каждую цифру цифра := mod(int(р_дробь * 10**i), 10) |Определяем ее весомость вес := вес/р |Учитываем цифру десят_дробь := десят_дробь + цифра * вес кц Можно аналогично рассчитывать весомость десятичных разрядов при определении очередной цифры.
Программы для перевода из одной системы счисления в другую дробей 435 Для использования при расчетах искомого значения десятичной дроби схемы Горнера следует предварительно все цифры дробной части /?-ичной дроби записать в массив. Соответствующая программа: алг Перевод_с_использованием_схемы_Горнера нач вещ р_дробь, десят_дробь, цел р, i, цифра, цел таб цифры[1:8] вывод не, "Введите правильную р-ичную дробь " ввод р_дробь вывод нс, "Введите основание р системы счисления 11 ввод р |Заполняем массив цифр нц для i от 1 до 8 цифра := mod(int(р_дробь * 10**i), 10) цифры[i] := цифра кц I Определяем искомое значение десят_дробь := цифры[8]/р |Учитываем последнюю цифру нц для i от 7 до 1 шаг -1 |и все остальные десят_дробь := (десят_дробь + цифры[д.])/р кц |Выводим результат вывод нс, "Соответствующая десятичная дробь равна ", десят_дробь кон
Приложение 6 Программы для моделирования арифметических действий в процессоре Как известно, в процессоре компьютера данные хранятся и обрабатываются в двоичном виде. Смоделируем выполнение четырех арифметических действий над неотрицательными целыми числами в процессоре средствами языка программирования высокого уровня — школьного алгоритмического языка. ► П6.1. Сложение Прежде всего, напомним, что происходит при сложении двух однозначных двоичных чисел (курсивом оформлено значение возможного «переноса» из соседнего справа разряда): 0 0 0 0 , 0 0 1 1 + + + 0 1 0 1 0 1 1 1 0 1 1 1 1 + 0 + 0 + 1 + 1 0 1 0 1 1 1 0 1 0 1 1 Эту информацию можно записать в виде табл. П6.1: Таблица П6.1 Цифра 1-го слагаемого 0 0 1 1 0 0 1 1 Цифра 2-го слагаемого 0 1 0 1 0 1 0 1 Перенос из предыдущего разряда 0 0 0 0 1 1 1 1 Цифра результата 0 1 1 0 1 0 0 1 Перенос в следующий разряд 0 0 0 1 0 1 1 1 ♦ Пример: 1 0 1 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 0 1 0 0
Программы для моделирования арифметических действий в процессоре 437 Учитывая это, можем так оформить общую схему решения задачи: цикл для всех разрядов 1. Выделение очередной двоичной цифры в каждом слагаемом 2. Выделение очередной результата сложения 3. Определение значения, которое переходит в соседний слева разряд 4. Учет очередной цифры в рассчитываемой сумме конец цикла Обсудим методику выполнения перечисленных этапов. 1. Выделение очередной двоичной цифры в каждом слагаемом Как и при сложении в «столбик» на бумаге, начинать расчеты нужно с последних цифр слагаемых. Последнюю двоичную цифру (пусть ее имя — цифра) десятичного числа п можно определить так: цифра := mod(n, 2) Однако, поскольку мы поставили задачу моделирования действий в процессоре, то для выделения последней двоичной цифры целесообразно применить операцию, проводимую в процессоре. Такой операцией является логическая команда AND (русский вариант — И). Анализ показывает, что младший разряд числа X можно выделить (получить) следующим образом: ХИ 1 (Проверьте!) Как уже отмечалось, в языке Паскаль существуют операция с соответствующим именем — and. Ее можно применять к данным целого типа, и результат, который она возвращает, также является целым числом. 2. Определение очередной двоичной цифры результата сложения Этот этап можно выполнить, учтя данные табл. 1 и рассмотрев 8 возможных вариантов: О выбор при цифра1 = 0 и цифра2 = 0 и перенос цифра рез = 0 при цифра1 = 0 и цифра2 = 1 и перенос цифра_рез = 1 при цифра1 = 1 и цифра2 = 0 и перенос цифра рез = 1 при цифра1 = 1 и цифра2 = 1 и перенос цифра рез = 0 при цифра1 = 0 и цифра2 = 0 и перенос цифра_рез = 1 при цифра! = 0 и цифра2 = 1 и перенос
438 Приложение 6 цифра_рез := О при цифра1 = 1 и цифра2 = 0 и перенос = 1: цифра_рез := О при цифра1 = 1 и цифра2 = 1 и перенос = 1: цифра_рез := 1 все где цифра\, цифра2 и цифра_рез соответственно цифры первого и второго слагаемых и цифра результата. Однако такая конструкция (оператор варианта) является громоздкой1 и не соответствует поставленной задаче моделирования. Цифру результата сложения двух двоичных цифр можно выделить, используя все ту же логическую команду И (AND). Если результат сложения двух двоичных цифр (с учетом возможного переноса единицы из разряда справа) представить в виде двузначного двоичного числа Р, то его правую (нужную нам) цифру можно получить уже знакомым нам методом: 2 цифра_рез := Р И 1 а значение Р так: Р := цифра1 + цифра2 + перенос где перенос — значение, перешедшее «в уме» из разряда справа. 3. Определение значения, которое переходит в соседний слева разряд Здесь также использование оператора варианта является нецелесообразным. Искомое значение можно получить, применив сдвиговую команду, выполняемую в процессоре — SHR. Учитывая, что искомое значение — это первая цифра числа Р (см. чуть выше), то ее можно получить, применив сдвиговую операцию вправо с операндом 1: перенос := Р СдвигВправоНа 1 Внимание! Приведен оператор на школьном алгоритмическом языке, для которого условно принято, что в нем имеется операция СдвигВправоНа — аналог сдвиговой операции shr. 4. Учет очередной цифры в рассчитываемой сумме Прежде чем приводить методику выполнения данного этапа, скажем, что, кроме команды SHR, имеется также сдвиговая команда SHL (от Shift Left — сдвинуть влево). В результате ее выполнения в регистрах процес¬ 1 В языке программирования Паскаль для ее применения необходимо предварительно рассмотреть и пронумеровать 8 возможных вариантов с помощью условных операторов. 2 В школьном алгоритмическом языке учитывается регистр букв (служебное слово и и операция И будут различаться).
Программы для моделирования арифметических действий в процессоре 439 сора происходит поразрядный сдвиг двоичных цифр на заданное количество разрядов влево. При этом соответствующее число цифр в старших разрядах теряется, а освободившиеся младшие разряды — заполняются нулями. Например, если в восьми разрядах находилось двоичное число: 1 1 0 0 1 0 0 1 то после сдвига влево на два разряда оно примет вид: 0 0 1 0 0 1 0 0 Результатом ее выполнения в программе на языке Паскаль: х := a shl b будет целое десятичное число, которое соответствует результату поразрядного сдвига влево на b разрядов двоичного представления операнда а. Теперь о нашей задаче. Можем рассуждать следующим образом. Если, например, до вычислений в пятом справа разряде уже ранее был получен результат: 10 0 1 а в пятом разряде цифра результата равна 1, то новое значение искомого результата будет равно: 110 0 1 А как добавить очередную цифру в начало «старого» результата? Можно сказать, что новый результат получен так: ... 1 0 0 0 0 10 0 1 А это означает, что в данном случае результат может быть получен следующим образом: сумма := цифра_рез СдвигВлевоНа4 +сумма где СдвигВлевоНа — аналог сдвиговой операции shl. В общем случае: сумма := цифра_рез СдвигВлевоНа (номер_разряда - 1) +сумма Далее, так как описанные 4 этапа необходимо выполнить для каждого разряда, то для этого следует отбросить последнюю цифру обрабатываемого числа. Как это сделать, вы, конечно, уже поняли — применить сдвиговую операцию вправо с операндом 1. Итак, теперь мы можем оформить всю программу решения задачи сложения двух натуральных чисел а и Ь. К уже сделанным замечаниям в части использования команд СдвигВправоНа и СдвигВлевоНа примем,
440 Приложение 6 что имеется также операция и — аналог поразрядной логической операции and. Кроме того, будем считать, что максимальное количество двоичных разрядов для представления чисел равно 16. алг Сложение нач цел а, Ь, сумма, Р, цифра1, цифра2, цифра_рез, перенос, i ввод а ввод Ь сумма := 0 |Искомое значение перенос := 0 нц для i от 1 до 16 I Для каждого разряда цифра1 := а И 1 |Выделяем последние цифра2 := b И 1 |цифры слагаемых |Определяем результат сложения |в i-м разряде Р := а + b + перенос |Выделяем очередную цифру суммы цифра_рез := Р И 1 |Учитываем ее в сумме сумма := цифра_рез СдвигВлевоНа(i - 1) + сумма |Определяем значение перенос перенос := Р СдвигВправоНа 1 |Отбрасываем последнюю цифру в каждом слагаемом а := а СдвигВправоНа 1 b := b СдвигВправоНа 1 кц |Выводим ответ вывод нс, сумма кон ► П6.2. Вычитание Здесь также рассмотрим возможные варианты вычитания двух однозначных двоичных чисел (курсивом оформлено значение заимствования в после вычитания в соседнем справа разряде, полужирным начертанием — значение заимствования в результате данного вычитания):
Программы для моделирования арифметических действий в процессоре 441 Эту информацию можно записать в виде табл. П6.2: Таблица П6.2 Номер варианта 1 2 3 4 5 6 7 8 Заимствование после вычитания в соседнем справа разряде 0 0 0 0 1 1 1 1 Цифра уменьшаемого 0 0 1 1 0 0 1 1 Цифра вычитаемого 0 1 0 1 0 1 0 1 Цифра результата 0 1 1 0 1 0 0 1 Заимствование после данного вычитания 0 1 0 0 1 1 0 1 ♦ Пример: 1 1 1 0 0 1 0 1 1110 0 10 0 1110 0 11 Общая схема решения задачи вычитания при известных значениях уменьшаемого и вычитаемого: цикл для всех разрядов 1. Выделение очередной цифры уменьшаемого (цифра 1) 2. Выделение очередной цифры вычитаемого [цифра2) 3. Определение результата вычитания в данном разряде (цифра_рез) 4. Учет его в искомой общей разности 5. Определение величины заимствования в соседнем слева разряде (займ) конец цикла Прежде чем приводить методику выполнения пяти перечисленных этапов, заметим, что, учитывая особенности определения необходимых значений на этапах 3 и 5, их целесообразно объединить. 1-2. Выделение очередной двоичной цифры в уменьшаемом а и вычитаемом Ъ Методика выполнения этих этапов аналогична сложению: цифра1 := а И 1 цифра2 := b И 1 3, 5. Определение результата вычитания в данном разряде (цифра_рез) и величины заимствования в соседнем слева разряде (займ) Предварительный анализ табл. П6.2 показывает, что единую для всех восьми вариантов формулу расчета цифры вычитания и аналогичную формулу для определения величины заимствования составить нельзя —
442 Приложение 6 необходимо рассматривать разные группы вариантов. Чтобы не использовать два условных оператора (для нахождения значения цифра_рез и для нахождения значения займ) и проводится «объединение» этапов 3 и 5. Все 8 вариантов расчета (см. табл. П6.2) можно объединить в три группы: 1) в которых цифраХ - займ > цифра2 — где займ — величина заимствования после вычитания в соседнем справа разряде. К этой группе относятся варианты 1, 3, 4, 7. Для них: — цифра результата вычитания: цифра_рез = О — величины заимствования в соседнем слева разряде: займ = 0; 2) в которых цифраХ - займ = цифра2 - 1 Указанному условию соответствуют варианты 3, 5, 8. Для них: — займ = 0; — значение цифра_рез может быть определено с использованием логической команды И (AND): цифра_рез := (цифра1 - цифра2 + займ) И 1 (Убедитесь в этом самостоятельно!); 3)вариант 6 Для него: — цифра_рез = 0; — займ = 1. Для рассмотрения этих трех групп вариантов в программе придется использовать три неполных условных оператора или один так называемый «вложенный условный оператор». Но можно упростить программную конструкцию, учитывая следующее. Анализ табл. П6.2 показывает, что в вариантах 1, 3-6 и 8 значение займ в результате вычитания в данном разряде не меняется. Поэтому целесообразно рассмотреть отдельно только варианты 2 и 7: |Рассматриваем вариант 2 если займ = 1 и цифра1 = 0 и цифра2 = 1 то цифра_рез := 1 займ := 1 иначе |Для всех остальных вариантов: цифра_рез := (цифра! - цифра2 + займ) И 1 |Значение займ для варианта 7 - меняется если займ = 1 и цифра1 = 1 и цифра2 = 0 то
Программы для моделирования арифметических действий в процессоре 443 займ := О все все 4. Учет цифры результата в искомой общей разности Здесь, как и при сложении, применяем сдвиговую операцию СдвигВлевоНа: разность := цифра_рез СдвигВлевоНа (номер_разряда - 1) + разность Вся программа, реализующая вычитание: алг Вычитание нач цел а, Ь, разность, цифра1, цифра2, цифра_рез, займ, i ввод а ввод Ъ разность:= 0 |Искомое значение займ := О нц для i от 1 до 16 I Для каждого разряда цифра1 := а И 1 |Выделяем последние цифра2 := b И 1 |цифры |В i-м разряде определяем результат вычитания |и значение заимствования в соседнем слева разряде |Рассматриваем вариант 2 если займ = 1 и цифра1 = 0 и цифра2 = 1 то цифра_рез := 1 займ := 1 иначе |Для всех остальных вариантов: цифра_рез := (цифра1 - цифра2 + займ) И 1 |Значение займ для варианта 7 - меняется если займ = 1 и цифра! = 1 и цифра2 = О то займ := О все все |Учитываем цифра_рез в общей разности разность := цифра_рез СдвигВлевоНа(i - 1) + разность |Отбрасываем последнюю цифру в уменьшаемом а := а СдвигВправоНа 1 |и в вычитаемом b := b СдвигВправоНа 1 кц |Выводим ответ вывод нс, разность кон
444 Приложение 6 ► П6.3. Умножение Вспомним, как умножаются два двоичных числа «в столбик»: 0 1 1 1 1 0 1 1 _1_ 0 1 1 1 1 1 1 1 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 _L 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 Можно сказать, что для умножения необходимо выделить каждую цифру одного из сомножителей и, если она равна 1, то выписать первый сомножитель в соответствующей позиции, а затем сложить все выписанные значения с учетом их позиции. Прежде чем представлять программу, работающую по этой схеме, заметим, что сложение очередного «выписанного» значения первого множителя с учетом его позиции можно провести, как и ранее, с использованием сдвиговой операции СдвигВлевоНа: алг Умножение нач цел а, Ь, произв, цифра2, i ввод а ввод b произв := 0 |Искомое значение нц для i от 1 до 16 I Для каждого разряда |во 2-м множителе цифра2 := Ъ И 1 |Выделяем последнюю цифру |2-го множителя если цифра2 = 1 |Только в этом случае то |Добавляем значение а произв := а СдвигВлевоНа (i - 1) + произв все |Отбрасываем последнюю цифру во 2-м множителе b := b СдвигВправоНа 1 кц |Выводим ответ вывод нс, произв кон
Программы для моделирования арифметических действий в процессоре 445 ► П6.4. Деление Рассмотрим примеры деления чисел «в столбик»: 1) десятичных чисел: 8 1 0 4 5 2 |_6 6 1 3 5 0 7 5 2 1 1 8 3 0 3 0 0 4 5 4 2 3 1 3 0 1 2) двоичных чисел: 110 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 1 1 Можно сказать, что при делении рассматриваются или «сносятся» вниз каждая из цифр делимого, которая добавляется к некоторому числу, которой будем называть «уменьшаемое». Если оно не меньше делителя, то, в случае двоичных чисел, в частное записывается очередная цифра, равная 1, и из уменьшаемого вычитается делитель. В противном случае в частное записывается очередная цифра О3. Нетрудно увидеть, что полученное частное представляет собой так называемое «целочисленное частное», а последняя разность будет остатком от деления. Иными словами, мы проводим деление нацело с остатком. Общая схема расчетов такая: цикл для каждой цифры 1. Выделяем очередную цифру 2. Приписываем ее к "старому" значению уменьшаемого 3. Если текущее значение уменьшаемого не меньше делителя то 3 Можно условно считать, что для приведенного примера частное начинается с двух нулей.
446 Приложение 6 3.1.1. Приписываем к частному 1 3.1.2. Вычитаем делитель из уменьшаемого, присваивая разность тому же уменьшаемому иначе 3.2.1. Приписываем к частному О все конец цикла Так как в программе будет проводиться вычитание, целесообразно оформить вспомогательную функцию, возвращающую разность двух чисел. Это можно сделать на основе программы, разработанной для вычитания: алг цел Вычитан(арг цел а, Ь) нач цел разность, цифра1, цифра2, цифра_рез, займ, i i := 1 разность:= О займ := О нц для i от 1 до 16 |Для каждого разряда цифра1 := а И 1 цифра2 := Ъ И 1 если займ = 1 и цифра1 = 0 и цифра2 = 1 то цифра_рез := 1 займ := 1 иначе цифра_рез := (цифра1 - цифра2 + займ) И 1 если займ = 1 и цифра1 = 1 и цифра2 = О то займ := О все все разность := цифра_рез СдвигВлевоНа (i - 1) + разность а := а СдвигВправоНа 1 b := b СдвигВправоНа 1 кц знач := разность |Значение функции кон Нужно также знать количество цифр в делимом. Его также удобно определить с помощью вспомогательной функции (разработайте ее самостоятельно). Обозначим это количество — к\. Обсудим методику выполнения этапов и подэтапов 1-3 (см. общую схему действий чуть выше). 7. Выделение очередной цифры делимого Если например, количество цифр делимого равно 6: 110 0 10
Программы для моделирования арифметических действий в процессоре 447 — то выделение крайней правой цифры можно провести так: цифра := а И 1 — четвертой справа цифры: цифра := а СдвигВправоНа 4 И 1 — /-й справа цифры: цифра := а СдвигВправоНа(i - 1) И 1 2. Учет очередной цифры в «старом» значении уменьшаемого Новое значение уменьшаемого определяется следующим образом: уменьш := уменьш СдвигВлевоНа 1 + цифра 3.1.1, 3.2.1. Приписывание 1 или 0 в конец частного Новое значение величин частное рассчитывается соответственно с помощью операторов: частное := частное СдвигВлевоНа 1+1 и частное := частное СдвигВлевоНа 1 3.1.2. Вычитание делителя из уменьшаемого Здесь используется функция Вычитан (см. выше): уменьш := Вычитан(уменьш, Ь) Прежде чем представлять всю программа решения задачи деления, заметим, что в ней используется вспомогательная функция КолЦифр, возвращающая количество цифр в двоичной записи делимого алг цел КолЦифр(арг цел а) нач цел к к := О нц пока а > О |Учитываем последнюю цифру к := к + 1 I Отбрасываем ее n := п СдвигВправоНа 1 КЦ знач := к |Значение функции кон Итак, программа: алг Деление_нацело_с_остатком нач цел а, Ь, частное, kl, уменьш, цифра, i ввод а |Делимое ввод b |Делитель kl := КолЦифр(а) частное := 0 |Начальное значение искомого частного уменьш := 0 |и уменьшаемого
448 Приложение 6 нц для i от к1 до 1 шаг -1 (Нумерация справа налево цифра := а СдвигВправоНа(i - 1) И 1 уменып := уменьш СдвигВлевоНа 1 + цифра если уменьш >= b то частное := частное СдвигВлевоНа 1+1 уменьш := Вычитан(уменьш, Ь) иначе частное := частное СдвигВлевоНа 1 все кц |Вывод ответа (частного и остатка) вывод нс, частное, " ", уменьш кон Задания для самостоятельной работы учащихся ► 1. Разработайте аналогичные программы на языке программирования, которым вы владеете. ► 2. Оформите фрагмент программы (на языке Паскаль или на школьном алгоритмическом языке), связанный с выводом на экран значения результата, так, что бы в нем использовались поразрядные логические и сдвиговые операции. ► 3. Определите результат сложения двух чисел а и Ъ и типа byte при: \) а = 255, 6=1; 2) а = 255, 6 = 120. При использовании школьного алгоритмического языка результат получите на бумаге, приняв, что числа хранятся в восьми разрядах. ► 4. Определите, можно ли из меньшего натурального числа вычесть большее. Объясните полученный результат. ► 5. Оказывается (но не совсем очевидно), что для вычитания, как и для сложения, все-таки можно получить единую формулу для расчета результата вычитания в одном разряде: Р := цифра1 - цифра2 - займ, и после расчета значения Р выделить значение цифра_рез и новое значение заим\ цифра_рез := Р И 1 займ := (Р СдвигВправоНа 1) И 1 Проверьте справедливость сделанных утверждений применительно ко всем восьми вариантам табл. П6.2. Как можно объяснить это?
Программы для моделирования арифметических действий в процессоре 449 ► 6. Проверьте, можно ли разработанную программу для вычитания применить к двум отрицательным числа (в языке Паскаль изменив при этом тип данных). Проанализируйте два случая: 1) при вычитании из большего отрицательного числа меньшего; 2) при вычитании из меньшего числа большего. Объясните полученный во втором случае результат. ► 7. Определите, сколько двоичных разрядов будет в произведении, если сомножители занимают соответственно к\ и к2 разрядов. ► 8. Разработайте вариант программы для умножения, в которой поразрядное умножение проводится не для всех 16 разрядов, а для фактического количества разрядов в двоичном представлении второго множителя.
Приложение 7 Программы, моделирующие фокусы, описанные в главе 11 ► П7.1. Фокус «Волшебная таблица» (п. 11.1) В программе, моделирующей этот фокус, таблицу с числами, которая в главе 6 названа «волшебной» (см. рис. 11.1), представим виде двумерного массива из 16 строк и пяти столбцов с именем табл. Заполнение этого массива проведем следующим образом: 1) 1-й столбец: нц для i от 1 до 16 табл[з-, 1] := 15 + i кц 2) 2-й столбец: нц для i от 1 до 8 табл[1, 2] := 7 + i кц нц для i от 9 до 16 табл[1, 2] := 15 + i кц 3) 3-й столбец: нц для i от 1 до 4 табл[л_, 3] := i + 3 кц нц для i от 5 до 8 табл[1, 3] := i + 7 кц нц для i от 9 до 12 табл[1, 3] := i + 11 кц нц для i от 13 до 16 табл[1, 3] := i + 15 кц 4) 4-й столбец: нц для i от 1 до 16 если mod(i,2) = 1
Программы, моделирующие фокусы, описанные в главе 11 451 табл[л-, 4] := i * 2 иначе табл[л., 4] := i * 2 -1 все кц 5) 5-й столбец: нц для i от 1 до 16 таблЦ, 5] := i * 2 - 1 кц Самостоятельно убедитесь в правильности использованных зависимостей между номерами строк и значениями элементов в столбцах. При выводе таблицы нумерацию столбцов проведем слева направо, что отличается от нумерации, приведенной на рис. 11.1. Теперь о том, как определить задуманное число. Можно поступить так: 1) узнать количество столбцов таблицы, в которых имеется задуманное число. Пусть имя этой величины — сколько; 2) сколько раз (©) узнать номер столбца и для каждого номера {ном) учесть его «вклад» в общее искомое значение следующим образом: выбор при ном = 1: ответ := ответ + 16 при ном = 2: ответ := ответ + 8 при ном = 3: ответ := ответ + 4 при ном = 4: ответ := ответ + 2 при ном = 5: ответ := ответ + 1 все где ответ — искомое число. Такая методика позволяет вводить номера столбцов в любом порядке. Вся программа имеет вид: алг Фокус_Волшебная_таблица нач цел таб табл[1:16, 1:5], цел сколько, номер, i, j, ответ вывод нс, "Задумайте целое число от 1 до 31" |Приостановка программы до нажатия любой клавиши вывод нс, "Для продолжения - нажмите любую клавишу" НЦ кц_при клав <> О I Заполнение таблицы | 1-й столбец ... (см. выше) I Выводим таблицу нц для i от 1 до 16
452 Приложение 7 ВЫВОД НС нц для j от 1 до 5 если табл[1, j] > 9 то вывод табл[л_, j], " " иначе вывод табл[1, j], " 11 все кц кц |и номера столбцов вывод нс, 11 " вывод нс, "1 2 3 4 5" I Определение задуманного числа ответ := О вывод нс, "В каком количестве столбцов таблицы имеется Ваше число? " ввод сколько нц для i от 1 до сколько вывод нс, "Введите номер ", i, "-го столбца " ввод номер выбор при номер = 1: ответ := ответ + 16 ... (см. выше) все кц |Приостановка программы до нажатия любой клавиши вывод нс, "Для продолжения - нажмите любую клавишу" нц кц_при клав <> О |Вывод ответа вывод нс, "Вы задумали число:", ответ кон Язык Паскаль Uses CRT; Var tabl: array [1..16, 1..5] of byte; skolko, nom, i, j, otvet: byte; BEGIN clrscr; writeln(1 Задумайте целое число от 1 до 31'); {Приостановка программы до нажатия любой клавиши} writeln('Для продолжения - нажмите любую клавишу’); repeat until keypressed; {Заполнение таблицы
Программы, моделирующие фокусы, описанные в главе 11 453 1-й столбец} for i := 1 to 16 do tabl[i, 1] := 15 + i; {2 —й столбец} for i := 1 to 8 do tabl[i, 2] := 7 + i; for i := 9 to 16 do tabl[i, 2] := 15 + i; {3-й столбец} for i := 1 to 4 do tabl[i, 3] := i + 3; for i := 5 to 8 do tabl[i, 3] := i + 7; for i := 9 to 12 do tabl[i, 3] := i + 11; for i := 13 to 16 do tabl[i, 3] := i + 15; {4 —й столбец} for i :=1 to 16 do if i mod 2=1 then tabl[i, 4] := i * 2 else tabl[i, 4] := i * 2 -1; {5-й столбец} for i := 1 to 16 do tabl[i, 5] := i * 2 - 1; {Выводим таблицу} for i := 1 to 16 do begin writeln; for j := 1 to 5 do write(tabl[i, j]:4) end; {и номера столбцов} writeln; writeln ( f ' ) ; writeln(f 1 2 3 4 5?); otvet := 0; write('В каком количестве столбцов таблицы имеется Ваше число? ’); readln(skolko); for i := 1 to skolko do begin write(1 Введите номер ", i, "-го столбца ’); readln(nom); case nom of 1: otvet = otvet + 16 2: otvet = otvet + 8; 3: otvet = otvet + 4; 4: otvet = otvet + 2; 5: otvet = otvet + 1 end end; write(’Вы задумали число: ’, otvet) END.
454 Приложение 7 Задание для самостоятельной работы учащихся Разработайте программу, моделирующую аналогичный фокус с отгадыванием задуманного числа из интервала 1-63. ► П7.2. Фокус «Семь табличек» (п. 11.3) Отличие программы для демонстрации данного фокуса от предыдущей состоит в том, что нужно выводить 7 табличек с числами. Числа каждой из этих табличек можно записывать в один массив из восьми строк и восьми столбцов с именем табл и после заполнения данными из таблички сразу же выводить его на экран (7 раз). Заполнение массива табл проводится следующим образом: 1) 1-й таблицы (см. рис. 11.2): | 1-я строка нц для j от 1 до 8 табл[1, j] := 2 * j - 1 кц |Остальные строки нц для i от 2 до 8 нц для j от 1 до 8 табл[л_, j] := табл[1 - 1, j] +16 кц кц 2) 2-й таблицы (см. рис. 11.3): |1-я строка нц для j от 1 до 8 если mod(j, 2) =1 то табл[1, j] := j * 2 иначе табл[1, j] := j * 2 - 1 все кц |Остальные строки нц для i от 2 до 8 нц для j от 1 до 8 табл[1, j] := табл[1 - 1, j] +16 кц кц 3) 3-й таблицы (см. рис. 11.4): |1-я строка нц для j от 1 до 4 табл[1, j] := j + 3 кц
Программы, моделирующие фокусы, описанные в главе 11 455 нц для j от 5 до 8 табл[1, j] := табл[1, j - 4] +8 кц |Остальные строки нц для i от 2 до 8 нц для j от 1 до 8 табл[л., j] := табл[1 - 1, j] +16 кц кц 4) 4-й таблицы (см. рис. 11.5): |1-я строка нц для j от 1 до 8 табл[1, j] := j + 7 кц |Остальные строки нц для i от 2 до 8 нц для j от 1 до 8 табл[з., j] := табл[1 - 1, j] +16 кц кц 5) 5-й таблицы (см. рис. 11.6): |1-я строка нц для j от 1 до 8 табл[1, j] := j + 15 кц I 2—я строка нц для j от 1 до 8 табл[2, j] := табл[1, j] +8 кц | 3-я строка нц для j от 1 до 8 табл[3, j] := табл[2, j] +24 кц |4-я строка нц для j от 1 до 8 табл[4, j] := табл[3, j] + 8 кц |Остальные строки нц для i от 5 до 8 нц для j от 1 до 8 табл[1, j] := табл[1 - 4, j] +64 кц кц 6) 6-й таблицы (см. рис. 11.7): |1-я строка
456 Приложение 7 нц для j от 1 до 8 табл[1, j] := j + 31 кц |2-я, 3-я и 4-я строки нц для i от 2 до 4 нц для j от 1 до 8 табл[1, j] :=табл[1 - 1, j] + 8 кц кц |Остальные строки нц для i от 5 до 8 нц для j от 1 до 8 табл[1, j] := табл[1 - 4, j] +64 кц кц 7) 7-й таблицы (см. рис. 11.8): |1-я строка нц для j от 1 до 8 табл[1, j] := j + 63 кц |Остальные строки нц для i от 2 до 8 нц для j от 1 до 8 табл[л., j] := табл[1 - 1, j] +8 кц кц Изменится также «вклад» каждой таблицы в общее искомое значение: выбор при ном = 1: ответ : = ответ + 1 при ном = 2: ответ : = ответ + 2 при ном = 3: ответ : = ответ + 4 при ном = 4 : ответ : = ответ + 8 при ном = 5: ответ : = ответ + 16 при ном = 6: ответ : = ответ + 32 при ном = 7 : ответ : = ответ + 64 все где ном — номер таблицы, в которой имелось задуманное число, ответ — искомое число. Всю программу предлагаем читателям собрать самостоятельно. При этом, так как вывод заполненных таблиц проводится многократно, с целью уменьшения размера программы целесообразно использовать вспомогательную процедуру вывода на экран массива табл. Примечание. В программе должно быть сообщение о том, что следует запомнить номера таблиц, в которых имеется запомненное число.
Программы, моделирующие фокусы, описанные в главе 11 457 Задание для самостоятельной работы учащихся Разработайте программу, моделирующую аналогичный фокус с отга- дыванием задуманного числа из интервала 1-63. ► П7.3. Фокус «15 названий» (п. 11.8) Программа для демонстрации данного фокуса также во многом аналогична рассмотренным. Отличия следующие. 1) понадобится массив с перечнем исходных терминов (см. рис. 11.27). Имя этого массива — список_слов, размер — 15 элементов. Вспомним «секрет» фокуса и заметим, что порядковые номера терминов определяют содержание других демонстрируемых табличек; 2) информация, выводимая в виде таблиц на рис. 11.28-11.31, в программе хранится в одномерном массиве из 8 элементов с данными строкового типа. Пусть имя этого массива — табл. Для таблицы 1 (рис. 11.28) в массиве табл должны быть представлены термины, номера которых в двоичной записи имеют 1 в последнем разряде, для таблицы 2 (рис. 11.29) — 1 во втором справа разряде и т. д.; 3) для получения ответа следует, используя, как и ранее, «вклад» каждой из таблиц, подсчитать номер искомого термина и по нему определить сам термин, используя массив список_слов. Вся программа имеет вид: лит таб табл [1:8] цел i алг Фокус_15_назаваний_ нач лит таб список_слов[1:15], цел сколько, номер_таблицы, номер_слова, лит ответ I Заполняем массив со всеми названиями список_слов[1] := "Бит" список_слов[2] := "Системный блок" список_слов[3] := "Ноутбук" список_слов[4] := "Монитор" список_слов[5] := "Принтер" список_слов[б] := "Джойстик" список_слов[7] := "Сканер" список_слов[8] := "Байт" список_слов[9] := "Логика" список_слов[10] := "Система счисления" список_слов[11] := "'Мышка'" список_слов[12] := "Цифра" список_слов[13] := "Число" список_слов[14] := "Разряд" список_слов[15] := "Программа" |и выводим его
458 Приложение 7 вывод нс, "Запомните какой-либо термин:" нц для i от 1 до 15 вывод НС, список_слов[i] кц вывод нс, "Если в таблицах, которые будут вам вывод "предложены, имеется этот термин, то запомните вывод "номер соответствующей таблицы" |Приостановка программы до нажатия любой клавиши вывод нс, "Для продолжения - нажмите любую клавишу" нц кц_при клав о О |Заполнение 1-й таблицы табл[1] табл[2] табл[3] табл[4] табл[5] табл[б] табл[7] табл[8] вывод НС, = "Бит" = "Ноутбук" = "Принтер" = "Сканер" = "Логика" = "’Мышка'" = "Число" = "Программа" "Таблица № 1" Вывод_таблицы | 2-я таблица табл[1] табл[2] табл[3] табл[4] табл[5] табл[б] табл[7] табл[8] вывод нс, "Таблица Вывод_таблицы | 3-я таблица "Сканер" "Система счисления" "Программа" "1 Мышка 1" "Системный блок" "Ноутбук" "Джойстик" "Разряд" № 2" табл[1] табл[2] табл[3] табл[4] табл[5] табл[б] табл [ 7] табл[8] ВЫВОД НС, Вывод_таблицы | 4-я таблица табл[1] := "Байт" табл[2] := "Логика" "Цифра" "Число" "Монитор" "Принтер" "Джойстик" "Сканер" "Программа" "Разряд" Таблица № 3'
Программы, моделирующие фокусы, описанные в главе 11 459 табл[3] := "Система счисления" табл[4] := "’Мышка’" табл[5] := "Цифра" табл[б] := "Число" табл[7] := "Разряд" табл[8] := "Программа" вывод не, "Таблица № 4" Вывод_таблицы |Определение номера задуманного слова вывод нс, "В каком количестве таблиц имеется Ваше слово? " ввод сколько номер_слова := О нц для i от 1 до сколько вывод нс, "Введите номер ", i, "-й таблицы " ввод номер_таблицы |Учитываем "вклад" данной таблицы выбор при номер_таблицы = 1: номер_слова := номер _слова + 1 при номер_таблицы = 2: номер слова := номер _слова + 2 при номер_таблицы = 3: номер слова := номер _слова + 4 при номер таблицы = 4: номер слова := номер слова + 8 все кц |Вывод ответа вывод нс, "Вы выбрали слово: ", список_слов[номер_слова] кон где Вывод таблицы — вспомогательная процедура вывода на экран массива табл. Язык Паскаль {Фокус "15 названий"} Uses CRT; Var spisok_slov: array [1..15] of string[30]; tabl: array [1..8] of string[30]; skolko, nomer_tablitsi, nomer_slova, i : byte; Procedure Vivod_tablitsi; begin for i := 1 to 8 do writeln(tabl[i]) end; BEGIN clrscr;
460 Приложение 7 {Заполняем массив со всеми названиями} spisok_slov[1] := ’Бит’; spisok_slov[2] := ’Системный блок’; spisok_slov[3] := ’Ноутбук’; spisok_slov[4] := ’Монитор’; spisok_slov[5] := ’Принтер’; spisok_slov[б] := ’Джойстик’; spisok_slov[7] := ’Сканер’; spisok_slov[8] := ’Байт'; spisok_slov[9] := ’Логика’; spisok_slov[10] := ’Система счисления’; spisok_slov[11] := ’"Мышка"’; spisok_slov[12] := ’Цифра’; spisok_slov[13] := ’Число’; spisok_slov[14] := ’Разряд’; spisok_slov[15] := ’Программа’; {и выводим его} writeln(’Запомните какой-либо термин:’); for i := 1 to 15 do writeln(spisok_slov[i]); write(’Если в таблицах, которые будут вам ’); write(’предложены, имеется этот термин, то ’); writeln(’запомните номер соответствующей таблицы’); {Приостановка программы до нажатия любой клавиши} writeln(’Для продолжения - нажмите любую клавишу’); repeat until keypressed; clrscr; {Заполнение 1—й таблицы} tabl[1] := ’Бит’; tabl[2] := ’Ноутбук’; tabl[3] := ’Принтер’; tabl[4] := ’Сканер’; tabl[5] := ’Логика’; tabl[6] := ’"Мышка"’; tabl[7] := ’Число’; tabl[8] := ’Программа’; writeln(’Таблица № 1’); Vivod_tablitsi; {Приостановка программы до нажатия любой клавиши} writeln(’Для продолжения - нажмите любую клавишу’); repeat until keypressed; {2-я таблица} tabl[l] := ’Сканер’; tabl[2] := ’Система счисления’; tabl[3] := ’Программа’; tabl[4 ] := ’"Мышка"’; tabl[5] := ’Системный блок’;
Программы, моделирующие фокусы, описанные в главе 11 461 tabl[б] := 'Ноутбук1; tabl[7] := ’Джойстик’; tabl[8] := ’Разряд’; clrscr; writeln('Таблица № 2'); Vivod_tablitsi; {Приостановка программы до нажатия любой клавиши} writeln('Для продолжения - нажмите любую клавишу'); repeat until keypressed; {3-я таблица} tabl [1] = ’Цифра’; tabl[2] = 'Число'; tabl[3] = 'Монитор'; tabl [4] = 'Принтер'; tabl[5] = 'Джойстик'; tabl[6] = 'Сканер'; tabl[7] = 'Программа'; tabl[8] = 'Разряд'; clrscr; writeln(’Таблица № 3’); Vivod_tablitsi; {Приостановка программы до нажатия любой клавиши} writeln('Для продолжения - нажмите любую клавишу'); repeat until keypressed; {4-я таблица} tabl[1] = 'Байт'; tabl [2] = 'Логика’; tabl [3] = ’Система счисления’; tabl [4] = ’"Мышка"'; tabl[5] = ’Цифра’; tabl[6] = 'Число’; tabl[7] = 'Разряд'; tabl[8] = 'Программа'; clrscr; writeln('Таблица № 4'); Vivod_tablitsi ; {Определение номера задуманного слова} writeln('В каком количестве таблиц имеется Ваше слово? '); readln(skolko); nomer_slova := 0; for i := 1 to skolko do begin writeln('Введите номер ', i, '-й таблицы '); readln(nomer_tablitsi); {Учитываем "вклад" данной таблицы}
462 Приложение 7 case nomer_tablitsi of 1: nomer_slova := nomer_slova + 1; 2: nomer_slova := nomer_slova + 2; 3: nomer_slova := nomer_slova + 4; 4: nomer_slova := nomer_slova + 8 end end; {Вывод ответа} writeln(’Вы выбрали слово: ’, spisok_slov[nomer_slova] ) END. Задание для самостоятельной работы учащихся Разработайте программу, моделирующую аналогичный фокус с использованием перечня из 31 термина. ► П7.4. Карточный фокус, описанный в п. 11.10 Разработаем программу, моделирующую такой вариант фокуса. Его демонстрирует фокусник, сидящий у компьютера, а зрители запоминают карту и трижды указывают номера стопок, в которых находится эта карта при раскладывании карт. Основные этапы демонстрации фокуса: 1. Формирование исходного набора карт. 2. Раскладывание карт на три стопки. 3. Запрос к зрителю о стопке с запомненной картой. 4. Сбор трех стопок в общую колоду. 5. Переворачивание колоды (карты — картинками вниз). 6. Раскладывание карт на три стопки. 7. Запрос к зрителю о стопке с запомненной картой. 8. Сбор трех стопок в общую колоду. 9. Переворачивание колоды (карты — картинками вниз). 10. Раскладывание карт на три стопки. 11. Запрос к зрителю о стопке с запомненной картой. 12. «Отгадывание» запомненной карты. Весь набор карт будем моделировать в виде массива из 27 элементов с именем колода. Проще всего его заполнить конкретными неповторяющимися двухсимвольным значениями, например: колода[1] := "ДП" колода[2] := "ТП" колода[8] := "ВБ" колода[9] := "6Б"
Программы, моделирующие фокусы, описанные в главе 11 463 колода[20] := "КТ" колода[21] := "8T" колода[26] := "КЧ" колода[27] := "74" — в которых первый символ соответствует достоинству карты («шестерка» — 6, «валет — «В» и т. д.), второй — масти (пики — «П» и т. д.). При этом при раскладывании карт будем считать, что карта колода[ 1] находится наверху колоды, а колода[27]— внизу (все карты расположены картинкой вниз). Стопки смоделируем в виде трех массивов стопка1, стопка2 и стоп- каЗ из 9 элементов каждый. Ясно, что тип элементов будет таким же, как и в массиве колода. Но здесь условимся, что карты стопка[\], стопка[2] и стопка[3\ находится внизу соответствующей стопки. Учитывая это, обсудим, как из общей колоды (массива колода) получить три стопки (три массива). Если проанализировать места размещения карт в первой стопке: стопка1[1] = колода[1] стопка1[2] = колода[4] стопка1[9] = колода[25] то можно первую стопку сформировать так: нц для i от 1 до 9 стопка1[:1] := колода [i * 3 - 2] кц Аналогично для второй и третьей стопок нц для i от 1 до 9 стопка2[:1] := колода [i * 3 - 1] кц И нц для i от 1 до 9 стопкаЗ[1] := колода[i * 3] кц Можно три оператора цикла объединить в один: нц для i от 1 до 9 стопка1[:1] := колода [i * 3 - 2] стопка2[л.] := колода [i * 3 - 1] стопкаЗ[д.] := колода [i * 3] кц
464 Приложение 7 После формирования стопок (заполнения массивов) их нужно вывести на экран: нц для i от 9 до 1 шаг -1 вывод не, стопка1[:1], " ", стопка2[:1], " ", стопкаЗ[1] кц Обратим внимание на то, что элементы массивов выводятся, начиная с последних значений. Под стопками укажем также их номера: вывод не, "1 2 3" После ввода номера стопки с запомненной зрителем карты три стопки собираются в общую колоду. С целью упрощения программы примем, что первая стопка карт всегда будет первой сверху в общем набора, вторая — второй, третья — третьей (это не повлияет на эффектность фокуса). При таком допущении сбор карт трех стопок в общую может быть проведен так: |Первая стопка в общей колоде нц для i от 1 до 9 колода[i] := стопка1[10 - i] кц I Вторая стопка нц для i от 10 до 18 колода[i] := стопка2[19 - i] кц |Третья стопка нц для i от 19 до 27 колода[i] := стопкаЗ[28 - i] кц Предлагаем читателю самостоятельно убедиться в правильности приведенных зависимостей между значениями элементов массивов. Итак, после первого раскладывания карт они собраны в общей стопке. Для нахождения запомненной карты нам надо узнать положение стопки с этой картой в общей стопке. Это же придется сделать еще дважды. Эти три значения (количество стопок, размещенных в общей колоде выше стопки с запомненной картой), удобно хранить в массиве, который назовем положение. Если номер стопки, который указал зритель, обозначить номер стопки, то с учетом допущений о размещении отдельных стопок, каждый элемент массива положение определяется как номер стопки - 1. Далее перед вторым раскладыванием собранные карты надо перевернуть. Мы пришли к задаче перестановки всех элементов массива колода в обратном порядке. Эта задача решается следующим образом:
Программы, моделирующие фокусы, описанные в главе 11 465 |Первую половину массива колода |обмениваем местами со второй половиной нц для i от 1 до 13 всп := колода[i] колода[i] := колода[27 - i + 1] колода[27 - i + 1] := всп кц где всп — вспомогательная величина литерного типа. Осталось обсудить методику нахождения запомненной зрителем карты. Номер элемента массива колода с запомненной картой, так и назовем — номер запомненной_карты. С использованием массива положение искомое может быть рассчитан следующим образом: номер_запомненной_карты := положение[3] * 9 + положение[2] * 3 + положение[1] + 1 С учетом того, что этапы 2-5 и 6-9 (см. выше) идентичны, всю программу можем оформить с использованием оператора цикла, параметром которого является номер расклада (имя величины — расклад): алг Фокус нач лит таб колода [1:27], лит таб стопка1[1:9], стопка2[1:9], стопкаЗ[1:9] цел номер_запомненной_карты, номер_стопки, расклад, i, цел таб положение[1:3], лит всп I Исходная колода колода[1] := "ДП" колода[2] := "ТП" ... (см. выше) I Первые два расклада нц для расклад от 1 до 2 вывод нс, расклад, "-й расклад" |Раскладываем карты на 3 стопки |Формируем стопки нц для i от 1 до 9 стопка1[1] := колода[i * 3 - 2] стопка2[1] := колода[i * 3 - 1] стопкаЗ[1] := колода[i * 3] кц |Выводим их нц для i от 9 до 1 шаг -1 вывод нс, стопка1[1], " ",стопка2[i], " ", стопкаЗ[л_] кц |Выведем также номера стопок вывод нс, "1 2 3" |Ввод номера стопки
466 Приложение 7 вывод не, "Укажите номер стопки с запомненной картой " ввод номер_стопки |Собираем стопки нц для i от 1 до 9 колода[i] := стопка1[10 - i] кц нц для i от 10 до 18 колода[i] := стопка2[19 - i] кц нц для i от 19 до 27 колода[i] := стопкаЗ[28 - i] кц |Определяем, сколько стопок расположено |над стопкой с запомненной картой положение[расклад] := номер_стопки - 1 |Переворачиваем колоду нц для i от 1 до 13 всп := колода[i] колода[i] := колода[27 - i + 1] колода[27 - i + 1] := всп кц кц |Третий расклад вывод нс, "3-й расклад" |Формируем стопки ... (см. выше) |и выводим их ... (см. выше) |Ввод номера стопки ... (см. выше) |Собираем стопки ... (см. выше) [Определяем, сколько стопок расположено |над стопкой с запомненной картой положение[3] : = номер_стопки - 1 |Определяем и выводим искомую карту номер_запомненной_карты := положение[3] * 9 + положение[2] * 3 + положение[1] + 1 вывод нс, "Вы запомнили карту: ", колода[номер_запомненной_карты] кон Язык Паскаль Uses CRT; Var koloda: array [1..27] of string[2]; stopkal, stopka2, stopka3: array [1..9] of string[2];
Программы, моделирующие фокусы, описанные в главе 11 467 nomer_zapomnennoi_karti, nomer_stopki, rasklad, i: byte; pologenie: array [1..3] of byte; vsp: string[2]; BEGIN clrscr; {Исходная колода} koloda[1] := ' ДП' ; koloda [ 2 ] := 'TIT; {Первые два расклада} for rasklad := 1 to 2 do begin writeln(rasklad, '-й расклад'); {Раскладываем карты на 3 стопки. Формируем стопки} for i := 1 to 9 do begin stopkal[i] := koloda[i * 3 - 2]; stopka2[i] := koloda[i * 3 - 1]; stopka3[i] := koloda[i * 3] end; {Выводим их} for i := 9 downto 1 do writeln(stopkal[i], ' ', stopka2[i], ' ', stopka3[i]); {Выведем также номера стопок} writeln ('1 2 3'); {Ввод номера стопки} write('Укажите номер стопки с запомненной картой '); readln(nomer_stopki); {Собираем стопки} for i := 1 to 9 do koloda[i] := stopkal[10 - i]; for i := 10 to 18 do koloda[i] := stopka2[19 - i]; for i := 19 to 27 do koloda[i] := stopka3[28 - i]; {Определяем, сколько стопок расположено над стопкой с запомненной картой} pologenie[rasklad] := nomer_stopki - 1; {Переворачиваем колоду} for i := 1 to 13 do begin vsp := koloda[i]; koloda[i] := koloda[27 - i + 1]; koloda[27 - i + 1] := vsp end; clrscr;
468 Приложение 7 end; {Третий расклад} writeln('3-й расклад1); {Формируем стопки} ... (см. выше) {и выводим их} ... (см. выше) {Ввод номера стопки} ... (см. выше) {Собираем стопки} ... (см. выше) {Определяем, сколько стопок расположено над стопкой с запомненной картой} pologenie[3] := nomer_stopki - 1; clrscr; {Определяем и выводим искомую карту} nomer_zapomnennoi_karti := pologenie[3] * 9 + pologenie[2] * 3 + pologenie[l] + 1; writeln ('Вы запомнили карту: ', koloda[nomer_zapomnennoi_karti]) END. Задания для самостоятельной работы учащихся Разработайте варианты программы, в которых: 1) действия по формированию третьего разряда выполняются не отдельно, а в операторе цикла с параметром расклад (что сократит размер программы); 2) исходный набор карт формируется случайным образом.
Приложение 8 Оформление листов электронных таблиц для демонстрации фокусов Фокусы, описанные в главе 11 — «Волшебная таблица» (см. раздел 11.2), «Семь табличек» (11.3) и «15 названий» (11.8), можно демонстрировать, используя электронную таблицу Microsoft Excel или подобную. Так как оформление листа для этих фокусов аналогичное, то опишем его особенности на примере фокуса «Волшебная таблица». Оформим верхнюю часть листа так, как показано на рис. П8.1 (см. также рис. 11.1). А В С D Е 1 18 10 6 6 5 2 19 11 7 7 7 3 20 12 12 10 9 16 30 30 30 30 29 17 31 31 31 31 31 18 В каких столбцах имеется задуманное число: 19 20 21 Вы задумали число: Рис. П8.1 После того, как задумавший число сообщает, в каких столбцах таблицы оно имеется, следует в соответствующие ячейки диапазона А19:Е19 внести некоторые отметки (это может сделать и сам задумавший число): 19 + + + 20 21 Вы задумали число: 21 В ячейке D21 выводится задуманное число.
470 Приложение 8 Чтобы демонстрировать фокус, следует вне зоны видимости листа, например, в строке 40, получить весомости каждого из пяти двоичных разрядов, причем делать это только в случае, когда в соответствующем разряде стоит отметка. Соответствующие формулы: — в ячейке А40: =ЕСЛИ(НЕ(ЕПУСТО(А19));16); — в ячейке В40: =ЕСЛИ(НЕ(ЕПУСТО(В19));8); — в ячейке С40: =ЕСЛИ(НЕ(ЕПУСТО(С19));4); — в ячейке D40: =ЕСЛИ(НЕ(ЕПУСТ0(019));2); — в ячейке Е40: =ЕСЛИ(НЕ(ЕПУСТО(Е19));1). Тогда задуманное число в ячейке D21 может быть найдено по формуле: =СУММ(А40:Е40). Однако при таком оформлении листа в ячейке D21 будет выводиться не только искомое значение, но и (по мере ввода отметок в ячейки А19:Е19) все промежуточные результаты. Кроме того, после удаления всех отметок в ячейке D21 будет выводиться нулевое значение. Как можно устранить этот недостаток? Можно сделать так, что значение в ячейке D21 будет выводиться только после заполнения ячейки D20: 18 В каких столбцах имеется задуманное число: 19 20 Отгадать Ваше число? Да 21 Вы задумали число: Соответствующая формула в ячейке D21: =ЕСЛИ(ЕПУСТО(020);"";СУММ(А40:Е40)). Эффектным является вариант демонстрации рассматриваемого фокуса с использованием элементов управления — так называемых «переключателей»: А В С D Е 1 18 10 6 6 5 2 19 11 7 7 7 3 20 12 12 10 9 16 30 30 30 30 29 17 31 31 31 31 31 18 В каких столбцах имеется задуманное число: 19 и □ 0 □ 0 20 Отгадать Ваше число? Да 21 Вы задумали число: 21
Оформление листов электронных таблиц для демонстрации фокусов 471 Методика размещения их на листе зависит от версии программы. В любом случае после размещения следует: — удалить надпись рядом с переключателем; — установить связь каждого переключателя с той или иной ячейкой. Имеется в виду, что при выборе (включении) переключателя в связанной с ним ячейке будет представлено значение ИСТИНА (когда переключатель не выбран — ЛОЖЬ). Методика установления этой связи также зависит от версии программы (используется пункт Формат элемента управления или Формат объекта). Если переключатели в ячейках А19:Е19 связать соответственно с ячейками А39:Е39, то весомости каждого из пяти двоичных разрядов в ячейках А40:Е40 вычисляются по формулам (соответственно): =ЕСЛИ(А39;16); =ЕСЛИ(В39;8); =ЕСЛИ(С39;4); =ЕСЛИ(й39;2); =ЕСЛИ(Е39;1). Задуманное число в ячейке D21 по-прежнему рассчитывается по формуле: =СУММ(А40:Е40). Примечание. Для демонстрации фокуса «Семь табличек» (см. главу 11) можно использовать 7 листов электронной таблицы.
Приложение 9 Первый урок в школе разведчиков В главе 6 упоминалась логическая функция XOR. Указывалось, что в компьютере эта операция может выполняться над числами. Еще раз приведем таблицу истинности для нее в таком случае: Первый аргумент Второй аргумент Результат 0 0 0 0 1 1 1 0 1 1 1 0 Если проанализировать таблицу, то можно обратить внимание на интересную деталь — если в качестве одного из аргументов взять значения результата, а в качестве второго — значения второго аргумента в таблице, то в итоге получим данные первого столбца. И то же самое со значением первого аргумента— на выходе получим значение второго аргумента. Следовательно, зная итог функции XOR и значение одного из аргументов, можно получить результат другого аргумента. О таком свойстве функции XOR говорят, что она — обратима. Из обратимости этой функции вытекает возможность ее использования для шифрования текста. Возьмем текст, подлежащий шифрованию, и слово, служащее паролем (ключом) для шифрования и расшифровки. Любой текст — это последовательность символов, каждый из которых в соответствии со стандартом кодирования ASCII представлен числом от 0 до 255. Последнее, в свою очередь, легко переводится в двоичную систему счисления, то есть текст может быть представлен как последовательность нулей и единиц (битов): 1010010111010111001101010111001010101110101110011010101110010111001001... То же самое можно сказать и о пароле: 110101110011010101110010 Теперь сопоставим последовательности битов шифруемого текста и пароля, повторив последний необходимое число раз. Для наглядности просто запишем их друг над другом:
Первый урок в школе разведчиков 473 1010010111010111001101010111001010101110101110011010101110010111001001... 1101011100110101011100101101011100110101011100101101011100110101011100... Далее применим функцию XOR к каждым двум битам, стоящим в обеих последовательностях на одинаковых местах: 0111001011100010010001111010010110011011110010110111110010100010010101... Все — шифрование закончено!1 Для расшифровки полученной последовательности к ней и к тому же самому паролю следует также применить функцию XOR. Составим компьютерные программы, проводящие шифрование и расшифровку текста. Основные этапы решения первой задачи: 1. Ввод текста, подлежащего шифрованию. 2. Ввод пароля. 3. Многократное повторение следующих действий: 1) выделение очередного символа шифруемого текста; 2) определение его ASCII-кода; 3) выделение очередного символа пароля; 4) определение его ASCII-кода; 5) применение к значениям, полученным в пунктах 2 и 4, функции XOR — в результате будет получен числовой код, которым будет зашифрован очередной символ исходного текста; 6) преобразование числового кода в строку символов; 7) конкатенация («сцепление») этой строки символов с последовательностью, полученной для ранее зашифрованных символов. Количество повторений равно числу символов в шифруемом тексте. 4. Вывод результата шифрования на экран. Остановимся на особенностях выполнения пункта 7 этапа 3. Так как код, полученный в пункте 5, может быть однозначным, двузначным или трехзначным числом, то перед «сцеплением» его символьного представления следует приписываемое число представить в виде трех цифр (добавить в начало числа соответствующее количество нулей). Это необходимо для того, чтобы потом, при расшифровке, можно было разбить полученную строку на трехсимвольные части, соответствующие кодам отдельных символов. Еще одна проблема связана с разной длиной шифруемого текста и пароля. С каким символом пароля нужно сопоставлять к-й символ шифруемого текста? Можно установить, что с символом, номер которого равен (к - 1) mod LenPass + 1, где LenPass—число символов в паро¬ 1 Можно также преобразовать полученную строку символов-цифр в строку символов, чтобы зашифрованный текст выглядел как бессмысленный набор букв — см. далее комментарий к программе.
474 Приложение 9 ле, a mod — операция определения остатка (самостоятельно убедитесь в правильности приведенной формулы!). На языке Паскаль программа, реализующая описанные действия, имеет вид: {Программа для шифрования текста} Uses CRT; Var Text, Pass, CodeText, SimText, SimPass, SimCodeText: string; LenText, LenPass, AscSimText, AscSimPass, XORasc, i: word; BEGIN Clrscr; Write(тВведите текст, подлежащий шифрованию '); Readln(Text); Write('Введите пароль '); Readln(Pass); LenText := Length(Text); {Длина текста} LenPass := Length(Pass); {Длина пароля} CodeText := ''; {Зашифрованный текст} For i := 1 To LenText Do Begin {Выделяем очередной символ шифруемого текста} SimText := Copy(Text, i, 1); {Определяем его ASCII-код} AscSimText := Ord(SimText[1]); {Выделяем очередной символ пароля} SimPass := Copy(Pass, (i - 1) Mod LenPass + 1, 1); {Определяем его ASCII-код} AscSimPass := Ord(SimPass[1]); {Применяем функцию XOR} XORasc := AscSimText XOR AscSimPass; {Преобразуем число XORasc в строку символов SimCodeText} Str(XORasc, SimCodeText); {При необходимости добавляем нули в начало записи числа (см. выше)} Case XORasc Of 0..9: SimCodeText := '00' + SimCodeText; 10..99: SimCodeText := 'O' + SimCodeText End; {Приписываем полученное "число" к имеющемуся зашифрованному тексту} CodeText := CodeText + SimCodeText end; {Выводим результат на экран} Writeln(CodeText) END.
Первый урок в школе разведчиков 475 Соответствующая программа на языке Бейсик: REM Программа для шифрования текста DIM Text$, Pass$, CodeText$, SimText$, SimPass$, SimCodeText$ DIM LenText, LenPass, AscSimText, AscSimPass, XORasc, i AS INTEGER CLS INPUT "Введите текст, подлежащий шифрованию ", Text$ INPUT "Введите пароль ", Pass$ LenText = LEN(Text$) 'Длина текста LenPass = LEN(Pass$) 'Длина пароля CodeText$ = "" 'Зашифрованный текст FOR i = 1 ТО LenText REM Выделяем очередной символ шифруемого текста SimText$ = MID$(Text$, i, 1) REM Определяем его ASCII-код AscSimText = ASC(SimText$) REM Выделяем очередной символ пароля SimPass$ = MID$(Pass$, ((i - 1) MOD LenPass) + 1, 1) REM Определяем его ASCII-код AscSimPass = ASC(SimPass$) REM Применяем функцию XOR XORasc = AscSimText XOR AscSimPass REM Преобразуем числовой код в строку символов REM (с удалением начальных пробелов) SimCodeText$ = LTRIM$(STR$(XORasc)) REM При необходимости добавляем REM нули в начало числа (см. выше) SELECT CASE VAL(SimCodeText$) CASE 0 TO 9 SimCodeText$ = "00" + SimCodeText$ CASE 10 TO 99 SimCodeText$ = "0" + SimCodeText$ END SELECT REM Приписываем полученное "число" REM к имеющемуся зашифрованному тексту CodeText$ = CodeText$ + SimCodeText$ NEXT i REM Выводим результат на экран PRINT CodeText$ END Приведенные программы можно усовершенствовать, например, добавив в них процедуру перевода полученной строки символов-цифр в строку символов, чтобы зашифрованный текст выглядел как бессмысленный набор букв. Теперь обсудим процедуру расшифровки. Сначала следует задать строку, которую нужно расшифровать (она представляет собой последо¬
476 Приложение 9 вательность символов-цифр, полученную в результате выполнения разобранной выше программы), а также пароль (ясно, что он должен быть тем же). Затем многократно повторяются следующие действия: 1) выделяются 3 очередные цифры расшифровываемой строки (они связаны с одним символом исходного текста); 2) эти 3 цифры преобразуются в число; 3) выделяется очередной символ пароля; 4) определяется его ASCII-код; 5) к значениям, полученным в пп. 2 и 4, применяется функция XOR — в результате будет получен числовой код, которым зашифрован очередной символ исходного текста; 6) это код преобразуется в соответствующий символ, который присоединяется к последовательности ранее расшифрованных символов. Прежде чем представлять соответствующие программы, заметим, что в них также учитываются разные длины пароля и расшифровываемого текста (см. выше). Язык Паскаль {Программа для расшифровки текста} Uses CRT; Var CodeText, Pass, Sim3CodeText, SimPass, Text, SimText: string; LenCodeText, LenPass, AscSim3CodeText, AscSimPass, XORasc, code, i : integer; BEGIN Clrscr; Writeln(’Введите текст, подлежащий расшифровке '); Readln(CodeText); Write('Введите пароль '); Readln(Pass); LenCodeText := Length(CodeText); {Длина текста} LenPass := Length(Pass); {Длина пароля} Text := {Расшифрованный текст} i : = 1 ; While i <= LenCodeText Do Begin {Выделяем 3 очередных символа зашифрованного текста} Sim3CodeText := Copy(CodeText, i, 3) ; {Преобразуем строку из трех цифр в число — ASCII-код} Val(Sim3CodeText, AscSim3CodeText, code); {Выделяем очередной символ пароля} SimPass := Copy(pass, Trunc(i/3) Mod lenpass + 1, 1) ; {Определяем его ASCII-код} AscSimPass := Ord(SimPass[1]); {Применяем функцию XOR} XORasc := AscSim3CodeText XOR AscSimPass;
Первый урок в школе разведчиков 477 {Находим соответствующий символ} SimText := Chr(XORasc); {Приписываем полученный символ к имеющемуся расшифрованному тексту (значению величины Text)} Text := Text + SimText; i := i + 3 end; {Выводим результат на экран} Writeln(Text); Readln END. Язык Бейсик REM Программа для расшифровки текста DIM CodeText$, Pass$, Text$, Sim3CodeText$, SimPass$ DIM LenCodeText, LenPass, ValSim3CodeText, AscSimPass, XORasc, i AS INTEGER CLS INPUT "Введите текст, подлежащий расшифровке ", CodeText$ INPUT "Введите пароль ", Pass$ LenCodeText = LEN(CodeText$) 'Длина текста LenPass = LEN(Pass$) 'Длина пароля Text$ = "" 'Расшифрованный текст FOR i = 1 TO LenCodeText STEP 3 REM Выделяем 3 очередные цифры REM расшифровываемой строки Sim3CodeText$ = MID$( CodeText$, i, 3) REM Преобразуем их в число ValSim3CodeText = VAL(Sim3CodeText$) REM Выделяем очередной символа пароля SimPass$ = MID$(Pass$, (INT(i/3) MOD LenPass) + 1, 1) REM Определяем его ASCII-код AscSimPass = ASC(SimPass$) REM Применяем функцию XOR XORasc = ValSim3CodeText XOR AscSimPass REM Преобразуем полученный код REM в соответствующий символ REM и присоединяем его REM к имеющемуся расшифрованному тексту REM (значению величины Text$) Text$ = Text$ + CHR$(XORasc) NEXT i REM Выводим результат на экран PRINT "Расшифрованный текст "; Text$ END
Приложение 10 Быстрое возведение в целую степень Двоичное представление числа может быть использовано для быстрого вычисления хп, где п — неотрицательное целое число. Рассмотрим суть метода расчета на примере вычисления у = х13. Так как 13 в двоичном представлении имеет вид 1101 (то есть 13 = 8+ 4 + 1), то можем записать: 13 8 + 4+ 1 8 4 1 X = Х = Х • X * X . Таким образом, х13 можно вычислить по следующей схеме: 1) рассчитать tx = х2; 2) вычислить t2 = t\ ; 3) рассчитать t3 = t\\ 4) определить у = х - t2-13. Для этого потребуется 5 умножений, что значительно меньше двенадцати, необходимых при непосредственном перемножении значений х. Обсудим программную реализацию метода. В рассмотренном примере: 8 = 23, 4 = 22, 1 = 2°. Можно также сказать, что 0, 2 и 3 — это номера разрядов двоичной записи числа 13, в которых - стоит 1. Еще один пример: у = х22. Так как 2210 = 101102, то х22 = х16 + 4 + 2 =х16 • х4 • х2. Итак, в общем случае для вычисления хп нам нужно получить произведение тех степеней числа х, показатели которых являются степенью двойки (1, 2, 4, 8, ...), но не любой, а только с показателем, равным номеру разряда с единицей в двоичной записи п (см. чуть выше). Общая схема соответствующих вычислений такая: 1. Принять в качестве начальной степени числа х значение х (то есть с показателем, равным 2 в нулевой степени) 2. Принять в качестве начального значения результата (произведения) 1
Быстрое возведение в целую степень 479 3. цикл для всех цифр двоичной записи числа п 3.1. Рассматривая цифры справа налево, определить очередную цифру если она равна 1 то учесть соответствующую степень числа х в искомом произведении все 3.2. Определить следующую степень числа х с показателем, являющимся степенью двойки конец цикла В приведенной ниже программе на школьном алгоритмическом языке использована величина, принимающая значения х, х2, х4, ..., имеет имя степень_х: алг Быстрое_возведение_в_целую_степень нач вещ х, у, степень_х, цел п вывод НС, "х=" ВВОД X вывод НС, "п=" ввод п степень_х := х (Начальная степень числа х у := 1 |Начальное значение произведения нц пока п > 0 |Для каждой цифры двоичной записи п I Выделяем последнюю цифру двоичной записи |Если она равна 1 если mod(n, 2) =1 то |учитываем соответствующую степень числа х |в произведении у := у * степень_х все |Отбрасываем последнюю цифру n := div(n, 2) |Определяем следующую степень числа х с показателем, |являющимся степенью двойки степень_х := степень_х * степень_х кц |Вывод ответа вывод нс, "у=", у кон В программе на языке Паскаль можно также крайнюю правую цифру двоичного представления числа п выделить с помощью логической операции and, а отбросить ее можно, применив сдвиговую операцию shr (см. главу 6 и приложение 6, пункт П6.1).
480 Приложение 10 Задание для самостоятельной работы учащихся Разработав аналогичную программу на языке программирования, которым вы владеете, заполните таблицу сравнения числа умножений при описанном методе вычислений значений у = хп и при обычном многократном умножении: п Метод быстрого возведения Обычный метод 2 3 30 Определите, при каком значении п снижение числа умножений в % наибольшее.
Приложение 11 Программы, моделирующие игру «ним» Сначала обсудим вариант игры, в которой участвуют два человека, а потом смоделируем игру человека и компьютера. На примере первого варианта легче разобраться с общей схемой программы и с рядом других моментов. Общая схема программы для указанного варианта игры такая: 1. Подготовка начальной ситуации на игровом поле 2. Определение начинающего игру (это будем делать случайным образом) 3. цикл пока не конец игры Вывод ситуации на игровом поле Ход очередного игрока если не конец игры то Вывод ситуации на игровом поле Ход другого игрока все конец цикла 4. Определение результатов (победителя) игры и их вывод Предметы на игровом поле (спички, монеты и т. п.) будем изображать на экране в виде символа «О». Количество рядов предметов на поле обозначим — рядов, а число предметов в каждом ряду будем хранить в массиве с именем позиция (размер этого массива равен значению переменной рядов). С использованием этих величин вывод ситуации на игровом поле можно провести так: вывод нс, "Текущая позиция" нц для i от 1 до рядов вывод нс, i, " " нц для j от 1 до позиция[i] вывод "О " кц кц
482 Приложение 11 Примем, что значение величины рядов равно 3, а начальное количество предметов в каждом ряду будем определять случайным образом из интервала 1-15: всего_осталось := О нц для i от 1 до рядов позиция[i] := 1 + int(rnd(15)) всего_осталось := всего_осталось + позиция[i] кц В приведенном фрагменте (этап 1 общей схемы программы) определяется также величина всего осталось — общее количество предметов на игровом поле. Ясно, что после каждого хода значение этой величины должно быть уточнено, а условие окончания игры: всего_осталось = О Теперь об участниках игры. Пусть имена соответствующих переменных величин — имя1 и имя2. Участника, делающего первый ход (этап 2), определим случайным образом с помощью величины очередной, принимающей значение 1 или 2: очередной := 1 + int(rnd(2)) Обсудим коротко ходы участников. Каждый из них должен указать ряд, из которого он «берет» предметы, и число предметов. Имена соответствующих переменных величин — выбран_ряд и сколько. После окончания игры имя победителя можно определить по значению величины очередной: если очередной = 1 то выиграл участник с именем имя2 иначе выиграл участник с именем имя! все Вся программа имеет вид: цел рядов рядов : = ... алг Игра_Ним нач цел таб позиция[1:рядов], лит имя1, имя2, цел очередной, всего_осталось, выбран_ряд, сколько, i, j |Ввод имен участников игры вывод нс, "Введите имя 1-го игрока " ввод имя1 вывод нс, "Введите имя 2-го игрока " ввод имя2 всего осталось := О
Программы, моделирующие игру «ним» 483 (Формирование начальной ситуации на игровом поле нц для i от 1 до рядов позиция[i] := 1 + int(rnd(15)) всего_осталось := всего_осталось + позиция[i] кц (Определение участника, начинающего игру очередной := 1 + int(rnd(2)) |Многократное повторение ходов нц пока всего_осталось > О |Выводим имя делающего очередной ход если очередной = 1 то вывод нс, "Ходит ", имя1 иначе вывод нс, "Ходит ", имя2 все |Выводим текущую ситуацию вывод нс, "Текущая позиция" ... (см. выше) |Ход очередного участника вывод нс, "Ваш ход: " вывод нс, "Из какого ряда Вы берете? " ввод выбран_ряд вывод нс, "Сколько ? " ввод сколько |Уточняем количество предметов в выбранном ряду позиция[выбран_ряд] := позиция[выбран_ряд] - сколько |и общее число оставшихся предметов всего_осталось := всего_осталось - сколько |Меняем значение величины очередной | (следующий ход будет делать другой участник) если очередной = 1 то очередной := 2 иначе очередной := 1 все |Если игра не закончилась если всего_осталось > О то I Выводим имя делающего очередной ход ... (см. выше) |Выводим текущую ситуацию ... (см. выше) I Ход очередного участника ... (см. выше) (Уточнение значений позиция[выбран_ряд] и всего осталось
484 Приложение 11 ... (см. выше) кц |Определяем победителя вывод нс, "Игра закончилась. Выиграл: " если очередной = 1 то вывод имя2 иначе вывод имя1 все вывод ". Поздравляем!" кон Заметим, что фрагменты, относящиеся к выводу имени делающего очередной ход и к изменению значения переменной очередной, можно объединить: если очередной = 1 то вывод нс, "Ходит ", имя1 очередной := 2 иначе вывод нс, "Ходит ", имя2 очередной := 1 все а фрагмент, связанный с изменением номера участника, делающего следующий ход, можно записать короче: очередной := 3 - очередной Конечно, следует проводить проверку корректности введенных участниками игры значений выбран_ряд и сколько, применив в программе оператор цикла с постусловием: нц вывод нс, "Из какого ряда Вы берете? " ввод выбран_ряд если выбран_ряд < 1 или выбран_ряд > рядов или позиция[выбран_ряд] = О то вывод нс, "Ошибочный номер ряда!" все кц при выбран_ряд > 0 и выбран_ряд <= рядов и позиция[выбран_ряд] > О НЦ вывод нс, "Сколько ? " ввод сколько если сколько < 1 или сколько > позиция[выбран_ряд]
Программы, моделирующие игру «ним» 485 то вывод нс, "Ошибочное количество!" все кц при сколько > 0 и сколько <= позиция[выбран_ряд] Целесообразно также, с целью уменьшения объема программы, повторяющийся дважды фрагмент, связанный с выводом на экран текущей ситуации, оформить в виде вспомогательной процедуры. Соответствующие изменения программы предложите учащимся провести самостоятельно. Теперь обсудим вариант игры, в которой участвуют человек и компьютер. В данном случае общую схему программы целесообразно сделать такой: 1. Подготовка начальной ситуации на игровом поле 2. Определение начинающего игру 3. если начинает человек то Вывод ситуации на игровом поле Ход человека все 4. цикл пока не конец игры Вывод ситуации на игровом поле Ход компьютера если не конец игры то Вывод ситуации на игровом поле Ход человека все конец цикла 5. Определение результатов (победителя) игры и их вывод Этапы 1-3 и 5 аналогичны соответствующим этапам первого варианта программы. Таким же является фрагмент, связанный с ходом человека на этапе 4. Так что нужно разработать только процедуру выбора хода компьютером. В главе 15 указывалось, что каждая позиция может быть опасной или безопасной. Чтобы определить — какая именно, нужно определить сумму чисел (или, что то же самое, количество единиц) в каждом столбце (разряде) двоичных записей числа предметов в каждом ряду. Например, для чисел 3, 4 и 5 указанные суммы равны 2, 1 и 2 (см. табл. 15.2). Так как среди них есть нечетная сумма, то позиция — безопасна, зная выигрышную стратегию, ее можно сделать опасной для соперника.
486 Приложение 11 Итак, для определения «опасности» позиции следует иметь информацию, как в табл. 15.2. Двоичные цифры числа предметов в каждом ряду будем хранить в двумерном массиве массив2. Число строк в нем равно значению переменной рядов, а число столбцов определяется максимальным количеством предметов в ряду. Примем, что последнее значение равно 31, то есть число столбцов массива — 5 (имя этой величины — разрядов). Следовательно, описание массива массив! следующее: цел таб массив2[1:рядов, 1:разрядов] Заполнить этот массив можно, переведя каждое количество предметов в рядах в двоичную систему и записывая отдельные цифры в массив: [Заполняем массив массив2 двоичными цифрами нц для i от 1 до рядов |Для каждого ряда: предметов_в_ряду := позиция[i] нц для j от разрядов до 1 шаг -1 |Находим двоичную цифру массив2[л_, j] := mod (предметов_в_ряду, 2) |Определяем целочисленное частное предметов_в_ряду := div(предметов_в_ряду, 2) кц кц Примечания 1.Так как при выделении двоичных цифр обрабатываемое десятичное число меняется, то вместо значения позиция[/] (которое понадобится) используется его «копия» — величина предметов_в_ряду. 2. Использование оператора цикла с параметром, меняющимся от разрядов до 1 позволяет не только получить двоичные цифры, но и начальные нули. После заполнения массив массив2 следует подсчитать количество единиц в каждом разряде. Эти значения будем хранить в одномерном массиве сумма_едияиц, число элементов которого равно размер: |Подсчет количества единиц в каждом разряде нц для j от 1 до разрядов сумма_единиц[j] : = О нц для i от 1 до рядов сумма_единиц[j] := сумма_единиц[j] + массив2[Ч, j] кц кц После этого уже можно установить, опасная ли позиция или нет. Для этого следует определить количество нечетных значений в массиве сумма_единиц\
Программы, моделирующие игру «ним» 487 всего_нечетных := 0 |Искомое значение нц для j от 1 до разрядов если mod(сумма_единиц[j], 2) =1 то всего_нечетных := всего_нечетных + 1 все кц Итак, мы узнали, что если значение величины всего_нечетных — больше нуля, то позиция безопасная. Что делать в этом случае? Сначала обсудим вариант, когда всего нечетных = 1. Примеры массива массива! для такого случая: 0 1 1 1 1 0 1 0 0 1 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 0 0 0 1 0 Для этих примеров, чтобы сделать позицию безопасной, следует «убрать» одну из единиц, оформленных курсивом. В игре это означает, что в первом случае из любого ряда нужно убрать количество предметов, соответствующих весомости четвертого справа двоичного разряда (то есть 8), во втором случае — из второго ряда убрать 4 предмета (при всего_нечетных > 1 количество убираемых предметов будет уточнено). В общем случае для таких вариантов следует, что нужно: 1) найти первый слева столбец, для которого сумма значений — нечетная; 2) для этого столбца найти строку, в которой записана единица. В программе это можно сделать следующим образом: |Ищем первый слева столбец с нечетной суммой столбец := 1 нц пока mod(сумма_единиц[столбец], 2) =0 столбец := столбец + 1 кц |В нем ищем строку с единицей строка := 1 нц пока массив2[строка, столбец] = 0 строка := строка + 1 кц Если же число всего нечетных > 1, то задача несколько усложняется. Рассмотрим два примера:
488 Приложение 11 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 Чтобы сделать позицию опасной для соперника, в них недостаточно «убрать» единицу, оформленную курсивом. Нужно также: 1) в первом примере в третьем ряду заменить крайний ноль на единицу: 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 2) во втором примере в третьем ряду заменить единицу во втором справа разряде на ноль: 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 Обратим внимание на то, что в первом примере именно в крайнем справа, а во втором примере — именно во втором справа разряде сумма единиц нечетна. Так мы пришли к общему правилу изменения двоичных цифр в массиве массив2 для преобразования безопасной позиции в опасную. Для этого необходимо: 1) найти первый слева столбец, для которого сумма значений — нечетная; 2) для этого столбца найти строку, в которой записана единица; 3) в соответствующем элементе массива заменить 1 на 0; 4) рассмотреть оставшиеся правые разряды найденной строки и для всех столбцов, для которых сумма значений в массиве сумма_единиц — нечетная: — если в соответствующем элементе массива записан 0, то заменить его на 1 и наоборот. Пункты 3 и 4 оформляются в программе так: |Пункт 3 массив2[строка, столбец] := 0 |Пункт 4 нц для j от столбец + 1 до разрядов если mod(сумма_единиц[j],2) = 1 то если массив2[строка, j]= 1
Программы, моделирующие игру «ним» 489 то массив2[строка, j]:=0 иначе массив2[строка, j]:=1 все все кц Анализ показывает, что последний фрагмент может быть применен и в случае, когда значение величины всего нечетных (см. выше) равно 0, то есть этот случай рассматривать в программе отдельно необходимости нет. Итак, мы определили, какие изменения нужно провести в массиве массив2 для преобразования безопасной позиции в опасную. А сколько предметов нужно убрать в игре из найденного ряда (его номер — строка)? Ответить на этот вопрос можно так: 1) определить, сколько предметов было в данном ряду до внесения изменений по пп. 3 и 4. Напомним, что значение хранится в массиве позиция в элементе с индексом строка; 2) подсчитать количество предметов в данном ряду после внесения изменений (это можно сделать, просуммировав весомости разрядов с единицей — см. приложение 1): стало_предметов := О нц для j от 1 до разрядов если массив2[строка, j] = 1 то стало_предметов := стало_предметов + весомость_разрядов[j] все кц где весомость_разрядов — массив с весомостями; 3) разность значений позиция[строка] и стало_предметов дает количество предметов, которое «берет» компьютер из ряда с номером строка: сколько := позиция[строка] - стало_предметов А как должен «поступить» компьютер, если при его ходе позиция — опасная? Ведь любым своим ходом он превращает ее в безопасную! Прежде чем принимать решение, заметим, что в этой ситуации предметы не могут остаться только в одном ряду (убедитесь в этом самостоятельно). Примем, что в этом случае компьютер делает ход «наугад» — в ка- ком-либо ряду берет один предмет: сколько : = 1 если позиция[1] > 0 и позиция[2] > 0 и позиция[3] > О
490 Приложение 11 то |Из 1-го, 2-го или 3-го ряда строка : = 1 + int(rnd(3)) иначе если позиция[1] > 0 и позиция[2] > О то |Из 1-го или 2-го ряда строка : = 1 + int(rnd(2)) все если позиция[2] > 0 и позиция[3] > О то |Из 2-го или 3-го ряда строка : = 2 + int(rnd(2)) все если позиция[1] > 0 и позиция[3] > О то |Из 1-го ряда (допустим) строка : = 1 все В любом случае после хода компьютера нужно уточнить количество предметов в выбранном ряду: позиция[строка] := позиция[строка] - сколько и общее число оставшихся в игре предметов: всего_осталось := всего_осталось - сколько Итак, фрагмент программы, связанный с выбором хода компьютером, в общем виде: |Заполняем массив массив2 ... (см. выше) |Подсчитываем количества единиц |в каждом разряде ... (см. выше) |Определяем количество нечетных значений |в массиве сумма_единиц: всего_нечетных := О ... (см. выше) |Оцениваем позицию если всего_нечетных = О то |Позиция опасная |Компьютер берет один предмет |в каком-либо ряду ... (см. выше) иначе |Позиция безопасная [Компьютер делает ее опасной |Ищем соответствующие столбец и строку ... (см. выше) |Меняем состояние строки в массиве массив2
Программы, моделирующие игру «ним» 491 массив2[строка, столбец] := О нц для j от столбец + 1 до разрядов если mod(сумма_единиц[j], 2) = 1 то если массив2[строка, j]= 1 то массив2[строка, j] := О иначе массив2[строка, j] := 1 все все кц [Подсчитываем оставшееся количество предметов |в данном ряду стало_предметов:=0 ... (см. выше) [Определяем количество предметов, |которое берет компьютер сколько := позиция[строка] - стало_предметов все |Выводим сообщение о выборе компьютера вывод нс, "Компьютер взял из ", строка, "-й строки " вывод сколько, " предметов " |Уточняем значения позиция[строка] и всего_осталось позиция[строка] := позиция[строка] - сколько всего_осталось := всего_осталось - сколько Для всей программы, моделирующей игру человека и компьютера, приведем ее начало и завершающую часть: цел рядов, разрядов рядов := ... разрядов := ... алг Игра_Ним нач цел таб позиция[1:рядов], цел очередной, всего_осталось цел выбран_ряд, сколько, предметов_в_ряду, i, j цел таб массив2[1:рядов, 1:разрядов] цел таб сумма_единиц[1:разрядов], цел всего_нечетных цел столбец, строка, стало_предметов цел таб весомость_разрядов[1:разрядов] |Заполняем массив весомостей, |начиная с младших разрядов весомость_разрядов[разрядов] := 1 нц для i от разрядов - 1 до 1 шаг -1 весомость_разрядов[i] := весомость_разрядов[i +1] * 2 кц
492 Приложение 11 |Формируем начальную ситуацию на игровом поле всего_осталось := О нц для i от 1 до рядов позиция[i] := 1 + int(rnd(15)) всего_осталось := всего_осталось + позиция[i] кц |Определяем начинающего игру очередной := 1 + int(rnd(2)) |Примем, что при очередной = 1 |игру начинает человек |Определяем победителя игры вывод нс, "Игра закончилась. " если очередной = 2 то вывод "Вы выиграли! Поздравляем!" иначе вывод "Увы, выиграл компьютер" все кон Конечно, последний вариант программы совершенно несправедливый — в нем всегда (за исключением случая, когда начальная позиция безопасная, а начинающий игру человек знает выигрышную стратегию и реализует ее, используя расчеты на бумаге) будет выигрывать компьютер. Вот она — сила искусственного интеллекта! ©
Приложение 12 Программы, моделирующие решение головоломки «Ханойские башни» Разработаем программу, в которой на экран выводятся только последовательность номеров перекладываемых дисков. В главе 16 было показано, что такую последовательность можно получить на основе таблиц на рис. 16.4, 16.5 и подобных. Первый вариант нашей программы и будет основан на этом методе. Сначала научимся определять номер разряда, в котором в двоичной записи того или иного числа появляется «новая» цифра 1 при увеличении номера хода на 1 (см. только что указанные таблицы). Для хранения двоичных цифр очередного числа (номера очередного перекладывания) в программе используем массив с именем мас_нов. Размер этого массива зависит от количества дисков. Как? Составим таблицу: Число дисков п 2 3 4 Число перекладываний 3 7 15 Номера перекладываний 1-3 1-7 1-15 Число двоичных разрядов для хранения максимального номера 2 3 4 Из нее следует, что размера массива равен общему количеству дисков п. Аналогичный массив потребуется и для хранения двоичных цифр предыдущего числа. Его имя в программе —мас_ст (а имя числа — cm). Если номер очередного числа обозначить нов, то фрагмент, относящий к заполнению указанных массивов, может быть оформлен так: нов := ... ст := нов - 1 нц для i от 1 до п I Выделяем последнюю двоичную цифру, |и записываем их массивы (в их начало!) мае нов[i] := mod(нов, 2) мас_ст[:1] := mod(CT, 2) I Определяем целочисленное частное
494 Приложение 12 нов := div(HOB, 2) ст := div(cT, 2) кц После заполнения массивов искомый номер разряда может быть найден с применением оператора цикла с условием: i := 1 |С начала массива, но с конца двоичной записи нц пока мае нов [i] = 0 и мас_ст[л_] = 1 i := i + 1 кц I Значение i - искомое Обращаем внимание на условие, использованное в операторе. Теперь — об «основной» программе. В ней надо найти и вывести на экран соответствующие номера разрядов для каждого номера перекладывания: цел п п : = ... алг Решение_головоломки_Ханойские_башни |Вывод номеров перекладываемых дисков нач цел нов, ст, нов2, i, цел таб мас_нов[1:п], мас_ст[1:п] вывод нс, "Последовательность перекладываний дисков:" |Для каждого номера перекладывания нц для нов от 1 до 2 ** п - 1 ст := нов - 1 нов2 := нов |Копия значения величины нов I Заполняем массивы мас_нов и мас_ст нц ... (см. выше) кц |Ищем номер разряда i := 1 ... (см. выше) |Выводим его вывод i, " " кц кон Примечание. Так как значение величины нов в теле оператора цикла меняется, а она является параметром цикла, менять который нельзя [8] то в программе используется «копия» это величины (нов2). Размер программы существенно сокращается, если для определения номера разряда, в котором в двоичной записи того или иного числа появляется «новая» цифра 1, применить логические и сдвиговые операции
Программы, моделирующие решение головоломки «Ханойские башни» 495 (см. главу 6). С их использованием фрагмент, относящийся к нахождению искомого номера разряда для некоторого числа нов, может быть оформлен следующим образом: ст := нов - 1 i := 1; |Нумерация разрядов справа нк пока ст И 1 = 1 и нов И 1 = О I Отбрасываем последнюю двоичную цифру нов := нов СдвигВправоНа 1 ст := ст СдвигВправоНа 1 i : = i + 1; кц |Значение i - искомое где И — логическая операция, СдвигВправоНа — сдвиговая операция, а вся программа, моделирующая перекладывание дисков имеет вид: п : = ... алг Решение_головоломки_Ханойские_башни |Вывод номеров перекладываемых дисков нач цел нов, ст, нов2, i вывод нс, "Последовательность перекладываний дисков:" нц для нов от 1 до 2 ** п - 1 ст := нов - 1 нов2 := нов |Копия значения величины нов i := 1; |Нумерация разрядов справа нк пока ст И 1 = 1 и нов И 1 = О нов2 := нов2 СдвигВправоНа 1 ст := ст СдвигВправоНа 1 i := i + 1; кц |Выводим номер найденного разряда вывод i, " " кц кон И, наконец, самый компактный (и понятный) вариант программы дает прием, называемый «рекурсией» [8]. Напомним, что в программировании рекурсией называют прием, когда какая-то задача сводится к такой же задаче, но с другими исходными данными (в нашем случае — с другим количеством дисков). Учитывая рассуждения в начале главы 16, связанные с перекладыванием (п + 1) дисков, можем так оформить общую схему алгоритма решения задачи при п дисках: алг Перемещение_дисков(л дисков) нач если л = 1
496 Приложение 12 то Переносим единственный (самый маленький) диск иначе |Используем этот же алгоритм (ркурсию), • |но с л - 1 верхними дисками Перемещение_дисков((п - 1) дисков) Переносим самый большой диск |Еще раз используем этот же алгоритм |с л - 1 верхними дисками Перемещение_дисков((л - 1) дисков) все кон На школьном алгоритмическом языке соответствующая рекурсивная процедура (использующая рекурсию) выглядит так: алг Перемещение (арг цел п) I Вывод номеров перекладываемых дисков нач если n = 1 то вывод п, " " |Вывод номера 1 иначе |Рекурсивный вызов этой же процедуры Перемещение(п - 1) |Вывод номера самого большого диска вывод п, " " |Рекурсивный вызов этой же процедуры Перемещение(п - 1) все кон Основная часть программы при этом такая: алг Головоломка_Ханойские_башни нач цел п п : = ... вывод нс, "Последовательность перекладываний дисков:" Перемещение(п) кон Эффектно, не правда ли? Жаль только, что рекурсия в данном случае не связана с двоичной системой счисления ©.
Приложение 13 Двоичная система... в древности © ► П13.1. Двоичная система у древних египтян Оказывается, двоичную систему применяли (конечно, сами того не понимая) древние египтяне. Для умножения двух натуральных чисел они использовали методику, в которой для вычислений достаточно было уметь складывать, вычитать и умножать на 2. Делалось это так. В двух колонках записывались два числа: 1 и один из сомножителей. Затем в каждой следующей строке под ними записывались числа, в 2 раза большие. Так продолжалось до тех пор, когда в первой колонке получалось число, большее второго множителя. ♦ Пример для нахождения произведения 17 на 21: 1 21 2 42 4 84 8 168 16 336 32 Результат в данном случае получался сложением чисел в правой колонке, которым в левой соответствуют числа 16 и 1: 336 + 21 = 357 (проверьте, на калькуляторе, что 17 • 21 = 357). Почему? Ответ такой. 1. Значения в правой колонке можем записать так: 21 21-1 21-2° 42 21-2 21 • 21 84 или 21-4 или 21 • 22 168 21•8 21-23 336 21-16 21 • 24 2. Переведем число 17 в двоичную систему методом выделения максимальных степеней двойки (см. приложение 2). 21 = 16 + 1, то есть 17ю = = 100012. Теперь умножим 17 на 21, но записав число 17 в развернутой форме:
498 Приложение 13 17 - 21 = (1 -24 + 0-23 + 0-22+ 0-2‘+1 • 2°) • 21 ИЛИ 17-21 =(24 + 2°) • 21 =21 • 24 + 21 -2°. 3. Учитывая последнее равенство, для нахождения произведения 17 на 21 во второй колонке «основной» таблицы необходимо сложить числа в строках, соответствующих числам 16 и 1, что мы и сделали при вычислениях ранее. Похожий метод умножения использовали русские крестьяне (поэтому его называют «крестьянским»). Проиллюстрируем этот метод на примере нахождения произведения 13 на 18. Нарисуем таблицу, в первой колонке которой запишем число 13, а во второй — 18 (см. ниже). Далее каждое следующее число в первой колонке получаем из предыдущего делением нацело на 2, а во второй колонке — умножением предыдущего на 2: 13 18 6 36 3 72 1 144 После того как в первой колонке получим 1, деление и умножение прекратим. Далее найдем в первой колонке четные числа и вычеркнем строки с ними: 13 18 6 36 3 72 1 144 Искомое произведение равно сумме оставшихся во втором столбце чисел: 18 + 72 + 144 = 234 (проверьте!).
Двоичная система... в древности 499 Задания для самостоятельной работы учащихся ► 1. Как можно это объяснить результат, получаемый при «крестьянском» методе умножения? ► 2. Покажите, что результат, получаемый при «древнеегипетском» и при «крестьянском» методах умножения не зависит от порядка множителей. ► 3. Разработайте алгоритм умножения натуральных чисел, который основывался бы на троичной системе счисления (при этом использовались бы следующие операции: деление на 3 с остатком, умножение на 3 и сложение). Ответ к заданию 3 Суть алгоритма проиллюстрируем этот метод на примере нахождения произведения 17 на 21. Нарисуем таблицу, в первой колонке которой запишем число 17, а в третьей — 21 (вторая и четвертая колонки пока пустые). 17 21 Далее делим нацело число 17 на 3, целочисленное частное записываем во вторую строку, остаток от деления — в первую колонку второй строки: 17 2 21 5 В третью колонку второй строки записываем число, в 3 раза большее числа в такой же колонке первой строки: 17 2 21 5 63 После этого действия повторяются (делим нацело 5 на 3 и т. д.): 17 2 21 5 2 63 1 189 — в первой колонке получилось число, меньше 3, поэтому все дальнейшие расчеты прекращаются (а это число запишем во вторую колонку): 17 2 21 5 2 63 1 1 189 Результат получается так. В четвертую колонку записывается сумма к чисел в третьей колонке, где к — число во второй колонке: 17 2 21 42 5 2 63 126 1 1 189 189
500 Приложение 13 а все искомое произведение равно сумме значений в четвертой колонке (357). Приведем также формальное объяснение для рассмотренного случая: 17,о= 1223; 17-21 =(1 -32 + 2 -3' + 2 -3°) • 21 = = 1 • З2 • 21 +2 • 3-21 +2 • 1 -21 = 189+ 126 + 42 = 357. ► П13.2. Двоичная система в XVII веке В литературе и Интернете имеется информация о так называемых «палочках Непера» — счетном приборе XVII века, позволявшем быстро получать произведение многозначного числа на однозначное. Его автор, шотландский барон Джон Непер, изобрел также счетную доску для умножения многозначных чисел [3]. В основе ее работы лежала... двоичная система счисления! Для записи чисел в двоичной системе Непер воспользовался следующим приемом. Каждую степень числа 2 он обозначил отдельной буквой: а - 2° = 1, b = 21 = 2, с = 22 = 4 и т. д. Из этих букв-чисел и формируется любое десятичное число, причем неперовская форма записи такого числа аЪс...п означала а + 6 + с + ... + п. Например, число 45 имело вид acdf1 (1 + 4 + 8 + 32). Для перевода чисел из десятичной системы и обратно Непер разработал несложные алгоритмы, идея которых наверняка знакома читателям (см. таблицу ниже). / 1024 1611 / к 512 587 к i 256 h 128 g 64 75 g f 32 e 16 d 8 11 d с 4 b 2 3 b a 1 1 a 1 Может возникнуть вопрос — а причем здесь двоичная система? Ответ такой. Если буквами а, Ь, с и т. д. обозначить единицы в соответствующих разрядах двоичной записи чисел и записывать буквы в порядке убывания их значений, то мы получим своеобразную двоичную форму записи. Например, для числа 45 такая запись имеет вид fdca, что является аналогом привычной нам записи чисел в двоичной системе счисления — 101101 (нулями представлены «отсутствующие» буквы).
Двоичная система... в древности 501 Пусть, например, нужно перевести в неперовскую форму число 1611. Во втором столбце таблицы находится максимальное число, не превышающее заданное, — 1024. Рядом с ним записывается исходное число. Затем находится разность этих двух чисел (587), которая также записывается рядом с максимальной степенью двойки, не превышающей эту разность. Далее процесс продолжается до тех пор, пока соответствующая разность не станет равна нулю. Буквы первого столбца в тех строках таблицы, в которых есть числа в третьем столбце, и составят искомое число (в нашем случае — abdgkl). Читателям описанный алгоритм, конечно же, напомнил метод перевода десятичных чисел в двоичную систему счисления путем выделения максимальных степеней двойки (см. приложение 1). Сами вычисления производятся с помощью доски, эскиз которой представлен на рис. ПИЛ. Она содержит 576 клеток (24 х 24), причем
502 Приложение 13 каждая клетка представляет собой число 2, возведенное в некоторую степень. На рисунке даны значения крайних рядов (нижнего и верхнего горизонтальных и правого и левого вертикальных). Они обозначены буквами сначала латинского, и затем греческого алфавита в порядке возрастания степеней числа 2 (а = 2°, Ъ = 2, ..., а = 224, /? = 2Ь, ..., у/ = 246). Значения остальных клеток зависят от того, на какой диагонали, соединяющей одинаковые буквы, они находятся. Всем клеткам, лежащим на одной диагонали, приписывается одна и та же числовая величина — такая же, как и у букв, которые они соединяют. Легко убедиться, что на пересечениях строк и столбцов находятся клетки, представляющие произведение чисел числа, которые приписаны крайним клеткам этих рядов. Например, произведение 4 на 8 (с на d) находится в клетке на пересечении рядов с и d и на диагонали, соединяющей буквы/(32). Итак, каждой клетке приписано число, являющееся произведением двух указанных на доске чисел. Если нужно умножить одно многозначное число на другое, то надо найти произведение каждой буквы на каждую и перевести полученное сочетание букв в десятичное число. Пример умножения 165 -58 (acfli • bdef) показан на рис. П13.2 (для удобства чтения некоторые диагонали отмечены точками). о п . т . 1 . . к . . i . . . h . . . 9 . . . . f . . • . е <— . . . . . d <_ . . • . . с . . . . . . b 4- о п т / к / h £ / е d С ъ а Т т т 1 Рис. П13.2
Двоичная система... в древности 503 Стрелками на рис. П13.2 показаны буквы каждого множителя. Клетки, соответствующие произведению каждой буквы на каждую, оттенены. Если найти значения на диагоналях с оттененными клетками и упорядочить их, то можно получить произведение bddejfgghiikllmn. Его можно упростить («укоротить»), учитывая, что две одинаковые буквы можно заменить на следующую по алфавиту букву (например, ff= 2Ъ + 25 = 26 = g). В конечном счете получим bfgilo (проверьте!) и, просуммировав значения этих букв, найдем десятичное число — искомое произведение, равное 9570. Еще более громоздкие операции надо было провести, чтобы с помощью счетной доски Непера выполнить деление или извлечение корня (хотя это было возможно!). Скорее всего, никто никогда доской Непера в практических целях не пользовался. Однако это вычислительное средство интересно для нас в другом отношении. «Джон Непер был первым человеком, который еще в 1617 г., более чем за триста лет до изобретения современных средств инструментальных вычислений, понял и оценил чисто арифметические достоинства двоичной системы счисления» [3]. Вдумайтесь, пожалуйста, в эти слова...
nJSSHn nj-ssun nj'SSHfl nj'SSUII nj'SSHII URSS.ru IIRSS.ru URSS.ru URSS.ru Представляем Вам следующие книги: Серия «НАУКУ — ВСЕМ! Шедевры научно-популярной литературы» sКолмогоров А. Н. Математика — наука и профессия. ✓ Гашков С. Б. Занимательная компьютерная арифметика: Математика и искусство счета на компьютерах и без них. s Гашков С. Б. Занимательная компьютерная арифметика: Быстрые алгоритмы операций с числами и многочленами. sЖуков А. В. Элегантная математика: Задачи и решения. sЖуков А. В. Прометеева искра: Античные истоки искусства математики. s Гнеденко Б. В. Беседы о теории массового обслуживания. s Гнеденко Б. В. Беседы о математической статистике. ■/ Гнеденко Б. ВХитин А. Я. Элементарное введение в теорию вероятностей. ^Мизес Р. Вероятность и статистика. угМеннхен Ф. Некоторые тайны артистов-вычислителей. ✓ Вильямс Дж. Д. Совершенный стратег, или Букварь по теории стратегических игр. sЮдин Д. БЮдин А. Д. Математики измеряют сложность. s Нагель Э., Ньюмен Дж. Р. Теорема Гёделя. sВольберг О. А. Основные идеи проективной геометрии. sЩербаков Р. Пичурин Л. Ф. От проективной геометрии — к неевклидовой. s Щербаков Р. Н., Пичурин Л. Ф. Дифференциалы помогают геометрии. /Стинрод Н., Чинн У. Первые понятия топологии. sКолягин Ю. М., Саркисян А. А. Познакомьтесь с топологией: На подступах к топологии. s Широков П. А. Краткий очерк основ геометрии Лобачевского. s Чирков Ю. Г. Рассказы о фотосинтезе. s Извольский Н.А. Основной курс проективной геометрии. ^Moscow Journal of Combinatorics and Number Theory. (One volume of four issues is published annually.) sБоровков А. А. Теория вероятностей. sКрэндалл P., Померане К. Простые числа: Вычислительные и криптографические аспекты. ✓Секованов В. С. Элементы теории фрактальных множеств. sАлександрова Н. В. Из истории векторного исчисления. s Горобец Б. С. Теория вероятностей, математическая статистика и элементы случайных процессов: Упрощенный курс. ✓ Пухначев Ю. ВПопов Ю. П. Математика без формул. В 2 кн. s Овсянников Г. Н. Факторный анализ в доступном изложении: Изучение многопараметрических систем и процессов. s Супрун В. П. Математика для старшеклассников: Задачи повышенной сложности. s Супрун В. П. Математика для старшеклассников: Нестандартные методы решения задач. s Супрун В. П. Математика для старшеклассников: Методы решения и доказательства неравенств. 367 задач с подробными решениями. sМордухай-Болтовской Д. Д. Геометрия радиолярий. s Золотаревская Д. И. Теория вероятностей. Задачи с решениями. s Федин С. Н Математики тоже шутят. URSS.ru URSS.ru URSS.ru URSS.ru URSS URSS.ru URSS.ru URSS.ru URSS.ru URSS.ru
Н. Г.Тактаров • Справочник по высшей математике для студентов вузов «Лекции по математике» В. Босса СПРАВОЧНИК Настоящий справочник содержит все главные разделы высшей математики - от математического анализа и алгебры до математической логики и дифференциальной геометрии, включая аналитическую геометрию, теорию функций комплексной переменной, теорию дифференциальных уравнений, вариационное исчисление, векторный и тензорный анализ, теорию вероятностей, математическую статистику, теорию множеств и численные методы. Наряду с теоретическим материалом в справочник включено более 500 примеров с подробными решениями. Способ изложения материала в сочетании с объемом содержащейся информации дает отличную возможность применять справочник в современных учебных программах и в то же время ставит данную книгу в один ряд с лучшими классическими справочниками по высшей математике. Доступное изложение материала позволяет использовать справочник и для самостоятельного изучения математики. В условиях информационного наводнения инструменты вчерашнего дня перестают работать. Поэтому учить надо как-то иначе. «Лекции» дают пример. Плохой ли, хороший — покажет время. Но в любом случае это продукт нового поколения. Те же «колеса», тот же «руль», та же математическая суть — но по-другому. В. Босс Теория множеств: От Кантора до Козна Из отзывов читателей: Чтобы усвоить предмет, надо освободить его от деталей, обнажить центральные конструкции. Это тяжелая работа, которая в «Лекциях» проделывается автором. Дается то, чего недостает. Общая картина, мотивация, взаимосвязи. И самое главное - легкость вхождения в любую тему. Содержание продумано и хорошо увязано. Громоздкие доказательства ужаты до нескольких строчек. Виртуозное владение языком. В «Лекциях по математике» В. Босса вышли тома: 1. Анализ. 2. Дифференциальные уравнения. 3. Линейная алгебра. 4. Вероятность, информация, статистика. 5. Функциональный анализ. 6. Алгоритмы, логика, вычислимость. От Диофанта до Тьюринга и Гёделя. 7. Оптимизация. 8. Теория групп. 9.ТФКП. 10. Перебор и эффективные алгоритмы. И. Уравнения математической физики. 12. Контрпримеры и парадоксы. 13. Топология. 14. Теория чисел. 15. Нелинейные операторы и неподвижные точки. 16. Теория множеств: От Кантора до Коэна.
Издательская группа / / / / / / /’ / /, представляв / у /у / / /////////////* М. Е. Перельман Наблюдения и озарения, - ИЛИ Как физики выявляют законы природы Все мы знакомы с открытиями, ставшими заметными вехами на пути понимания человеком законов окружающего мира: начиная с догадки Архимеда о величине силы, действующей на погруженное в жидкость тело, и заканчивая новейшими теориями скрытых размерностей пространства-времени. Но К был и сделаны эти открытия? Почему именно в свое время? Jj именно теми, кого мы сейчас считаем первооткрывателями? И что делать тому, кто хочет не только понять, как & устроено все вокруг, но иуЗНЭТЬ, каким путем человечество пришло к современной картине мира? Книга, которую вы держите в руках, поможет прикоснуться к тайне Гениальных ПрОЗрвНИЙ. Рассказы «Наблюдения и озарения, или Как физики выявляют законы природы» написаны человеком неравнодушным, любящим и знающим физику, искренне восхищающимся ее красотой. Поэтому книга не просто захватывает - она позволяет почувствовать себя посвященными в великую тайну. Вместе с автором вы будете восхищаться красотой мироздания и удивляться неожиданным озарениям, которые помогли эту красоту раскрыть. Первая часть книги, «От Аристотеля до Николы Теслы», расскажет о пути развития науки, начиная с утверждения Аристотеля «Природа не терпит пустоты» и эпициклов Птолемея, и до гелиоцентрической системы Коперника и Галилея и великих уравнений Максвелла. Читатель проделает этот огромный путь рука об руку с гениями, жившими задолго до нас. «От кванта до темной материи» - вторая часть книги. Она рассказывает о вещах, которые мы не можем увидеть, не можем понять с точки зрения обыденной, бытовой логики: о принципе относительности, замедлении времени, квантовании энергии, принципе неопределенности, черных дырах и темной материи. История загадочной, сложной и увлекательной современной физики раскроется перед читателем. Итак, вперед — совершать открытия вмес а
Издательская группа URSS \ ‘ /■ / / / 777////////ШШШж & представлявту//ШШ Г / / / / ////////////////Шяя. М. Ю. Пантаев Матанализ с человеческим лицом (в 2 книгах) ш*тмтшшшт*т — — Kniff СКАЯЛЛ, что о матем атике тамудноъ нужно писать CKijHi В настоящей книге сделана, попытка изложить курс математического лнллиул, как состлбную часть обиценелобенеской культуры, Абтор пишет об интеграле и крои^одной не сухо и строга, но так, чтобы хоть немного приблизить математику К читателю; пусть и добольно далекому от нее* Читатель получит б dot распоряжение, не только справочник, uj которого можно «быдергибать» формулы для быполнения расчетных работ, но и книгу для чтения, способную помочь ему почубстбобать, с какой ПОраЗИТеЛЬНО КраСИВОИ НЭуКОЙ он столкнулся. М. Ю. Пантаев МАТАНАЛИЗ£ с человеческим лицом, перехода у\ача1\°а"а ,нос<* £&** 43533» № V^et^ew«b* CV-- V ^ и*##1* М ******* $2- f Полный курс математического яняли^я\
Кто он, РЕДАКТОР — АРХИТЕКТОР Тот, кто совершает путь «От замысла — к книге»: ► опыт редактирования книг; ► знания по всем разделам своей специальности, позволяющие свободно ориентироваться в различных областях этой науки; ► внутренняя потребность в непрестанном освоении новых тем; неуемная тяга к знаниям; ► умение видеть проблемы, связанные с особенностями перевода, и грамотно справляться с ними; ► желание активно делиться своими знаниями и идеями с коллегами, открытость к конструктивной критике; ► умение работать в системе LaTeX. Приветствуются: ► Осмысляет, наглядно представляет, оформляет результаты авторского научного труда. ► Обсуждает и определяет вместе с автором окончательную информационно-дидактическую структуру произведения. ► Транслирует вйдение автора издательскому коллективу и воплощает его в книге. Рассматриваем кандидатуры без опыта работы
Издательская группа URSS Сохранять, развивать и приумножать научное наследие Предлагаем Вам реализовать свои знания и творческий потенциал у нас, в научном издательстве URSS, в качестве 0 ПР (И3 УА 0еР‘ <*Р С*1 Мы уверены, что Вы сможете стать специалистом высокого класса или управленцем, что у нас Вы найдете свой Путь. Л** *0»
Сохранять, развивать и приумножать научное наследие ПРОФЕССИЯ КАК ДЕЛО ЖИЗНИ Наши мечты схожи? Мы с Вами на одной волне? Наука вошла в Вашу жизнь и Вы не хотите с ней расставаться? Нефть, газ, лес — не единственное наше достояние! Нам всего лишь повезло родиться в стране с богатейшей природой. Но Россия не есть только источник природных ресурсов. Нет! Она — кладезь человеческого капитала — капитала, который должен неустанно давать цивилизации всё новые научно-культурные богатства. Надо принять вызов — добиться, чтобы нашу страну ассоциировали в первую очередь с созданием высококачественных интеллектуальных ценностей. МЫ МОЖЕМ И ДОЛЖНЫ ЗАРАБАТЫВАТЬ ИНТЕЛЛЕКТОМ! Научно-издательское дело — неотъемлемая часть института науки. Предлагаем Вам реализовать свои знания и творческий потенциал у нас, в научном издательстве URSS • • •
Ведь это: Достойно ► Общение с ведущими учеными, деятелями науки и культуры. ► Работа с интеллектуальным богатством. ► Духовное и научно-культурное обогащение. ► Продвижение знаний. ► Утверждение интеллектуальных и культурных ценностей. Донесем интеллектуальный и духовный капитал страны до всех, живущих в русскоязычном пространстве, и до мирового сообщества! Перспективна^яшмам ► Раскрыть свой потенциал. ► Быть уверенным, что Ваше время вкладывается со смыслом. ► Понимать, что выбранный путь обеспечивает Вам рост благосостояния и экономическую устойчивость. ► Ощущать, что Ваша работа зажигает оптимизмом и укрепляет жизненные силы. Научно-издательская деятельность — это правильный выбор для тех, кто хочет оставаться в научной среде! Осуществимо Если Вы: ► целеустремленный и активный, ► работоспособный и креативный, ► заинтересованы в личностном росте, ► стремитесь усваивать новые знания и умения, ► готовы делиться Вашими опытом и навыками, ► хотите влиться в коллектив профессиональных и эффективных, честных и надежных людей, и усилить его Вашей индивидуальностью — это тот достаточный багаж, с которым мы с радостью примем Вас в наш коллектив. Присоединяйтесь к проекту URSS! Поможем, поддержим, научим!
любите кни! хотите быть причастными к их созданш хотите содействовать развитию отечественной науки переверните страницу |