Текст
                    Я.К.ТРОХИМЕНКО
ИГРЫ
с МИКРО-
ЭВМ

Я.К.ТРОХИМЕНКО ИГРЫ с МИКРО- ЭВМ Киев «Техшка» 1986
32.97 Т76 УДК 621.322:621.382.049.77 Трохименко Я. К. Т76 Игры с микро-ЭВМ.— К.: Техтка, 1986.— 120 с., ил.— Библиогр.: с. 119. 55 к. 35 000 экз. Как связаны игры с кибернетикой и проблемой искусственного интеллекта? Как использовать микро-ЭВМ в качестве партнера или судьи в игре? Ответы на эти вопросы содержатся в данной научно- популярной книге, где рассматривается составле- ние алгоритмов разнообразных занимательных игр и описывается 60 игровых программ для наибо- лее массовых универсальных микро-ЭВМ — про- граммируемых микрокалькуляторов. Предназна- чена для широкого круга читателей. _ 2405000000-166 Т М202(04)^6---- 54 86 32.97 Рецензенты канд. физ.-мат. наук Г. В. Поддубный, Ю. М. Польский Редакция литературы по энергетике, электронике, кибернетике и связи Зав. редакцией 3. В. Божко (g) Издательство «Техшка», 1986
ПРЕДИСЛОВИЕ Развитие вычислительной техники в настоящее время характеризуется качественно новым этапом, связанным с массовым внедрением универсальных микро-ЭВМ (персональных ЭВМ и программируемых микрокалькуляторов), отличающихся малой стоимостью машинного времени, простотой эксплуатации и доступностью широкому кругу пользователей. Это создает предпосылки для существенного повышения производительности труда практически во всех отраслях народного хозяйства, и поэтому массовое освоение методики решения различных задач с помощью ЭВМ становится столь же необходимым, как в прошлом борьба с безграмотностью. Методике решения вычислительных задач с помощью универсальных ЭВМ, в основном применимой и для персональных микро-ЭВМ, посвящена обширная литература, а в последние годы издано достаточно много книг (например, работы [8, 9, 11, 12]) по вычислениям на программируемых микрокалькуляторах. Значительно меньше внимания уделено в литературе решению с помощью ЭВМ логических задач, связанных с определением требуемых связей (структуры) между элементами заданных систем. Навыки в решении подобных задач проще всего (в особенности для пользователей, работа которых не связана с вычислениями) приобрести на примерах решения занимательных игровых задач. Кстати, быстрый рост производства домашних ЭВМ во всем мире в основном обусловлен их применением для различных игр. В отечественной литературе эта тема затронута лишь применительно к программируемым микрокалькуляторам в книге [7] и, частично, в книге [10], где приведен ряд игровых программ для первого отечественного программируемого микрокалькулятора «Электроника БЗ-21». В настоящей книге рассмотрена методика составления алгоритмов разнообразных занимательных логических и игровых программ для программирования универсальных микро-ЭВМ различных классов. Для большинства персональных ЭВМ используются различные версии языка программирования БЕЙСИК, основная версия которого описана в книге. Однако для этих микро-ЭВМ используются и различные другие языки программирования, также значительно отличающиеся от входных языков наиболее массовых универсальных микро-ЭВМ — программируемых микрокалькуляторов. Поэтому рассматриваемые алгоритмы решения логических и игровых задач иллюстрируются
в этой книге программами на входном языке программируемых микрокалькуляторов «Электроника БЗ-34», «Электроника БЗ-54», «Электроника МК-54», «Электроника МК-56», «Электроника МК-61» и «Электроника МК-52». Содержащиеся в книге сведения можно использовать различным образом. Будущие пользователи микро-ЭВМ найдут в ней общие сведения о языках программирования и методах составления алгоритмов решения игровых задач. Пользователи программируемых микрокалькуляторов смогут применить приведенные программы для проведения занимательного и полезного досуга и приобрести навыки, необходимые для решения многих прикладных задач. Пользователи персональных ЭВМ смогут использовать рассмотренные алгоритмы для программирования своих ЭВМ. Программирование — не простая задача, но эта книга рассчитана на широкий круг читателей, так как в ней даны определения всех используемых понятий, выходящих за пределы основного объема знаний, полученных в средней школе. Отзывы и пожелания просьба направлять по адресу: 252601, Киев, 1, Крещатик, 5, издательство «Техшка».
1авА ИГРЫ 1 )И 1У КИБЕРНЕТИКА В нашем сознании слово игра чаще всего ассоциируется с игрушками, детскими забавами или чем-то еще не очень серьезным. Между тем игры имеют первостепенное значение как в жизни отдельных людей, так и в развитии человеческого общества. Со- гласно строгому определению, игрой называется моделирование конфликт- ных ситуаций между двумя или не- сколькими сторонами, по крайней мере, одна из которых преследует определенную цель. Сторонами в кон- фликте могут быть люди, но обычно человек достигает своих целей в про- тивоборстве с силами природы. Моде- лирование выхода из таких конфликт- ных ситуаций называют играми с при- родой. Поведение простейших животных в их относительно несложных жизнен- ных ситуациях заложено в генетичес- ком коде, отображающем опыт мно- жества поколений, накопленный в процессе естественного отбора. Даже цыпленок, только что вылупившийся из яйца, начинает клевать зерна подобно взрослой курице, так как такое поведение обусловлено его ге- нетическим кодом. Однако чем выше уровень биологической организации животного, тем больше его поведение зависит от рефлекторных навыков, приобретенных в течение жизни. Сложная система таких навыков, оп- ределяющих поведение в конфликт- ных ситуациях, вырабатывается у высших животных преимущественно в играх. Поэтому склонность котят или волчат к играм объясняется не их шаловливостью, а жесткой не- обходимостью приобретения навыков для выживания без помощи родите- лей. В жизни человека игры имеют еще большее значение. Малыши, тяну- щиеся к погремушкам или склады- вающие кубики, приобретают в играх рефлекторные навыки координации движений и познают на собственном опыте свойства окружающего мира. Непрерывной игрой является и обуче- ние в школе, так как классные сочи- нения или арифметические упражне- ния лишь моделируют возможные жизненные ситуации. Человек при- обретает и закрепляет в памяти не- обходимые навыки и после школы в различных тренировках, спортив- ных, деловых, военных и прочих играх. Даже решение кроссвордов или игра в домино служат развитию сообразительности и навыков, требу- емых для решения разнообразных жизненных задач. Многие навыки поведения, закреп- ляемые в подсознании человека, обеспечивают автоматизм движений, необходимый не только для ходьбы или игры в теннис, но и для выпол- нения большинства производственных операций. А закрепленные в памяти знания о возможных подходах к ре- шению различных задач образуют жизненный опыт человека и опреде- ляют то, что называется здравым смыслом. Вместе с этим человеку часто приходится встречаться с новы- ми задачами, способ решения которых ему неизвестен. Подобная задача мо- 5
жет возникнуть неожиданно и требо- вать немедленного решения. В таких случаях человек действует рефлектор- но, но при отсутствии нужных на- выков принятое решение может при- вести к нежелательным или даже трагическим результатам. Если же человек располагает временем для поиска выхода из конфликтной ситу- ации, какой всегда является новая задача, то он мысленно или используя бумагу в качестве «внешней памяти» моделирует возможные пути решения задачи и выбирает лучшие из них, т. е. занимается именно тем, что по определению называется игрой. По- этому известные слова «Что наша жизнь? Игра!» из «Пиковой дамы» А. С. Пушкина уместно рассматри- вать не как броскую фразу литера- турного героя, а как глубокое обобще- ние гениальным поэтом существа интеллектуальной деятельности чело- века. Проигрывание человеком поиска наилучшего выхода из конфликтной ситуации в общем случае можно раз- бить на несколько взаимосвязанных этапов. Человек прежде всего форма- лизует условия задачи, отбрасывая все несущественное и сохраняя лишь те исходные данные и связи между ними, которые позволяют найти иско- мый результат. Затем человек выби- рает или даже изобретает метод (общий подход) решения подобных задач, помогающий найти способ ре- шения рассматриваемой задачи. Лишь после такого мысленного или теоретического моделирования он мо- жет приступить к действиям, необхо- димым для решения задачи. Методы решения практически лю- бых задач можно разбить на две группы. К первой группе относятся прямые методы с заранее известным числом операций (действий), необхо- димых для получения требуемого результата, ко второй — косвенные ме- тоды последовательных приближе- ний, при использовании которых число операций заранее неизвестно и их прекращают лишь после получе- ния требуемого результата. Способ решения конкретной задачи отображают алгоритмом — конечной последовательностью однозначных описаний операций, выполнимых ис- полнителем алгоритма и приводящих к искомому результату. Если испол- нитель не может (например, не умеет или не располагает необходимыми средствами) выполнить операцию, то ее описание в алгоритме должно быть заменено описаниями выполнимых операций. Например, при заданных числах а, Ъ, с и d большинство школь- ников сумеют найти число у по фор- муле у = а — Ып(с/д), которая и служит для них алгоритмом решения задачи. Однако для тех, кто забыл правила записи формул, необходимо указать, что вначале вычисляют част- ное c/d, находят его логарифм, про- изведение которого на число b вы- читают из числа а. Алгоритмы представляют словесно- формульными описаниями, схемами или программами. Словесно-формуль- ное описание состоит из перечня опи- саний операций, обычно обознача- емых порядковыми номерами и назы- ваемых шагами алгоритма. Описания операций разделяют на два основных типа. Описания первого типа, соответству- ющие операциям с однозначно опре- деленным результатом, называют опе- раторами * присваивания. Формально их можно представить предложе- ниями вида «пусть 1 = А», где слева * Оператор — тот, кто (или то, что) управ- ляет выполнением операций. В математике опе- ратором называют правило, обозначенное не- которым символом, которым может быть сло- весное описание, и ставящее в соответствие элементы двух множеств (например, множеств исходных данных и результатов вычислений). 6
от знака равенства записан символ (идентификатор) объекта, а справа — символ состояния, которое присваива- ется этому объекту после выполнения операции. Например, описание опера- ции «включить свет» является логи- ческим оператором присваивания, так как его можно представить предписа- нием «пусть С = 1», где символом С обозначен свет, а символам 1 и О соответствуют его включение и вы- ключение. При вычислениях в ари- фметических операторах присваива- ния слева от знака равенства запи- сывают символ (имя) переменной, а справа — число или выражение, результат вычисления которого в дальнейшем принимается равным переменной. Так, оператор «пусть х = х + 1» означает, что в дальней- шем переменной х присваивается значение, на единицу большее пре- дыдущего. Описания второго типа, называ- емые условными операторами или операторами условных переходов, соответствуют операциям, результат выполнения которых зависит от опре- деленного условия. Обычно их пред- ставляют предложениями вида «если выполнено условие У, то перейти к шагу ш, иначе — к шагу п». Заметим, что в таких наиболее распространенных сборниках алго- ритмов, как поваренные книги чаще всего встречаются операторы при- сваивания («взять морковь, посы- пать солью...»), но иногда там можно найти и условные операторы, напри- мер «если маринад посветлеет, то прекратить кипячение, иначе доба- вить уксус...». Для наглядности алгоритмы пред- ставляют схемами, в которых опера- торы присваивания обозначены пря- моугольниками, а условные опера- торы — ромбами с выходами «Да» и «Нет», соответствующими выполне- нию и невыполнению проверяемого условия. Все блоки схемы соединяют линиями со стрелками, указывающи- ми последовательность выполнения операций, а начало и конец алго- ритма обозначают овалами. В качестве простейшего примера рассмотрим алгоритм кипячения во- ды, налитой в стоящий на плите чай- ник. Для большинства людей такой алгоритм достаточно описать опера- тором присваивания «вскипятить во- ду», но для очень рассеянного и заня- того человека придется составить, например, следующее описание: О. Включить плиту. 1. Зайти на кухню через 20 мин. 2. Выключить плиту. Этот простейший алгоритм (рис. 1) формально невыполним, если его исполнитель располагает лишь пе- сочными часами с «заводом» на 5 мин. В этом случае придется расширить описание, например: 0. Включить плиту. 1. Перевернуть часы и дождаться высыпания песка. 2. Перевернуть часы и дождаться высыпания песка. 3. Перевернуть часы и дождаться высыпания песка. Рис. 1. 7
4. Перевернуть часы и дождаться высыпания песка. 5. Зайти на кухню и выключить плиту. Алгоритмы, реализующие методы последовательных приближений, со- держат описания операций, много- кратно повторяемых до получения искомого результата. Такие замкну- тые последовательности операций на- зывают циклами, а их однократное выполнение — итерацией. Итерацион- ные циклы могут содержаться и в алгоритмах, реализующих прямые методы, но в этом случае число ите- раций заранее задается. В частности, Рис. 2. последнее из описаний алгоритма кипячения воды можно сократить, организовав итерационный цикл (рис. 2): О. Включить плиту. 1. Перевернуть часы и дождаться высыпания песка. 2. Если часы перевертывались че- тыре раза, то перейти к шагу 3, иначе перейти к шагу 1. 3. Зайти на кухню и выключить плиту. Рассмотренные алгоритмы, в кото- рых реализован прямой метод реше- ния задачи, отличаются тем недостат- ком, что искомый результат (заки- певшая вода) зависит от интенсив- ности горения плиты, и через 20 мин вода может выкипеть или еще не закипит. В данном случае более эффективен метод последовательных приближений, представляемый сле- дующим описанием алгоритма для исполнителя с обычными часами: 0. Включить плиту. 1. Зайти на кухню через 10 мин. 2. Зайти на кухню через 5 мин. 3. Если вода кипит, то перейти к шагу 4, иначе — к шагу 2. 4. Выключить плиту. Этот алгоритм (рис. 3) обеспечивает решение задачи в широком интервале интенсивности горения плиты. Словесно-формульное описание (на- пример, инструкция по использова- нию огнетушителя) или схема алго- ритма являются для исполнителя и программой действий, но в более узком смысле программой называют представление алгоритма в виде по- следовательности символов, отобра- жающих необходимые операции и порядок их выполнения. Например, неразветвленный алгоритм, представ- ленный схемой на рис. 1, можно отобразить программой ВП К20 СТОП, где каждый шаг алгоритма обозначен определенным символом, характери- зующим выполняемую операцию. 8
Некоторые трудности возникают при отображении «одномерной» про- граммой разветвленного алгоритма с переходами к шагам, следующим не по порядку. Эти трудности пре- одолевают двумя основными способа- ми. Первый способ заключается в нумерации каждого шага программы адресом (кодом порядкового номера), например 00, 01, 02,..., для программ, содержащих менее 100 шагов. В этом случае условные операторы удобно описывать предложениями вида «если выполнено условие У, то перейти к следующему шагу, иначе перейти к шагу с адресом А». В программах такие условные операторы удобно отображать символами вида У?А, где У — проверяемое условие, А — адрес перехода при его невыполнении. Обязательные (безусловные) переходы отображают в программах операто- рами или командами безусловного перехода вида БП А. Операторы условного и безусловного перехода обычно занимают по два шага про- граммы, причем второй шаг занимает адрес А этих переходов. При использовании адресов (00, 01, 02,...) шагов программы алгоритм, схема которого показана на рис. 3» можно представить программой ВП К10 К5 ВК? 02 СТОП, согласно которой при выполнении проверяемого условия («вода кипит?») следует перейти к заключительной операции («выключить плиту»), а при невыполнении перейти к шагу с адресом 02 («зайти на кухню че- рез 5 мин»). Второй способ заключается в ис- пользовании специальных символов, называемых метками и записываемых в программе после команды проверки условия У? или команды безуслов- ного перехода БП и перед тем опера- тором программы, к выполнению ко- торого надлежит перейти. Например, выбрав для метки символ Ml, схему алгоритма, показанную на рис. 3, можно представить программой ВП К10 Ml К5 ВК? Ml СТОП. В этом случае при невыполнении про- веряемого условия (ВК?) исполнитель алгоритма должен перейти к опера- тору К5, перед которым в программе записана такая же метка Ml. Очевидно, что для понимания алго- ритма, представленного программой, необходим толковый словарь с пе- речнем всех используемых символов (лексики) и объяснением их смысла (семантики), а также знание правил записи этих символов (орфографии) Рис. 3. 9
и их последовательностей (синтак- сиса). Другими словами, для чтения алгоритма необходимо знать язык программирования, на котором состав- лена программа. Исполнителем алгоритма может быть не только человек, но и автомат, конструкция которого обеспечивает выполнение всех действий, опреде- ляемых операторами программы. По- добные автоматы известны с глубокой древности и выполняют как опера- ции присваивания, так и операции выбора следующего шага в зависи- мости от выполнения проверяемого условия. Устройства для хранения информации о программе действий в таких автоматах обычно непосред- ственно связаны с исполнительными механизмами. Примером автоматов с неразветвленными программами могут служить музыкальные шкатул- ки, в которых операторы присваива- ния реализованы отверстиями во вра- щающихся дисках или выступами на вращающихся валиках, являющи- мися одновременно и элементами исполнительных механизмов для со- здания звуков различного тона. Более современные кассовые автоматы метрополитена реализуют условный оператор «если пассажир бросил пять копеек, то оставить дверь открытой, иначе закрыть дверь». Различные механические и электро- механические автоматы с фиксирован- ными программами широко приме- няют и сегодня, причем к автоматам относятся все машины (например, па- ровые), действующие без непосред- ственного участия человека. Однако подлинную революцию в науке и тех- нике вызвало создание в 40-х гг. на- шего столетия электронных автома- тов, называемых компьютерами (вы- числителями) или цифровыми элек- тронными вычислительными маши- нами (ЭВМ). Их основные особенности заключаются в большой скорости выполнения операций и, главное, возможности быстрой смены програм- мы и, следовательно, решаемой за- дачи. Для хранения и передачи информа- ции внутри ЭВМ обычно используют бинарные (двоичные) коды, содержа- щие только символы 0 и 1. Такие коды отличаются высокой надеж- ностью, так как их символы сопоста- вимы с легко различимыми состоя- ниями «Есть» и «Нет» материальных объектов. Каждой бинарной позиции, содержащей символ 0 или 1, соответ- ствует минимальное количество ин- формации, называемое битом. Числа в бинарных кодах чаще всего представляют в двоичной систе- ме счисления последовательностью аг ...си ао бинарных позиций, назы- ваемых двоичными разрядами. Сим- вол 1 в разряде а0 отображает едини- цу, а в каждом следующем разряде — число, в два раза большее числа, отображаемого тем же символом 1 в соседнем правом разряде. Сумма чисел, отображаемых единицами во всех г +1 разрядах, равна десяти- чному представлению числа. На- пример, двоичное представление чи- сла аг = 10101 соответствует десятич- ному представлению си о = 1 -24 + + 0 • 23 + 1 • 22 + 0 • 2‘ + 1 • 2° = 21 Иногда для представления чисел используют и другие бинарные коды, например, десятично-двоичный, в ко- тором каждый десятичный разряд отображается четырьмя двоичными. Так десятичное представление чи- сла 21 отображается десятично-дво- ичным представлением 00100001. Добавим, что каждые четыре разряда двоичного представления числа соот- ветствуют одному разряду шестнад- цатеричного представления числа, цифры которого обычно обозначают символами 0, 1, ..., 9, А, В, С, D, Е, F. Поэтому десятичное представление aio = 21 = l • 161-|-5 • 16° отобража- 10
ется шестнадцатеричным представле- нием <2(6 = 15 или ДВОИЧНЫМ «2 = = 00010101. Двоичное n-битовое представление информации можно регистрировать (хранить), например, с помощью ре- гистра-ящика с п отделениями, соот- ветствующими бинарным позициям, и камешками, заменяющими сим- вол 1. Передавать эту информацию можно с помощью переносного лотка, в котором камешки размещены соот- ветственно их положению в исходном регистре-ящике. В ЭВМ регистры образованы после- довательностями из п электронных элементов, принимающих под воздей- ствием управляющих электрических сигналов одно из двух состояний («включено» и «выключено»), соот- ветствующих символам 1 и 0. Роль лотка для пересылки информации выполняют электрические сигналы длительностью п равных отрезков времени (тактов) с включением на- пряжения в такты, соответствующие битам с символом 1, и включением напряжения в такты, соответствующие битам с символом 0. Такие сигналы, передаваемые или хранимые в памяти ЭВМ, характеризуются форматом, определяющим общее число тактов (бит) и их распределение для пред- ставления чисел, включая знак и по- ложение запятой, команд управления и адресов тех узлов машины, которым передается информация. Основные узлы ЭВМ (рис. 4) — процессор П; оперативное запоми- нающее устройство ОЗУ, или память для временного хранения данных и программы решения задачи; нако- пители информации НИ для ее дли- тельного хранения; управляющее устройство УУ для обеспечения вза- имодействия всех узлов машины и устройства ВВ для ввода и вывода информации. Процессор содержит несколько ре- гистров для хранения операндов (чисел, над которыми выполняются операции) и промежуточных резуль- татов, а также арифметико-логическое устройство для выполнения ариф- метических и логических операций над операндами по командам про- граммы. Программы работы ЭВМ первого (лампового) поколения составляли непосредственно на языках машин- ных (бинарных) кодов в виде длинных последовательностей нулей и единиц. 11
Составление таких программ и их ввод в память ЭВМ для каждой за- дачи чрезвычайно утомительны. По- этому вскоре для ввода программ стали использовать ассемблеры — устройства, формирующие машинные коды команд при нажатии клавиш с легко запоминаемыми сочетаниями букв и цифр, обозначающих элемен- тарные команды. Программирование на языках ассемблеров, называемых также мнемокодами и автокодами, особенно удобно для специализиро- ванных (например, управляющих производственными процессами) ЭВМ, программы работы которых изменя- ются сравнительно редко. Однако даже простейшие операто- ры алгоритмов решения задач ото- бражаются большим числом команд на языках ассемблеров. Поэтому еще в 50-х гг. для универсальных ЭВМ, предназначенных для решения разно- образных математических задач, бы- ли разработаны алгоритмические язы- ки программирования, слова кото- рых непосредственно отображают операторы алгоритмов. Для этого еще машины второго поколения (на полу- проводниковых элементах) стали снабжать трансляторами — устрой- ствами, обеспечивающими отображе- ние каждого слова входного алго- ритмического языка при его вводе в машину соответствующей после- довательностью команд в машинных кодах, называемой микропрограммой. Внедрение алгоритмических языков и трансляторов существенно упрости- ло программирование и обеспечило возможность использования ЭВМ ши- роким кругом специалистов. Любые вычисления в ЭВМ сво- дятся к последовательности арифме- тических операций, которые реали- зуются в процессоре с помощью прос- тейших логических операций (подоб- ных «0 пишем, 1 в уме»). Поэтому, хотя большинство языков программи- 12 рования предназначено для вычисле- ний, с помощью ЭВМ оказалось воз- можным решать логические задачи. Эта возможность, ранее связываемая лишь с интеллектуальными способ- ностями человека, обусловила поста- новку основной проблемы кибернети- ки — создание искусственного интел- лекта в виде машины, способной находить пути решения новых для нее задач. Первые успехи в программировании ЭВМ для решения шахматных этюдов, перевода иностранных текстов, сочи- нения музыкальных произведений и стихов породили в 50-х гг. бурную дискуссию на тему «Может ли мы- слить ЭВМ?». Было высказано мно- жество категорических мнений, на- пример, о том, что через десятилетие машина станет чемпионом мира по шахматам, переводчикам уготовлена участь динозавров, а поэты пере- квалифицируются в литературных критиков, завистливо оценивающих успехи машин. Некоторые специа- листы утверждали, что для созда- ния искусственного интеллекта достаточно построить машину с па- мятью, не уступающей человеческой по емкости запоминаемой информации. С тех пор прошло три десятилетия. Созданы ЭВМ третьего (на интеграль- ных элементах) и четвертого (на эле- ментах с высокой степенью инте- грации) поколений. Существуют вы- числительные машины размером с наперсток, превосходящие по ряду показателей первые ЭВМ, занимавшие отдельные здания. Созданы супер- ЭВМ с фантастическими скоростью вычислений (более миллиарда опера- ций в секунду) и емкостью памяти, превосходящей человеческую. Техни- ческая кибернетика достигла огром- ных успехов, но машина пока не стала чемпионом мира по шахматам, пе- реводчики не опасаются конкуренции с ее стороны, а сочинение стихов на
ЭВМ по-прежнему остается способом развлечения программистов. Сегодня не спорят, может ли мы- слить ЭВМ, так как понятие «мы- слить» является первичным и нельзя дать его точного определения. Однако крушение надежд на быстрое создание искусственного интеллекта связано не с отсутствием этого определения, а со скудными познаниями человечества о материальных основах мыслитель- ных процессов. Поэтому не модели- руют мышление, а вынуждены огра- ничиться его имитацией, рассматри- вая человеческий мозг как «черный ящик» с неизвестным устройством, свойства которого приходится опре- делять по реакциям на внешние воздействия. Установлено, в част- ности, что деятельность правого полу- шария мозга связана с образами, а левая — с логическими связями между символами. Приближенно можно выделить три вида мышления — рефлекторное, ло- гическое и эвристическое. Рефлек- торная деятельность мозга прояв- ляется в решении человеком задач «не задумываясь», в соответствии с навыками, жестко закрепленными в памяти. Логическое мышление связано с умозаключениями о выборе лучшего пути решения задачи на основании хранящейся в памяти ло- гической информации. Эвристическое мышление в основном определяется интуицией, связанной с подсозна- тельной ассоциативной деятельностью мозга. Этот вид мышления в наиболь- шей степени определяет творческие возможности человека, проявляю- щиеся в его способности выбирать или даже изобретать пути решения задачи без их полного перебора. К со- жалению, имитация этого вида мы- шления находится в зачаточном со- стоянии, хотя с ним в наибольшей мере связана вся проблема искусст- венного интеллекта. Напомним, что поиск человеком пути решения задачи относится к конфликтным ситуациям и по опре- делению является игрой. Следова- тельно, с играми связана как кибер- нетика в целом, так и проблема ис- кусственного интеллекта. Этим объ- ясняются значительные затраты вре- мени и средств на создание, например, программ для игры ЭВМ в шахматы. В процессе создания и использования игровых программ накапливается опыт имитации логического и эв- ристического мышлений, необходи- мый для решения проблемы искус- ственного интеллекта. В течение многих десятилетий боль- шинство людей узнавало об успехах кибернетики из книг и журналов, так как дорогостоящие универсальные ЭВМ были доступны лишь узкому кругу специалистов. В последние годы это положение принципиально изме- нилось в связи с созданием недорогих и, следовательно, доступных широко- му кругу пользователей ЭВМ четвер- того поколения. Они получили назва- ние микро-ЭВМ, так как собраны на микросхемах — элементах с высокой степенью интеграции. К универсаль- ным микро-ЭВМ относятся програм- мируемые микрокалькуляторы и персональные ЭВМ. В алгоритмических языках про- граммирования и конструкциях ста- ционарных универсальных ЭВМ пре- дусмотрены автоматическая засылка данных в память и вызов из нее с помощью операторов присваивания. При выполнении программы считы- вание машиной кодов формулы вида I = А приводит к автоматической засылке числа А или результата вычислений по выражению А в сво- бодную ячейку памяти, которой в качестве адреса присваивается код идентификатора I. Если же ранее встречавшийся в программе иденти- фикатор записан в правой части 13
формулы 1=А, то по коду этого идентификатора из памяти вызывает- ся соответствующее число, над кото- рым и выполняется нужная операция. Например, при считывании в про- грамме формулы XI = 5,67 в ячейку памяти, которой присваивается код идентификатора XI, засылается чис- ло 5,67. При последующем считыва- нии, например формулы К = XI -|- 2, из ячейки с кодом XI вызывается число 5,67, и результат сложения 7,67 в правой части формулы автомати- чески заносится в ячейку памяти с адресом, соответствующим коду иден- тификатора К. Автоматическая пересылка данных с помощью операторов присваивания существенно упрощает составление программ, но ресурс памяти ЭВМ в этом случае используется недоста- точно полно. Между тем в 60-х гг. запоминающие устройства отлича- лись относительно большими размера- ми и стоимостью, что существенно ограничивало емкость памяти мало- габаритных ЭВМ. Успехи полупроводниковой техно- логии к средине 70-х гг. привели к существенному уменьшению размеров и стоимости запоминающих устройств, что обеспечило возможность создания недорогих малогабаритных микро- ЭВМ с алгоритмическими языками программирования, подобными язы- кам стационарных ЭВМ. Относитель- но низкая стоимость таких машин, получивших название персональных, позволяет использовать их в каче- стве индивидуальных вычислительных средств без практически непрерывного режима работы, при котором окупают- ся дорогостоящие стационарные ЭВМ. Однако персональные ЭВМ различ- ных типов также значительно раз- личаются как по стоимости, так и по назначению. Наиболее совершенные персональ- ные ЭВМ, обычно называемые про- фессиональными, по основным пока- зателям превосходят большинство стационарных ЭВМ третьего (на ин- тегральных компонентах) поколения, но в связи с относительно высокой стоимостью их используют лишь в служебных целях. Значительно де- шевле учрежденческие персональные ЭВМ, снабженные ограниченным на- бором вспомогательных устройств для ввода, хранения и вывода ин- формации. Наименее дорогие из таких машин широко используют для обу- чения учащихся средней и высшей школы. Наиболее низкой стоимостью отли- чаются персональные ЭВМ, назы- ваемые домашними и предназначен- ные для использования с бытовыми телевизором в качестве дисплея (ин- дикатора) и кассетным магнитофоном в качестве накопителя информации. Несколько дороже в настоящее время автономные карманные и настольные персональные ЭВМ, которые в обозри- мом будущем заменят программи- руемые микрокалькуляторы. Внедрение универсальных микро- ЭВМ в нашу жизнь знаменует прин- ципиально новый этап развития при- кладной кибернетики, так как оказы- вается возможной массовая и эконо- мически выгодная автоматизация решения задач, ранее доступных лишь человеку. Во всем мире быстро растет производство, прежде всего, домашних ЭВМ, используемых для различного рода игр и решения логических и вычислительных «до- машних» задач, а расширяющееся внедрение профессиональных и уч- режденческих персональных ЭВМ уже сейчас привело к изменению и рационализации решения множества практических задач.
^ВХОДНЫЕ о языки МИКРОЭВМ Любая универсальная микро-ЭВМ характеризуется двумя основными рабочими состояниями — режимом программирования для ввода про- граммы в запоминающие устройства и программируемым режимом авто- матического выполнения программы. Режим программирования преследует ту же цель, что и обучение человека решению конкретной задачи — за- креплению в памяти алгоритма реше- ния. Поэтому в некоторых микро-ЭВМ команда перехода в режим програм- мирования обозначена сокращением LRN от слова learn (обучать). Средством «обучения» ЭВМ являют- ся языки программирования (входные языки), на которых составляются и вводятся в машину программы. Вход- ные языки различаются алфавитом, образованным определенными симво- лами, допустимыми сочетаниями этих символов, имеющими самостоятель- ный смысл слов (словарным запасом), и синтаксическими правилами, опре- деляющими допустимый порядок сле- дования слов. Последовательность слов, приводящая к искомому резуль- тату работы ЭВМ, образует програм- му. Языки программирования предна- значены для представления алго- ритмов, элементами которых являют- ся шаги, содержащие описания опе- раций (операторы). Поэтому основны- ми структурными элементами про- грамм также являются операторы (называемые также предписаниями, инструкциями или командами), обра- зованные одним или несколькими шагами, причем шаг алгоритма может представляться несколькими шагами программы. Система внешних команд микро-ЭВМ, вводимых нажатиями клавиш, содержит также служебные команды для управления работой машины, не входящие в программу. Языки программирования микро- ЭВМ подробно описаны в руковод- ствах по их эксплуатации, поэтому ограничимся лишь необходимыми для дальнейшего изложения сведе- ниями об особенностях таких язы- ков. В персональных микро-ЭВМ исполь- зуют различные языки программиро- вания, но наибольшее распростране- ние нашел простой алгоритмический «язык для начинающих» БЕЙСИК, используемый и для программирова- ния «больших» ЭВМ. Алфавит базо- вой (минимальной) версии этого язы- ка [6] содержит 26 заглавных латин- ских букв от А до Z, четыре знака препинания (точка, запятая, точка с запятой, апостроф), десятичные циф- ры от 0 до 9, пять арифметических знаков + (плюс), — (минус), (ум- ножение), / (деление), | (возведение в степень), шесть знаков отношений ( = , =#, <, , >), знаки круглых скобок, пробела и возврата каретки печатающего устройства. В ЭВМ оте- чественного производства для вывода информации алфавит обычно допол- нен прописными русскими буквами, не совпадающими по начертанию с латинскими. Числа в языке БЕЙСИК представ- ляют в естественной (с фиксирован- 15
ной запятой) и показательной (с пла- вающей запятой) формах, причем дробную часть отделяют точкой, а це- лый порядок — символом Е (на- пример, число — 0,0068 можно пред- ставить в показательных формах — 6,8Е—4 или — 0,68Е—3). Иденти- фикаторы (имена переменных) состав- ляют из латинской буквы, которую можно дополнить цифрой. Разряд- ность мантиссы и порядка чисел оп- ределяется конструкцией конкретной микро-ЭВМ. Словарный запас языка содержит команды-операторы вычисления си- нуса SIN (х), косинуса COS (х), тан- генса TAN (х), арктангенса ATN (х), натуральных логарифма LOG (х) и антилогарифма или экспоненты ЕХР (х), квадратного корня SQR (х), модуля ABS (х), целой части INT (х) и знака числа SGN (х), а также ко- манды RND для выборки случайного числа с равномерным распределением в интервале (0,1). В круглых скобках указывают идентификатор аргумен- та х или определяющее его выра- жение. Программа на языке БЕЙСИК состоит из последовательности опе- раторов, записываемых с новой стро- ки и начинающихся числовой меткой m (обычно выбирают m — 10, 20, 30,... 999) и следующим за ней именем опе- ратора, обычно дополняемым опреде- ленным набором слов. Метки предна- значены для адресации переходов и упорядочения машиной последова- тельности выполнения операторов. Основным является оператор при- сваивания m LET Ii = 1г =... = In = А, где после имени LET (пусть) записы- ваются идентификаторы I, и выраже- ние (число, идентификатор или рас- четная формула) А. После выполне- ния этого оператора число А, резуль- тат вычислений по формуле А или вызванное из памяти значение иден- тификатора А заносятся в ячейки памяти с кодами идентификаторов L. Операцию присваивания реализук т также с помощью операторов, назы- ваемых DATA (данные) и READ (читать). В первом из них m DATA ai, аг, ..., а„ после имени оператора записывают последовательность (мас- сив) чисел, отделяемых запятыми. Во втором операторе m READ L, I2, ..., I* после имени записывают последовательность идентификаторов, число которых может быть меньше числа элементов массива данных в операторе DATA. При считывании машиной оператора READ в ячейки памяти с кодами его идентификато- ров заносятся соответствующие числа из массива данных оператора DATA, которые могут последовательно счи- тываться несколькими операторами READ. Для восстановления массива данных используют оператор m RESTORE (восстановить). В условном операторе m IF Ai П Аг THEN ш„ после имени IF (если) записывают условие сравнения выра- жений Ai и Аг на выполнение отно- шения П, а после слова THEN (тогда) — метку перехода при выпол- нении проверяемого условия (в про- тивном случае выполняется следую- щий по порядку метки оператор). Безусловный переход реализуется с помощью оператора m GO ТО ш„, где после имени GO ТО или GOTO (идти на) записывается метка шп оператора, выполняемого следующим. Для вычислений в цикле его на- чинают оператором m FOR I = = Ai TO A2 STEP A3, где после имени FOR (для) записана формула присва- ивания переменной I численного зна- чения Ai, равного начальному, после слова ТО (до) — выражение А2, опре- деляющее конечное значение перемен- ной, а после слова STEP (шаг) — приращение Аз переменной на каж- дом шаге. Оканчивается цикл опера- тором m NEXT I с именем NEXT 16
(следующий), проверяющим условие выхода из цикла I = Аг и при его выполнении передающим управление следующему по порядку меток опе- ратору. Вывод информации обеспечивается оператором m PRINT (печатать), после имени которого записывают идентификаторы переменных, числен- ные значения которых выводятся на печать или индикатор (дисплей), и отделяемый апострофами выводи- мый текст. Прекращение выполнения програм- мы обеспечивается операторами m STOP, которые могут записываться в любом месте программы, но она обязательно оканчивается оператором m END (конец) с наибольшей меткой. Переход в режим программирова- ния обычно обеспечивается командой NEW (новое), пуск программы — ко- мандой RUN (пуск). Для повторения вычислений с новыми исходными данными, а также для исправления ошибок и дополнения программы но- выми операторами с промежуточными метками после выполнения програм- мы вводят нужный оператор и коман- ду RUN. Составим, например, программу исполь- зуемого при решении многих игровых задач преобразования позиционных представлений чисел при изменении основания т системы счи- сления. Напомним, что такие абстрактные математические объекты, как числа в пози- ционных системах счисления, подобных обыч- ной десятичной или рассмотренной двоичной, представляют последовательностями аг ... ач а, ао позиций, называемых m-ичными разря- дами и содержащих по одной цифре из мно- жества 0, 1, ..., т — 1. В крайнем правом разряде цифра отображает соответствующее натуральное число, но в каждом левом раз- ряде той же цифрой отображается в т раз большее число, чем в соседнем правом разряде. Представления чисел Np и N, в системах счисления с основаниями р и q связаны от- ношением Nq = a,pr ... + а2р2 + щр1 + авро. где Oi+i =NPi — ?Npi+i и NPi+i — соответствен- но остаток и целая часть частного от деления NPi на q при i = 0, 1, ..., г; Npo = Np. Преобразование представления Np в пред- ставление Nq в соответствий с этим отноше- нием реализуется алгоритмом [12]: 1. Принять i = 0; р‘ = 1; S;+1 = 0; Apl = Np. 2. Вычислить Npi/q. 3. Определить целую часть частного Ар,+1 = =т-м 3. Определить целую часть частного Npi+। = = E[NP./«]- 4. Вычислить остаток a,+ i =Npl — qNpl + l. 5. Вычислить сумму S,+, = S, -|- а,+ \р‘ и р = рр 6. Если JVpi+i=O, то перейти к шагу 8, иначе — к шагу 7. 7. Принять i = i + 1 и перейти к шагу 2. 8. Принять Np = S.+1 и закончить решение задачи. На языке БЕЙСИК этот алгоритм при обо- значении исходных данных символами р, q и Np можно представить программой: NEW 10 DATA р, q, Np 20 READ P, Q, N 30 DATA 1, 0 40 READ K, S 50 LET В = N 60 LET A = INT(B/Q) 70 LET S = S + (B —A*Q)*K 80 LET K = K*P 90 LET В = A 100 IF B = 0 THEN 120 110 GO TO 60 120 PRINT'N('P') = 'N' ПРЕОБРАЗОВАНО В N('Q') = 'S 130 END RUN После выполнения этой программы при исходных данных р = 3, q = 10, Np — 121212 будет выведен результат: N(3) = 121212 ПРЕОБРАЗОВАНО В N(10) = 455 Для повторного выполнения программы (например, при р = 10, q = 8 и Np = 455) сле- дует ввести с клавиатуры: 10 DATA 10, 8, 455 RUN В этом случае получим следующий ре- зультат: N(10) = 455 ПРЕОБРАЗОВАНО В N(8) = 707 В персональных ЭВМ различных типов часто используют расширенные версии языка БЕЙСИК с дополни- тельными операторами (например, МАТ для операций над матрицами или GOSUB для обращений к под- программам) и командами для обме- на информацией с периферийными 17
устройствами и вывода таблиц и гра- фиков на дисплей. В большинстве персональных ЭВМ предусмотрена также возможность хранения в на- копителях информации программных трансляторов для ввода в память ЭВМ программ, составленных на других языках программирования. Особенности входных языков про- граммируемых микрокалькуляторов рассмотрим для распространенной массовой микро-ЭВМ «Электрони- ка БЗ-34» (рис. 5, а), а также отли- чающейся от нее лишь источником автономного питания микро-ЭВМ «Электроника БЗ-54», карманной «Электроника МК-54» и настольный «Электроника МК-56» (рис. 5, б). Эти микрокалькуляторы снабжены числовой памятью из 14 адресуемых регистров с шестнадцатеричными но- мерами 0, 1, ..., 9, А, В, С, Д и про- граммной памятью из 98 ячеек для хранения 8-битовых шагов програм- мы. Программная память разбита на 10 страниц по 10 ячеек (8 на послед- ней странице) с десятичными адре- сами ab, где а = 0, 1, ..., 9 — номер страницы и Ь = 0, 1, ..., 9 — номер ячейки на странице. По адресам ячеек реализуются переходы к соот- ветствующим шагам программы. Индикатор содержит 12 знакомест из семи световых сегментов для высве- чивания десятичных представлений чисел и сигнала ошибки ЕГГОГ в ра- бочем режиме, а также шестнадцате- ричных кодов шагов программы и адреса вводимого следующим шага в режиме программирования. Диа- пазон представления абсолютных значений чисел — от 1 • 10 " до 9,9999999 • 10", причем на отрезке от 1 до 99999999 результаты опера- ций высвечиваются в естественной форме, а в остальной части диапа- зона — в показательной форме а — = т • 10", где т — восьмиразрядная мантисса с запятой после первой значащей цифры (1 10), ап — двухразрядный целый порядок. Процессор содержит операционный стек с регистрами X, У, Z, Т и вспо- могательным регистром XI, а также арифметико-логическое устройство для выполнения по программе опе- раций над содержимым регистров X и У. Входной регистр X соединен с индикатором через дешифратор, пре- образующий двоичное содержимое регистра в напряжения, подаваемые на сегменты знакомест индикатора для высвечивания соответствующих символов. а 18
Алфавит языка программирования микрокалькуляторов образован ука- занными на клавиатурах символами команд, за исключением служебных команд ШГ, ШГ, АВТ, ПРГ, F, CF, не используемых при выполнении про- грамм. Имеются незначительные ор- фографические различия в символах команд — обозначенные на клавиату- ре микрокалькуляторов «Электроника БЗ-34» и «Электроника БЗ-54» симво- лы П, ИП, f, XY, arcsin, arccos и arctg (рис. 5, а) отображены на кла- виатуре микрокалькуляторов «Элек- троника МК-54» и «Электроника МК-56» соответственно символами х->П, П—>-х, В|, «->, sin-1, cos-1 и tg-1 (рис. 5, б). В дальнейшем для определенности будем использовать только первые из этих символов как более удобные, а для упрощения записи команды обмена содержимым регистров X и Y и поворота стека (обозначенной окружностью со стрел- ками) будем обозначать соответствен- но символами XY и Для уменьшения количества кла- виш часть команд обозначена над клавишами, и для их ввода нажима- ют префиксные клавиши К (для ввода операторов косвенной адресации и команды НОП) и F. Так как эти клавиши не имеют отношения к ал- горитмам, то в программах будем сохранять лишь символ К для опе- раторов косвенной адресации, а в остальных случаях символы К и F не будем указывать (как не указывают Рис. 5. б 19
символы поднятия каретки в машино- писных текстах). Коды чисел в регистре X набирают командами набора цифр от О до 9, десятичного разделительного знака и числа л = 3,141 592 6, а также командами /—/ — изменения знака, ВП — ввода порядка. Вызов в ре- гистр X копии содержимого регистра N памяти и засылка копии содержи- мого регистра X в регистр N памяти обеспечиваются соответственно опера- торами обращения к памяти IIN и ИПЫ, вводимыми нажатиями клавиш П. или ИП и клавиш с номером ре- гистра N. Для вычислений служат двухмест- ные (выполняемые над двумя операн- дами) функциональные операторы +, —, X, 4-, Xй и одноместные операторы sin, cos, tg, arcsin, arccos, arctg (раз- мерность аргумента устанавливается переключателем Р — Г или Р — ГРД — Г), х2, дГ, 1/х, In, ех, 1g, 10х. Последовательность ввода операторов и операндов и соответствующие пра- вила работы операционного стека определяются синтаксическими пра- вилами входного языка. Синтаксические правила выполне- ния вычислений в языке БЕЙСИК и большинстве других языков програм- мирования, включая входные языки некоторых программируемых микро- калькуляторов, соответствуют обыч- ной алгебраической записи формул, при которой операторы вводят после первого операнда (например, sin х или х + у = ). В большинстве вход- ных языков программируемых микро- калькуляторов, включая и рассматри- ваемые, использованы синтаксические правила, соответствующие записи функциональных операторов после операндов (например, х sin или х j у + ), называемой обратной за- писью. Такие правила существенно упрощают конструкцию микрокаль- куляторов, так как не требуется 20 предварительное запоминание кодов операторов, и фактически соответ- ствуют выполнению человеком ариф- метических операций над много- значными числами, когда вначале записываются эти числа, а затем вы- полняется операция. В соответствии с этими правилами при наборе или вызове из памяти число заносится в регистр X, а пре- дыдущее содержимое регистров стека смещается «вверх» (рис. 6, а). При вводе оператора | содержимое стека смещается вверх с сохранением со- держимого регистра X (рис. 6, б). При наборе числа после оператора j или оператора стирания Сх оно зано- сится в регистр X без изменения содержимого остальных регистров (рис. 6, в). При вводе оператора XY прежнее содержимое регистра X за- сылается в регистры Y и XI, а ре- гистра Y — в регистр X (рис. 6, г). Ввод оператора —поворота стека смещает его содержимое «вниз», причем прежнее содержимое ре- гистра X засылается в регистры Т и XI (рис. 6, д). Ввод оператора Вх смещает стек «вверх» с засылкой содержимого регистра XI в регистр X (рис. 6, е). После выполнения одно- местного оператора результат зано- сится в регистр X, прежнее содержи- мое которого засылается в регистр XI (рис. 6, ж), а после выполнения двух- местного оператора содержимое стека дополнительно смещается «вниз» (рис. 6, з). Рассмотренные операторы исполь- зуют как в программах автомати- ческих вычислений, так и при вы- числениях нажатиями клавиш. Спе- цифическими для программ автома- тических вычислений являются зани- мающие по одному шагу программы операторы управления программой С/П (стоп/пуск), В/О (возврат/очист- ка) и косвенной адресации КПК, КИПК, КБПК, КППЫ, KxSON (где
буквой S обозначен знак отношения = , =/=, Js, или <). Операторы KILN и KHIIN обеспечивают обращение к регистру памяти, номер которого равен модифицированному содержи- мому адресного регистра N. Ана- логично операторы косвенных пере- ходов KBIIN, KIHIN и KxSON обеспе- чивают переход по адресу, равному модифицированному содержимому адресного регистра N. При каждом выполнении таких операторов содер- жимое регистра N модифицируется — отбрасывается дробная часть, целая часть уменьшается на единицу, если N 3; увеличивается на единицу, если N = 4...6, и не изменяется при А >6. В программах автоматических вы- числений используют также операто- ры (занимающие по два шага про- граммы) безусловного перехода БП ab, обращения к подпрограмме ПП ab, четыре условных оператора вида xSO ab и четыре оператора цикла вида LN ab, где N 3, a ab — адрес перехода. Особенности программирования на входных языках микрокалькулято- ров подробно описаны в руководствах по их эксплуатации и книгах [9, 10, 12, 13]. Для записи программ обычно Рис. 6. 21
используют таблицы с указанием для каждого шага нажимаемых клавиш, высвечиваемого кода и адреса шага. Такая табличная форма удобна при изучении программирования и записи готовых программ для их хранения, но занимает много места и практи- чески непригодна для составления программ, когда их текст приходится многократно переписывать в поисках наилучшего варианта. В последнем случае удобно использовать компакт- ную запись программы по 10 шагов в строку, так как в этом случае адрес любого шага легко определить по но- мерам а = 0, 1, ..., 9 строки и b = 0, 1, .... 9 столбца, на пересечении кото- рых находится этот шаг. Для удобства контроля правиль- ности ввода в программную память постоянно хранимых (библиотечных) программ в их компактной записи каждый шаг целесообразно дополнять кодом, высвечиваемым на индикаторе в режиме программирования. Приме- ром может служить программа 1, обеспечивающая решения тех же задач, что и ранее составленная про- грамма на языке программирования БЕЙСИК. В инструкциях к выполнению про- граммы должны содержаться описа- ния всех действий пользователя после ввода программы и перехода в рабо- чий режим нажатием клавиш с обо- значениями F и АВТ. При составлении программ целесообразно использовать компактную запись инструкций, обо- значая операции ввода исходных дан- ных формулами вида а = PN, где а — набираемое на индикаторе число, а PN — содержимое регистра N памяти или операционного стека, куда сле- дует занести число а (при записи вида а = РХ набранное число перед пуском программы должно храниться в регистре X). Размещение результа- тов выполнения программы в реги- страх операционного стека и памяти удобно отображать формулами вида PN = а (при записи РХ = а результат а выполнения программы хранится в регистре X и высвечивается на индикаторе). Кроме того, в ком- пактной записи инструкции должны быть указаны клавиши, нажимаемые для пуска программы. Например, инструкция к программе 1 в ком- пактной записи будет иметь следую- щий вид: (р = Р8, q=P9) Np = = РХ В/О С/П РХ = Nq, где круглы- ми скобками обозначены исходные данные, сохраняющиеся после вы- полнения программы. Инструкции к библиотечным про- граммам целесообразно дополнять Программа 1. Преобразование позиционных представлений чисел Np и N, с основаниями р < 10, q = 10 или р = 10, q < 10 XY 14 Сх ОГ П7 47 1 01 Вх 0 t 0Е ИП э 69 13 1 01 + 10 ПО 40 КИПО ГО 25 —> 25 ИП0 60 ИП9 69 X 12 — 11 X 12 ИП7 67 + 10 П7 67 —X 25 ИП8 68 X 12 НПО 60 X = 0 5Е 05 05 ИП7 67 С/П 50 Инструкция. Ввести числа р и q соот- ветственно в регистры 8 и 9 (эти числа сохра- няются после выполнения программы, и при повторном ее выполнении с теми же числами р и q их можно не вводить) и число NP в регистр X, нажать клавиши В/О и С/П, после выполнения программы искомое число Np высвечивается на индикаторе. Время счета в секундах около 3 + 6г, где г — большее число разрядов в представле- ниях чисел Np и Np. 22
контрольными примерами для про- верки правильности ввода и выпол- нения программ, а в нужных слу- чаях указывать и время их выполне- ния. В программируемых микрокальку- ляторах «Электроника МК-61» (рис. 7) и «Электроника МК-52» имеется 15 адресуемых регистров числовой памяти с шестнадцатерич- ными номерами 0, 1, ..., 9, А, В, С, Д, Е и программная память емкостью 105 шагов, причем переходы в про- грамме допускаются только к шагам 00 ...99. Кроме того, в микрокальку- ляторе «Электроника МК-52» имеется электрически перепрограммируемое запоминающее устройство емкостью 4 Кбит (512 шагов программы) для длительного хранения программ и числовых данных при выключении питания, а также предусмотрена воз- можность использования блоков рас- ширения памяти для постоянного хранения прикладных программ и других периферийных устройств. Входной язык этих микрокалькуля- торов отличается от языка программи- рования микрокалькулятора «Элек- троника БЗ-34» лишь дополнительны- ми операторами (вводимыми с на- жатием префиксной клавиши К) для определения целой и дробной частей, знака и модуля чисел, большего из двух чисел, выполнения операций логического сложения и умножения, исключающего ИЛИ и инверсии, а также команд преобразования ча- сов в часы, минуты и секунды, гра- дусов в градусы и минуты и обратно. Кроме того, имеется оператор СЧ для вызова квазислучайных чисел с равномерным распределением в ин- тервале (0; 1). Использование этих операторов позволяет сократить длину и время выполнения многих программ, соста- вленных на входном языке микро- калькулятора «Электроника БЗ-34» и его аналогов. Например, при исполь- зовании оператора [х] для выделения целой части содержимого регистра X программа 1 сокращается на пять шагов: XY Сх П7 1 Вх | ИП9 4- [х] П6 23
ИП9 X — X ИП7 + П7 -> ИП8 X ИП6 х = 0 05 ИП7 С/П Входные языки программируемых микрокалькуляторов с условными обозначениями операторов внешне напоминают языки ассемблеров, но в действительности они являются языками программирования высокого уровня, обеспечивающими непосред- ственное отображение шагов алгорит- мов. Основные отличия этих языков от обычных алгоритмических языков, подобных языкам БЕЙСИК или ФОРТРАН, заключаются в способе обращения к памяти, неформальности операторов присваивания и компакт- ности записи программ. Так, для вво- да условного оператора х = 0 ab тре- буется четыре нажатия клавиш (F, х = 0, а, Ь), тогда как для ввода аналогичного оператора m IF х = = THEN mn на языке БЕЙСИК тре- буется нажать значительно большее число клавиш. Для ввода оператора цикла LN ab также требуется нажать только четыре клавиши, а для ввода аналогичного цикла в программу на языке БЕЙСИК необходимо записать в начале цикла оператор m FOR I = n TO 0 STEP 1 и в конце m NEXT I. Компактность записи программ на языках микрокалькуляторов обеспе- чивается и неформальной записью операторов присваивания без ключе- вых слов LET или ПУСТЬ. Например, фрагмент программы «... + ИП6 -г- 1п...» при обозначении содержи- мого регистров X и Y буквами х и у соответствует оператору присваива- ния «пусть х = 1п (х + 1//ИП6)» или последовательности операторов «пусть х = х + 1/», «пусть х = х/ИП6», «пусть х = In х». Различие в способах обращения к памяти, обеспечивающих полное использование памяти микрокальку- ляторов, также оказывается не очень существенным, если рассматривать операторы HN и HHN как операторы присваивания «пусть PN = х» и «пусть х = РА», где символ содержи- мого регистра памяти PN является идентификатором (именем) перемен- ной, численное значение которой хранится в этом регистре. Рассмотренные особенности вход- ных языков программируемых микро- калькуляторов, связанные с ограни- ченной емкостью запоминающих устройств, к сожалению, затрудняют чтение программ и понимание пред- ставленных ими алгоритмов. Однако компактность программ на этих язы- ках и возможность полного исполь- зования ресурса памяти во многих случаях являются преимуществами и при программировании микро-ЭВМ других классов. Поэтому, например, для настольной микро-ЭВМ «Электро- ника ДЗ-28» предусмотрена возмож- ность ввода программ как на языке БЕЙСИК, так и на входном «микро- калькуляторном» языке. Подобный язык находится и среди трех «соб- ственных» языков различного уровня персональной (« дома шней ») ЭВМ «Электроника МК-72». Следует также отметить, что у многих микро-ЭВМ операторы входного языка, подобного языку БЕЙСИК, вводят не набором отдельных знаков, а нажатием кла- виш (например, GOTO, LET или IF), как и для программируемых микро- калькуляторов. В настоящей книге в связи с разно- образием входных языков микро-ЭВМ программы, иллюстрирующие алго- ритмы решения логических и игро- вых задач, приведены на входном языке распространенного микрокаль- кулятора «Электроника БЗ-34» и его аналогов и полностью пригодны для программирования микрокалькуля- торов «Электроника МК-61» и «Элек- троника МК-52», хотя в последнем случае многие из приведенных про- грамм могут быть сокращены.
РЕШЕНИЕ ЛОГИЧЕСКИХ ЗАДАЧ Поиск человеком решения новой задачи, как уже отмечалось, по опре- делению является игрой. Это, прежде всего, игра с природой, в которой умения и знания человека преодоле- вают непредвиденные трудности — будь-то чрезмерная погрешность вы- числений, определяемая законами математики, невозможность реализа- ции выбранного способа решения по физическим законам или неучтенное влияние случайных событий. Человек находит наилучший (опти- мальный) путь решения задачи с помощью логических умозаключений, но искомые результаты могут быть как количественными оценками, так и требуемыми отношениями между некоторыми объектами. Вычисления, приводящие к количественным оцен- кам, основаны на формальной (мате- матической) логике, но при вычисле- ниях она не проявляется так явно, как при поиске требуемых отношений. Поэтому задачи последнего вида будем условно называть логичес- кими. При решении логических задач с помощью ЭВМ, предназначенных для операций над числами, также прихо- дится прибегать к вычислениям, но они обычно лишь обеспечивают про- верку отношений между некоторыми объектами, символами которых слу- жат порядковые (целые) числа. По- этому при решении многих логичес- ких задач явно или неявно исполь- зуется основная формула теории сравнений а = Ь(т). Эта формула читается «а и Ъ сравнимы по модулю т» и означает, что при делении целых чисел а и Ь на положительное целое число т образуются одинаковые остатки и, следовательно, частное (а — Ь)/т равно целому числу. Простейшим примером приложения теории сравнений является поиск целочисленных решений уравнений с несколькими неизвестными, называ- емых диофантовыми и имеющих в общем случае бесконечное число ре- шений. Диофантово уравнение ах-\- -\-Ъу = с, имеющее бесконечное число решений, в конечном интервале изме- нения переменных х и у при выполне- нии условия сравнения х = Ьу/а содержит конечное число целочислен- ных решений х = (с — by)/а. Особенности диофантовых уравне- ний используют в различных играх и логических задачах. Например, один из участников подобной игры для выбранных им дня Д = 1, 2,..., 31 и месяца М = 1, 2, ..., 12 указывает число А = 12Д + 31Л1, а другой участ- ник игры по этому числу должен определить исходные числа Д и М. Для этого он должен последовательно подставлять числа М — 1, 2, ... в пра- вую часть формулы X = (А — 31Л1)/12 до получения целого числа X = Д. Для программирования микро-ЭВМ этот способ решения задачи отобра- жается следующим алгоритмом: 1. Принять М = 1. 2. Вычислить X = (А — 31Л1)/12. 3. Определить дробную часть D(X) числа X. 4. Если D(X) = 0, то перейти к шагу 6, иначе — к шагу 5. 25
5. Принять М = М + 1 и перейти к шагу 2. 6. Принять день Д = X и месяц М. На используемом входном языке программируемых микрокалькулято- ров этот алгоритм реализуется про- граммой 2, после выполнения кото- рой на индикаторе высвечиваются числа Д и М, отделенные запятой. Так, при минимальном числе А = 43 высвечивается 1,01 или 1 января (время счета около 10 с), а при макси- мальном числе А = 744 высвечивает- ся 31,12 или 31 декабря (время счета около 65 с). Теория сравнения применима и для автоматизации такой трудоемкой ло- гической задачи, как составление различных расписаний. Простейшим примером может служить составление расписания спортивных встреч т участников (скажем, шахматистов или футбольных команд) в круговом турнире, который при встрече «каж- дого с каждым» содержит т — 1 туров. При четном числе т участников (если действительное число участни- ков нечетно, то добавляется zn-й фик- тивный участник, встреча с которым в расписании соответствует свободно- му дню) каждый л-й участник (п = = 1,2, ..., т — 1) в каждом /г-м туре встречается с участником с номером ynk ¥= п. Методами теории сравнений можно установить, что для п sC т — 1 при k п в fe-м туре номер участника y„k — т, если т — 1 + k = 2п и упк = = т — 1 + /г — п в остальных слу- чаях, а при k > п номер упк = т, если k = 2п и y„k = k — п в остальных случаях. Построение расписания со- гласно этим соотношениям отобража- ется следующим алгоритмом: 1. Принять п = k = 1. 2. Если п — k 0, то перейти к ша- гу 3, иначе — к шагу 5. 3. Если т — 1 -|- k — 2п = 0, то пе- рейти к шагу 7, иначе — к шагу 4. 4. Принять упк = т — 1 + fe — п и перейти к шагу 8. 5. Если k — 2п = 0, то перейти к шагу 7, иначе — к шагу 6. 6. Принять упк = k — п и перейти к шагу 8. 7. Принять y„k = т. 8. Если k + 1 — т = 0, то перейти к шагу 9, иначе принять k = k + 1 и перейти к шагу 2. 9. Если п = т — 1, то закончить составление списка для встреч команд п т — 1, иначе принять п = п + 1, k = 1 и перейти к шагу 2. Этот алгоритм для п т — 1 реали- зуется программой 3. После каждого выполнения этой программы высвечиваемый номер ynk следует записать на пересечении стро- ки п и столбца k расписания и после записи всех элементов упк строки ввести новое значение п = 1, 2, ..., т — 1 и повторить выполнение ин- струкции (т вводят только перед на- чалом составления расписания). При Программа 2. Определение дня Д и месяца М по заданному числу А = 12 Д + 312И П9 49 Сх ОГ П6 46 КИП6 Гб ИП9 69 ИП6 66 3 03 1 01 X 12 11 1 01 2 02 13 П8 48 ИП8 68 КИП8 Г8 —> 25 ИП8 68 — 11 х = 0 5Е 03 03 ИП6 66 1 01 0 00 0 00 13 ИП8 68 + 10 С/П 50 Инструкция. А= РХ В/О С/П РХ = ДМ- 26
Программа 3. Составление расписания встреч т участников кругового турнира •П7 47 Сх ОГ П6 46 КИП6 Гб ИП7 67 ИП6 66 11 х^О 59 13 13 1 01 + 10 ИП9 69 — 11 /-/ 0L П8 48 ИП7 67 — 11 х=0 5Е 21 21 ИП9 69 П8 48 ИП8 68 С/П 50 БП 51 03 03 Инструкция. (Четное т = Р9) п = RX В/0 С/П РХ = yni С/П РХ = уп2 ... С/П РХ = = У г.. т — I. нечетном числе т — 1 участников номер ynk = т означает, что в /г-м туре n-й участник свободен от встреч. Если число участников турнира четное и равно т, то для определе- ния элементов ymk строки для участ- ника п = т достаточно в каждом /г-м столбце по номеру упь = т найти номер п соответствующей строки и принять ymk = п (табл. 1). 1. Расписание встреч т = 8 участников кру- гового турнира Л k= 1 k= 2 * = 3 4 = 4 k =5 ft =6 1 7 8 2 3 4 5 6 2 6 7 1 8 3 4 5 3 5 6 7 1 2 8 4 4 8 5 6 7 1 2 3 5 3 4 8 6 7 1 2 6 2 3 4 5 8 7 1 7 1 2 3 4 5 6 8 8 4 1 5 2 6 3 7 Программа 3 пригодна для состав- ления расписаний турниров с любым числом участников. Если оно неве- лико, то целесообразно упростить составление расписания, автоматизи- ровав ввод очередного номера п (для чего фрагмент, подобный програм- ме 3, следует охватить циклом ст — 1 итерациями) и выводя после каждого выполнения программы множество всех элементов очередной n-й строки. Если т<8, то для формирования такого множества номеров можно воспользоваться десятичными разря- дами представления чисел в регистрах программируемого микрокалькулято- ра с восьмиразрядной мантиссой. Эта задача решается с помощью фрагмента вида IfflNi ИПЫ2 1 О X X + nN2, после выполнения кото- рого содержимое уп\ ...yni разрядов регистра N<2 сдвигается на один раз- ряд влево, в освободившийся разряд заносится содержимое yni+\ регистра Nt и результат уп\ ... уп, yni+] операций заносится в регистр N2. Для формирования множества но- меров ymk последней m-й строки распи- сания для четного числа участников целесообразно использовать регистры 7, 8, ..., Д (регистры с меньшими номерами удобно использовать в ка- честве адресных регистров операторов косвенного обращения к памяти при организации автоматического увели- чения номеров п и /г), сопоставив их с номерами туров k — 1, 2, ..., 7. После выполнения цикла операций для каждого значения п и проверки ра- венств ynk = т в (fe + 6)-й регистр заносится номер п и после окончания циклов для всех п т — 1с помощью оператора косвенного вызова из па- мяти и рассмотренного фрагмента на индикатор можно вывести искомую последовательность ymk для п = т. Эти приемы реализованы в програм- ме 4, после каждого выполнения ко- торой (перед составлением расписа- 27
Программа 4. Составление расписания встреч m 8 участников кругового турнира Сх П4 КИП4 Сх П2 П5 КИП5 ИП4 ИП5 ог 44 Г4 ОГ 42 45 Г5 64 65 11 х>0 16 1 + ИПО — /-/ Ш ИП4 — 59 16 01 10 60 11 0L 41 64 11 х = 0 30 ИПО П1 ИП5 7 + ПЗ ИП4 КПЗ 5Е 30 60 41 65 07 10 43 64 L3 ИП1 ИП2 1 0 X + П2 ИПО ИП5 — 61 62 01 00 12 10 42 60 65 11 1 — х = 0 06 ИП2 ИП4 С/П БП 02 Сх 01 11 5Е 06 42 44 50 51 02 ОГ П2 6 П6 КИП6 ИП2 1 0 X + П2 42 06 46 Гб 62 01 00 12 10 42 ИП6 1 3 — х = 0 53 ИП2 ИПО С/П 66 01 03 11 5Е 53 62 60 50 Инструкция. Очистить регистры 7, 8, Д; четное число т = РО В/О С/П РХ = 1; PY = — Уп У12 ... yim~i (для вызова содержимого регистра у достаточно нажать клавишу ХУ) С/П РХ=2‘, PY = y2, ... ... С/П РХ = = т — 1; PY = ym-i.i ... ут-\, m-i БП 4 9 С/П РХ = tri', PY = У ml ... Ут, т — 1* ния в память вводится только число т) на индикаторе высвечивается очеред- ное множество элементов ynk строки расписания. Если число участников турнира нечетное и равно т — 1 или если (при четном числе участников) элементы тп-й строки расписания определяются по ранее составленным строкам «вручную», то программу 4 можно существенно сократить, изъяв опера- торы ИП5 ... КПЗ с адресами от 24 до 29 и фрагмент программы после оператора БП 02, начинающийся с адреса 49, а также заменив оператор х = 0 30 на х = 0 24. В этом случае регистры 7, .... Д перед составле- нием расписания можно не очищать, а выполнение инструкции следует оканчивать после высвечивания и ре- гистрации множества элементов ут -1Л Для (лг — 1)-й строки распи- сания. Расписание, составленное с по- мощью программ 3 или 4, не явля- ется единственно возможным и легко преобразуется в множество других вариантов. Всего допустимо (т — 1)! перестановок столбцов расписания, соответствующих перенумерации ту- ров, и (т — 1)! для нечетного или ml для четного числа участников спо- собов нумерации участников турнира. Следовательно, составляемое по при- веденным программам расписание является лишь одним из (т — 1)! (т — 1)! или ml (т — 1)! вариантов. Кстати, точное значение факториа- ла а! = а(а — 1) (а — 2).. 2 • 1 положи- тельного целого числа а <11 и при- ближенное значение факториала а < 70 вычисляется по очень короткой программе: ПО 1 ИПОХЬО 02 С/П с инструкцией а = РХ В/О С/П РХ = = al. С помощью этой программы несложно установить, что приведен- ное в табл. 1 расписание является одним из (8!) = 1625702400 воз- можных вариантов. Решение большинства логических задач связано с операциями над 28
множествами некоторых объектов, сводящихся к операциям над элемен- тами этих множеств. В программах для персональных ЭВМ элементы мно- жеств могут отображаться буквенными или буквенно-цифровыми идентифи- каторами, а операции над ними — реализовываться с помощью различ- ных стандартных операторов (напри- мер, DATA и READ в языке БЕЙСИК). Однако в программах для микрокаль- куляторов элементы множеств прихо- дится отображать цифрами и хранить их (по образцу программы 4) в одном или нескольких регистрах памяти. В этих случаях максимальное число элементов множества не может пре- вышать соответственно разрядности мантиссы или числа свободных ре- гистров числовой памяти. Кроме того, во входных языках программируе- мых микрокалькуляторов отсутству- ют специальные операторы для опе- раций над множествами и их прихо- дится формировать из словарного запаса языка программирования. Если все элементы множества хра- нятся в одном регистре памяти микро- калькулятора, то для операций над этим множеством приходится после- довательно выделять его элементы в виде цифр, содержащихся в отдель- ных десятичных разрядах. Существу- ют различные способы реализации такой операции, среди которых можно выделить достаточно удобный, заклю- чающийся в предварительной норма- лизации множества введением за- пятой после первого элемента или перед последним. В этом случае с помощью операторов косвенного вы- зова из памяти отделяют «целую» и «дробную» части нормализованного множества и выделяют один или несколько элементов исходного мно- жества. Например, при нормализации множества делением на 10 его последний элемент окажется отделен- ным запятой, и после выполнения фрагмента вида HN KHUN—>-ИПК — — 1 ОХ (при N > 6) в регистре X будет находиться последний элемент исходного множества, а в регистре N — остальные его элементы. Операции с выделением и сравне- нием элементов множеств выполняют- ся, в частности, в распространенных играх с загадыванием слов или мно- гозначных чисел, когда отгадыва- ющий участник игры предлагает оче- редные варианты, руководствуясь указаниями загадывающего участни- ка об общем количестве угаданных элементов (букв или цифр) и числе угаданных мест их расположения. Цель таких игр заключается в отга- дывании слова или многозначного числа за наименьшее число попыток. Примером подобной игры может служить «компоновка чисел», один участник которой загадывает пяти- значное число, а второй предлагает свои варианты этого числа, руковод- ствуясь после каждой попытки све- дениями о числе верно угаданных цифр и числе разрядов с угаданными цифрами. Для участия микрокальку- лятора * с рассмотренным входным языком в качестве загадывающего участника этой игры необходимо предварительно составить алгоритм, обеспечивающий формирование пяти- значного числа, не известного против- нику, и сравнение его цифр с цифрами предлагаемых вариантов для опреде- ления числа угаданных цифр и числа разрядов с угаданными цифрами. Такой алгоритм можно представить следующим описанием: 1. Сформировать пятизначное чис- ло а с цифрами а, и принять число попыток k = 0. 2. Запомнить пятизначное число Ь, предлагаемое противником. * Для подобной игры за рубежом был даже выпущен специальный микрокалькулятор СОМР-4. 29
3. Принять k = k + 1, число n = О угаданных цифр и число т = 0 раз- рядов с угаданными цифрами. 4. Нумеруя разряды а и Ъ слева направо, принять i = 5, j = 6. 5. Выделить цифры а, и bj. 6. Если а, = bj, то перейти к шагу 7, иначе — к шагу 10. 7. Принять п = п + 1. 8. Если i = j, то перейти к шагу 9, иначе — к шагу 10. 9. Принять т — т + 1 и перейти к шагу 12. 10. Если i=#l, то перейти к ша- гу 11, иначе — к шагу 12. 11. Принять i — i — 1 и перейти к шагу 5. 12. Если j^l, то перейти к ша- гу 13, иначе — к шагу 14. 13. Принять j = j — 1 и перейти к шагу 5. 14. Указать противнику числа т и п. 15. Если т — 5, то число угадано противником за k попыток, иначе перейти к шагу 2 для оценки сле- дующего варианта противника. Этот громоздкий алгоритм доста- точно полно характеризует отличия между распознаванием даже простей- ших образов человеком и дискретным автоматом, обрабатывающим инфор- мацию отдельными порциями. Чело- веку достаточно бросить взгляд на сравниваемые числа для определения совпадающих цифр и их расположе- ния. Действия же машины в этом случае подобны действиям слепого, на ощупь сравнивающего каждый предмет из некоторого их множества для сравнения с заданными образ- цами. При таком сравнении на ощупь слепой попадает в затруднительное положение, когда требуется оценить число совпадений двух или несколь- ких одинаковых предметов в предъ- являемом для оценки и эталонном множествах и число совпадений в порядке сравнения элементов этих множеств. Неоднозначность в опре- делении числа п цифр, когда числа а и b содержат по две или более оди- наковых цифры, характерна и для составленного алгоритма. В этом алгоритме сравнение цифр а, и bj прекращается при совпадении этих цифр в одинаковых разрядах. Если, например, цифре числа Ъ соот- ветствуют две одинаковые цифры числа а, находящиеся в разрядах с номерами i j, то при первом совпадении цифр перебор прекратит- ся и число п увеличится на единицу. Если же одинаковые цифры числа G находятся в разрядах с номерами i у, то при первом совпадении цифр число п увеличится на едини- цу, но разряды не будут совпадать, и перебор цифр продолжится до вто- рого совпадения разрядов с одинако- выми цифрами, при котором п уве- личится еще на единицу. Следова- тельно, число п будет зависеть от расположения повторяющихся цифр в разрядах чисел а и Ь. Этот недостаток подсчета п можно устранить, но тогда алгоритм услож- нится, а время выполнения реали- зующей его программы возрастет. Поэтому сохраним алгоритм в состав- ленном виде, учитывая, что основным критерием приближения к числу а является число т, завышенные зна- чения числа п образуются относи- тельно редко. «Загадывание» микрокалькулятором неизвестного противнику числа а обеспечивается при его случайном выборе. Случайное целое число можно получить, например, с помощью вспо- могательной мини-программы Сх П6 КИП6 БП А, где А — адрес опера- тора КИП6. После пуска такой про- граммы образуется цикл с неограни- ченным числом итераций, на каждой из которых содержимое регистра 6 увеличится на единицу. При аварий- 30
нои остановке такой программы в случайный момент времени содержи- мое регистра 6 также будет случай- ным. Его преобразование в число а обеспечивается фрагментом ИП6 In 1 ВП 5 X П8 КИП8, после выполнения которого в регистре 8 содержится шестизначное целое число, пять последних цифр которого можно при- нять в качестве «загадываемого» числа а. Эти цифры будем хранить соответственно в регистрах 9, А, Д, используя для этого цикл с выделе- нием нормированных цифр а£/10 и их косвенной засылкой в соответствую- щие регистры памяти. Для хранения изменяющихся на единицу целых чисел i, j, п, т и k выделим соответственно регистры О, 1, 4, 5 и 6, используя их в качестве адресных регистров-счетчиков в опе- раторах косвенного вызова из памяти. Все операции по формированию «за- гадываемого» числа а и занесению в память вспомогательных коэффи- циентов 14 = Р2 и 105 = РЗ целесо- образно реализовать фрагментами, следующими после основной части программы, что обеспечит ее выполне- ние при нажатии только клавиш С/П или В/О и С/П. Подобная реализа- ция алгоритма представлена програм- мой 5. Для проверки введенной программы следует пустить ее нажатием клавиш БП 8 5 С/П и через несколько секунд остановить нажатием клавиш С/П или В/О, проверив содержимое ре- гистра 6, которое должно быть поло- жительным целым числом с нулями в Программа 5. Компоновка чисел при «загадывании» микрокалькулятором пятизначного числа П8 ИПЗ + П8 Сх П4 П5 ИП2 П1 КИП6 48 63 10 48 ОГ 44 45 62 41 Гб КИП1 ИП2 ПО ИП8 1 0 — П8 КИП8 —> Г1 62 40 68 01 00 13 48 Г8 25 ИП8 — П7 ИП7 кипо — х = 0 37 КИП4 ИПО 48 11 47 67 го 11 5Е 37 Г4 60 ИП1 — х = 0 37 КИП5 БП 42 ИПО 9 — 61 11 5Е 37 Г5 51 42 60 09 11 х = 0 23 ИП1 9 — х = 0 10 ИП4 ИП5 С/П 5Е 23 61 09 11 5Е 10 64 65 50 БП 00 ИП6 In 1 ВП 5 ПЗ X П8 51 00 66 18 01 ОС 05 43 12 48 КИП8 1 4 П2 по ИП8 1 0 П8 Г8 01 04 42 40 68 01 00 13 48 КИП8 —X ИП8 — КПО ИПО 9 — х = 0 65 Г8 25 68 11 L0 60 09 11 5Е 65 П6 БП 49 Сх П6 КИП6 БП 85 46 51 49 ОГ 46 Гб 51 85 Инструкция. Нажать клавиши БП 8 5 С/П, через 5—10 с нажать клавишу С/П для остановки программы, затем клавиши БП 5 2 С/П, что приведет к высвечиванию нуля; далее вводить вариант отгадываемого числа в ре- гистр X, нажимая после каждого ввода кла- вишу С/П или клавиши В/О и С/П и учиты- вая получаемые значения РХ — Р5 = п — числа разрядов с угаданными цифрами, PY = = Р4 = т — числа угаданных цифр и Р6 = = k — числа попыток угадывания. 31
старших разрядах. Затем следу- ет ввести число 10 в регистр 6 и нажать клавиши БП 5 2 С/П. После выполнения программы (вре- мя счета около 30 с) содержимое регистров РХ = Р6 = 0,Р2 = 14,РЗ = = 105, Р.9--0,3; РА=0, РВ = 0,2; PC — 0,5; РД = 0,8, что соответствует задуманному числу а = 30258. Теперь при вводе в регистр X отгадываемых вариантов числа 10 000, 85 203 и 30 258 с нажатием после каждого ввода клавиши С/П должно полу- читься РХ — Р5 = т = 1, PY = Р4 = = п = 4 (время счета около 1 мин 50 с), т = 1, п = 5 (время счета около 2 мин) и т = 5, п = 5 (время счета около 1 мин 30 с). Длину программы 5 можно сокра- тить, вынося в подпрограмму одина- ковые фрагменты подготовительной и основной частей программы, но в этом случае время счета еще больше увеличится. Для участия в этой игре микро-ЭВМ в качестве отгадывающего партнера необходимо прежде всего выбрать наилучший путь (стратегию) отгады- вания числа за минимальное число попыток. Человек в этом случае ме- няет стратегию в зависимости от получаемых значений т и п, но при программировании, например, микро- калькуляторов приходится ограни- читься подсказкой только числа т разрядов с угаданными цифрами, так как учет числа цифр п громоздок и нереализуем при небольшом ре- сурсе памяти. Простейший метод компоновки чис- ла по значениям т заключается в последовательной подстановке в каж- дый из пяти разрядов отгадываемого числа b цифр от 0 до 9 с переходом к следующему разряду после увели- чения числа т. Так как уже первый вариант числа может оказаться вер- ным, а в наихудшем случае потре- буется еще 45 попыток угадывания, то среднее число таких попыток равно 23. Перебор цифр с их увеличением, начиная с младших разрядов, анало- гичен вращению колесиков автомо- бильного счетчика километров. Раз- личие заключается в том, что оче- редное колесико автомобильного счет- чика начинает вращаться только после достижения цифры 9 в пре- дыдущем разряде, тогда как наше «колесико» начинает вращаться сразу после угадывания содержимого пре- дыдущего разряда. Подобный «счет- чик» можно реализовать различными способами. Так как языки програм- мирования лучше приспособлены для вычислений, то проще всего исполь- зовать арифметические операции. На- пример, выбрав для первой попытки число Ъ = 99 999, при последующих попытках следует принимать b = Ь — — d, где для самого младшего раз- ряда d = 1, а для каждого следую- щего d увеличивается в 10 раз. Необходимая микро-ЭВМ информа- ция о степени приближения к зага- данному числу содержится в разности \т = mk— mk-\ для двух очередных попыток и числе т = 5, свидетельст- вующем об «угадывании» содержи- мого всех пяти разрядов. Однако после первого «угадывания» Ъ = = 99 999 разность Ат оказывается неопределенной и действия микро- ЭВМ после этой и следующих попыток должны быть различными. Для вы- бора требуемых действий часто ис- пользуют программные «узелки на память», называемые флагами; вход- ные языки многих микро-ЭВМ содер- жат операторы установки, снятия и проверки флагов. При отсутствии таких операторов в качестве флага можно выбрать хранящуюся в памяти величину /, принимающую значения f = 0 (флаг установлен) или f #= 0 (флаг не установлен), проверяемые условными операторами. 32
Если загаданное число а содержит разряды с цифрами 9, то при пере- ходе к такому разряду и уменьшении его содержимого число т умень- шится и будет выполняться неравен- ство Ат < О. В таких случаях сле- дует восстановить цифру 9 и перейти к следующему разряду, последова- тельно выполнив операции присваива- ния b = b + d, d = 10d, b = b — d. С учетом этих соображений соста- вим следующий алгоритм (при ис- пользовании числа k попыток для формирования флага), реализующий выбранный метод компоновки много- значных чисел: 1. Принять число попыток k = О, d = 1, т = О, Ъ - 99 999. 2. Запомнить число т разрядов с «угаданными» цифрами. 3. Если число т равно числу раз- рядов задуманного числа, то оно «угадано», иначе перейти к шагу 4. 4. Принять k = k + 1, Am = m* — — mt_i. 5. Если k = 1, то перейти к шагу 10, иначе — к шагу 6. 6. Если Ат = 0, то перейти к ша- гу 10, иначе — к шагу 7. 7. Если Ат < 0, то перейти к ша- гу 8, иначе — к шагу 9. 8. Принять b = b + d. 9. Принять d = 10d. 10. Принять b = b — d и перейти к шагу 2. На рассмотренном языке програм- мирования микрокалькуляторов при размещении текущих данных k — Р5, \т - Р6, d = Р7, b = Р8, т = Р9 и за- гадывании пятизначного числа этот алгоритм реализуется программой 6. Для компоновки чисел с п 8 разря- дов достаточно заменить в этой про- грамме оператор 5 по адресу 06 опе- ратором набора числа п. Если, например, загадано чис- ло 78 945, то микрокалькулятор «отгадает» его по программе 6 за 14 попыток. Эта программа отличается «игровым эффектом» лишь при не- большом числе партий с различными противниками. Партнер, сыгравший несколько партий, раскрывает не- хитрую стратегию микрокалькуля- тора и ставит его в наиболее затрудни- тельное положение, задумывая чис- ла 0 или 10 000. Эту возможность можно исключить, формируя при первой попытке число b случайным образом с помощью ранее рассмот- ренных способов, но длина программы в этом случае увеличится. Программа 6. Компоновка чисел при «отгадывании» микрокалькулятором пятизначного числа ИП9 XY П9 П6 ИП9 5 — х=#0 34 69 14 49 11 46 69 05 11 57 34 КИП5 ИП5 1 — х=/= 0 30 ИП6 х#=0 30 х^0 Г5 65 01 11 57 30 66 57 30 59 25 ИП8 ИП7 + П8 ИП7 1 0 X П7 25 68 67 10 48 67 01 00 12 47 ИП8 ИП7 — П8 ИП8 С/П БП 00 Сх П5 68 67 11 48 68 50 51 00 ОГ 45 П9 1 П7 9 9 9 9 9 БП 33 49 01 47 09 09 09 09 09 51 33 И н с т р у к ц и я. Нажать клавиши БП 3 8 гистр X число т разрядов с «угаданными» С/П, что приведет к высвечиванию числа Ь = цифрами и нажимать клавиши В/О и С/П = 99 999; после этого и последующих высве- чиваний «угадываемых» чисел вводить в ре- или С/П; число попыток угадывания хранится в регистре 5. 33
Исходные условия некоторых игр с отгадыванием чисел обеспечивают выбор оптимальной стратегии отгады- вания. В частности, это относится к отгадыванию целых чисел из интер- вала (0; 2") с кратной двум верхней границей интервала. В этом случае для отгадывания задуманного числа от 1 до 2" — 1 наиболее эффективна стратегия, основанная на половинном делении интервала, содержащего ис- комое решение, до получения этого решения. В наихудшем случае иско- мое нечетное число определяют при последней попытке делением интерва- ла шириной А = 2 пополам. В этом случае ширина заключительного ин- тервала А = 1 = 2"/2* и максимальное число попыток k = 1п2"/1п2 = п. На- пример, при выборе верхней границы исходного интервала 2|6 = 65 536 любое число в этом интервале будет «угадано» методом половинного деле- ния не более чем за 16 попыток. В такой игре для заданного числа а из интервала (0; 2") после каждого числа Ь, выбираемого отгадывающим, загадывающий партнер отвечает «уве- личить», или «уменьшить» или «уга- дано». Затем партнеры меняются ролями, и после окончания второй партии выигрыш определяется по минимальному числу попыток уга- дывания. Алгоритм «отгадывания» методом половинного деления отобра- жается следующим описанием: 1. Принять число попыток k = 0, отгадываемое число b = 2"/2. 2. Принять k = k + 1. 3. Если b = а, то число отгадано за k попыток, иначе перейти к шагу 4. 4. Если b < а, то перейти к шагу 5, иначе — к шагу 6. 5. Принять b — b-\-b/2 и перейти к шагу 2. 6. Принять b = b — Ь/2 и перейти к шагу 2. Этот алгоритм несложно реализо- вать на любом языке программиро- 34 вания при отображении подсказок противника «увеличить» и «умень- шить» в виде сохранения варианта «угадываемого» числа b или, соот- ветственно, изменения его знака на отрицательный. Программную реали- зацию такого алгоритма можно до- полнить «загадывающей» частью с формированием «загадываемого» чис- ла по случайному закону и подска- зок отгадывающему это число про- тивнику, реализуемых сравнением «загаданного» числа а и «отгадыва- емых» чисел Ь. Подобная реализация на входном языке микрокалькулято- ров представлена программой 7. Исходное число 2" должно быть целым, и поэтому для его вычисления нельзя использовать оператор Ху. Пусть выбрано 216 = 65 536, а про- тивник задумал число а = 30 000. Тогда при правильных подсказках противника микрокалькулятор по- следовательно высвечивает ответы 5 = 32 768, 16 384, 24 576, 28 672, 30 720, 29 696, 30 208, 29 952, 30 080, 30 016, 29 984, 30 ООО, «отгадав» число а за 12 попыток. Микро- калькулятор, «обученный» по прог- рамме 7, всегда «угадывает» за- думанное число за минимальное число попыток, тогда как его против- ник, не знакомый с оптимальной стратегией игры, может лишь случай- но угадать число за такое же число попыток. Многие логические задачи связаны с перемещениями элементов мно- жеств. Классическим примером явля- ется задача о ханойской башне или пирамидке [5] и ее разнообразные аналоги от шуточных [10] до при- кладных [9]. В этой задаче заданы г дисков различного размера с отвер- стиями и три колышка А, В и С. В исходном состоянии (рис. 8) все диски, пронумерованные числами 1, 2, ..., г в порядке увеличения раз- меров дисков, надеты на колышек А.
Программа 7. «Загадывание» и «отгадывание» целых чисел из интервала (О; 2") П8 КИП4 ИП5 2 _2_ П5 ипз х = 0 23 ИП8 48 Г4 65 02 13 45 63 5Е 23 68 х>0 16 ИП5 + БП 19 ипс ИП5 — ПС 59 16 65 10 51 19 6С 65 11 4С С/П БП 00 ИП8 ИП7 — х#=0 20 х<0 33 50 51 00 68 67 11 57 20 5С 33 1 БП 20 1 /-/ БП 20 Сх ПЗ П4 01 51 20 01 0L 51 20 ОГ 43 44 ИП9 2 П5 БП 19 ИП6 sin х2 д/|Г 69 02 13 45 51 19 66 1С 22 21 ИП9 1 X ПЗ П7 КИП7 Сх П4 БП 69 01 11 12 43 47 Г7 ОГ 44 51 20 Сх П6 КИП6 БП 63 20 ОГ 46 Гб 51 63 Инструкция. Установить переключа- тель Р — Г в положение Р, ввести 2" = Р9; 1) при «загадывании» числа микрокалькуля- тором нажать клавиши БП 6 1 С/П и через 5—15 с остановить выполнение программы нажатием клавиш С/П или ПП, затем нажать клавиши БП 4 6 С/П, что приведет к высве- чиванию нуля; после каждого ввода противни- ком в регистр X отгадываемого числа нажать клавиши В/О и С 'П или С/П, что приведет к высвечиванию РХ = 1 («увеличить»), РХ = Требуется за минимальное число ходов (перемещений одного из дисков на другой колышек так, чтобы боль- шие диски не располагались над меньшими) переместить все диски на колышек С. Оптимальное решение этой зада- чи [1], соответствующее минималь- ному числу 2Г — 1 ходов, заключа- ется в перемещении на каждом пг-м ходу диска с номером, равным номеру первого справа разряда, содержаще- го единицу, в двоичном представле- нии числа т. При этом для четного числа г диск с четным или нечетным номером перемещается соответственно в последовательности колышков АСВА или АВС А, а для нечетно- го г — в последовательности АВСА или АСВА. = — 1 «уменьшить») или РХ = 0 («число отга- дано»); 2) при «отгадывании» числа микро- калькулятором нажать клавиши БП 3 7 С/П, что приведет к высвечиванию РХ = 2"/2; после каждого выполнения программы и высвечи- вания «отгадываемого» числа противник на- жимает клавиши В/О и С/П или С/П без изменения содержимого регистра X (если вы- свечиваемое число меньше загаданного ) или предварительно нажимает клавишу / — / (если высвечиваемое число больше «загадан- ного»); число попыток хранится в регистре 4. Рис. 8. 35
Так как двоичное представление нечетного номера хода содержит единицу в младшем разряде его дво- ичного представления, то на каждом нечетном ходу должен перемещаться наименьший диск с номером 1. Следовательно, при четном ходе возможно лишь перемещение мень- шего из дисков на двух остальных колышках. Поэтому решение зада- чи сводится к последовательному вы- полнению двух логических опера- ций 1. При нечетном ходе переместить наименьший диск на следующий (в порядке АВСАВ... при четном числе дисков г и АСВАС... при не- четном г) колышек. 2. При четном ходе переместить меньший (из оставшихся на осталь- ных двух колышках) диск на другой из остальных колышков. Обозначим номерами i = 1, 2, 3 соответственно колышки А, В, С при четном г и колышки А, С, В при нечетном г, буквой щ — множество номеров дисков на i-м колышке, записанных в порядке уменьшения номеров дисков как многозначное число, а символами Е( ) и Д( ) — целую и дробную части числа, содер- жащегося в скобках. Тогда решение рассматриваемой задачи можно ото- бразить следующим алгоритмом: 1. Принять i = l. 2. Принять nt = (л, — 1)/10. 3. Принять T = E(n,/10), t = = 10Д(щ/10). 4. Принять i = i + 1, но при i = 4 принять i = 1. 5. Принять п, = 10п, + 1 (нечетный ход). 6. Принять i = i + 1, но при i = 4 принять i = 1. 7. Принять К = Е(щ/10), k = = 10Д(п;/10). 8. Если t < k, то перейти к шагу 9, иначе — к шагу 12. 9. Принять nt = 10п< +1. 10. Принять i = i + 1, но при i = 4 принять i = l. 11. Принять п, = Т и перейти к ша- гу 15. 12. Принять Tii — K. 13. Принять i = i + 1, но при i = 4 принять i = l. 14. Принять п,- = 10п( + k. 15. Принять i = i + 1, но при i = 4 принять i = 1 (четный ход). 16. Перейти к шагу 2. Программная реализация этого алгоритма, обеспечивающего мини- мальные требования к емкости па- мяти, зависит от особенностей входно- го языка микро-ЭВМ. При реализации алгоритма на языках персональных ЭВМ, допускающих вывод на дисплей графической информации, его целе- сообразно дополнить операторами, обеспечивающими изображение хода решения задачи. При использовании программируемых микрокалькуля- торов рассмотренных типов для хра- нения множеств номеров дисков на колышках целесообразно выбрать регистры памяти 7, 8 и 9, наиболее удобные для вызова в индикаторный регистр их содержимого. В этом слу- чае описанный алгоритм реализуется программой 8, которая может быть сокращена при использовании микро- калькуляторов «Электроника МК-61» или «Электроника МК-52», входной язык которых содержит операторы для выделения целой и дробной частей числа. При г = 3 и исходных данных 321 =РА,О—РВ=РС после каждого выполнения этой программы получа- ются множества номеров дисков на соответствующих колышках (А, С, B)k = (32, 0, 1)1, (3, 2, 1)2, (3, 21, 0)з, (0, 21, 3)4, (1, 2, 3)5, (1, 0, 32)6, (0, 0, 321)7. Как и следовало ожидать, за- дача решена за минимальное число (23 —1 = 7) ходов (время каждого выполнения программы составляет около 30 с). 36
Программа 8. Решение задачи о пирамидке при г "С 8 Сх П8 П9 7 ПА 1. 0 ПВ КИПА 1 ОГ 48 49 07 4— 01 00 41 Г— 01 — ИПВ — КПА ПП 72 ПС ИПО П4 ПП 11 6L 13 L — 53 72 4С 60 44 53 60 ИПВ X 1 + КПА С/П ПП 60 ПП 60 6L 12 01 10 L — 50 53 60 53 72 ПД ИПС — х<0 49 ИПО ПП 59 ИПВ 72 4Г 6С 11 5С 49 60 53 59 6L X ипд + КПА С/П ПП 60 БП 08 КИПА 12 6Г 10 L — 5С< 53 60 51 08 Г — ИПВ X ИПС + ПП 59 ИП4 БП 43 КПА 6L 12 6С 10 53 59 64 51 43 L — ИПА 1 + ПА ИПВ — х = 0 70 7 ПА 6 — 01 10 4 6L 11 5Е 70 07 4 — КИПА В/О ИПВ — П5 1 + ПО КИПО ИП5 Г — 52 6L 13 45 01 10 40 ГО 65 ИПО — ИПВ X х = 0 87 ИПВ В/О 60 11 6L 12 5Е 87 6L 52 Инструкция. Ввести в регистр 7 номера дисков г, 2, 1 в порядке их уменьшения; для первого хода нажать клавиши В/О и С/П, для последующих — только клавишу С/П; после каждого выполнеьия программы в ре- гистрах 7, 8 и 9 хранятся номера дисков соот- ветственно на колышках А, В и С при четном числе г дисков или А, С и В при нечетном г. Реализация рассмотренного алго- ритма на входных языках персональ- ных ЭВМ, обеспечивающих вывод графической информации, значитель- но более эффективна при показе на дисплее изменяющегося изображение дисков на колышках после каждого хода. По условиям задачи о пирамидке множества номеров дисков упорядо- чены в соответствии с размерами. Однако во многих логических зада- чах приходится выполнять операции над неупорядоченными множествами элементов. Рассмотрим, например, следующую задачу о формировании железнодорожного состава: из восьми или менее вагонов с произвольной нумерацией, находящихся на участке пути В (рис. 9), требуется сформи- ровать на участке А состав с обратным порядком следования вагонов при ис- пользовании тупиков С, вмещающего один вагон, и D, вмещающего весь состав. Посредством логических умо- заключений составим следующий ал- горитм оптимального (за минималь- ное количество операций) решения: 1. Отделить на участке В один ва- гон справа. 2. Если отделенный вагон един- ственный на участке В, то перейти к шагу 3, иначе — к шагу 4. 3. Присоединить вагон к составу на участке А и закончить решение. 4. Переместить отделенный вагон в тупик С. 5. Переместить вагоны с участка В в тупик D. 6. Присоединить вагон из тупика С к составу на участке А. 7. Переместить вагоны из тупика В 37
на участок В и перейти к шагу 1. Регистрируя находящиеся на каж- дом из участков пути вагоны после каждого их перемещения, получим с помощью такого алгоритма после- довательно положения вагонов, соот- ветствующие оптимальному решению рассматриваемой задачи о переформи- ровании железнодорожного состава. При реализации алгоритма на вход- ном языке микрокалькуляторов для выделения элемента множества и его присоединения к другому множеству достаточно воспользоваться ранее описанными фрагментами. В этом случае при хранении множеств номе- ров вагонов, находящихся на участ- ках А, В, С и D, в регистрах памяти с аналогичными обозначениями не- сложно реализовать алгоритм про- граммой 9. Для последовательности вагонов с номерами 2, 7 и 4, находящихся на участке В пути, по этой программе получим перемещения (А, В, С, D)* = = (0, 274, О, О)о, (О, 27, 4, 0)ь (0, 0, 4, 27)2, (4, 0, 0, 27)з = (4, 27, 0, 0)4 = = (4, 2, 7, 0)5, (4, 0, 7, 2)6 = (47, О, О, 2)7 = (47, 2, О, 0)8 = (472, О, О, 0)9. Если предпоследнее размещение, соот- ветствующее эксплуатационной про- верке последнего вагона на участке В, не нужно, то можно дополнить про- грамму фрагментом, соединяющим один элемент множества D с мно- жеством А без промежуточного сое- динения с множеством В. Решения приведенных задач свя- заны с отделением и присоединением по одному элементу множеств. Между тем многие задачи связаны с перебо- ром всех элементов множеств для их сравнения с элементами других мно- жеств. Напомним, что результаты логических операций над двумя множествами А и В называются объединением С = A J В, элементы которого принадлежат множеству А и (или) множеству В; пересечением С = А П В, элементы которого принад- лежат как множеству А, так и мно- жеству В, и логической разностью С = А\В, элементы которой принадле- жат множеству А, но не принадлежат множеству В. Следовательно, в алго- ритмах результат присоединения эле- мента к множеству А можно обозна- чить символом А = A J а, а выделение элемента а из множества А форму- лой А - А\а. Рис. 9. 38
Программа 9. Решение задачи о формировании железнодорожного состава ипв х = 0 07 ИПА С/П БП 00 1 0 6L 5Е 07 6 — 50 51 00 01 00 13 П9 1 + П1 КИП1 ИП9 ИП1 — 1 0 49 01 10 41 Г1 69 41 11 01 00 X ПС ИП1 х = 0 30 ПП 49 ПВ БП 03 12 4С 61 5Е 30 53 49 4L 51 03 ПВ ИПА С/П ИПВ ПД Сх ПВ ИПА С/П ПП 4L 6 — 50 6L 4Г ОГ 4L 6 — 50 53 49 ИПА С/П ипд ПВ Сх пд БП 03 ипс 49 6 — 50 6Г 4L ОГ 4Г 51 03 6С ИПА 1 0 X + ПА Сх ПС В/О 6 — 01 00 12 10 4 — ОГ 4С 52 Инструкция. Ввести множество номе- ров (от 1 до 9) восьми или менее вагонов, находящихся на участке В, в регистр В к очистить регистры А, С и Д; после каждого выполнения программы (для первого пуска С учетом этих обозначений рас- смотрим популярную на заре разви- тия кибернетики задачу о поиске выхода из лабиринта, реализуемую самообучающимися (адаптивными) программами работы ЭВМ. Предполо- жим, что лабиринт состоит из несколь- ких помещений, соединенных прохо- дами, один из которых ведет к выходу из лабиринта. Человек, очутившийся в одном из помещений такого ла- биринта, чтобы избежать бесполезных блужданий, должен каким-либо спо- собом отмечать проходы. Для выхода из исходного помещения он случайно выбирает проход и отмечает его. В следующих помещениях этот человек должен по определенной системе (например, по часовой стрел- ке) исследовать проходы из этих помещений, пропуская отмеченные ранее как тупиковые или пройденные. Если в очередном помещении имеется только один проход, то человек возвращается через него в предыду- щее помещение, отметив этот проход как тупиковый. Если в очередном помещении все проходы оказались от- нажать клавиши В/О и С/П, для последую- щих — только клавишу С/П) множества номе- ров А, В, С и D вагонов, находящихся на соответствующих участках размещены в ре- гистрах РХ = РА = А, РВ = В,РС = С, РД = D. меченными как тупиковые или прой- денные, то человек также должен вернуться через проход, которым он впервые попал в это помещение и который он также отмечает как тупиковый. Исследуя таким образом встречающиеся на пути помещения, человек находит выход из лабиринта. При повторном попадании в лабиринт человек, минуя тупиковые проходы, находит более короткий путь. Обозначая (или сохраняя предыду- щие обозначения) проходы в новом помещении при их проверке по ча- совой стрелке последовательностью символов а„ последним символом следует указывать проход, через который человек впервые попал в это помещение. Обозначив этот проход символом щ, выход из лабиринта — символом Ь, а множества тупиковых и пройденных проходов — симво- лами Т и П, формализуем выбор про- хода из очередного помещения сле- дующим алгоритмом: 1. Принять i = l. 2. Если at = Ъ, то выход найден, иначе перейти к шагу 3. 39
3. Если at — щ, то перейти к шагу 4, иначе — к шагу 5. 4. Принять Т = Т J щ и выйти в предыдущее помещение, перейдя для него к шагу 1 алгоритма. 5. Если а, £ Т (а, принадлежит мно- жеству Т), то перейти к шагу 7, иначе — к шагу 6. 6. Если at £ П, то перейти к шагу 7, иначе — к шагу 8. 7. Принять i = i + 1 и выйти к ша- гу 2. 8. Принять П = П U dt и перейти в следующее помещение, приняв для него dk = di и перейдя к шагу 1 ал- горитма. Последовательное выполнение этого алгоритма для очередных помещений приводит к выходу из лабиринта, причем действия, требуемые алгорит- мом от человека, могут успешно ими- тироваться ЭВМ, работающей по соот- ветствующей программе. Так как при повторных поисках выхода из лаби- ринта сохранение множества Т обес- печивает исключение ряда ненуж- ных операций, то такие программы называют самообучающимися или адаптивными (приспосабливающи- мися). Формально решение рассматривае- мой задачи основано на операциях объединения и логического вычита- ния множеств. Пусть, например, в процессе поиска выхода проходы лабиринта обозначены номерами, по- казанными на рис. 10, а. Тогда струк- тура лабиринта отобразится совокуп- ностью множеств номеров проходов из каждого помещения (1, 3), (1, 2, 4), (2, 5), (3, 6), (4, 7), (5), (6), (7, 8). При вычитании тупиковых множеств (5) и (6), соответствующих помеще- ниям с одним выходом, получим множества (1), (1, 2, 4), (2), (3), (4, 7), (7, 8) с тупиковыми множествами (2) и (3). В результате вычитания этих множеств (1), (1, 4), (4, 7), (7, 8) множество (1) не является тупиковым, так как проход 1 является исходным. Объединение этих множеств (1,4, 7,8) и определяет множество проходов, ведущих из исходного помещения к выходу из лабиринта. При выполнении операций про- верки отношений а, (Е Т и а, С 77 в алго- ритме требуется сравнивать элемент а( со всеми элементами множеств Т и П, выделяемыми из этих множеств. Перебор элементов множеств в случае Рис. 10. 40
реализации алгоритма на входном языке программируемых микрокаль- куляторов обеспечивается при N? > 6 фрагментом вида HIINi IIN2 КИПЫг—► —«-HIINa — 1 OXIIN3, после выполне- ния которого в регистре N} хранится исходное нормализованное отделе- нием запятой первого элемента мно- жество ai, аг, .... ак, в регистре Nz — элемент щ этого множества, в ре- гистре N3 — нормализованная логи- ческая разность а2, оз, ..., ak исходного множества и выделенного элемента. Последующее занесение содержимого регистра N3 в регистр N\ в цикле обеспечивает выделение всех элемен- тов исходного множества. При поиске микро-ЭВМ выхода из лабиринта пользователю приходится выполнять функции «органов чувств», вводя перед каждым выполнением программ для выбора прохода в оче- редное помещение множество номеров проходов из данного помещения. Полное число проходов в лабиринте ограничено разрядностью мантиссы программируемого микрокалькуля- тора, и при его использовании сле- дует нумеровать проходы цифрами от 1 до 8 (в произвольном порядке), обозначая цифрой 9 проход, яв- ляющийся выходом из лабиринта (рис. 10, б). Для упрощения програм- мы множество номеров проходов из данного помещения целесообразно вводить в нормализованном виде с запятой после первого номера, запи- сывая последним номер прохода, через который данное помещение по- сещалось впервые. С учетом этих соображений, выделив регистры 7, С и Д для хранения соответственно нормализованного множества прохо- дов, тупикового множества Т и мно- жества П пройденных проходов, реализуем рассмотренный алгоритм программой 10. Для полной имита- ции действий человека, попавшего в лабиринт, первый номер в множестве номеров выходов из исходного поме- щения следует выбрать случайным образом, не руководствуясь планом лабиринта, а перечисление номеров проходов целесообразно производить по часовой стрелке, начиная с того, через который посещено помещение первый раз. Результаты выполнения этой про- граммы точно имитируют действия человека, ищущего выход из лабирин- та согласно принятым правилам. Так, предположим, что выходы из исход- ного помещения человек обозначил символами 1 и 2 и случайно выбрал выход 1. Попав в следующее поме- щение с тремя выходами, он отме- чает их, согласно принятым прави- лам, по часовой стрелке от исходного прохода, через который он впервые вошел в помещение, например, но- мерами 3, 4 и 1 (выбор номеров про- изволен, но их последовательность должна отвечать правилам) и, ес- тественно, выбивает проход 3 в сле- дующее помещение. Пройдя в сле- дующее помещение с двумя входами, отмечаемыми как 5 и 3, он попадает, например, в следующее помещение с одним входом и вынужден вернуться в помещение с входами 3, 4 и 1, отме- тив проходы 3 и 5 как тупиковые. Выбрав (при отсчете по часовой стрел- ке от исходного прохода 1) проход 4, он перейдет в следующее помещение. Так как ввод пользователем мно- жества номеров очередного помеще- ния перед каждым пуском программы выполняется по тем же правилам, которыми руководствуется попавший в лабиринт человек, то его действия не подменяются пользователем. Если человек попал в помещение с двумя входами лабиринта, план которого (не известный человеку, попавшему в лабиринт) показан на рис. 10, б, то действия микрокалькулятора отобра- жаются данными табл. 2. После пер- вого поиска выхода из лабиринта 41
2. Поиск выхода из лабиринта по программе 10 Первый поиск Повторный поиск (PC — 35) ЕЬод Время счета, с Выбор Ввод Время счета, с Выбор 1,2 15 1 1,2 15 1 3,41 18 3 3,41 30 4 5,3 22 5 6,74 20 6 5 9 5 9,86 4 0 5,3 15 3 3,41 35 4 6,74 30 6 9,86 4 0 тупиковое множество содержит PC = = 35, а множество пройденных про- ходов РД = 6453. Если сохранить содержимое регистра С, очистив ре- гистр Д, то (при условии, что случайно снова будет выбран проход 1 или че- ловек сознательно его выберет с уче- том приобретенного опыта) при по- вторном поиске, как видно из данных табл. 2, выход будет найден быстрее. Программа 10. Поиск с самообучением выхода из лабиринта П7 КИП7 ИП7 — П4 ИП7 9 х#=0 47 Г7 25 67 11 44 67 09 11 57 75 ИП4 х#=0 67 ипс П8 КИП8 ИП8 —- 75 64 57 67 6С 48 Г8 25 68 11 ИП7 ИП8 — х=#=0 52 х=/=0 33 1 0 67 68 11 57 52 25 57 33 01 00 X БП 15 ипд П9 КИП9 ИП9 — ИП7 12 51 15 6Г 49 Г9 25 69 11 67 ИП9 — х=/=0 52 —> х=/=0 58 1 0 X 69 11 57 52 25 57 58 01 00 12 БП 34 ИП4 1 0 X БП 00 ИПД 1 51 34 64 01 00 12 51 00 6Г 01 0 — ИП7 + ПД БП 74 ипс 1 0 00 13 67 10 4Г 51 74 6С 01 00 — ИП7 -Г ПС ИП7 С/П БП 00 13 67 10 4С 67 50 51 00 Инструкция. Очистить регистры С и Д, перед каждым пуском программы вводить в регистр X нормализованное (с запятой после первого номера) множество номеров проходов из очередного помещения (с последним номе- ром прохода, через который помещение было посещено впервые, и обозначением выхода номером 9) и нажимать клавиши В/О и С/П (для первого пуска программы обязательно) или С/П; после выполнения программы высве- чивается выбираемый номер прохода в сле- дующее помещение или нуль при выходе из лабиринта (множество номеров пройденных проходов хранится в регистре Д); при повтор- ном поиске очистить регистр Д, сохранив содержимое регистра С.
ПтаваХ ИГРЫ 4 Неполной ИНФОРМАЦИЕЙ Различные игры с двумя * или более участниками, по очереди при- нимающими решения (называемые ходами) об изменении игровой ситуа- ции, относятся к одной из двух основ- ных групп. Первая из них включает игры с полной информацией, участ- ник которых принимает очередное решение после того, как становится известным предыдущий ход против- ника.** Теоретически для таких игр возможен перебор всех вариантов и выбор из них наилучшего варианта, обеспечивающего выигрыш или, по крайней мере, минимальный про- игрыш одного из участников, кото- рым может быть и ЭВМ. Эта особенность игр с полной ин- формацией наглядно описана в старом кибернетическом анекдоте об игре двух ЭВМ в шахматы: после первого хода одной из них вторая, перебрав все варианты, отвечает: «Сдаюсь!». В этой истории анекдотично лишь предположение о возможности пере- бора всех вариантов шахматной игры. Полное их число порядка 2*16 превы- шает число электронов во Вселенной и, следовательно, в нашем мире не хватит материала для создания ЭВМ, играющей в шахматы подобным ме- тодом. Вместе с этим описанная в анекдоте ситуация характерна для игр с небольшим числом вариантов, * В дальнейшем участника, начинающего игру, для краткости будем называть первым, а его противника — вторым участником. ** Ко второй группе относятся игры с не- полной информацией (см. гл. 5). которые возможно перебрать для выбора наилучшего, обеспечивающего успешное участие ЭВМ в игре. В ка- честве примера рассмотрим известную шахматную задачу Лойда, в которой белые начинают игру и ставят мат черному королю за три хода при ис- ходном положении фигур, показан- ном на рис. 11. Оптимальный алго- ритм решения этой задачи в шахматной записи имеет вид: 1. d4 Kph5 2. ФбЗ Kph4 (g4) 3. ФЬЗ X или 1... Kpg4 2. e4 + Kph4 3. g3x[4]. Реализацию этого алгоритма можно поручить даже программируемому микрокалькулятору, но следует пред- варительно условиться о цифровом кодировании ходов. Для этого поля шахматной доски, занимаемые на очередном ходу пешками, будем обо- значать цифрами ху, где х и у — номера полей по горизонтали и верти- кали. Для других фигур в общем случае целесообразно использовать трехзначный код zxy, где х и у опре- деляют поле, занимаемое фигурой с номером (считая слева направо) г в исходном положении фигур. При использовании подобного ко- дирования ходов решение рассмотрен- ной трехходовой задачи на входном языке микрокалькуляторов обеспечи- вается программой 11, составление которой не требует пояснений. Подобным образом по шахматной записи оптимального варианта игры можно программировать решение не только шахматных этюдов, но и не очень сложных вариантов игры в шах- маты. К ним, в частности, относится 43
Программа 11. Решение шахматной задачи Лойда Сх ог 4 04 4 04 С/П 50 t 0Е 8 08 5 05 11 х = 0 5Е 21 21 4 04 4 04 3 03 С/П 50 t 0Е 4 04 8 08 3 03 t 0Е 0 00 С/П 50 t 0Е 5 05 4 04 С/П 50 1 0Е 7 07 3 03 t 0Е 0 00 С/П 50 БП 51 00 00 Инструкция. Нажать клавиши В/О и С/П (для последующих партий можно на- жимать только клавишу С/П) для высвечива- ния первого хода белых 44 (или d4), затем вводить код ху поля, занимаемого королем старинная игра «магараджа», где белые играют по обычным правилам, но достигшая края доски пешка не заменяется другой фигурой. Черные обладают лишь одной фигурой, назы- ваемой магараджей и обладающей правами ферзя и коня одновременно (рис. 12). Наиболее короткий вариант победы белых над магараджей описан в кни- ге [4], но он не учитывает возмож- ность произвольного расположения магараджи перед началом игры. Из- при ходе черных и нажимать только клави- шу С/П для высвечивания следующего хода белых или (при мате) нуля с хранением последнего хода белых в регистре Y. менив соответственно последователь- ность ходов, составим следующую за- пись игры белых: 1. КсЗ 2. а4 3. ЛаЗ 4. ЛЪЗ 5. Kf3 6. Ь4 7. ЛЬЗ 8. ЛgЗ 9. d4 10. Фаз 11. Фе4 12. Ф<15 13. ЛЬ7 14. ЛЬ8. Если магараджа зани- мает поле аб, то 15. е4 16. Cg5, иначе 15. Cg5 16. е4. Следует отметить, что боевые ка- чества магараджи обеспечивают ему серьезные преимущества перед не- достаточно опытным противником. Однако при игре с микрокалькуля- Программа 12. Шахматная игра «магараджа» Сх 1 2 ПО ИПО 1 — х =# 0 13 кипо ОГ 01 U2 40 60 01 11 57 13 го С/П БП 04 4 4 5 С/П t 1 2 50 51 04 04 04 05 50 0Е 01 02 7 С/П t 8 7 8 С/П t 1 6 07 50 0Е 08 07 08 50 0Е 01 06 — х = 0 38 ИПС С/П ипд 0 С/П ипд С/П 11 5Е 38 6С 50 6Г 00 50 6Г 50 ИПС 0 С/П г 6С 00 50 Инструкция. (454 = Р1; 443 = Р2; 44 = РЗ; 873 = Р4; 883 = Р5; 84 = Р6; 763 = =Р7; 123=Р8; 113=Р9; 14 = РЛ,- 233 = = РВ; 54 —PC; 375 = РД) нажать клавиши В/О и С/П для высвечивания первого хода белых РХ = 233, или КсЗ, далее вводить в регистр X код ху поля, занимаемого мага- раджей и нажимать только клавишу С/П, что приведет к высвечиванию хода белых или (при последнем ходе белых) нуля с хранением последнего хода белых в регистре У. 44
тором, «обученным» по реализующей приведенный вариант программе 12, противник может отвечать «Сдаюсь!» после первого хода микрокалькуля- тора, играющего белыми. Таким образом, если универсаль- ным ЭВМ высокой производитель- ности до сих пор не удается обыгры- вать в шахматы гроссмейстеров, то микрокалькулятор с программой 12 становится чемпионом мира по шах- матной игре под названием «мага- раджа». Подобным образом после перебора вариантов и выбора оптимального программируется участие микро-ЭВМ и в других простейших играх на шахматной доске, подобных «мини- шахматам» [2] или «мини-шашкам» на доске с уменьшенным числом 45
клеток. Метод полного перебора ва- риантов пригоден и для других игр, причем для выбора оптимального варианта обычно составляют граф * (дерево) игры с отображением возмож- ных ходов участников игры. Приме- ром может служить игра Гранди, участники которой по очереди раз- бивают на две неравные части исход- ное множество из S предметов (на- пример, кучку спичек), затем одно из полученных множеств и т. д. Выигрывает участник игры, после хода которого исходное множество разбито на множества, содержащие только один или два предмета. * Графом называют чертеж, на котором линиями (ветвями графа) отображены связи между объектами, обозначенными условными символами (вершинами графа). 46
Программа 13. Игра Гранди при S = 10 П9 49 8 08 2 02 11 х = 0 5Е 11 11 7 07 2 02 1 01 БП 51 14 14 6 06 3 03 1 01 С/П 50 П9 49 5 05 3 03 1 01 1 01 — 11 X = 0 5Е 30 30 3 03 3 03 2 02 2 02 1 01 БП 51 35 35 4 04 2 02 2 02 1 01 1 01 С/П 50 Сх ОГ 2 02 2 02 2 02 1 01 1 01 1 01 1 01 t 0Е 0 00 С/П 50 БП 51 00 00 Инструкция. Ввести в регистр X после- довательность чисел 91, 82, 73 или 64, обозна- чающих числа предметов в множествах, на которые противник микрокалькулятора раз- бивает исходное множество с 10 предметами, и нажать клавиши В/О и С/П, что приведет к высвечиванию ответного хода микрокальку- По графу такой игры видно, что, например, для S = 6 (рис. 13) первый участник выигрывает при разбиении исходного множества на два мно- жества, содержащие по четыре и два предмета, но может проиграть при разбиении исходного множества на два по пять и одному предмету. Следовательно, оптимальному вари- анту игры соответствует начинаю- щийся первым из этих двух возмож- ных ходов. Предельное число S предметов при участии в этой игре микро-ЭВМ определяется лишь ее характеристи- ками. При программировании микро- калькуляторов с отображением пред- метов в очередных множествах после- довательностью однозначных чисел, высвечиваемых на индикаторе, макси- мальное число S — 10. Оптимальная игра микрокалькулятора в этом слу- чае обеспечивается программой 13. Если противник первым ходом раз- бивает исходное множество на два, например, с числами 8 и 2 предме- тов, т. е. вводит 82 = РХ, то микро- калькулятор отвечает ходом РХ = лятора, играющего вторым; далее аналогично вводить множества однозначных чисел (в по- рядке их уменьшения) предметов в множествах, включая разбитые, но нажимать только клави- шу С/П; при выигрыше микрокалькулятора высвечивается нуль, а победное разбиение множеств хранится в регистре Y. = 721, разбивая первое множество на два с числами 7 и 1 предметов, при ходе противника 5221 = РХ микрокалькулятор отвечает ходом РХ = 42 211 и после единственно воз- можного хода противника 322 111 = = РХ выигрывает ходом РХ = = 2 221 111, высвечивая 0. При увеличении исходного числа предметов сложность графов по- Рис. 13. 47
Рис. 15. добных игр быстро возрастает, и составителю их оптимальных алго- ритмов для игры машины прихо- дится прибегать к различным при- емам, обеспечивающим уменьшение числа перебираемых вариантов. Для многих игр это оказывается воз- можным при учете симметрии игро- вых ситуаций. Примером может служить распро- страненная игра «крестики — ноли- ки», участники которой по очереди отмечают крестиками и кружочками занимаемые клетки прямоугольной таблицы размера 3X3, причем вы- игрывает занявший первым три смеж- ных клетки по диагонали, вертикали или горизонтали. При программиро- вании микро-ЭВМ с малым ресурсом памяти целесообразно предоставить ей первый ход для занятия централь- ной клетки таблицы. В этом случае возможны два варианта игры, исход которых при безошибочной игре обоих участников определяется пер- вым ходом противника машины. Если он занимает не угловую клетку (четную при нумерации клеток, по- казанной на рис. 14, в), то игра закан- чивается выигрышем микро-ЭВМ, при занятии же угловой (нечетной) клетки игра сводится к ничейному резуль- тату. 48
С учетом симметрии таблицы отно- сительно ее клеток с четными и не- четными номерами составим граф игры (рис. 15) при занятии противни- ком микро-ЭВМ своим первым ходом клетки с номером 2 (рис. 14, а) и клет- ки с номером 1 (рис. 14, б). В этих случаях ходы микро-ЭВМ следует выбирать так, чтобы противник был вынужден делать ответные ходы (показанные на рис. 15 черными стрелками) под угрозой немедленно- го проигрыша. При выборе противни- ком ходов, отличающихся от указан- ных на графе, ходы микро-ЭВМ должны соответствовать номерам кле- ток, отличающимся от указанных на графе на такую же величину. Следовательно, достаточно выбрать стратегию игры микро-ЭВМ в зави- симости от четности клетки, занимае- мой первым ходом противника или ответным ходом машины. При этом в алгоритме игры должен быть пре- дусмотрен выбор номеров клеток в тех случаях, когда вычисляемый номер меньше 1 или больше 8. Этим требованиям отвечает следующее опи- сание алгоритма, где символами тп£ и и, обозначены ходы микро-ЭВМ и ее противника: 1. Принять т, = 9. 2. Принять х = П\ и выполнить ша- ги 9—11. 3. Если т.2 нечетно, то перейти к ша- гу 4, иначе — к шагу 6. 4. Принять х = у и выполнить шаги 9—11. 5. Принять 77i4 = у и высветить 77 (выигрыш). 6. Принять X = П2 и выполнить ша- ги 9—11. 7. Принять X = 714 и выполнить ша- ги 9—11. 8. Высветить 0 (ничья). 9. Если х — 1=0, то принять тп, = = 8, иначе принять mL = х — 1. 10. Запомнить тг,; если mt — 4^0, то принять у = mt — 4 + 8, иначе при- нять у = mi — 4. 11. ЕСЛИ у #= П1, ТО ПРИНЯТЬ 771,4-1 = = у и высветить 77 (выигрыш). Программа 14. Игра «крестики — иолики» t 9 С/П ПП 25 л X COS х<0 17 0Е 09 50 53 25 20 12 1Г 5С 17 ИП9 ПП 25 1 — БП 48 ИП7 ПП 25 69 53 25 01 11 51 48 67 53 25 ИП7 ПП 25 0 С/П 1 — х = 0 30 8 67 53 25 00 50 01 11 5Е 30 08 П9 С/П П7 ИП9 4 — х=/=0 40 х < 0 42 49 50 47 69 04 11 57 40 5С 42 8 + П8 ИП7 — х =/= 0 51 ИП8 7 7 08 10 48 67 11 57 51 68 07 07 С/П ИП9 В/О 50 69 52 Инструкция. Установить переключа- тель Р — Г в положение Р, нажать клавиши В/О и С/П для высвечивания номера РХ = = 9 центральной клетки, «занимаемой» микро- калькулятором; после каждого высвечивания номера клетки, «занимаемой» микрокалькуля- тором, вводить в регистр X номер клетки, «занимаемой» противником, и нажимать толь- ко клавишу С/П; при выигрыше микрокаль- кулятора высвечиваются цифры 77 (номер клетки, «занимаемой» последним ходом микро- калькулятора, хранится в регистре У); при ничейном результате высвечивается нуль. 49
На входном языке микрокальку- ляторов этот алгоритм реализован программой 14, где шаги 9—11 пред- ставлены подпрограммой, первая часть которой реализует шаг 9 ал- горитма с высвечиванием хода микро- калькулятора, а вторая часть —ша- ги 10 и 11. Микрокалькулятор, «обученный» по программе 14, выигрывает при пер- вом ходе противника на клетку с четным номером или сводит игру к ничейному результату в противном случае. Пример партии с микро- калькулятором: В/О С/П РХ = 9; Ь = РХ С/П РХ = 7; 3 = РХ С/П РХ = 8; 1=РХС/ПРХ = 77;РУ = 4. Для определения четности чисел в программе 14 не использован фраг- мент ИП8 2—х=#0 А] х<0 А2, где А1 — адрес перехода при четном со- держании регистра 8, а А2 — адрес перехода к оператору 2 этого же фрагмента. Такой фрагмент на один шаг короче фрагмента, используемого для определения четности в преды- дущих программах, но выполняется дольше и целесообразен лишь при небольших числах, содержащихся в регистре 8. Игра «крестики-нолики», как и мно- гие другие игры, имеет много анало- гов, отличающихся по внешнему оформлению. Участники одной из таких игр [3] по очереди выбирают по одной из карточек со словами СОК, КЛИН, РЕКА, РЫБА, ТОР, НИТЬ, СЕТЬ, БУСЫ, НЕБО, причем выигры- вает участник, первым набравший три карточки с одинаковой буквой. Если пронумеровать карточки цифра- ми от 1 до 9 в приведенной после- довательности слов, то в этой игре также может успешно участвовать микрокалькулятор с программой 14. Участники игры «дорожная проб- ка» [3] по очереди закрашивают карандашом определенного цвета од- ну из дорог карты, показанной на рис. 16. Выигрывает участник, первым закрасивший своим цветом все доро- ги, ведущие к одному из городов. Если заменить буквы, обозначающие доро- ги, в алфавитном порядке цифрами от 1 до 9, то одним из двух участ- ников такой игры также может стать микрокалькулятор с введенной в па- мять программой 14. Участники еще одной игры по оче- реди выбирают игральные карты от Рис. 16. 50
туза до девятки, обозначенные цифра- ми от 1 до 9, причем выигрывает набравший первым три карты с сум- мой числовых значений 15. Связь этой игры с «крестиками — ноликами» становится очевидной, если клетки игровой таблицы пронумеровать, как показано на рис. 17, когда образуется так называемый магический квадрат с одинаковыми суммами номеров клеток, расположенных по горизон- тали, вертикали или диагонали. Если теперь карты, разложенные в клетках такого магического квадрата, перену- меровать в соответствии с рис. 14, в, то в такой игре с картами может успешно участвовать и микрокальку- лятор с программой 14, но для этого случая можно составить и более простую программу, воспользовав- шись свойствами магического квад- рата. Условия рассмотренных игр близки к условиям игры Тригекс [3], два участника которой по очереди зани- мают вершины фигуры, показанной на рис. 18, причем выигрывает за- нявший первым три вершины, рас- положенные на одной прямой. Однако в такой игре число вариантов зна- чительно больше, чем в «крестиках — ноликах», и сокращение числа пере- бираемых вариантов еще более жела- тельно. Для этого достаточно установить, что вершины 1, 3 и 4 перекрывают все прямые, и, следовательно, занятие этих вершин лишает противника возможности выиграть. Так как остальные вершины симметричны относительно этих вершин, то для первого хода достаточно выбрать одну из них (например, вершину 1), а для последующих ходов — такие вершины, занятие которых создаст угрозу проигрыша противника и заставит его предотвращать эту угро- зу, а не добиваться более выигрыш- ного положения. При таком выборе ходов число рассматриваемых вариан- тов оказывается не очень большим и граф игры может быть непосред- ственно использован для программи- рования микро-ЭВМ. Примером может служить программа 15, построенная по такому графу (рис. 19). Игра по программе 15 неизбежно приводит к победе микрокалькуля- тора, например 77 =РД В/О С/П РХ = 1; 8 = РХ С/П РХ = 2-, 5 = РХ С/ПРХ = 7; 9 = РХ С/П РХ=77; PY = 3 В/О С/П РХ=1; 4 = РХ С/ПРХ = 9; 8 = РХ С/П РХ=77, PY - 7 и т. д. Составляя алгоритм некоторых игр, можно избежать необходимости пере- бора всех вариантов, используя сим- метрию ходов. Примером является игра на шахматной доске с исход- ным положением пешек, показанным на рис. 20, а. Игроки по очереди пере- двигают свои пешки по вертикалям доски, не «перепрыгивая» через чу- жие пешки, с целью «запереть» все пешки противника (рис. 20, б). При нечетном числе игровых вертикалей начинающие игру белые обеспечи- вают себе победу, «заперев» первым 51
ходом одну из пешек противника и в дальнейшем на каждый ход против- ника по одной из вертикалей отвечая симметричным ходом по другой вер- тикали [13]. Эту игру уместно назвать «мушкетерами», движения которых при фехтовании напоминают переме- щения пешек в игре. Рассмотренный способ оптималь- ной игры белых в «мушкетеры» легко программировать при кодировании цифрами ху полей, занимаемых пеш- ками при очередном ходе. Победа программируемого микрокалькулято- ра в этой игре обеспечивается про- граммой 16. Пример партии в «мушкетеры» с микрокалькулятором, «обученным» по программе 16: БП 4 О С/П РХ = = 37; 25=РХ С/П РХ=14; 15 = = РХ С/П РХ = 24; 17=РХ С/П РХ=16; 26 = РХ С/П РХ = 25; 18 = РХ С/П РХ=17; 27 - РХ С/П РХ = 26; 28=РХ С/П РХ = 27. Правила многих игр с полной информацией однозначно определяют концевую позицию, соответствующую выигрышу одного участника, первым достигшего этой позиции, и про- игрышу другого участника. Можно найти оптимальную стратегию (наи- лучший метод) такой игры, не при- Рис. 19. 52
Программа 15. Игра Тригекс Сх ОГ 1 01 С/П 50 П7 47 4 04 11 х 0 59 36 36 3 03 — 11 х>0 59 53 53 2 02 — 11 х = 0 5Е 74 74 5 05 С/П 50 П8 48 2 02 — 11 х#=0 57 26 26 Вх 0 ИПД 6Г С/П 50 6 06 С/П 50 П9 49 8 08 —- 11 х = 0 5Е 23 23 4 04 ипд 6Г С/П 50 7 07 С/П 50 П8 48 9 09 — 11 х = 0 5Е 23 23 8 08 С/П 50 П9 49 4 04 — 11 X = 0 5Е 23 23 6 06 ипд 6Г С/П 50 9 09 С/П 50 П8 48 7 07 — 11 X — 0 5Е 23 23 8 08 С/П 50 П9 49 3 03 — 11 X == 0 5Е 23 23 ИП7 67 6 06 — 11 х = 0 5Е 23 23 БП 51 33 33 2 02 С/П 50 П8 48 5 05 __ 11 х = 0 5Е 23 23 ИП7 67 7 07 — 11 X = 0 5Е 88 88 БП 51 26 26 7 07 С/П 50 П9 49 3 03 — 11 X = 0 5Е 23 23 9 09 ипд 6Г С/П 50 Инструкция. (77 = РД} В/О С/П РХ = = 1-,тц=РХ С/П РХ = т2; п2 = РХ С/П РХ = = т3 ... С/П РХ = 77 (выигрыш микрокаль- бегая к полному перебору ее вариан- тов. Для этого следует решить задачу «с конца», определив для концевой позиции предыдущую и последующие позиции, называемые особыми, от каждой из которых можно достичь следующей особой позиции (и, в ко- нечном итоге, концевой) только за два хода. Участник, начинающий игру из неособой позиции, выигрыва- ет, достигая первым и последующими ходами особых позиций, тогда как второй участник, начинающий свой первый ход из особой позиции, может выиграть только при ошибке про- тивника. Одна из простейших игр с особыми позициями называется игрой Баше (по имени автора, описавшего ее еще в начале XVII столетия). Основной кулятора); PY = mt (номер, вершины, занятой последним ходом микрокалькулятора). вариант этой игры описывается сле- дующими правилами: из множест- ва S предметов (например, спичек или камешков) игроки по очереди забирают от одного до k предметов, причем выигрывает взявший послед- ний предмет. Особые позиции в этой игре соот- ветствуют числу предметов, кратному k + 1. Следовательно, согласно упомя- нутой в предыдущей главе, теории сравнений, для определения, особая ли позиция с S предметами, необхо- димо найти остаток от деления S на fe + 1: d = S - (k + 1) E(S/(fe + 1)), где E — символ целой части содержи- мого скобок. Если d 0, то позиция неособая, и участник, начинающий игру с этой 53
позиции, должен взять d предметов для перехода к особой позиции, а при последующих ходах должен брать т = k + 1 — п предметов, где п — число предметов, взятых противником предыдущим ходом. Если же d = О, то позиция особая и участнику, на- чинающему ход с этой позиции, целе- сообразно взять только один предмет, чтобы увеличить вероятность ошибоч- ного хода противника, не занимающе- го особой позиции этим ходом. Эта оптимальная стратегия для обоих участников игры Баше реали- зована в алгоритме, схема которого показана на рис. 21. В алгоритме пре- дусмотрена установка флага (/ = 0) при ходе из особой позиции, который снимается (f = d) при занятии особой позиции для последующих переходов У Рис. 20. 12 3х а 54
Программа 16. Игра белыми в «мушкетеры» П9 2 0 — х<0 24 ИП1 ИП9 П1 — 49 02 00 11 5С 24 61 69 41 11 х>0 18 ИП.4 + П4 С/П БП 00 ИПЗ XY 59 18 64 10 44 50 51 00 63 14 — ПЗ БП 15 ИП2 ИП9 П2 — х>0 35 11 43 51 15 62 69 42 11 59 35 ИПЗ + ПЗ БП 15 ИП4 XY — БП 14 63 10 43 51 15 64 14 11 51 14 Сх 1 8 П1 2 8 П2 1 1 ПЗ ог 01 08 41 02 08 42 01 01 43 2 1 П4 3 7 БП 15 02 01 44 03 07 51 15 Инструкция. Нажать клавиши БП 4 О С/П, что приведет к высвечиванию первого хода белых на клетку ху = 37; после каждого хода микрокалькулятора вводить код ху клет- только к особой позиции. На вход- ном языке программируемых микро- калькуляторов этот алгоритм пред- ставлен программой 17. Для проверки программы 17 сле- дует выполнить: 3=Р8; 13 — Р9; О =РХ БП 5 О С/П РХ= 1 (РУ = 12); 1 = РХ С/П РХ = 3 (РУ = 8); 3 = РХ С/П РХ = 1 (РУ = 4); 1=РХ С/П РХ = О (РУ = 3) (выиграл микро- ки, занимаемой ходом черных, в регистр X и нажимать клавиши В/О и С/П или С/П; окончание игры определяется положением фигур на доске. калькулятор, «взявший» последним ходом 3 предмета); 1 = РХ БП 5 О С/П РХ = 1 (РУ = 11); 3 = РХ С/П РХ = 1 (PY = 7); 3 = РХ С/П РХ=1 (РУ = 3); 3=РХ С/П РХ = РУ = О (микрокалькулятор проиграл). Известны различные варианты игры Баше. Участники одного из них по очереди добавляют к множеству от одного до k предметов, причем Рис. 21. 55
Программа 17. Игра Баше П4 ИП7 х = 0 42 ИП6 ИП4 — х=#=0 37 П6 44 67 5Е 42 66 64 11 57 37 46 ИП5 -Л_ 1 + П1 КИП1 ИП6 ИП1 ИП5 X 65 13 01 10 41 Г1 66 61 65 12 —- х = 0 30 ИП6 1 — П6 1 БП 39 11 5Е 30 66 01 11 46 01 51 39 П7 ИП6 ИП7 — П6 х = 0 38 С/П ИП7 С/П 47 66 67 11 46 5Е 38 50 67 50 БП 00 ИП5 ИП4 — П7 ИП6 ИП5 БП 33 51 00 65 64 11 47 66 65 51 33 П4 Сх П7 ИП9 П6 ИП8 1 + П5 ИП4 44 ОГ 47 69 46 68 01 10 45 64 БП 00 51 00 Инструкция. (k = Р8, S = Р9) ввести О = РХ при первом ходе микрокалькулятора или число предметов, забираемых противником на первом ходу; п = РХ и нажать клавиши БП 5 О С/П, что приведет к высвечиванию числа т предметов, «взятых» микрокалькуля- тором его первым ходом (в регистре У хранится число оставшихся предметов); в дальнейшем выигрывает первым дополнивший множество до заданного числа S пред- метов. Для участия микрокалькуля- тора в этом варианте игры также пригодна программа 17, но в ре- гистре Y в этом случае хранится число предметов, которыми требуется допол- нить множество до заданного числа S предметов. В других вариантах игры Баше про- игрывает взявший или положивший последний предмет. Для участия микрокалькулятора в таких играх также можно использовать програм- му 17, но перед началом игры в ре- гистр 0 следует ввести число S — 1. Тогда высвечивание нуля будет озна- S S-1 3 2 1 0 Рис. 22. вводить в регистр X число предметов, взятых на очередном ходу противника, и нажимать только клавишу С/П, что будет приводить к высвечиванию числа предметов, «взятых» в ответ микрокалькулятором; игра заканчивает- ся при высвечивании нуля выигрышем микро- калькулятора (PY = т=/=0) или его противни- ка (РУ = 0). чать выигрыш микрокалькулятора (РУ = 1) или его противника (РУ = 0), оставляющих сопернику один пред- мет, который должен быть взят. Для игры Баше иногда используют игровую доску с последовательностью обозначенных порядковыми номера- ми клеток с максимальным номером S клетки, в которую перед началом игры помещают фишку (рис. 22). Игроки по очереди передвигают фишку на несколько (но не более k) клеток с выигрышем игрока, первым достиг- шим последней клетки с номером 0. Эти условия, соответствующие основ- ному варианту игры Баше, изменяют в соответствии с правилами других вариантов. В таких играх также мо- жет участвовать микрокалькулятор, «обученный» по программе 17. Более сложная игра с особыми по- зициями для двух множеств предме- тов известна на Востоке под названием 56
Цзяныпидзы, или «выбирание кам- ней» [13]. Участники этой игры по очереди берут произвольное (но не менее одного) число предметов из одного множества или одинаковое из обоих множеств, причем выигры- вает взявший последний предмет. В этой игре, как показывает матема- тический анализ [5], некоторые из позиций (а, Ь) с числами а и b пред- метов (а Ь) в множествах являются особыми позициями (ck, dk)k = (0, О)о, (1, 2),, (3, 5)2, (4, 7)з, (6, 10)4, (8, 13)5, ... с разностью k = dk — с* = 0, 1, 2, 3, 4, 5, ..., причем Ck — наименьшее чис- ло, не содержащееся в предыдущих особых позициях. Участник, начинающий игру с не- особой позиции, выигрывает, занимая на каждом ходу особую позицию. Если он начинает игру с особой по- зиции, то ему остается занимать по- зиции с а #= b в надежде на ошибку противника. Для определения особенностей дан- ной позиции (а, Ь) следует найти целое число k в интервалах (а(т — 1); (о + + 1)(т —1)) или (а(2 —т); (а + 1) X Х(2 —т)), где т = (1+-\/5)/2- Если k содержится в первом интервале, то а = Ck, если во втором, то а = dk. Если соответственно а + k = b или а = b — — k, то позиция (а, Ь) особая. В про- тивном случае для перехода к особой позиции руководствуются следующи- ми правилами: 1. Если а — Ь, то следует взять по а предметов из каждого множества и перейти к выигрышной позиции (0, 0). 2. Если a=Ck, b>a-}-k, то следует взять из второго множества число предметов b — а — k, получив особую позицию (а, а + k). 3. Если а = ск, Ь <а +' k, то сле- дует взять от обоих множеств по а — q предметов, где q = E((b — а)г); симво- лом Е обозначена целая часть содер- жимого квадратных скобок. 4. Если а = dk, то следует взять из второго множества Ь — ск предметов, где ck = Е[Лт]. В соответствии с этими правилами, составим следующий алгоритм для выбора очередного хода по данной позиции (а, Ь) при Ь: 1. Если Е[(а + 1)(т — 1)] — Е[а(т — — 1)] 1, то перейти к шагу 2, ина- че — к шагу 8. 2. Принять k — Е[(а + 1)(т — 1)]. 3. Если а + k = Ъ, то перейти к ша- гу 4, иначе — к шагу 5. 4. Принять а = a, b = Ь — 1. 5. Если а + k < b, то перейти к ша- гу 6, иначе — к шагу 7. 6. Принять а = а, Ъ = Ъ— Е |/г(1 + + т)]. 7. Принять q = E[(b — а)т], а = q, b — b — а + q. 8. Если а + k > b, то перейти к ша- гу 4, иначе — к шагу 9. 9. Принять k = Е[(а + 1)(2 — т)], а — Е|/гт|, b = а. При реализации этого алгоритма на входном языке программируемых микрокалькуляторов следует учиты- вать, что величины а(т — 1) и (а + 1) X Х(т — 1) могут быть меньшими едини- цы и для выделения их целой части следует использовать фрагмент вида 1 + IIN КИПИ с адресным регистром N < 4. В этом случае при выполне- нии оператора КИПП целое содержи- мое регистра N уменьшается на еди- ницу, что компенсирует предвари- тельное увеличение на единицу исход- ного числа. Это учтено в программе 18 с дополнительным фрагментом для автоматического вычисления т = = (V5 + l)/2. Правильность работы по програм- ме 18 можно проверить, повторив следующую партию: 300 = РУ; 400 = = РХ В/О С/П РХ = 261; РУ = 161; 100 = РУ; 200 = РХ В/О С/П РХ = = 100; РУ = 162; 10 = РУ; 162=РХ В/О С/П РХ = 10; РУ = 6; 1=РУ; 6 = РХ В/О С/П РХ = 2; РУ = 1; 57
Программа 18. Игра «выбирание камней» П8 XY П7 1 + 5 1 + 2 48 14 47 01 10 05 22 01 10 02 — П9 1 — X 1 + П1 КИП1 ИП7 13 49 01 11 12 01 10 41 Г1 67 ИП9 1 — X 1 + П2 КИП2 ИП1 ИП2 69 01 11 12 01 10 42 Г2 61 62 — х=#0 55 ПП 76 х<0 42 ИП7 ИП7 ИП1 11 57 55 53 76 5С 42 67 67 61 + С/П ИП8 ИП7 — П6 ИП9 X ПА КИПА 10 50 68 67 11 46 69 12 4 — Г — ИПА ИП6 ИПА + С/П ИП7 1 + 2 ИП9 6 — 66 6- 10 50 67 01 10 02 69 — X 1 + Ш КИШ ПП 76 ИП1 ИП9 11 12 01 10 41 Г1 53 76 61 69 X ПА КИПА ИПА ИП7 С/П ИП7 ИП1 + ИП8 12 4 — Г— 6 — 67 50 67 61 10 68 — х = 0 88 ИП7 ИП8 1 — С/П В/О 11 5Е 88 67 68 01 11 50 52 Инструкция. а = PY, b = РХ (должно при проигрыше микрокалькулятора РХ = быть а^Ь); В/О С/П РХ = Ь; PY— а (при = РУ = 1). выигрыше микрокалькулятора РХ = PY = 0; 0 = РУ; 2 = РХ В/О С/П РХ = = PY = 0. Для этой игры можно также ис- пользовать игровую доску, подобную показанной на рис. 22, с двумя фиш- ками, расположенными перед нача- лом игры в клетках доски с номе- рами а и Ь. Игроки по очереди пере- двигают обе фишки на одинаковое число клеток или одну фишку на про- извольное (но не менее единицы) чис- ло клеток. Выигрывает игрок (кото- рым может быть и микрокалькуля- тор, «обученный» по программе 18), после хода которого обе фишки оказы- ваются в клетке с номером 0. Возможны и другие варианты игры «выбирание камней», например, с про- игрышем игрока, взявшего последний предмет, или с поочередным добавле- нием предметов в двух множествах до заданного количества. Примером может служить игра «одинокий ферзь» [13]. Для участия в этой игре микрокалькулятора с программой 18 следует изменить нумерацию клеток доски (учитывая, что изменяющимся числам предметов соответствуют но- мера горизонталей и вертикалей шах- матной доски) или составить спе- циальную программу. В исходном положении этой игры противник располагает ферзя в одной из девяти клеток нижнего левого угла доски (х < 3, у 3), и участники по очереди передвигают ферзя вверх, вправо или по диагонали вверх впра- во до достижения выигрышной клетки с кодом ху = 88 (рис. 23). В этой игре клетки шахматной доски с ко- 58
дами xi/ = 88, 76, 67, 53 и 35 соот- ветствуют особым позициям (О, О), (1, 2) и (3, 5) игры «выбирание кам- ней», но программу для участия в ней микро-ЭВМ проще составить методом перебора вариантов ходов. Успешное участие в такой игре программируе- мого микрокалькулятора обеспечи- вается программой 19. Время выполнения этой программы зависит от положения ферзя, так как перебирается различное число клеток, например, в партии: 13 = РХ БП 5 7 С/П РХ = 35 (время счета около 30 с); 65 = РХ С/П РХ = 76 (время счета около 15 с); 87 = РХ С/П РХ — = 88 (время счета около 75 с). Если изменить правила игры «вы- бирание камней», разрешив игрокам уменьшать или увеличивать оба или одно множество предметов только на единицу, то такой вариант соответ- Рис. 23. 59
Программа 19. Игра «одинокий ферзь» П7 П9 3 П6 6 ПО ИП9 1 1 ПП 47 49 03 46 06 40 69 01 01 53 40 х = 0 04 ИП7 П9 4 П6 4 ПО ИП9 40 5Е 04 67 49 04 46 04 40 69 1 ПП 40 х = 0 17 ИП7 П9 4 П6 4 01 53 40 5Е 17 67 49 04 46 04 ПО ИП9 1 0 ПП 40 ИП9 С/П БП 00 40 69 01 00 53 40 69 50 51 00 + П9 КИПО ИП9 — х=#0 36 ИПО 1 — 10 49 ГО 69 11 57 36 60 01 11 х = 0 42 ИП6 1 — П6 В/О П7 П9 7 5Е 42 66 01 11 46 52 47 49 07 П6 8 8 П1 7 6 П2 6 7 ПЗ 46 08 08 41 07 06 42 06 07 43 5 3 П4 3 5 П5 БП 04 05 03 44 03 05 45 51 04 Инструкция. Ввести в регистр X код, ху клетки, занимаемой ферзем в исходном положе- нии (х < 3, у гС 3) и нажать клавиши БП 5 7 С/П для высвечивания кода ху клетки, на которую микрокалькулятор «передвигает» фер- зя; вводить код ху клетки, на которую пере- двигается ферзь, и нажимать клавиши В/О и С/П или С/П для регистрации ответного хода микрокалькулятора; игра заканчивается при занятии микрокалькулятором клетки с кодом ху = 88. Программа 20. Игра «одинокая пешка» t 1 0 — П7 КИП7 ИП7 — 1 0Е 01 00 13 47 Г7 25 67 11 01 0 X П8 ПП 61 ПВ ИП7 ПП 61 ПА 00 12 48 53 61 4L 67 53 61 4— ИПВ + х#=0 41 ИП7 ИПА + П7 ИП8 ИПВ 6L 10 57 41 67 6— 10 47 68 6L + П8 ИП8 ИП7 1 0 X + С/П БП 10 48 68 67 01 00 12 10 50 51 00 ИП7 ИП8 — х=/=0 55 ИП8 8 — х=/=0 00 67 68 11 57 55 68 08 11 57 55 ИП8 1 + П8 ИП7 1 + П7 БП 55 68 01 10 48 67 01 10 47 51 32 2 — х#=0 69 Х<0 61 2 + В/О 32 02 11 57 69 5С 61 02 10 52 Инструкция. Ввести в регистр X код ху = 11 при первом ходе микрокалькулятора или код ху клетки, занимаемой первым ходом противника, и нажать клавиши В/О и С/П; после высвечивания кода клетки, занимаемой микрокалькулятором, вводить код клетки, зани- маемой противником, и нажимать клавиши В/О и С/П или С/П; выигрывает участник игры, первым занявший поле шахматной доски с кодом ху = 88 (Ь8). 60
Программа 21. Игра Ним с тремя множествами предметов ИП8 ИП9 х = 0 07 П7 С/П 7 П1 1 68 69 11 5Е 07 47 50 07 41 01 0 ПА 2 ПВ ИП7 ПП 67 ПС ИП8 ПП 00 4— 02 4L 67 53 67 4С 68 53 67 ИПС + 1 ВП 7 — 1 0 X 67 6С 10 01 ОС 07 13 01 00 12 П5 1 + ПО КИПО ИПО 2 — х=#0 41 45 01 10 40 ГО 60 02 11 57 41 НПО ипд 1 0 X + пд ИП5 ИПО — 60 6Г 01 00 12 10 6Г 65 60 11 L1 27 ИПА ПВ 2 ПА ипд ПП 67 ИП9 5L 27 6— 4L 02 4— 6Г 53 67 69 — х = 0 64 КИПЗ ИПЗ П9 С/П XY Сх ПЗ 11 5Е 64 ГЗ 63 49 50 14 ОГ 43 1 Вх t ИПВ — 1 + ПО КИПО 01 0 0Е 6L 13 01 10 40 го 25 ипо ИПВ X — X ИПЗ + ПЗ 25 60 6L 12 11 12 63 10 43 25 ИПА X ИПО х = 0 72 пд ИПЗ В/О 6— 12 60 5Е 72 4Г 63 52 Инструкция. Перед каждым пуском программы а — Р7; Ь - - Р8, с = Р9 (а b S/ с) и нажать клавиши В/О и С/П; после выполне- ния программы содержимое одного из регист- ров 7, 8 или 9 изменяется (изменяемое со- держимое регистра хранится также в регист- ре X); при выигрыше микрокалькулятора Р7 = = Р8 = Р9 = 0, при проигрыше в одном из регистров 7, 8 или 9 хранится единица, в остальных — нули. ствует игре «одинокая пешка» [7] на шахматной доске. Участники игры по очереди передвигают пешку (находя- щуюся в исходном положении на по- ле al) на одно поле вверх, вправо или вверх вправо по диагонали, при- чем выигрывает первым достигший поля Ь8. При кодировании полей доски цифровым кодом ху особые позиции в этой игре соответствуют по- лям с четными номерами х и у (отме- ченными в кружочках крестиками на рис. 24). Оптимальная стратегия первого участника этой игры заключается в занятии первым ходом поля с кодом ху = 22 с последующим переходом только на особые позиции. Второму игроку следует сойти с главной диа- гонали и двигаться, когда это воз- можно, параллельно ей в надежде на ошибку противника. Эта стратегия реализована в алгоритме, схема ко- торого показана на рис. 25, содер- жащем операторы для установки и проверки флага при занятии особой позиции. На входном языке микро- калькуляторов алгоритм реализуется программой 20. Пример партии (время «размышле- ния» микрокалькулятора над каж- дым ходом около 25 с): 22 = РХ В/О С/П РХ - 32; 43 = РХ С/П РХ = 44; 54=РХ С/П РХ = 64; 75=РХ С/П РХ = 86; 87 = РХ С/П РХ = 88 (вы- играл микрокалькулятор). 61
В Европе давно известна более слож- ная игра Ним с тремя или более множествами предметов. Два участ- ника основного варианта этой игры по очереди берут из любого одного множества произвольное (но не менее одного) число предметов, причем выигрывает взявший последний пред- мет. Особую популярность эта игра приобрела среди программистов. Со- гласно теории игры [5], при числе множеств три или более следует сложить двоичные представления чи- сел предметов в множествах по пра- вилам сложения десятичных чисел. Если все цифры суммы четные, то этому числу предметов в множествах соответствует особая позиция. В про- тивном случае для перехода к особой позиции следует сформировать двоич- ное представление di, заменив в полу- ченной сумме четные цифры нулями, Рис. 24. 62
a < b < с Рис. 25. Рис. 26.
а нечетные — единицами, и найти его десятичное представление dm- После этого достаточно уменьшить одно из чисел предметов в множествах на величину d10. Следовательно, опти- мальный алгоритм игры Ним при выборе очередного хода в позиции (а, Ь, ..., z) можно представить сле- дующим описанием: 1. Найти двоичные представления чисел предметов в множествах. 2. Сложить эти представления по правилам сложения десятичных пред- ставлений чисел. 3. Сформировать число di, заменив в сумме четные цифры нулями и не- четные единицами. 4. Если di = 0, то перейти к шагу 5, иначе — к шагу 6. 5. Уменьшить на единицу число предметов в одном из множеств. 6. Найти десятичное представление die двоичного представления di. 7. Уменьшить на величину dio чис- ло предметов в одном из множеств для перехода к особой позиции. Наиболее громоздкие операции в этом алгоритме связаны с преобра- зованием двоичных представлений чисел в десятичные и десятичных в двоичные. Такие операции можно реализовать с помощью алгоритма, представленного программой 1. Для наиболее распространенного варианта игры Ним с тремя множествами предметов выбор оптимального хода в позиции (а, Ь, с), где а b с, обес- печивается алгоритмом, схема кото- рого показана на рис. 26. На входном языке микрокалькуляторов этот алго- ритм представлен программой 21, при использовании которой макси- мальное исходное число предметов в множествах 28 — 1 = 255 ограни- чено разрядностью мантиссы операн- дов в микрокалькуляторах. Для игры Ним также можно вос- пользоваться игровой доской, по- добной показанной на рис. 22, с ис- 64 ходным положением трех фишек в клетках с номерами а, Ь и с и по- очередным передвижением каждым игроком одной из фишек. В связи с громоздкостью преобра- зований, выполняемых по этой про- грамме, микрокалькулятор затрачи- вает на «обдумывание» каждого хода несколько минут. Пример партии с микрокалькулятором по этой про- грамме: 20 = Р7, 4Q — P8, 60 —Р9 В/О С/П РХ = Р9 = 59, Р7 - 20, Р8 = 40; 30 = Р8, 40 = Р.9 В/О С/П РХ = Р9 = 10, Р7 = 20, Р8 = 30; 20 = Р8=Р9 В/О С/П РХ = Р7 = 0, Р8 = 20, Р.9 = 20; 10 = Р8 В/О С/П РХ = Р9 = 10, Р7 = 0, Р8 — 10; 5 = Р8 В/О С/П РХ = Р9 = 5, Р7 = 0, Р8 — 5; 1=Р8 В/О С/П РХ = Р9 = 1, Р7 = 0, Р8 = 1; 0 = Р8 В/О С/П РХ = Р7 = Р8 = Р9 = 0. При использовании микро-ЭВМ с достаточно большой емкостью памяти по алгоритмам, подобным рассмотре- нным, можно составить программы для игры Ним с большим числом множеств предметов, а также для игр с близкими к игре Ним правилами, например игры «кегли» [3] с разбие- нием множеств предметов в процессе игры. Правила некоторых игр с особыми позициями предусматривают выпол- нение победителем дополнительных условий. Примером может служить игра с одним множеством предметов, участники которой по очереди берут от одного до k предметов, но выигры- вает тот участник, котооый набрал чет- ное или нечетное (по договоренности) их число. Выбор оптимального хода в таких играх зависит от числа k и условий выигрыша, поэтому во мно-
Программа 22. Игра со спичками П8 Сх П2 ПЗ /-/ П9 4 + х>0 61 48 ОГ 42 43 0L 49 04 10 59 61 ИП9 ИП8 + х>0 61 П8 х =/= 0 54 ИПЗ ИП9 69 68 10 59 61 48 57 54 63 69 — ПЗ 2 — х<0 22 1 + х =/= 0 26 11 43 02 11 5С 22 01 10 57 26 ИП8 + П5 6 — х<0 32 ИП5 5 — 68 10 45 06 11 5С 32 65 05 11 х^гО 44 4 П5 ИП5 ИП2 + П2 ИП5 ИП8 59 44 04 45 65 62 10 42 65 68 — х>0 58 /-/ t ИП2 + С/П /-/ П8 11 59 58 0L 0Е 62 10 50 0L 48 ИП5 С/П БП 04 65 50 51 04 Инструкция. Ввести нечетное число S в регистр X и нажать клавиши В/О и С/П (если высвечивается 0, то ввести в регистр X другое нечетное число S); после каждого вы- полнения программы высвечивается число спичек, «взятых» микрокалькулятором, а оставшееся число спичек хранится в ре- гих случаях оптимальную стратегию находят методом перебора возмож- ных ходов. Примером может служить программа 22, составленная методом перебора для игры с множеством предметов (например, спичек) при k = 4 и выигрыше набравшего четное число предметов. Микрокалькулятор, «обученный» по программе 22, «ведет себя» доста- гистре У; противник вводит в регистр X число взятых им спичек и нажимает клавишу С/П; при выигрыше микрокалькулятора высвечива- ется четное число «набранных» им спичек, а в регистре У хранится число спичек, «взятых» последним ходом микрокалькулятора. точно придирчиво — не начинает игру с невыгодного для него особого значения S = 6i + 1, не «берет» спи- чек, если не берет их противник, а при нарушении правил игры про- тивником, взявшим больше положен- ного числа спичек, высвечивает отри- цательное число, и игру можно продолжить лишь в соответствии с правилами.
ИГРЫ С НЕПОЛНОЙ ИНФОРМАЦИЕЙ Во многих практических задачах решение приходится принимать до того, как станут точно известными действия противника, которыми могут быть и силы природы. Такие кон- фликтные ситуации моделируют игра- ми с неполной информацией, участ- ники которых при выборе оптималь- ной стратегии должны оценить ве- роятность и последствия каждого из возможных ходов противника. Так как для такой оценки часто исполь- зуют таблицы (матрицы) с возмож- ными результатами сочетаний своих стратегий и стратегий противника, то подобные игры называют также матричными. Конфликтные ситуации, модели- руемые играми с неполной инфор- мацией, часто встречаются в реальной жизни. Примером может служить следующий случай с тремя трауле- рами рыболовецкого совхоза. Их ка- питаны ожидали появления крупного косяка рыбы с равной вероятностью в северном (стратегия рыбы Р1) или южном (стратегия рыбы Р2) районах лова. По географическим и погодным условиям в южном районе лов рыбы мог продолжаться три дня, в се- верном — только один день. Капитаны располагали четырьмя возможными стратегиями сосредото- чения траулеров: два на севере и один на юге (стратегия К1), один на севере и два на юге (стратегия К2), все на севере (стратегия КЗ) и все на юге (стратегия К4). Стратегии КЗ и К4 отброшены как чрезмерно рискован- ные, так как грозили возможностью полной потери улова. Из двух остав- шихся была выбрана стратегия К1, обеспечивающая наибольший улов при появлении косяка рыбы в любом из районов лова. Правильность вы- бранного капитанами решения под- тверждается и теорией игр. Теоретически любую игру с не- полной информацией для двух участ- ников можно описать на каждом ходу таблицей (матрицей) с п строками, соответствующими стратегиям х, пер- вого участника, и m столбцами, соответствующими стратегиям у, вто- рого участника. В каждой клетке такой таблицы на пересечении i-й строки и j-ro столбца записывают выигрыш ац (равный проигрышу с отрицательным знаком) первого игро- ка при выборе им i-й стратегии и выборе противником j-й стратегии. Если выигрыш одного участника ра- вен проигрышу другого, то их состя- зание называют игрой с нулевой сум- мой. Наибольшие из наименьших эле- ментов строк матрицы игры называют нижней чистой ценой игры, или ма- ксимином а, а наименьшие из наи- больших элементов столбцов матри- цы — верхней чистой ценой игры, или минимаксом 0. Так как выигрыш первого участника игры не превыша- ет проигрыша второго, то в общем случае а 0. Если максимин и мини- макс расположены в одной клетке матрицы, то ее содержимое называют седловой точкой игры, а = 0 — чистой ценой игры, соответствующей опти- мальной стратегии обеих сторон. Игру 66
называют справедливой, если ее чистая цена равна нулю. Стратегии, обеспечивающие выигрыш при любых стратегиях противника, называют доминирующими. В рассмотренной игре «капитаны» их выигрыш (и проигрыш рыбного косяка) можно оценить произведе- нием числа дней лова на число трау- леров в данном районе. Составляя матрицу игры с элементами, равными этим произведениям (табл. 3), легко определить седловую точку а = р = 2, соответствующую оптимальной стра- тегии капитанов, являющейся доми- нирующей. Во многих матричных играх сед- ловая точка отсутствует, и домини- рующую стратегию в таком случае найти невозможно. Оптимальная стратегия участников такой игры заключается в изменении на очеред- ном ходу выбора чистых стратегий так, чтобы обеспечить появление седловой точки в матрице, отобра- жающей многоходовую игру [13]. Оптимальную смесь с долями pxi и Pyj чистыя стратегий х, первого и у, второго участников матричной игры можно определить при допол- нении исходной матрицы для пит чистых стратегий участников стро- ками с элементами Uij — Py\{PxlU\ 1 + ... + PxnUnl) + ... “И Pym(Px\U\n “I- ••• “H PxnUnn) и столбцами с элементами Uij ==- Pxl(^Py\U\ 1 -|-... -|- PymU\т) ~... + Рхп(РуЩт1 + — + PxnUmn), где Pxi и Ру, — предполагаемые опти- мальными доли чистых стратегий, a aij — элементы исходной матрицы с чистыми стратегиями. Если в этих дополнительных стро- ках и столбцах содержится седловая точка, то соответствующие ей смешан- ные стратегии будут оптимальными. При оптимальной смеси стратегий первого участника средний выигрыш не зависит от выбора стратегии про- s. Матрица игры «капитаны» Р1 Р2 а К1 2 3 2 К2 1 6 1 ₽ 2 6 тивником. Поэтому для игр с матри- цей 2X2 (с двумя чистыми страте- гиями у каждого из двух участников) доля рх\ чистой стратегии Xi первого участника в оптимальной смеси опре- деляется из условия равенства сред- него выигрыша при обеих стратегиях GllPxl + 021(1 — Pxi) = О12Рх1 + 022(1 — — Pxi). Из этого равенства следует Pxi = (022 — О21)/(оп + 022 — 021 — О|г). Аналогично доля pyi стратегии yt второго участника определяется как Pyl = (Он — О1г)/(Оц -(- 022 — 021 — O12). Цена игры в этом случае соответст- вует оптимальной смеси стратегий и равна Ц = a\ipxi + Oi2(l — Pxi). В играх с природой чистые стра- тегии в оптимальной пропорции мож- но выбирать на каждом ходу по опре- деленному закону, но в игре с людьми должна быть обеспечена случайность выбора чистой стратегии с требуемой вероятностью, так как противник мо- жет воспользоваться замеченной зако- номерностью в смене стратегий для выигрыша. Выбор решения человеком является волевым актом, и поэтому он не может выбирать стратегии по случайному закону с требуемой вероятностью. Для этой цели человек использует различные модели случайных собы- тий с определенной вероятностью ис- ходов — бросание монеты или кубика, вращение диска с цифрами или случайный выбор шаров, различных по цвету или нумерации. Способы моделирования случайных событий с помощью микро-ЭВМ за- висят от возможностей ее входного языка. При использовании програм- мируемых микрокалькуляторов эту 67
Программа 23. Моделирование случайного события с k равновероятными исходами ИП9 ПО КИПО ИПО х = 0 02 БП 00 69 40 ГО 60 5Е 02 51 00 Инструкция. (fe 1 = Р9) В/О С/П, через 20—30 с (или более при k > 10) нажать клавишу С/П для аварийной остановки и вы- свечивания номера исхода; при высвечивании нуля повторить выполнение инструкции с на- жатия клавиш В/О и С/П. задачу в простейших случаях можно решить с помощью программы без оператора остановки С/П, обеспечи- вающей хранение в регистре X номе- ров исходов случайного события в течение промежутков времени, про- порциональных заданной вероятности исходов. Тогда при аварийной оста- новке программы в случайный мо- мент времени будет высвечиваться с заданной вероятностью номер одно- го из исходов моделируемого случай- ного события. Подобный прием использован в программах 7 и 10, дополненных мини-программой вида Сх nN КИПК БП А с адресом А перехода к операто- ру КИПЫ при номере адресного регистра N = 4, 5 или 6. После пуска такой программы в регистре N форми- руются натуральные числа 1, 2, 3, ..., и аварийная остановка программы в случайный момент времени обеспе- чивает случайное содержимое ре- ристра N. Однако такую программу можно использовать лишь как вспо- могательную, так как формируемое натуральное число пропорционально времени выполнения программы. По- этому для моделирования случайного события с k равновероятными исхода- ми целесообразно использовать про- грамму, подобную программе 23 с оператором косвенного вызова из па- мяти на адресном регистре с номе- ром N < 4. После пуска программы 23 в ре- гистре О формируются целые числа k, k — 1, ..., 2, 1, 0, k, k — 1, ..., и аварийная остановка программы че- рез достаточно длинный отрезок времени обеспечивает случайный вы- бор одного из исходов моделируе- мого случайного события. Так как число 0 хранится в регистре О не- сколько дольше других чисел (на время выполнения дополнительных четырех операторов), то вероятность высвечивания этого числа больше, чем других чисел, и его следует исключить при нумерации исходов случайного события. При небольшом числе k исходов случайного события его моделирова- ние упрощается. Так, случайное собы- тие с двумя равновероятными исхо- дами, обозначаемыми символами 0 и 1 (например, падение монеты вверх аверсом или реверсом) моделируется мини-программами XY XY В/О или XY БП 00 с предварительным зане- сением цифр 0 и 1 в регистры X и У. После каждого пуска такой програм- мы нажатием клавиш В/О и С/П на- чинается обмен содержимым регист- ров X и У (моделирующий, в част- ности, вращение бросаемой монеты) и при аварийной остановке в слу- чайный момент времени высвечива- ется символ 0 или 1 с равной вероят- ностью р(1) =1 — р(0) = 0,5. Для моделирования случайного со- бытия с тремя или четырьмя равно- вероятными исходами можно исполь- зовать программу -► -> В/О или -► БП 00 с предварительным зане- сением номеров исходов 0, 1, 2, 3 или 1, 2, 3, 4 (при высвечивании нуля испытание повторяют) в регистры операционного стека. Эти же мини- 68
программы пригодны для моделиро- вания случайного события с вероят- ностью 0, 25; 0,5 или 0, 75 одного из двух возможных исходов. Для этого достаточно предварительно за- нести в регистры операционного стека цифры 0 и 1 (или другие символы исходов) в требуемой пропорции. Случайное событие с большим чис- лом исходов можно также модели- ровать занесением в программную па- мять в требуемой пропорции опе- раторов набора символов исходов (программа 24) или вызова их из памяти. Кстати, высвечивание нуля при вы- полнении программы 24 можно рас- сматривать как падение кубика на неровную поверхность, когда нельзя точно определить номер его верхней грани. Если же устранить в этой про- грамме оператор Сх, то нуль высве- чиваться не будет, но в этом случае цифра 5 будет храниться в регистре X несколько дольше других цифр, что нарушит их равновероятность. Подобным образом можно модели- ровать и различные игры-лотереи по образцу программы 25. Эта програм- Программа 24. Моделирование падения кубика ма моделирует лотерею, в которой на каждые 18 билетов стоимостью по 1 коп. в среднем приходится выигрыш в 17 коп. Следовательно, на каждом билете микрокалькулятор «выигры- вает», а его противник проигрывает 17/18 коп., а вероятность выигрыша противником составляет 0,5 • 17/18 = = 0,472. В действительности вероят- ность выигрыша еще меньше, так как при выполнении безусловного перехода регистр X очищен, и оста- новка программы в это время увели- чивает выигрыш микрокалькулятора. В игре по этой программе можно убедиться, что при небольшом числе попыток можно не только «вернуть деньги», а и выиграть, но с увели- чением числа попыток сумма про- игрыша будет увеличиваться. При выполнении рассмотренных программ моделирования случайных событий не следует пытаться угадать высвечиваемые цифры по индика- тору или останавливать программу не в случайные моменты времени. Общий недостаток этих программ — невозможность их использования в качестве фрагментов программ гене- t 0Е 6 06 1 0Е 1 01 t 0Е 4 04 t 0Е 2 02 t 0Е 3 03 t 0Е 5 05 t 0Е Сх ОГ БП 51 00 00 Инструкция. Для моделирования исхо- дов бросания кубика нажать клавиши В/О и С/П и через 15—20 с нажать клавишу С/П, что приведет к высвечиванию номера на верх- ней грани упавшего кубика; при высвечивании нуля повторить выполнение программы. Программа 25. Модель лотереи с вероятностью выигрыша 0,472 1 01 Сх ОГ 1 01 Сх ОГ 3 03 Сх ОГ 1 01 Сх ОГ 1 01 Сх ОГ 3 Сх 1 Сх 5 Сх 1 Сх БП 00 03 ОГ 01 ОГ 05 ОГ 01 ОГ 51 00 Инструкция. Покупка билета за 1 коп. моделируется нажатием клавиш В/О и С/П; после аварийной остановки программы нажа- тием клавиши С/П или другой клавиши вы- свечивается выигрыш 5, 3, 1 или 0 коп. 69
рирования случайных чисел с авто- матической остановкой. Во входных языках многих уни- версальных микро-ЭВМ имеются спе- циальные команды (подобные коман- де RND языка БЕЙСИК или команде СЧ языка микрокалькуляторов «Элек- троника МК-61» и «Электроника МК- 52») для формирования псевдослу- чайных (квазислучайных) чисел с равномерным распределением в ин- тервале (О, 1). При отсутствии таких команд во входном языке их при- ходится реализовать с помощью более сложных фрагментов про- граммы. Выполнение машиной любой про- граммы строго детерминировано, и при тех же исходных данных после вы- полнения программы получаются те же результаты. Поэтому для модели- рования случайных процессов на ЭВМ формируют последовательность не- коррелированных (не связанных между собой) чисел, называемых псевдослучайными. В частности, для моделирования случайных чисел с равномерным распределением в ин- тервале (0, 1) преобразуют число х,- из этого интервала в несколько раз большее многозначное число, а затем отбрасывают целую часть результата, снова получая число х,+ 1 из того же интервала (0, 1). При использовании микрокальку- ляторов для подобного преобразова- ния среди описанных в литературе достаточно удобна формула где Е — символ целой части содержи- мого скобок. Эта формула, реализуемая мини- мальным количеством операторов, обеспечивает формирование доста- точно длинных для большинства практических задач последователь- ностей некоррелированных (псевдо- случайных) чисел из интервала (0, 1). Разбив интервал на две части в соот- ношении, соответствующем Заданным вероятностям р(1) и р(0) = 1 — р(1), и организовав высвечивание символов 1 и 0 при попадании формируемого псевдослучайного числа в соответ- ствующий интервал, можно составить модель случайного события с за- данной вероятностью двух исходов в виде программы 26. Так как гене- рируемая последовательность исходов случайного события будет зависеть от выбора начального значения чис- ла Хо из интервала (0, 1), то для его случайного выбора составная программа 26 дополнена программой с оператором косвенного вызова из памяти на адресном регистре О. Программу 26 можно сократить, отбросив дополнительную программу для формирования Хо и задавая это число в регистр 9 перед началом выполнений программы. В этом слу- чае необходимо обеспечить случайный выбор Хо, так как каждому из таких чисел будет соответствовать опреде- ленная последовательность форми- руемых символов исходов. Так, при р(1) — р(0) = 0,5 и Хо = 0,5 будет фор- мироваться последовательность сим- волов исходов у, = 0; 1; 0; 0; 1; 1; 0; 0; 1; 1; ... Случайное событие с k равновероят- ными исходами удобно формировать, разбив интервал (0, 1) на k равных частей и организовав высвечивание номера исхода при попадании квази- случайного числа из интервала (0,1) в соответствующий частный интервал. Такой прием реализован в програм- ме 27, которую при желании можно дополнить программой для форми- рования начального значения х0, со- держащейся в программе 26, с изме- нением адресов переходов. Начальное значение хо перед вы- полнением этой программы следует выбирать по возможности случайным. При моделировании по этой програм- 70
Программа 26 Моделирование случайного события с заданной вероятностью исходов р(1) и р(0) = = 1-р(1) ИП9 69 Л 20 + 10 ех 16 П9 49 КИП9 Г9 —> 25 ИП9 69 11 П9 49 ИП7 67 — 11 X < :о 5С 17 17 Сх ОГ БП 51 18 18 1 01 С/П 50 БП 51 00 00 Сх ОГ 1 01 0 00 ПО 40 1/х 23 П9 49 КИПО ГО ипо 60 х = 0 5Е 25 25 БП 51 21 21 Инструкция. Ввести р(1) = Р7, нажать клавиши БП 2 1 С/П и через 5—10 с оста- новить программу нажатием клавиши С/П; нажимать клавиши В/О и С/П (первый раз обязательно) или С/П для высвечивания симво- лов 1 и 0 исходов с заданной вероятностью. Программа 27. Моделирование случайного события с k равновероятными исходами у, С (1, 2,..., k) ИП9 69 Л 20 + 10 ех 16 П9 49 КИП9 Г9 25 ИП9 69 11 П9 49 ИП7 67 X 12 1 01 + 10 П8 48 КИП8 Г8 ИП8 68 С/П 50 БП 51 00 00 Инструкция, (k = Р7); хв = Р9 (В/О) С/П РХ=у,. ме падения кубика вверх одной из граней (с вероятностью 1/6 для каж- дой грани) для 6 = Р7 и 0,5 = Р9 получим j/, = l, 6, 1, 2, 4, 6, 3, 3, 6, 5, 5, 2, 4, 6, 1,1, 4, 1, 4, 3,... Программу 27 можно использовать, в частности, для игры в спортлото или случайного выбора фишек в обыч- ном лото, приняв k = 100. В этом слу- чае после каждого выполнения про- граммы с вероятностью 0,01 будет высвечиваться одно из чисел от 0 до 99. Например, при k = 100 и хо = = 0,5 после шести выполнений про- граммы получим номера у, — 16, 96, 9, 18, 55, 88. Следует учитывать возможность повторения одинаковых номеров, так как для формирования используются только два первых раз- ряда чисел из интервала (0, 1). Программы, подобные рассмотрен- ным, применимы в различных играх с полноправным участием микро- ЭВМ. В большинстве таких игр микро- ЭВМ, программы работы которых обеспечивают практически случайный выбор решения с заданной вероят- ностью, имеют преимущества перед человеком и обычно оказываются более удачливыми игроками. В качестве простейшего примера рассмотрим игру «чет — нечет», один из участников которой угадывает одно из двух возможных решений (выбор четного или нечетного числа, состоя- ния некоторого объекта и т. п.). Если обозначить эти решения символами 1 и 0, то принимающий их участник игры будет иметь две чистые стра- тегии: принять 1/1 = 1 или принять у2 = 0. Отгадывающий решения участ- ник игры также имеет две чистые стратегии: предсказать х, = 1 или предсказать у 2 = 0. Оценивая пра- вильное предсказание баллом 1 и оши- бочное — баллом — 1, получим для 71
предсказывающего участника матри- цу игры с чистыми стратегиями, соответствующую двум первым стро- кам табл. 4. Такая матрица с чистыми страте- гиями не имеет седловой точки и, следовательно, выбор чистых стра- тегий нецелесообразен. Действитель- но, при выборе участником игры единственной стратегии противник, определив эту стратегию, выиграет. В связи с симметрией матрицы чистых стратегий для игры «чет — нечет» можно ожидать, что опти- мальной является смесь с равными долями стратегий. Это подтверждает- ся и вычислением по приведенным ранее формулам оптимальных долей стратегий рх = ру = 0,5, а также рав- ных нулю элементов дополнительных строки и столбца, соответствующих оптимальной смеси стратегий (табл. 4) В этом случае максимин и минимакс равны нулю и чистая цена игры Ц = 0. При реализации оптимальной стра- тегии в игре с человеком существенна не только доля чистых стратегий, но и последовательность их измене- ния. Если один из игроков придержи- вается определенной закономерности в изменении стратегий, то второй игрок воспользуется этим в своих интересах. Поэтому выбор чистых стратегий в игре «чет — нечет» дол- жен изменяться случайным образом с вероятностью р = 0,5 для каждой чистой стратегии. Если один из игро- ков придерживается этой стратегии, то независимо от стратегии второго участника при большом числе ходов игра заканчивается ничейным ре- зультатом. Для игры программируемого микро- калькулятора в «чет — нечет» с оптимальной стратегией можно ис- пользовать программу 26 при р(1) = = 0,5. Во избежание ошибки или соблазна скорректировать результаты 4. Матрица игры «чет — нечет» противнику следует записывать свои решения или предсказания на бумаге для сравнения с предсказаниями или решениями микрокалькулятора на том же ходе. При небольшом числе ходов можно выиграть у микрокалькуля- тора, но по мере увеличения этого числа результат будет все увереннее приближаться к ничейному. В игре «чет — нечет» между людь- ми основное значение имеет знание психологии противника для выбора своей оптимальной стратегии. Алго- ритм изучения психологии противни- ка можно составить различными спо- собами. Простейший из них основан на накоплении данных о числах п сохранений и т изменений стратегий противника в предыдущих ходах. Если противник более склонен к сохранению принятого ранее решения, то на очередном ходе целесообразно выбирать решение, совпадающее с ре- шением противника на предыдущем ходе. В противном случае следует выбирать противоположное решение с алгоритмом, схема которого для загадывающего участника игры по- казана на рис. 27. Для отгадывающего игрока следует заменить в этой схеме условие т «С п условием т п. На входном языке программируемых микрокалькуляторов этот алгоритм реализован программой 28, перед каждым выполнением которой против- нику следует записать на бумаге свое предсказание или принятое решение. Микрокалькулятор, «обученный» по программе 28, играет в «чет — нечет» подобно человеку, руководствующе- муся аналогичной стратегией и вы- игрывает у недостаточно проница- 72
тельного противника. Однако внима- тельный партнер, разгадав стратегию микрокалькулятора, будет выигры- вать при выборе достаточно гибкой стратегии, не позволяющей микро- калькулятору «приспособиться» к психологии противника. Так, при выборе принимающим решение противником казалось бы беспроигрышной стратегии с равными долями чистых стратегий в после- довательности ходов ух = 1, 0, 1, 0, 1, О, 1, 0, 1, 0, 1, О, 1, 0, 1, О, 1, О, 1, О микрокалькулятор ответит последо- вательностью предсказаний х< = 0, 0, 1, 0, 1, О, 1, 0, 1, О, 1, О, 1, 0, 1, 0, 1, 0, 1, О и выиграет со счетом 19 : 1. В следующей партии с другой последовательностью выбранных ре- шений без учета «психологии» микро- калькулятора, например yt = l, 0, 0, 1, 0, 0, 1, 0, 0, 1, О, О, 1, 0, 0, 1, 0, 0, 1, О микрокалькулятор выбирает последо- вательность предсказаний х, = 0, О, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, О, 1, 1, О и выигрывает со счетом 13:7. Однако при выборе стратегии со сложной закономерностью смены чис- тых стратегий противником микро- калькулятор может проиграть. На- пример, при последовательности ре- шений у, = 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, О, 1, О, 1, 1, 1, 1, 0, 1 микрокалькулятор выбирает последо- вательность предсказаний х, = 0, 0, 1, 1, 1, 0, 1, 1, О, О, 1, 1, О, 0, 1, О, О, 0, 1, 1 и проигрывает со счетом 7:13. Подобным образом, хотя и с не- сколько большими трудностями, можно выиграть у микрокалькуля- тора и при выборе им решений (после замены в программе 28 команды х 0 командой х < 0). Для игры микро-ЭВМ с серьезным противником следует использовать алгоритм со статистической оценкой корреляционной связи [8, 9, 11] между несколькими предыдущими ходами противника. Простейший из таких алгоритмов с учетом связи между тремя последними ходами противника на входном языке микро- калькуляторов реализован програм- мой 29. Микрокалькулятор, «обученный» по программе 29, «размышляет» доль- ше, но играет более успешно, чем по предыдущей программе. Так при а = 789 и выборе противником после- Рис. 27. 73
Программа 28. Игра «чет — нечет» с учетом предыдущих ходов П8 48 ИПЗ 63 11 X < 0 5С 06 06 КИП6 Гб ИП9 69 1 01 + 10 П9 49 ИП8 68 ИП7 67 XY 14 П7 47 — 11 X = 0 5Е 20 20 КИП4 Г4 БП 51 21 21 КИП5 Г5 ИП4 64 ИП‘ 65 — 11 X 0 59 29 29 ИП8 68 БП 51 35 35 ИП8 68 1 01 — 11 ху= 0 57 35 35 1 01 ПЗ 43 С/П 50 БП 51 00 00 Сх ОГ П4 44 П5 45 П6 46 П7 47 П9 49 БП 51 00 00 Инструкция. Для принятия решений микрокалькулятором заменить в программе команду х>0 по адресу 24 командой х < 0; при первом пуске программы нажать клавиши БП39С/П, при последующих — клавиши В/О и С/П или С/П; после высвечивания пред- сказания (решения) 1 или 0 ввести в регистр X предыдущее решение (предсказание) противни- ка; общее число ходов микрокалькулятора и ходов с его выигрышем хранятся соответ- ственно в регистрах 9 и 6. Программа 29. Игра «чет — нечет» с учетом корреляции ходов противника П9 ИПА — х = 0 06 КИП4 ИП9 2 X 1 49 6— 11 5Е 06 Г4 69 02 12 01 — пд ИПЗ X ПС КИП5 ипд ИП2 ПЗ X 11 4Г 63 12 4С Г5 6Г 62 43 12 ипд ИП1 П2 X ИП6 + П6 ипд П1 X 6Г 61 42 12 66 10 46 6Г 41 12 XY ИП7 + П7 ИП2 X ИПС ИП8 + П8 14 67 10 47 62 12 6С 68 10 48 ИПЗ X + + х>0 49 1 БП 50 Сх 63 12 10 10 59 49 01 51 50 ОГ ПА С/П БП 00 П9 9 ПО Сх КПО ИПО 4— 50 51 00 49 09 40 ОГ L0 60 1 — х = 0 57 ИП9 sin х>0 69 Сх П9 01 11 5Е 57 ИП9 1С 59 69 ОГ 49 БП 06 51 06 Инструкция. При игре микрокалькуля- тора в качестве принимающего решения заме- нить в программе команду х^О по адресу 44 командой х < 0; установить переключатель Р — Г в положение Р; ввести трехзначное чис- ло а в регистр X и нажать клавиши БП54С/П (время счета около 35 с); после высвечивания каждого предсказания (решения) 1 или 0 микрокалькулятора вводить в регистр X пре- дыдущее решение (предсказание) противника и нажимать клавиши В/О и С/П или С/П (время счета около 15 с); числа всех ходов микрокалькулятора и его ходов с выигрышем хранятся соответственно в регистрах 5 и 4. 74
довательности решений yi = 1, 0, 1, 0, 1, О, 1, 0, 1, 0, 1, О, 1, О, 1, О, 1, О, 1, о микрокалькулятор выигрывает со сче- том 20:0, а при последовательности решений противника yi = 1, О, О, 1, О, 0, 1, О, О, 1, О, О, 1, О, О, 1, 0, 0, 1, о микрокалькулятор формирует после- довательность предсказаний Xi = l, 0, 1, 1, 0, 1, 1, 0, 0, 1, О, О, 1, О, О, 1, 0, 0, 1, О и выигрывает со счетом 18:2. При вводе противником последо- вательности решений с менее явно выраженной закономерностью смены стратегий yi = l, 1, 1, 1, О, 1, О, 1, 1, 1, 1, О, 1, О, 1, 1, 1, 1, 0, 1 микрокалькулятор проигрывает со счетом 9:11, так как последователь- ность относительно коротка — при ее повторении микрокалькулятор пред- сказывает 14 из 20 ходов противника и выигрывает с общим счетом 23:19. Программы 28 и 29 не реализуют оптимальную беспроигрышную стра- тегию, но при достаточно большом числе ходов микрокалькулятор (в особенности, с программой 29) чаще всего выигрывает у человека. Еще успешнее подобные программы можно использовать в играх с природой, не пытающейся разгадать стратегию микро-ЭВМ. Простейшим примером является предсказание погоды на сле- дующий день в двоичной оценке (хорошая погода — плохая погода, будет дождь — не будет дождя и т. п.) по данным за предыдущие дни. Так как влияние циклонов и антицикло- нов проявляется в достаточно длин- ных периодах плохой или хорошей погоды, то программы [11], подобные программам 28 или 29, обеспечивают достаточно уверенное предсказание погоды на следующий день. Возможность выбора с помощью микро-ЭВМ случайного решения с тре- буемой вероятностью особенно эффек- тивно проявляется в играх с опти- мальной выигрышной стратегией участника, в роли которого выступает машина. Это, в частности, относится к группе игр с неполной информацией, которым можно дать общее название «верю — не верю». Первый участник таких игр детер- минированно (по определенному пра- вилу) или случайно выбирает исход 0 или 1 некоторого события, но его высказывание о выбранном исходе, сообщаемое второму участнику игры, может быть истинным или ложным. Противник отвечает «верю» или «не верю», и выигрыши или проигрыши участников в зависимости от сочета- ний выбранных ими стратегий оце- ниваются в баллах по условиям игры. Следовательно, первый участник такой игры располагает четырьмя чистыми стратегиями, тогда как его противник — только двумя. Рас- смотрим вариант игры с детермини- рованным выбором исхода события, например «записал 1» или «запи- сал 0», и матрицей выигрыша первого участника в баллах на каждом ходу, показанной в табл. 5. Первый игрок практически исполь- зует лишь первые две стратегии, так как стратегия Хз проигрышна при любой стратегии противника, а стра- тегия Х4 чрезмерно рискована, кроме 5. Матрица игры «верю — не верю» с детерми- нированным выбором исхода события первым участником «верю» z/2 : «не верю» Xi : записал 1, сказал «записал 1» 0 2 Хз : записал 0, сказал «записал 1» 1 —2 хз : записал 1, сказал «записал 0» —1 —2 х< : записал 0, сказал «записал 0» —1 2 75
Программа 30. Игра «верю — не верю» с высказыванием первого участника «записал 1» х = 0 15 ИП8 х = 0 10 ИП7 2 — БП 21 5Е 15 68 5Е 10 67 02 11 51 21 ИП7 2 + БП 21 ИП8 х^О 22 ИП7 1 67 02 10 51 21 68 57 22 67 01 + П7 КИП4 ИП7 С/П ИП9 Л + ех П9 10 47 Г4 67 50 69 20 10 16 49 КИП9 ИП9 — П9 0 6 — х<0 Г9 25 69 11 49 00 0— 06 11 5С 44 1 БП 45 Сх П8 1 С/П БП 00 44 01 51 45 ОГ 48 01 50 51 00 П9 Сх П4 П7 БП 25 49 ОГ 44 47 51 25 Инструкция. Ввести в регистр X поло- жительное число а < 10 и нажать клавиши БП50С/П; после каждого высвечивания 1 (высказывание «записал 1») сохранить содер- жимое регистра X при ответе «верю» или сте- реть его клавишей Сх при ответе «не верю» и нажать только клавишу С/П, после чего высвечивается суммарный выигрыш микро- калькулятора (он также хранится в регистре 7, а число ходов микрокалькулятора в регистре 4); проверив при желании истинное решение 1 или 0, хранящееся в регистре 8, нажать кла- виши В/О и С/П или С/П для формирования следующего высказывания «записал 1». того, при стратегиях х3 и х4 (утвержде- ние «записал 0») второй участник выигрывает при выборе стратегии у\ («верю»). Следовательно, для первого участника игра сводится и матрица 2X2, образованной двумя первыми строками табл. 5. Эта матрица не содержит седловой точки и поэтому оптимальными для обоих игроков являются смешанные стратегии. По приведенным ранее формулам находим оптимальную смесь страте- гий первого участника игры с долями Pxi = («11 — «21) / («I! + «22 — «12 — «2|)= = 0,6 И рх2 =1 — Рх1 = 0,4 ЧИСТЫХ стратегий. Аналогично находим опти- мальные доли чистых стратегий вто- рого участника ру\ = 0,8 и ру2 = 0,2. Цена игры Ц = ai ipxi + а\2рх2 = 0,4, и при большом числе ходов первый участник при оптимальной смеси стратегий в среднем выигрывает 0,4 балла на каждом ходу. Таким образом, первому участнику игры выгодно лишь высказывание «записал 1» независимо от истин- ности этого утверждения при случай- ном выборе истинного решения «запи- сал 1» с вероятностью р(1) = 0,6 и истинного решения «записал 0» с ве- роятностью р(0) =1 — р(1) — 0,4. Сле- довательно, составление программы для микро-ЭВМ в качестве первого участника игры в основном сводится к организации случайного выбора истинного решения в оптимальной смеси чистых стратегий. Эта задача на входном языке микрокалькулято- ров решена с помощью программы 30, дополненной фрагментом для оценки выигрышей согласно матрице игры и автоматизации вспомогательных операций по очистке регистров па- мяти. Пусть принято а = 9 (это число целесообразно изменять перед каждой игрой) и микрокалькулятор высве- тил 1 («записал 1»), Поверив выска- зыванию, нажмем клавишу С/П и получим выигрыш микрокалькуля- 76
тора РХ — 1. Проверка содержимого регистра 8 подтверждает, что выска- зывание микрокалькулятора было ложным и он выиграл 1 балл. Нажав клавишу С/П и получив РХ = 1 («записал 1»), на этот раз нажмем клавиши Сх («не верю») и С/П, что приведет к высвечиванию общего выигрыша микрокалькулятора РХ — = 3. Продолжая игру, нетрудно убедиться, что при достаточно боль- шом числе ходов микрокалькулятор неизбежно выигрывает. Согласно табл. 5 для второго участ- ника стратегия «верю» проигрышная, казалось бы, целесообразно исполь- зовать лишь стратегию «не верю». Однако она более рискована и мини- мальный проигрыш второго участ- ника соответствует его оптимальной смеси стратегий с долей ру\ = 0,8 стра- тегии «верю» и рУ2 = 0,2 стратегии «не верю». В некоторых вариантах рассматри- ваемой игры между людьми первый участник выбирает исход события случайным образом с вероятностью двух возможных исходов р(1) = р(0) = = 0,5, а матрица игры также имеет размер 2X2. Рассмотрим подобный вариант со следующими правилами: первый участник вынимает из тасо- ванной колоды карточек (половина которых обозначена нулем и половина единицей) одну и, не показывая ее противнику, утверждает «вытянул 1» или «вытянул 0». Выигрыши первого участника в зависимости от ответов второго «верю» или «не верю» указа- ны в табл. 6, где для сочетания стра- тегий х4 и х2 указан выигрыш — 1 вместо симметричного — 2, так как в последнем случае стратегия первого участника х2 становится проигрыш- ной и теряет смысл, а утверждение «вытянул 1» будет явно соответ- ствовать стратегии х\. Определим оптимальную стратегию первого участника в этом варианте 6. Матрица игры «верю — не верю» при слу- чайном выборе исхода события первым участ- ником У\ = ♦ верю» у2 : «не верю» х, : вытянув 1, сказать ♦вытянул 1» 1 2 Хг : вытянув 1, сказать ♦вытянул 0» —1 —2 х3 : вытянув 0, сказать ♦вытянул 1» 1 —2 х4 : вытянув 0, сказать «вытянул 0» —1 — 1 7. Матрица игры «верю — нированными стратегиями не верю» с ком би- первого участника У\ • ♦верю« г/2 : «не верю» х( : сказать «вытянул 1» 1 0 Х2 : сказать правду 0 0, 5 игры. Если участник вытянул 1, ему достаточно стратегии Х\, так как в этом случае он выигрывает при любом ответе противника. Если же он вытянул 0, то ему требуется две стратегии х3 и х4. Поэтому для первого участника игры имеют смысл только две стратегии: сказать «вытянул 1» независимо от истинного исхода слу- чайного события (что соответствует стратегиям Xi и х2 в табл. 6) и стра- тегия «сказать правду» или смесь стратегий Х\ и х4 из табл. 6. С учетом вероятности исходов слу- чайного события (вынимания кар- точки из колоды) элементы матрицы игры с двумя комбинированными стратегиями первого участника а'и = = ацр(1) + a3ip(0) = 1; а(2 = а|2р(1) + + а32р(0) = 0;, а21= atip(l) + а4|р(0) = = 0 и а22 = oi2p(l) + Д42Р(0) = 0,5 (табл. 7). Составленная матрица игры с ком- бинированными стратегиями первого участника не содержит седловой точ- ки, и оптимальная смесь чистых стра- тегий х( и х2 с долями р'х\ = 0,5/(1 + + 0,5) = 1/3 и р'х2 = 1 - p'i = 2/3. Це- 77
Программа 31. Игра «верю — не верю» с комбинированными стратегиями микрокалькулятора х =/= 0 15 ИП6 х = 0 10 ИП7 1 БП 29 57 15 66 5Е 10 67 01 11 51 29 ИП7 1 + БП 30 ИП8 х#=0 23 ИП7 2 67 01 10 51 30 68 57 23 67 02 4- БП 29 ИП6 х =/= 0 05 ИП7 2 — П7 10 51 29 66 57 05 67 02 11 47 КИП4 XY С/П ПП 60 2 1/х -— х<0 43 Г4 14 50 53 60 02 23 11 5С 43 1 БП 44 Сх П8 ПП 60 3 1/х — 01 51 44 ОГ 48 53 60 03 23 11 х<0 55 1 БП 56 ИП8 П6 С/П БП 00 5С 55 01 51 56 68 46 50 51 00 ИП9 Л + ех П9 КИП9 —> ИП9 — П9 69 20 10 16 49 Г9 25 69 11 49 В/О П9 Сх П4 П7 БП 33 52 49 ОГ 44 47 51 33 Инструкция. Ввести в регистр X поло- жительное число а < 10 и нажать клавиши БП71С/П, после высвечивания 1 («вытя- нул 1») или 0 («вытянул 0») сохранить в регистре X или ввести 1 («верю») или 0 («не верю») и нажать только клавишу С/П для высвечивания суммарного выигрыша микро- калькулятора (число его ходов хранится в ре- гистре 4) и, при желании, проверки истинного исхода 0 или 1, хранящегося в регистре 6: нажать клавиши В/О и С/П или С/П для формирования следующего высказывания микрокалькулятора. на игры /(=1/3 и при достаточно большом числе ходов первый участник в среднем выигрывает 1/3 балла за один ход. Так как целесообразна слу- чайная смесь чистых стратегий в уста- новленной пропорции, то их доли равны вероятностям случайного вы- бора комбинированных стратегий первым участником. Для второго участника оптималь- ная смесь чистых стратегий р'у\ = = (а(1 — a'l 2)/(of 1 + 022 — 012 — 021) = = 2/3 и р'У2 = 1/3. Следовательно, его минимальный проигрыш в игре с че- ловеком обеспечивается при случай- ном выборе утверждений «верю» или «не верю» с вероятностями 2/3 и 1/3. В то же время при игре с участием микро-ЭВМ, не учитывающей случай- ность выбора ходов второго игрока, оптимальная стратегия последнего соответствует, например, высказыва- нию «не верю» через каждые два высказывания «верю». При участии микро-ЭВМ в качестве первого игрока необходимо модели- ровать случайный выбор двух воз- можных исходов события (выбора карточки с символами 0 или 1) с вероятностями 0,5 и случайный выбор комбинированных стратегий xf и Х2 с вероятностями 1/3 и 2/3. При составлении программы на входном языке микрокалькулятора следует предусмотреть выполнение фрагмен- та, подобного программе 26, для случайного выбора исходов 1 и 0 с вероятностью 0,5 и повторное выпол- нение этого же фрагмента с выбором высвечиваемого символа в соответ- ствии с оптимальной комбинирован- ной стратегией. Эти операции пре- 78
дусмотрены в программе 31, до- полненной фрагментами для вычисле- ния выигрыша микрокалькулятора согласно исходной матрице (табл. 6), вычисления числа ходов и вспомо- гательных операций. Выбрав а = 5 и пустив програм- му 31 нажатием клавиш БП 7 1 С/П, получим РХ=1 («вытянул 1»). Со- хранив содержимое регистра X, нажмем клавишу С/П для определе- ния выигрыша микрокалькулятора РХ = 1 и снова нажмем клавишу С/П для высвечивания следующего хода микрокалькулятора РХ = 0 («вытя- нул 0»). Сохранив это содержимое регистра X и снова поверив микро- калькулятору, нажмем клавишу С/П, что приведет к результату РХ = О, что означает проигрыш микрокаль- кулятора на этом ходе. Однако, продолжая игру, легко убедиться, что микрокалькулятор выигрывает тем увереннее, чем больше ходов в партии. Рассмотренные методы выбо- ра оптимальных смесей чистых стра- тегий можно использовать для сос- тавления алгоритмов и программ участия микро-ЭВМ и в различных других играх с неполной информа- цией.
МИКРО- эвм- СУДЬЯ Успех участников многих игр за- висит не только от умения логически мыслить, но еще в большей степени от глазомера, быстроты реакции и необходимых для победы навыков. Это относится, в частности, к спортив- ным и военно-патриотическим играм, а также к их различным моделям, реализуемым игровыми автоматами. Микро-ЭВМ могут успешно участво- вать в подобных играх в качестве члена судейской коллегии, измеряю- щего нарушения правил, строгого экзаменатора, оценивающего знания состязающихся, и даже квалифици- рованного тренера-наставника, обуча- ющего своих учеников. Спортивное судейство прежде всего связано с измерением отрезков време- ни. Цифровые ЭВМ, которые могут быть привлечены к выполнению су- дейских обязанностей, содержат гене- ратор тактовой частоты (иногда назы- ваемый часами) для определения с высокой точностью последователь- ности одинаковых интервалов време- ни (тактов). Это обеспечивает воз- можность вывода на дисплей персо- нальных ЭВМ цифровых отсчетов времени, а некоторые из таких машин снабжены встроенной программой для вывода на дисплей изображения часов с движущимися стрелками. Программируемые микрокалькуля- торы также содержат генераторы тактовой частоты, определяющей вре- мя выполнения каждого оператора входного языка. При этом в связи с технологическим разбросом пара- метров тактовые частоты микрокаль- куляторов даже одного типа несколь- ко отличаются и ь некоторой степени зависят от температуры окружающей среды и напряжения источника пи- тания. Это обстоятельство приходится учитывать при составлении програм- мы для отсчета времени и корректи- ровать исходные данные (как и при регулировке хода обычных часов) программы для используемого микро- калькулятора. Формирование непрерывных отсче- тов времени с помощью микрокаль- кулятора обеспечивается программой без оператора остановки С/П, со- держащей замкнутый цикл. Так как время каждого выполнения такого цикла практически постоянно, то достаточно формировать цифровые отсчеты числа выполненных циклов в масштабе выбранной единицы из- мерения времени. Примером может служить програм- ма Сх ПЫ1 КИПК1 MUN, HIINzX ХПКз БП 02 с оператором косвенного вызова из памяти на адресном ре- гистре TV, =4,5 или 6. При каждом выполнении такого цикла, включаю- щего семь последних операторов программы, содержимое регистра Ni, равное числу выполненных итераций, умножается на экспериментально найденный масштабный множитель k, содержащийся в регистре N2, и в ре- гистре N3 заносится текущее время выполнения программы в выбранных единицах измерения, изменяющееся после каждого цикла на величину k. Для индикации формируемых от- счетов времени удобно использо- 80
Программа 32. Цифровые часы Сх 6 0 П7 1 0 0 П8 КИП5 ИП7 ОГ 06 00 47 01 00 00 48 Г5 67 ИП5 5 П6 — х<0 20 КИП4 Сх П5 65 05 13 46 11 5С 20 Г4 ОГ 45 ИП6 ИП8 — ИП4 + t t t t I 66 68 13 64 10 0Е 0Е 0Е 0Е 0Е t 1 t t t t t t t t 0Е 0Е 0Е 0Е 0Е 0Е 0Е 0Е 0Е 0Е t I t t t БП 08 0Е 0Е 0Е 0Е 0Е 51 08 Инструкция. (Для начальной установ- ки часов ввести 22 = Р4,0 = Р5 и, нажав кла- виши В/О и С/П, определить время форми- рования цифры 1 в высвечиваемом чис- ле 22,01 — если оно отличается от 60 с, то соответственно увеличить или уменьшить число операторов f в программе); ввести начальные целое число часов п = Р4 и число минут т — = Р5 и нажать клавиши В/О и С/П; при выполнении операторов f на индикаторе вы- свечиваются (в левых знакоместах) текущие целое число Р4 = п, часов и целое или дробное (с точностью до 0,2) число Р5 = mi минут. вать имеющийся во входных языках некоторых программируемых микро- калькуляторов оператор PAUSE для высвечивания на несколько секунд результата предыдущих операций в процессе выполнения программы. Во входном языке микрокалькуляторов используемых нами типов такой оператор отсутствует, и для лучшего выделения на индикаторе текущего отсчета времени следует обеспечить его хранение в регистре X в течение достаточно большой части времени выполнения цикла. Этим условиям отвечает программа 32, обеспечиваю- щая вывод отсчетов времени в часах и минутах на индикатор в процессе выполнения программы. Программа 32 по удобству отсчета времени не может соперничать с обычными часами и представляет интерес лишь как пример моделиро- вания устройства для отсчета часов и минут. Однако для некоторых игр (например, при учете времени, затра- чиваемого шахматистами на обдумы- вание ходов) обычные часы непри- годны, и моделирование шахматных часов может оказаться целесообраз- ным. В этом случае достаточно отсчиты- вать время в минутах, для чего целе- сообразно также использовать цикл с оператором косвенного вызова из памяти на адресном регистре с но- мером N = 4, 5 или 6, но для кор- рекции масштаба времени следует предусмотреть запись масштабного множителя в регистр памяти. Сумми- рование времени обдумывания ходов шахматистами должно реализоваться в различных регистрах памяти, что можно обеспечить установкой (/ =/= 0) и снятием (/ = 0) флага с проверкой его условным оператором. Этим усло- виям отвечает программа 33, в кото- рой действие флажка шахматных часов моделируется автоматической остановкой программы с высвечива- нием числа минут (с отрицательным знаком), превышающим допустимое суммарное время обдумывания игро- ком, сделавшим предыдущий ход. Для упрощения программы 33 пе- ред ее выполнением задается предель- ное допустимое время обдумывания 81
Программа 33. Цифровые шахматные часы ИП6 х = 0 29 ИП5 П6 ИП8 П8 ИПО XY 66 5Е 29 65 46 68 10 48 60 14 — х<0 20 С/П Сх П5 П6 П7 П8 В/О 11 5С 20 50 ОГ 45 46 47 48 52 Сх П4 КИП4 ИП4 ИП9 X П5 БП 22 Сх ОГ 44 Г4 64 69 12 45 51 22 ОГ П6 ИП5 ИП7 + П7 БП 08 46 65 67 10 47 51 08 Инструкция. (Для начальной регули- ровки часов ввести k = 0,25 = Р9, нажать кла- виши БП20С/П и через 60 с остановить программу нажатием клавиши ПП - если содержимое регистра 5 больше или меньше единицы, то соответственно уменьшить или увеличить /г), ввести допустимое время обду- мывания ходов в регистр 0; для первого пуска программы нажать клавиши БП14С/П; для последующих — клавиши В/О и С/П, после очередной остановки программы нажатием клавиш ПП или С/П в регистрах 7 и 8 хра- нятся отсчеты суммарного времени шахма- тистов без отсчета времени последнего хода, хранящегося в регистре 5; при автоматической остановке программы высвечивается число минут (с отрицательным знаком), превышаю- щее допустимое время обдумывания ходов шахматистом, выполнившим предыдущий ход. Программа 34. Цифровой секундомер ИП9 69 t 0Е t 0Е t 0Е С/П 50 + 10 БП 51 05 05 Инструкция. (Для начальной регули- ровки хода ввести 0,5 = Р9 и нажать клави- ши В/О и С/П, что приведет к высвечиванию РХ = 0,5; нажав клавишу С/П, через 60 с остановить программу — если высвечиваемые цифры отличаются от 60, то соответственно уточнить содержимое регистра 9), после ввода подобранного масштабного коэффициента в регистр 9 нажать клавиши В/О и С/П; в нужный момент времени пустить программу нажатием клавиши С/П и остановить про- грамму после окончания процесса, длитель- ность которого измеряется, что приведет к вы- свечиванию числа секунд. независимо от числа ходов. Для того чтобы учитывалось допустимое время каждого хода, эту программу следует несколько усложнить, дополнив ее счетчиком шагов на операторе косвен- ной адресации и фрагментом вычисле- ния допустимого времени обдумы- вания ходов в зависимости от их числа. Относительно просто с помощью программируемого микрокалькуля- тора реализуется отсчет времени в секундах при остановке программы (как и в обычном секундомере). Если при этом время отсчитывается в секундах, то длительность выполне- ния цикла в программе без оператора С/П должна быть меньше секунды. Этим требованиям отвечает програм- ма 34, в которой после выполнения начального фрагмента для засылки масштабных коэффициентов в ре- гистры операционного стека (что соот- ветствует нажатию кнопки секундо- мера для сброса предыдущего отсче- та) и нажатия клавиши С/П выполня- ется цикл суммирования в регистре X масштабных слагаемых. Во многих случаях для определения заданных интервалов времени удобно использовать будильник или, для небольших отрезков времени, таймер. Для моделирования таймера доста- точно составить программу, содержа- 82
Программа 35. Цифровой таймер П7 ИП9 X ПО ИП7 С/П L0 06 ИП7 С/П 47 69 12 40 67 50 5Г 06 67 50 Инструкция. (Для корректировки хода таймера ввести корректирующий множитель k — 2,3 в регистр 9 и 60 в регистр X, нажать клавиши В/О и С/П и в фиксируемый момент времени клавишу С/П, если время выполнения программы меньше или больше 60 с, то соот- ветственно увеличить или уменьшить содержи- мое регистра 9), ввести k — Р9, для каждого отсчета времени вводить заданное время в се- кундах в регистр X и нажимать клавиши В/О и С/П для начальной установки; в нужный момент нажать клавишу С/П, что приведет к высвечиванию заданного числа через равное число секунд. щую цикл с заданным числом итера- ций, равным целой части произведе- ния заданного числа секунд на масштабный множитель, определяе- мый временем выполнения одного цикла. Примером может служить программа-таймер 35 с оператором цикла L0 06 на адресном регистре 0. При выполнении программы 35 ко времени выполнения циклов до- бавляется время выполнения опера- торов ИП7 и С/П (около 0,6 с). Поэтому для точного отсчета времени с погрешностью менее 0,6 с следует корректировать масштабный множи- тель для различного числа секунд. Однако в этом нет необходимости, так как время реакции человека при нажатии клавиш соизмеримо с воз- можной погрешностью корректи- ровки. Программируемый микрокалькуля- тор, «обученный» по программе 35, удобно использовать, в частности, для определения времени выдержки при печатании фотоснимков, так как относительно слабое свечение инди- катора не засвечивает фотобумагу, а пользование обычными часами в за- темненной фотолаборатории затруд- нительно. Спортивные и другие игры, связан- ные с перемещением во времени и про- странстве спортсменов или управляе- мых ими объектов, успешно модели- руются с помощью персональных ЭВМ при отображении на дисплее изменяющейся игровой ситуации. При моделировании таких игр с помощью программируемых микрокалькулято- ров, выводящих лишь цифровую ин- формацию, приходится использовать различные схемы и карты для отобра- жения условий игры и, в необходимых случаях,изменений игровой ситуации. Успех участников многих игр судьи определяют по затратам времени на выполнение определенных действий. При моделировании таких игр с по- мощью персональных ЭВМ, снабжен- ных специальными приспособления- ми для управления перемещением объектов на дисплее, возможен непре- рывный отсчет времени для оценки результатов участников игры. При использовании программируемых микрокалькуляторов можно лишь косвенно оценивать затраты времени участниками состязания в зависи- мости от выбора ими определенных решений, отображаемых количе- ственно. В качестве простейшего примера такого моделирования, который мо- жет быть усложнен и представлен в другом внешнем оформлении, рас- смотрим игру под названием «сме- шанный марафон». Участники этого спортивного состязания должны за кратчайшее суммарное время про- ехать из пункта С (рис. 28) на вело- сипеде со скоростью Ув до выбранной ими точки х, переплыть со скоростью Vn реку со скоростью течения Vp и добежать до точки финиша Ф со ско- ростью Уб. Если расстояние между 83
Программа 36. Игра «смешанный марафон» П7 47 ИПА 6— ИПВ 6L ИПЗ 63 13 П9 49 ИПО 60 X 12 11 ИП7 67 — 11 X2 22 ИПС 6С X2 22 + 10 21 ИП2 62 -4- 13 ИП9 69 + 10 ИП7 67 ИП1 61 13 + 10 6 06 0 00 X 12 1 01 ВП ОС 5 05 + 10 Бх 0 11 С/П 50 БП 51 00 00 Инструкция. Перед игрой ввести вы- бранные исходные данные Vp—PO; VB = P1; V„=P2; V6=P3; a = PA-, b = PB; c -PC (скорости, км/ч; расстояния, км); после ввода в регистр X выбранного очередным участником расстояния х нажать клавишу С/П (первый раз В/О и С/П) для вычисления времени участ- ника в минутах с четырьмя знаками. Программа 37. Игра «гонки с препятствиями» ИПА sin ипд X кипв + КПВ ИПА COS ипд 6— 1С 6Г 12 гь 10 LL 6— 1Г 6Г X ипв 1 + ПВ КИПВ + КПВ С/П 12 6L 01 10 4L 25 ГЪ 10 LL 50 ПА ИПВ 1 + ПВ ИПС — х = 0 30 ПВ 6— 6L 01 10 4L 6С 11 5Е 30 4L БП 00 ПА ипс ПО Сх кпо ИПО х = 0 35 51 00 4— 6С 40 ОГ L0 60 5Е 35 ПВ БП 00 4L 51 00 Инструкция. Перед началом игры уста- новить переключатель Р — Г в положение Г, вести число (п 5) участников 2п=РС, длину пробега d = РД; ориентируясь по карте с точкой старта в начале координат (хо = у<> = О), участ- ники игры по очереди вводят в регистр угол <р направления движения и нажимают клави- шу С/П (для первого пуска программы — точками С и Ф вдоль реки равно а, ширина реки b и расстояние от реки до финиша с, то общее время движе- ния t = x/VB + b/Vn + + ^а-х- bVp/VB)2 + c2/V6 . Предполагая, что спортивная под- готовка и, следовательно, скорости участников марафона одинаковы, по- бедителем марафона (по лучшему клавиши БП 3 2 С/П), что приводит к вычисле- нию текущих координат его положения на карте РХ — х,; PY = упри пересечении грани- цы препятствия участник игры обязан на сле- дующем ходу ввести предыдущее значение <р с обратным знаком, чтобы устранить нару- шение. результату из трех попыток) окажется спортсмен, наиболее удачно выбрав- ший расстояние х. Судить эти состя- зания можно поручить любой микро- ЭВМ и, в частности, микрокалькуля- тору, «обученному» по программе 36 для вычислений суммарного време- ни участников по составленной фор- муле. Пусть Vp = 4 км/ч; VB = 20 км/ч; У„ = 3 км/ч; Ve = 10 км/ч; а - 2 км; b = 0,2 км; с = 0,5 км. Тогда при 84
выборе расстояния х = 1; 1,5 и 1,8 км по программе 36 соответственно по- лучим время марафона t = 25,14; 18,76 и 16,88 мин. Для ограничения результата четырьмя знаками в этой программе использован фрагмент 1 ВП 5 + Вх—. Условия игры «смешанный ма- рафон» (и, соответственно, програм- му-судью) можно разнообразить, уве- личивая число и вид этапов или количество решений, принимаемых участниками. Однако в этой игре не- достаточно явно проявляется спортив- ный характер подобных состязаний, участники которых в ходе игры не- прерывно оценивают свои и чужие успехи и неудачи с целью первыми достичь финиша и только после этого узнают суммарное время игры. Непрерывное изменение игровой ситуации можно моделировать с по- мощью микро-ЭВМ, заменив его изме- нением этой ситуации через опреде- ленные промежутки времени At. Тогда каждое выполнение программы можно сопоставить с концом этого отрезка времени и организовать определение программой положения участников или управляемых ими объектов через каждый отрезок вре- мени At. Положение участников или управ- ляемых объектов обычно определяют в прямоугольной системе координат х и у, но для выбора перемещения за время At участникам удобно за- давать угол <р между направлением Движения и горизонтальной осью х и расстояние перемещения d. В этом случае для определения перемещения объекта из точки с координатами Рис. 28. Рис. 29. 85
Xi-t и yi-i в точку с координатами Xi и у, достаточно вычислить Xi — = Xi_! + di cos ф/, yi=yi-i + di sin ф,-. В простейшем случае расстояние d, на которое перемещается каждый объект за время At, можно принять постоянным. Тогда каждому участ- нику игры достаточно изменять или сохранять угол ф направления дви- жения (с постоянной скоростью d/&t) на каждом ходе, поручив микро-ЭВМ вычисление координат движущегося объекта через отрезки времени At. Очевидно, подобные игры имеют смысл лишь в том случае, когда их участники могут выбирать различные пути и заранее неизвестно, какой из них окажется короче и приведет к победе. Поэтому для такой игры на дисплее персональной ЭВМ или на бумаге должна быть изображена карта местности (например, показан- ная на рис. 29) с прямоугольной сеткой координат, указанием места старта (лучше в начале координат) и финиша (в простейшем случае в виде кружка радиусом d/2), а также границ препятствий, которые не должны нарушать участники игры. Правила такой «го'нки с препят- ствиями» должны предусматривать наказания (например, пропуск хода виновного) для соперников, пересек- ших границы препятствий. В рассматриваемой игре микро-ЭВМ должна хранить в памяти текущие координаты всех участников игры. В связи с простотой вычислений число участников ограничивается лишь ем- костью числовой памяти и при исполь- зовании для этой игры в качестве технического эксперта программируе- мого микрокалькулятора, «обучен- ного» по программе 37, в ней может участвовать до пяти соперников, координаты которых заносятся в 10 или менее регистров памяти опера- торами косвенного обращения к памяти. Программа 37 достаточно универ- сальна и может использоваться с лю- бой картой местности при выборе точ- ки старта в начале координат. Уро- вень судейства машиной подобных состязаний повышается при автома- тизации контроля за нарушениями правил игры и наказания наруши- телей. Для этого достаточно выбирать границы препятствий, которые запре- щается нарушать, так, чтобы они описывались достаточно простыми функциями, вычисляемыми машиной при контроле нарушений (рис. 30). Для примера выберем круговую гоночную дорожку, ограниченную окружностями с радиусами Bmin и .Rmax с точкой старта в средине дорож- ки на расстоянии R = (_Rmln + Ятах)/2 от центра окружностей. Совместив точку старта с началом координат, получим неравенство Втах > (х, — — В)2 + yf >Bmin, которому удовлет- воряют координаты всех точек на гоночной дорожке. При продвижении на каждом ходу на расстояние d участники игры вы- бирают угол ф между направлением движения и положительной осью координаты х. Если при этом коорди- наты новой точки не удовлетворяют неравенству, то участник игры выехал за пределы гоночной дорожки и штрафуется машиной, сохраняющей координаты его положения перед оче- редным ходом. На входном языке микрокалькуля- торов подобные гонки двух участни- ков контролируются программой 38, в которой вычисляются текущие коор- динаты обоих участников и, если они находятся в пределах гоночной до- рожки, заносятся в регистры памяти. Для тренировок можно выбрать сравнительно широкую дорожку, на- пример, с d = 2; R — 10; Bmin = 8; ^шах— 12- ТОЧНОСТЬ моделирования спортив- ных состязаний повышается при выбо- 86
Программа 38. Игра «гонки по круговому треку» П9 ИП7 ИП8 ПП 22 П8 XY П7 2 С/П 49 67 68 53 22 48 14 47 02 50 П9 ИП4 ИП5 ПП 22 П5 XY П4 1 с/п 49 64 65 53 22 45 14 44 01 БП 00 ИП9 sin ИПА X ПЗ + П2 X2 51 00 69 1С 6— 12 43 10 42 22 XY ИП9 COS ИПА X ПО + П1 ИПВ — 14 69 1Г 6— 12 40 10 41 6L 11 X2 + П6 ИПС — х>0 55 ИП6 ипд — 22 10 46 6С 11 59 55 66 6Г 11 х<0 55 ИП1 ИП2 В/О ИП1 ИПО — ИП2 ипз 5С 55 61 62 52 61 60 11 62 63 — В/О Сх П4 П5 П7 П8 БП 18 11 52 ОГ 44 45 47 48 51 18 Инструкция. Установить переключа- тель Р — Г в положение Г, ввести d — PA', R = РВ; 7?^in =РС; /?^ах = РД и нажать кла- виши БП 6 2 С/П; после каждого выполнения программы высвечивается номер участника гонок, который вводит в регистр X выбранное значение угла <р направления движения и нажи- мает только клавишу С/П; текущие координа- ты участников хранятся в регистрах Р7 = х'; Р8 = у! и Р4 = х”; Р5 = у”; выигрывает пер- вым достигший линии старта. ре участниками игры не только угла ф направления движения, но и расстоя- ния пробега d или скорости движения d/kt на каждом шаге. В простейшем случае для этого можно модифициро- вать программу, подобную програм- ме 37, дополнив ее операторами для запоминания вводимых значений d. Однако целесообразно усложнить условия игры, вводя дополнительные условия. В качестве примера рассмотрим моделирование авторалли на местнос- ти, карта которой показана на рис. 31. Участники должны проехать от места старта любым путем в город Ф, огибая заштрихованные озера и при необхо- димости изменяя на каждом отрезке времени At, соответствующем выпол- нению программы для каждого участ- ника, поворот автомобиля для движе- ния под углом <р к горизонтальной оси координат и удельную силу тяги Р 1, пропорциональную ско- рости движения d/\t. При этом в начальной зоне шириной а макси- мальная скорость при Р = 1 состав- ляет Vi, тогда как в пустынной зоне при у> а она снижается до Уг. Побеждает, как и в настоящих авто- гонках, участник, выбравший наи- лучший путь, обеспечивший достиже- ние финиша за минимальное время. Рис. 30. 87
Программа 39. Игра «автопробег» ПЗ 43 КИП4 Г4 ИП8 68 ИПА 6— 11 X < 0 5С 10 10 ИП5 65 БП 51 11 11 И J6 66 ИП9 69 X 12 П2 42 ИПЗ 63 sin 1С X 12 ИП8 68 + 10 П8 48 И '2 62 ИПЗ 63 COS 1Г X 12 ИП7 67 + 10 П7 47 С/П 50 БП 51 00 00 нет ру кция. Установить переключа- ej ь Р — Г в положение Г, перед началом 1гры ввести V । (км/ч)/60 = Р5; Vi (км/ч)/60 = = Р6; а(км) = РА; каждый участник пробега, очистив регистр 4 и введя координаты старта х0 = Р7; у<, =Р8 и Ртах = 1= Р9 проходит весь путь до финиша, нажимая перед каждым пус- ком программы клавишу С/П (для первого X Рис. 31. пуска — клавиши В/О и С/П) с предваритель- ным изменением при необходимости Р sj 1 в регистре 9 и вводом = РХ', после каждого выполнения программы РХ — Р7 = Xi (км), PY = Р8 = у, (км), Р4 = i (мин); выигрывает прошедший из старта точно в место финиша за минимальное время. При программировании судейства таких гонок (штрафы за нарушение правил в простейшем случае можно поручить участникам) должно быть предусмотрено вычисление координат автомобилей через каждый отрезок времени At с учетом различных пре- дельных скоростей при у > а и у а. Этим требованиям отвечает програм- ма 39. Пусть, например, Vi=90 км/ч; V2 = 30 км/ч; а = 10 км; тогда при выборе первым участником Р = 1 = = Р9; ф1 = 45 = РХ по программе вычисляются координаты положения автомобиля Xi = J/1 = 1,06 км через время At = 1 мин. Продолжая ввод только значений при максимальной тяге Р = 1 и огибая озера, участники приближаются к финишу, для точного попадания в который им следует уменьшить Р. Сложнее и интереснее моделиро- вание управления парусной яхтой. При постоянной силе ветра со ско- ростью VB в направлении отрица- тельных значений координаты у (рис. 32) давление ветра на парус яхты Р = kVB cos (<р + ф), где k — коэффициент, зависящий от формы паруса и плотности воздуха; <р — курсовой угол (угол направления движения яхты, определяемый поло- 88
Программа 40. Игра «парусная регата» П6 46 XY 14 П5 45 + 10 COS 1Г ИП6 66 sin 1С X 12 ИП9 69 X 12 ПЗ 43 КИП4 Г4 ИПЗ 63 ИП5 65 sin 1С X 12 ИП8 68 + 10 П8 48 ИПЗ 63 ИП5 65 COS 1Г X 12 ИП7 67 + 10 П7 47 С/П 50 БП 51 00 00 Инструкция. Перед началом игры уста- новить переключатель Р — Г в положение Г и ввести коэффициент kqVB в регистр 9; участники состязания по очереди проводят яхту по условленной трассе, предварительно очистив регистр 4 (выполняющий функции часов для отсчета суммарного времени iAt движения яхты) и занося координаты точки старта Хо = = Р7, уо = Р8; перед каждым выполнением программы ввести <р, — PY, = РХ и нажать клавиши В/О и С/П (для первого пуска обяза- тельно) или С/П; после каждого i-ro выполне- ния программы РХ = Р7 — х,, PY = Р8 = у„ Р4 — V, победитель определяется по минималь- ным затратам времени iAt на прохождение всей трассы. жением руля), отсчитываемый отно- сительно положительного направле- ния оси х; ф — угол установки паруса, отсчитываемый против часовой стрел- ки относительно направления движе- ния яхты. В пренебрежении инерционностью яхты и сопротивлением воды пе- ремещение яхты определяется си- лой тяги F = Р sin чр = kVB cos (ср + + ip) sin чр, зависящей от положения руля и паруса. За время At яхта про- ходит с некоторой средней скоростью расстояние с проекциями на коорди- натные оси х = qF cos ср и у — qF sin <р, где q — коэффициент пропорциональ- ности между силой тяги и скоростью движения. При выборе At = 1 коорди- наты яхты через каждый отрезок времени определяются по формулам Xi = Xi-i + qkVBcos(<fi + ipi)sinip, costp,; у, = yt-1 + gAyBcos(<pi + ip,) sin ф, simp,. Так как яхтсмену приходится не- прерывно управлять положением ру- ля и паруса, то в реализующей вы- числения по этим формулам про- грамме 40 предусмотрен ввод значе- ний <р, и чр/ перед каждым выполне- нием программы. Величину kqVB целесообразно вы- бирать в соответствии с реальными характеристиками движения яхт. Так как эта величина равна максималь- ному расстоянию, проходимому яхтой за время At = 1 мин при <р = — 90° и чр = 0, то приняв максимальную скорость яхты Fmax — 5 м/с, получим значение kqVB - VmaxAt = 300 м. Яхта может двигаться (лавировать) и против ветра при изменениях поло- жения руля и паруса. Приняв, на- пример, 300 = Р9; 0 = Р4 = Р7 = Р8, при (pi = 60° и ф1 = 15° получим X) = 10 м; yi - 17,4 м; при <рг = 120° и гр2 = — 15° получим х? = 0; j/г = = 34,8 м и т. д. Приобретя достаточ- ные навыки в управлении яхтой, мож- но приступить к соревнованиям. Для этого следует начертить карту аква- тории с координатной сеткой и очер- таниями берега и островов и выбрать трассу для регаты (гонок под пару- сом). Участники регаты по очереди проводят яхту к месту финиша, и победитель определяется по мини- мальным затратам времени (Р4 - i). Можно усложнить программу 40, организовав автоматическое занесе- ние в память координат яхт, управляе- мых каждым из участников. Однако это не всегда целесообразно, так как ограничивает число участников и увеличивает время выполнения про- граммы. 89
Программа 41. Игра «авиационный перелет» П2 42 XY 14 П1 41 sin 1С ИП6 66 X' 12 ИП7 67 + 10 П7 47 КИП4 Г4 ИП1 61 COS 1Г ИП6 66 X 12 ПЗ 43 ИП2 62 sin 1С X 12 ИП9 69 + 10 П9 49 ипз 63 ИП2 62 cos 1Г X 12 ИП8 68 + 10 П8 48 С/П 50 БП 51 00 00 t 0Е Сх ОГ П4 44 П7 47 П8 48 П9 49 25 БП 51 00 U0 Инструкция. Установить переключа- тель Р — Г в положение Г; для взлета «пилот» вводит d = 2 = Р6 (что соответствует скорости 120 км/ч), угол (между направлением взлетной полосы и осью х) <р0 = РХ, допустимый угол подъема 0о = PY и нажимает клавиши БП 3 1 С/П; в последующем перед каждым вы- полнением программы «пилот» вводит d, = Р6; ср, = РХ-, 6, = PY (в пределах, допускаемых выбранными правилами игры) и нажимает клавиши В/О и С/П или С/П; после каждого i-ro выполнения программы РХ = Р8 = хг, PY=P9 = yt; Р7 = hi (высота полета); Р4 = = iAt (время полета); при выборе d следует учитывать, что при At = 1 мин значение d = = 10 км соответствует скорости 600 км/ч. Программа 42. Игра «навесная стрельба» КИП4 Г4 XY 14 2 02 X 12 sin 1С ИП8 68 X 12 ИП7 67 11 П5 45 X2 22 21 ИП9 69 — 11 х<0 1С 17 17 21 ИП5 65 С/П 50 БП 51 00 00 Инструкция. Установить переключа- тель Р Г в положение Г, очистить регистр 4, ввести дальность цёли du = P7, максимальную дальность стрельбы ,dmax = Р8, радиус пораже- ния Д = Р9; перед каждым выполнением про- граммы вводить угол возвышения орудия 0 = = РХ и нажимать клавиши В/О и С/П (для Интересные игры можно составить с учетом движения объектов в трех измерениях, например полетов само- лета со следующими правилами: за время At самолет пролетает расстоя- ние d с допустимыми изменениями курсового угла |А<р|^20° и угла подъема или спуска самолет |А0| <2 20° на каждом отрезке времени At. Посадку самолет должен совершать при IА01 5°, придерживаясь задан- ного направления посадочной полосы, и остановиться в ее пределах. При взлете курсовой угол также должен первого пуска программы обязательно) или С/П; после каждого выполнения программы высвечивается расстояние от цели до места падения снаряда (при недолете с отрицатель- ным знаком) или, при поражении цели, символ ЕГГОГ; число затраченных снарядов (выполне- ний программы) хранится в регистре 4. соответствовать направлению взлет- ной полосы. Моделирование полетов самолета с постоянной скоростью на каждом отрезке времени At обеспечивается программой 41. Перед «полетами» по программе 41 следует составить авиационную карту с координатной сеткой (точка старта соответствует началу координат с х0 = уо = 0), направлениями и разме- рами посадочных полос. Условия игры можно разнообразить, дополнив их, например, требованием совершать 90
круг перед посадкой или придер- живаться при перелетах заданных воздушных коридоров и изменяя ограничения на выбор d, <р и ip. Наиболее ярко выражены конфлик- тные ситуации, являющиеся суще- ством игр, в военных операциях, и поэтому различные игровые автоматы имитируют боевые действия чаще, чем спортивные состязания. Одним из простейших боевых действий явля- ется артиллерийская стрельба, при которой снаряд, вылетевший из ору- дия с начальной скоростью V под углом 6 относительно поверхности Земли, пролетает по баллистической кривой и падает (без учета сопротивле- ния воздуха) на расстоянии d = = V2sin20/g, где g = 9,81 м/с2 (рис. 33). Для моделирования артиллерий- ской стрельбы эту формулу удобно записать в виде d = dmax sin 20, где dmax = У2 /8 — максимальная даль- ность стрельбы, соответствующая уг- лу возвышения 0 = 45°. Выбрав dmax и радиус поражения А цели при разрыве снаряда, можно моделировать артиллерийскую стрель- бу с помощью программы 42, при- годной для различных игр. Программу 42 можно использовать в различных вариантах игры. При «учебных стрельбах» участники игры по очереди «ведут огонь» до пораже- ния цели и выигрывает «артилле- рист», затративший минимальное число снарядов. При «артиллерийской дуэли» участники игры по очереди «ведут огонь», и выигрывает первым поразивший противника. Игру можно усложнить, предпола- гая, например, движение цели в на- правлении орудия с постоянной ско- ростью. Для этого достаточно органи- зовать в программе уменьшение даль- ности до цели после каждого ее выпол- нения. Такую программу, подобную программе 43, можно использовать как для отражения «танковой атаки» за минимальное число «выстрелов», так и для моделирования боя между орудием и танком, по очереди обме- нивающихся выстрелами. Подобные игры можно усложнить, учитывая не только дальность до цели, но и азимут цели <р (угол между направлением на цель и начальным направлением). Кроме того, можно усложнить и задачу артиллеристов, сообщая им лишь расстояние от цели до места падения снаряда 91
Программа 43. Игра «танковая атака» КИП4 Г4 XY 14 2 02 X 12 sin 1С ИП9 69 X 12 ИП7 67 ИП6 66 — 11 П7 47 — 11 П5 45 X2 22 21 ИП8 68 — 11 X < ;о 5С 20 20 21 ИП5 45 С/П 50 БП 51 00 00 Инструкция. Установить переключа- тель Р — Г в положение Г; ввести начальную дальность до цели duo = Р7, радиус поражения цели Д = Р8, максимальную дальность стрель- бы dmax = Р9, изменение расстояния до цели за время полета снаряда Ad„ = Р6; очистить регистр 4; перед каждым пуском программы нажатием клавиши С/П (первый раз — клавиш В/О и С/П) вводить угол возвышения 0 = РХ', после выполнения программы высвечивается расстояние между целью и местом падения снаряда или, при поражении цели — сигнал ЕГГОГ; число выстрелов хранится в регистре 4. Программа 44. Игра «артиллерийский бий П9 XY 2 X sin ИП7 X П8 КИП4 ИП8 49 14 02 12 1С 67 12 48 Г4 68 X2 ИП5 X2 + ИП5 ИП8 X 2 X ИП9 22 65 22 10 65 68 12 02 12 69 ИП6 — COS X — П2 ИП1 — х<0 66 11 1Г 12 11 21 42 61 11 5С 32 ИП2 С/П БП 00 П4 + П5 2 32 21 62 50 51 00 44 10 45 02 X П6 ИП5 ИП4 1 + — 5 + П5 12 46 65 64 01 10 13 05 10 45 Сх П4 С/П БП 00 ОГ 44 50 51 00 Инструкция. Установить переключа- тель Р — Г в положение Г; ввести максималь- ную дальность стрельбы dmax = Р7, радиус поражения \ = Р1, часы начала игры Н — = PY, минуты начала игры М = РХ и нажать клавиши БП 3 6 С/П, что приведет к высве- чиванию нуля; перед каждым пуском про- r = -\/d2 + d2 — 2ddu cos (<р — <рц), где du — расстояние от орудия до цели; d — расстояние от орудия до места падения снаряда; <р — азимут, выбранный артиллеристами; <рц — истинный азимут цели. Для усложнения задачи артилле- ристов в программе 44, реализующей вычисления по этой формуле, даль- граммы вводить угол возвышения 0 = PY и азимут <р = РХ и нажимать клавишу С/П; после выполнения программы высвечивается расстояние от места падения снаряда до цели, или при поражении цели, сигнал ЕГГОГ; число выполнений программы хранится в регистре 4. ность и азимут цели выбирают по формулам du = (Н + М)/(М + 1); <рц = = 2(Н + М), где Н и М — часы и ми- нуты начала игры. Подобные программы пригодны как для «учебных стрельб», так и для «артиллерийских дуэлей», но их можно еще более усложнить и при- близить моделирование к реальным условиям, учитывая движение цели 92
Программа 45. Игра «морское сражение» П1 41 XY 14 П2 42 2 02 X 12 sin 1С ИП5 65 X 12 ПЗ 43 КИП4 Г4 ИП5 65 21 2 02 0 00 X 12 ИП2 62 sin 1С X 12 ИП9 69 X 12 ИП7 67 ИП8 68 COS 1Г X 12 XY 14 — 11 ПА 4 X2 22 ИП7 67 ИП8 68 sin 1С X 12 X2 22 + 10 21 П7 47 ИПА 6 4- 13 1/х 23 arccos 1 П8 48 ИП7 67 X2 22 ИПЗ 63 X2 22 + 10 ИП8 68 ИП1 61 11 cos 1Г ИП7 67 X 12 ИПЗ 63 X 12 2 02 X 12 — 11 21 ПВ 4L ИП6 66 — 11 х< 0 5С 68 68 5 05 0 00 5 05 БП 51 69 69 ИПВ 6L с/п 50 БП 51 00 00 t 0Е Сх ОГ П4 44 —> 25 БП 51 00 00 Инструкция. Установить переключа- тель Р — Г в положение Г; ввести dmax (км) = = Р5: Д (км) = Р6; </кС(км) = Р7; а(®..)=Р8; Ик(км/с) = Р9; перед каждым пуском програм- мы вводить 0(°.) = РУ; <р(?..)=РХ и нажимать клавиши В/О и С/П или С/П (для первого пуска — клавиши БП 7 2 С/П); после выполне- ния программы высвечивается расстояние от корабля до места падения снаряда или, при поражении, сигнал SOS (505); число выстрелов хранится в регистре 4, расстояние до места падения снаряда — в регистре 3, истинные значения dK и <рк — соответственно в ре- гистрах 7 и 8. под углом относительно направления на орудие. Так, при движении корабля со скоростью VK за время полета снаряда, выпущенного из орудия при угле возвышения 6, корабль пройдет по своему курсу расстояние а = VKt, а время полета снаряда составит t = 2V sin 0/g = 2 sin G^dm&x/g « « 20 sin 6-\/dmax. Если обозначить b = = d sin a; c = d cos a (где a — курсо- вой угол корабля в соответствии со схемой, показанной на рис. 34) и отсчитывать азимут <р относительно курса корабля, то ко времени падения снаряда дальность до корабля соста- вит dK = д/b2 + (с — а)2, а азимут ко- рабля ч|\ = arccos ((с — a)/dK) при расстоянии до места падения снаря- да г, определяемого как и для пре- дыдущей программы. Эти соотношения использованы для вычислений, реализуемых по про- грамме 45, где при измерении углов в градусах, а расстояний в кило- метрах, для определения времени в секундах скорость корабля всегда должна задаваться в километрах в секунду. Пусть исходные данные к програм- ме 45 выбраны следующими: dmax = = 30 км; А = 0,1 км; dK0 = 15 км; а = 45°; VK = 21,6 км/ч = 6 • 10 3 км/с. Приняв 0 = 20°, <р — 48° и нажав клавиши БП 7 2 С/П, после выполне- ния программы (время счета около 30 с) получим РХ = 4,49. При 0 = 15°, <р = 50° получим РХ = 1,05 и, про- должив «стрельбу», поразим корабль, если он не успеет уйти за пределы досягаемости орудия с выбранной максимальной дальностью стрельбы. 93
Условия военных игр можно раз- нообразить до бесконечности, моде- лируя действия различных боевых средств и тактику их применения. Поэтому рассмотрим лишь модели- рование торпедных атак, связанных с относительно сложными расчетами. Пусть корабль, обнаруженный под- водной лодкой на расстоянии do, дви- жется со скоростью VK под углом а относительно направления на лодку (рис. 35). Командир подлодки должен выпустить торпеду с упреждением так, чтобы при скорости движения VT ее курс пересекся в определенный момент времени с курсом корабля. Торпеда, выпущенная под углом <р, пересекает курс корабля, пройдя расстояние b = do sin a /sin (а + <р) за время t = b/V-r. За это же время корабль пройдет по своему курсу рас- стояние ак — VKt = bVK/V\ = VKd0 X X sin a/VTsin (a + <p) при расстоянии до места пересечения курсов a=doX X sin <p/sin (a + tp) и до места пере- сечения курса торпедой Да = а — ак. При последующих торпедных залпах Дап = d sin <pn/(sin (a + фп)) — (VKd sin a/ /Ут)^ sin (a + ф/)-1. i = 4 Если скорость корабля больше ско- рости торпеды, то при больших углах встречи а торпеда может не догнать корабль. Кроме того, командир под- лодки должен учитывать, что при больших отношениях VK/VT корабль быстро проходит зону досягаемости торпеды даже при малых углах а. Эти соображения должен учитывать «подводник», использующий про- грамму 46. Пусть для программы 46 выбраны значения do = 10 км; а — 30° и FK/yT = 0,45; Д = 0,1 км. Для первого торпедного залпа выполним 15 = = РХ БП 3 6 С/П РХ = 0,48, для второго залпа — 25 =РХ С/П РХ = = — 0,77, для третьего — 55 = РХ С/П РХ = 505 (цель поражена). В условиях многих игр, модели- рующих с различной точностью реаль- ные конфликтные ситуации, учтено влияние случайных событий. В про- стейших случаях моделирование слу- чайного события бросанием монеты или кубика используют для выбора очередного хода, но в некоторых играх учитывают влияние и более реальных случайных событий. В качестве при- мера составим nrpj «арктический рейс», имитирующую проводку судна 94
Программа 46. Игра «торпедная атака» П5 45 КИП4 Г4 ИП5 65 ИП8 68 + 10 sin 1С 1/х 23 П1 41 ИП5 65 sin 1C X 12 ИП1 61 ИП2 62 + 10 П2 42 ИПЗ 63 X 12 — 11 ИП7 67 X 12 ПО 40 X2 22 21 ИП6 66 — 11 х<0 5С 32 32 5 05 0 00 5 05 БП 51 33 33 ИПО 60 С/П 50 БП 51 00 00 П5 45 ИП9 69 ИП8 68 sin 1С X 12 ПЗ 43 Сх ОГ П2 42 П4 44 В/О 52 Инструкция. Установить переключа- тель Р — Г в положение Г; ввести исходные данные do — Р7; а = Р8; V„/VT = Р9; половину длины корабля Д = Р6; для торпедного залпа ввести (f = PX и нажать для первого пуска программы клавиши БП 3 6 С/П, для после- дующих — В/О и С/П или С/П; после выполне- из одного северного порта в другой при уловии возможного скопления льдов в прибрежных районах. Составив карту маршрута (рис. 36), условимся что вследствие сложной ледовой обстановки в районе с коорди- натами х > а, у < Ь на каждом отрез- ке времени At равновероятно наличие тяжелого льда, препятствующего дви- жению корабля, и условий, обеспе- ния программы высвечивается расстояние от середины корабля до прошедшей по его курсу торпеды (с отрицательным знаком, если торпе- да прошла за кормой) или, при поражении корабля, сигнал SOS тонущего корабля; число выпущенных торпед хранится в регистре 4. чивающих нормальное движение. Выбрав, например, маршрут 1, капи- тан беспрепятственно достигнет порта назначения, но если выбран мар- шрут 2, льды могут задержать ко- рабль, и выбравший этот более корот- кий маршрут капитан рискует задер- жаться в пути. Для составления программы 47, обеспечивающей штурмана корабля Рис. 35. 95
Программа 47. Игра «арктический рейс» П7 COS ИПД X П5 КИП4 ИП7 sin ИПД X - 47 1Г 6Г 12 65 Г4 67 1С 6Г 12 П6 ИП9 ипв — х<0 39 ИП8 ИПА — х^0 46 69 6L 11 5С 39 68 6— 11 59 39 ИПС Л + ех ПС кипе ИПС — 39 6С 20 10 16 4С ГС 25 6С 11 ПС 2 1/х — х<0 39 Сх П5 П6 ИП6 4С 02 23 11 5С 39 ОГ 45 46 66 ИП9 + П9 ИП5 ИП8 + П8 С/П БП 00 69 10 49 65 68 10 48 50 51 00 Инструкция. Установить переключа- тель Р — Г в положение Г; ввести 0 = Р4 = PC; выбранные значения а = РА-, b = РВ; d = РД; начальные координаты корабля Хо = Р8; у г. = = Р9; перед каждым выполнением программы вводить курсовой угол <р = РХ и нажимать клавишу С/П (первый раз — клавиши В/О и С/П); результаты выполнения программы РХ = Р8 = х,; PY = Р9 = у,; Р4 = I. Программа 48. Оценка ответов по экзаменационному билету кипе ГС 11 х = 0 5Е 08 08 ИПО 60 1 01 + 10 по 40 ИПД 6Г ИПС 6С 11 х =# 0 57 20 20 ИПС 6С 1 01 + 10 ПС 4С С/П 50 БП 51 00 00 ипо 60 ИПС 6С 13 4 04 X 12 1 01 + 10 ИПО 60 XY 14 С/П 50 Сх ог по 40 1 01 ПС 4С С/П 50 БП 51 00 00 Инструкция. (Ввести общее число во- просов п = РД (п 11); числа, соответствующие правильным ответам на вопросы, ввести в ре- гистры памяти с номерами 1, 2, 3, ..., равными порядковым номерам вопросов ), нажать кла- виши БП 3 О С/П, что приводит к высвечи- ванию номера 1 первого вопроса; экзаменую- щийся вводит свой ответ в численном виде в регистр X и нажимает клавиши В/О и С/П, после чего высвечивается номер следующего вопроса; после ввода ответа на последний вопрос и выполнения программы высвечива- ется оценка в пятибалльной системе, а число правильных ответов хранится в регистре У. сведениями о координатах судна через каждый отрезок времени в зави- симости от ледовой обстановки и принятых капитаном решений о курсе корабля, следует обеспечить вычисле- ние координат по формулам Xi = Xi-1 + fed cos ф,; yt = yi-1 -|- + fed sin ф„ где d — расстояние, пройденное ко- раблем за время At (для простоты будем принимать его постоянным); fe — коэффициент, равный 1 в районе чистой воды и 0 в районе тяжелых льдов с вероятностью р(1) = 0.5. Микро-ЭВМ можно поручить не только судейство спортивных игр, но и суждение об уровне знаний состя- зающихся в определенной области. Простейший способ машинной про- верки знаний связан с использованием экзаменационного билета с рядом вопросов, на каждый из которых требуется ответить числом, которым может быть как число, которое 96
должен знать экзаменующийся, так и код (номер) правильного ответа, перечень которых дается. В этом слу- чае достаточно составить для микро- ЭВМ программу-экзаменатор, подоб- ную программе 48 для микрокальку- лятора, сравнивающую ответы экза- менующегося с правильными ответа- ми, хранящимися в памяти, и оце- нивающую знания по числу правиль- ных ответов. Пример экзаменационного билета для программы 48 приведен в табл. 8 со следующей последовательностью заносимых в регистры памяти 1, 2, ..., А правильных ответов: 1852; 3; 1067; 1; е1 = 2,718 2818; 4; 1g 10/lg2 = = 3,321 9281; 1; 2,54; 2. Эта программа достаточно строго оценивает ответы, вычисляя оценку по формуле z = Е [4т/п + 1], где п и тп — числа всех и правильных отве- тов, а Е — символ целой части со- держимого скобок. Пятерка высве- чивается только при правильных ответах на все вопросы, а для полу- чения тройки нужно ответить пра- вильно не менее, чем на половину вопросов. Квалификацию программы-экза- менатора можно повысить, дополнив ее фрагментами для оценки прибли- женных ответов, но возможности программируемых микрокалькулято- ров ограничены вводом и выводом информации только в цифровом виде. Значительно большие возможности автоматизации не только ответов на вопросы экзаменационных билетов (которые могут сопровождаться, на- пример, высвечиванием графиков), но и элементов обучения связаны с при- Рис. 36. 97
8. Экзаменационный билет №13 по общей эру- диции № Вопрос 1 Сколько метров в морской миле? 2 Что такое Лимпопо? Ответы: 1. Озеро на Ямайке. 2. Остров в Полинезии. 3. Река в Африке. 4. Таитянское божество. 5. Персонаж индейского мифа. 3 Сколько метров в версте? 4 Сколько рек вытекает из Байкала? 5 Чему равно основание натуральных лога- рифмов с точностью до восьми значащих цифр? 6 Автор (литературный герой) известных баллад о Гавриле? Ответы: 1. Полесов. 2. Кизлярский. 3. Изнуренков. 4. Ляпис. 5. Остап Бендер. 7 Чему равен log2 10 с точностью до восьми 'значащих цифр? 8 Что такое гарнец? Ответы: 1. Древняя мера сыпучих тел. 2. Вид гончарных изделий. 3. Житель местности в Германии. 4. Металлургический термин. 9 Сколько сантиметров в дюйме с точностью до трех знаков? 10 Какой фунт равен 0,456 кг? Ответы: 1. Русский. 2. Английский. 3. Лапуасский. менением персональных микро-ЭВМ. Например, при использовании такой машины с языком программирования БЕЙСИК начало программы для экза- мена по билету № 13 (табл. 8) с «под- сказками» может быть составлено в следующем виде: NEW 2 PRINT' ВОПРОС 1. СКОЛЬКО МЕТРОВ В МОРСКОЙ МИЛЕ. ДЛЯ ОТВЕТА НАБЕРИТЕ НА КЛА- ВИАТУРЕ 6 LET X = RUN С УКАЗАНИЕМ СПРАВА ОТ ЗНА- КА РАВЕНСТВА ТРЕБУЕМОГО ЧИСЛА' 4 STOP 8 IF X = 1600 THEN 20 10 IF X = 1852 THEN 22 12 LET К = ABS(X — 1852) 14 IF К < 10 THEN 26 16 PRINT' ОТВЕТ ОШИБОЧЕН. ДЛИНА МОР- СКОЙ МИЛИ 1852 М. ДЛЯ ВЫЗОВА ВТОРОГО ВОПРОСА НАБЕРИТЕ НА КЛАВИАТУРЕ 30 LET N = 2 RUN 18 STOP 20 PRINT' ВЫ УКАЗАЛИ ДЛИНУ СУХОПУТ- НОЙ МИЛИ. ПОВТОРИТЕ НАБОР ОТВЕТА НА ПЕРВЫЙ ВОПРОС' 21 STOP 22 PRINT' ОТВЕТ ТОЧЕН. ДЛЯ ВЫЗОВА ВТО- РОГО ВОПРОСА НАБЕРИТЕ 30 LET N = 2 24 STOP RUN' 26 PRINT' ОТВЕТ НЕТОЧЕН. ДЛИНА МОР- СКОЙ МИЛИ 1852 М. ДЛЯ ВЫЗО- ВА ВТОРОГО ВОПРОСА НАБЕРИ- ТЕ НА КЛАВИАТУРЕ 30 LET N = 2 28 STOP RUN' Подобным образом составляются программы работы микро-ЭВМ и для обучения решению конкретных задач. Возможность вывода на дисплей гра- фиков и изображений требуемых предметов значительно повышает эффективность подобных программ.
ИГРЫ С МОДЕЛИ- РОВАНИЕМ ДВИЖЕНИЯ ИНЕРЦИОННЫХ ОБЪЕКТОВ При моделировании движения раз- личных объектов до сих пор не учи- тывалось влияние их массы, так как по условиям рассмотренных задач предполагалась постоянная скорость движения в течение достаточно боль- ших интервалов времени. Однако в большинстве практических задач это предположение неприемлемо и прихо- дится учитывать инерционность дви- жущихся объектов. Согласно второму закону Ньютона с учетом силы R сопротивления среды движение тела массой т под воздействием силы тяги F описывает- ся уравнением та — F — R, где а — ускорение (скорость изменения ско- рости) движущегося тела. Во время движения тела по поверх- ности появляется сила трения сколь- жения или качения, но она практи- чески постоянна при небольших скоростях, а при больших — значи- тельно меньше силы сопротивления среды (воздуха или воды) и может быть учтена соответствующим изме- нением силы тяги. Сила сопротивле- ния воздуха или воды пропорциональ- на квадрату скорости и с учетом ее направления уравнение движения та = F — AV\V|, где V — мгновенная скорость движущегося тела; А — коэффициент пропорциональности. Средняя скорость движения V = = t^x/At в направлении координаты х определяется приращением Ах рас- стояния за время At и при стремле- нии At к нулю равна мгновенной скорости. При моделировании движе- ния инерционных объектов на ЭВМ уравнение движения последовательно решают для моментов времени t, = = t,_ i + At, отличающихся на посто- янную величину At, называемую шагом. Величина At не может быть равной нулю и должна выбираться как можно большей для уменьшения объема вычислений при моделирова- нии движения в течение заданного интервала времени. Поэтому шаг At выбирают как максимальный отрезок времени, в течение которого ускорение практически не изменяется. Так как изменения ускорения а — (F — Р)/т при прочных равных условиях обрат- но пропорциональны массе, то при моделировании объектов с большей массой можно выбирать и большие значения шага At. Выбор шага At связан и с допусти- мыми изменениями силы тяги за вре- мя At. Так, при малых скоростях сила сопротивления среды пренебрежимо мала, и приращение ускорения а, — — аг_ 1 = (Ft — Ft-i)/m. Следователь- но, выбор At по условию Аа е соот- 99
ветствует предельным изменениям силы тяги на каждом шаге AF те. При выборе достаточно малого шага At мгновенную скорость опре- деляют по конечной разности рас- стояний согласно формуле V, = (х> — — а ускорение в мо- мент времени t,-+1 = t, + At по форму- ле a i + i = (AV t + i — AVi)/At== = (Axi+1 /At — Ax,/At)/At = (Axi+1 — — Ax,-)/(At)2. Подставив эти выражения в уравне- ние движения, преобразуем его в раз- ностное уравнение /п(х,+1 — Xi — \Xi)/(\t')'> = Fi — —А. Ах, | Ах,-j /(At)2. Это уравнение несложно представить расчетной формулой для вычисления очередного значения координаты рас- стояния , xi+1 = х, + Ах,- + F,(At)2/m — — А Ах,-1 Ах, | /т. Коэффициент А в этой формуле может быть определен по известной для каждого моделируемого объекта максимальной скорости Vmax, дости- гаемой при максимальной силе тяги Fmax. Так как эта скорость ограничена силой сопротивления среды, то усло- вие ^max=^^max=° ОПрвДвЛЯвТ И коэффициент А = Fmax/V^ax. Полученную расчетную формулу для последовательного вычисления x,+ i легко реализовать в программе работы любой универсальной микро- ЭВМ. Для уменьшения объема вы- числений целесообразно выбрать шаг At, равный одной из основных единиц времени (секунда, минута, час) или кратным ей в соответствии с массой моделируемого объекта. При этом удобно задавать не величины F,- и А, а их нормированные значения Pi - F,-(At)2/m и В = А /т. В этом случае расчетная формула упроща- ется: х,- +1 = х,- -(- Ах, + Pi — B\Xi | Ах,-1. Следует учитывать, что составлен- ная формула для моделирования движения по прямой не учитывает действия тормозных устройств. По- этому она непосредственно пригодна для моделирования движения объек- тов (например, речных или морских самоходных средств), не имеющих таких устройств и останавливаемых изменением знака силы тяги (задним ходом). При выборе At = 1 с по составлен- ной расчетной формуле можно доста- точно точно моделировать движение судов с небольшой массой (катеров или моторных лодок), но для моде- лирования движения судов с водо- измещением в сотни и тысячи тонн допустимо принимать At = 1 мин. Первому из этих условий отвечает программа 49 при At = 1 с для моде- лирования движения по прямой судов малого водоизмещения. Однако при выборе объектом моделирования судна с большим водоизмещением также можно воспользоваться этой программой, приняв большее значе- ние At и соответственно вычислив зна- чения коэффициентов и размерность расстояний и скоростей. Пусть для гонок по программе 49 выбран катер массой т = 1 т, макси- мальной силой тяги движителя (вин- та) Fmax = 1000 Н, допустимыми изме- нениями силы тяги AF/c 200 Н/с и максимальной скоростью Vmax = = 36 км/ч =20 м/с. В связи с не- большой массой катера выберем At = 1 с и вычислим Ршм = Fmax/m = = 1; АР ^0,2 и B = Pmax/VJmax = = 0,25 • 10я. Задавая нормированную силу тяги перед каждым пуском программы Р, = 0,2; 0,4; 0,6; 0,8; 1; 1; 1; 1; 1; 1; ..., получим соответственно x,+i = = 0,2; 0,8; 2; 4; 7; 10,9; 15,9; 21,7; 28,5; 36,2; ...; Vi+i = Ax,-+i/l = 0,2; 0,6; 1,2; 3; 3,9; 4,9; 5,86; 6,78; 7,66; ... Таким образом, за первые 10 с моде- лируемый катер проходит расстояние 36,2 м, достигая при этом скорости 100
Программа 49. Игра «гонки по прямой на катерах» КИП4 Г4 ИП9 69 ИП7 67 t 0Е X2 22 21 X. 12 ИПВ 61 X 12 — 11 ИП7 67 + 10 П7 47 ИП7 67 ИП8 68 + 10 П8 48 С/П 50 БП 51 00 00 Сх ОГ П4 44 П7 47 П8 48 БП 51 00 00 Инструкция. (Ввести В = Pmax/V^ax = = РВ); ввести начальное значение нормирован- ной силы тяги Ро = Р9 и нажать клавиши БП 2 О С/П для старта с пункта с координа- тами х« = у о = О; в дальнейшем, изменяя при необходимости Р, = Р9, для каждого пуска программы нажимать клавиши В/О и С/П или только С/П; после выполнения программы РХ = Р8 = х,; PY = Р7 = Дх„- Р4 = i (для заднего хода вводить Р < 0); выигрывает участ- ник игры, прошедший заданное расстояние и достигший финиша при скорости причалива- ния У^1 м/с за минимальное время t = iAt. Программа 50. Игра «школа капитанов для судов на подводных крыльях» КИП4 ИП7 ИПА — х>0 09 ИПВ БП 10 ипс Г4 67 6— 11 59 09 61 51 10 6С ИП7 t х2 д/ X X ИП7 XY — ИП9 67 0Е 22 21 12 12 67 14 11 69 + П7 ИП7 ИП8 + П8 С/П БП 00 Сх 10 47 67 68 10 48 50 51 00 ОГ П4 П7 П8 БП 00 44 47 48 51 00 Инструкция. (Принять V* = РА; Bi = = РВ; В2 = РС); для каждого «рейса» ввести начальное значение Ро = Р9 и нажать клавиши БП 2 9 С/П, в дальнейшем, изменяя при необхо- димости Р; = Р9, пускать программу нажатием клавиш В/О и С/П или С/П; после каждого V = 7,66 м/с. Своевременно уменьшив тягу перед приближением к финишу и «отработав задним ходом», с тре- буемой скоростью подходим к при- чалу. Сила сопротивления среды некото- рых движущихся объектов может изменяться в зависимости от режима движения. Примером являются суда на подводных крыльях, корпус кото- рых при достижении определенной скорости VK и соответствующей подъ- емной силы подымается над поверх- ностью воды, сопротивление среды уменьшается и максимальная ско- рость движения увеличивается. Эта i-ro выполнения программы РХ = Р8 = х,-; РУ = Р7 = Дх,; Р4 = i; выигрывает «капитан», прошедший заданное расстояние и причалив- ший с допустимой скоростью за минимальное время t = iAt. особенность судов на подводных крыльях моделируется програм- мой 50, при выполнении которой при малых и больших скоростях прини- маются различные значения коэффи- циента силы сопротивления воды (Bi при V < VK и Вг при V~> Ик), что обеспечивает возможность достиже- ния скорости Flmax при опущенном корпусе и значительно большей ско- рости V2max при поднятом корпусе. Предположим, что моделируется движение теплохода на подводных крыльях массой т —100 т, макси- мальной силой тяги Fmax = 50 000 Н, допустимыми изменениями силы тяги 101
Программа 51. Игра «автогонки по прямой» ИПД 6Г х=0 5Е 13 13 ИП7 67 t 0Е t 0Е X2 22 21 X 12 ИПВ 6L X 12 — 11 П7 47 КИП4 Г4 ИП7 67 ИПД 6Г — 11 х < 0 5С 20 20 Сх ОГ ИП9 69 + 10 П7 47 ИП8 68 + 10 П8 48 ИП7 67 3 03 0— 6 06 X 12 С/П 50 БП 51 00 00 Сх ОГ П4 44 П7 47 П8 48 ПД 4Г В/О 52 Сх ОГ 5 05 ПД 4Г БП 51 00 00 Инструкция. Ввести В = Fmax (At)2 / mF^ax= перед каждым заездом «от- пустить тормоз», очистив регистр Д и «часы» на регистре 4; ввести координаты старта Хо = = РТ, у и = Р8; ввести Ро = Р9 и нажать кла- виши В/О и С/П (или, при автоматической очистке регистров 4, 7, 8 и Д, клавиши БП 3 4 С/П); далее, изменяя или сохраняя Р, = = Р9, нажимать для пуска программы клави- ши В/О и С/П или С/П; для торможения нажать клавиши БП 4 О С/П и далее С/П, уменьшая силу тяги до нуля; после каждого выполнения программы (при At = 1 с) РХ = = Vi; Р7 = bxt; Р8 = Xi, Р4 = i. AF 1000 Н/с, скоростью, при кото- рой корпус подымается над водой, VK = 25 км/ч, максимальными ско- ростями движения Vlmax = 25 км/ч при опущенном и V2max — 72 км/ч при поднятом корпусе. Для уменьшения числа выполнений программ примем At = 10 с. Тогда VK - 6,9444 м/с; Vlmax = 8,33333 м/с; V2max = 20 м/с; нормированная сила тяги Pmax = Fmax(At)5/m = 50; ЛР^ 10; Bl = Лпах/^тах = 7,2 • 10'В2 = = ^тах/^ах=1.25 • 10~3. При этих исходных данных для значений Р, = 10; 20; 30; 40; 50; 50; 50; 50; 50; 50; 50; 50; ... по програм- ме 50 получим Xi+i = 10: 92,39; 165,2; 281,4; 430,7; 786,81; 978,87; 1174,8; 1571,7; ...; Ах,+ 1 = 10; 29,28; 53,11 72,8; 116,2; 149,3; 179,44; 184,7 192,06; 195,9; 197,95; 198,97; .. 39,28 602,11 1372,8 Следовательно, моделируемый тепло- ход примерно через 35 с выходит на подводные крылья и через 2 мин достигает максимальной скорости, пройдя свыше 1570 м. Составленная расчетная формула пригодна и для моделирования сухо- путных самодвижущихся средств, но в этом случае необходимо преду- смотреть моделирование действия тормозных устройств. Торможение автомобиля при выборе At = 1 с с уче- том зависимости тормозного пути от скорости можно моделировать сле- дующим простым алгоритмом: 1. Если V < 5 м/с, то перейти к ша- гу 2, иначе к шагу 3. 2. Принять V = Р до выключения тормоза. 3. Принять V = V — 5 + Р и пе- рейти к шагу 1. Силу торможения для этого алго- ритма можно уменьшить, заменив 5 на 4 или 4,5. Этот алгоритм, пре- дусматривающий и возможность «езды на тормозе», реализован в про- грамме 51, предусматривающей вывод на индикатор значений скорости с привычной для водителей размер- ностью километры в час. Выберем для гонок спортивный автомобиль массой пг = 800 кг; макси- мальной силой тяги Fmax = 3200 Н; допустимыми изменениями силы тяги 102
kF 400 H/c и максимальной ско- ростью Vmax = 288 км/ч = 80 м/с. Для At = 1 с находим Ртах = 4; АР < 1; В = Ртах/Пах = 6,25 • 104. По программе 51 для первых 10 с движения при Pi = 1, 2, 3, 4, 4, 4, 4, 4, 4, 4,...получим соответственно V,+l=3,6; 10,8; 21,6; 35,9; 50,1; 64; 77,7; 91,1; 104; 116,6;... км/ч, х<+1(м) = 1; 4; 10; 20; 39,9; 51,7; 73,3; 98,55; 127,5; 159,8;... Следова- тельно, за 10 с автомобиль с выбран- ными характеристиками разгоняется до скорости 116,6 км/ч, проходя расстояние 160 м. Для проверки тормозов нажмем клавиш БП 4 0 С/П и затем С/П, уменьшая перед каждым пуском силу тяги до нуля; Р, = 3, 2, 1, 0, 0, 0, Qi 0, ..., получая соответственно Vi+i = = 109,4; 98,6; 84,2; 66,2; 48,15; 30,2; 12,2; 0; ... км/ч; xl+i = 190,2; 217,6; 240,9; 259,3; 271,3; 281,1; 284,5; 284,5; ... Таким образом, при выбран- ной скорости автомобиль полностью тормозится за 8 с при 125 м тормозно- го пути, что достаточно хорошо согла- суется со свойствами настоящего автомобиля. Для продолжения движе- ния необходимо «отпустить тормоз», очистив регистр Д. Если движение по прямой морских и сухопутных самодвижущихся средств отличается лишь способом остановки, то при движении с изме- нением направления силы тяги эти отличия становятся более существен- ными. При выбранных допущениях (Ах,- да Ах,+1) поворот в момент време- ни t, руля морского судна, находя- щегося в точке di, приводит к пере- мещению судна за следующий отрезок времени At на расстояние Р, по направлению этой нормированной силы тяги. Одновременно судно про- должает двигаться в прежнем на- правлении, проходя за время At рас- стояние Ad, — B\dt | Ad,- I. Суммарное приращение расстояния Ad,+i в точке di+i определяется векторным сложе- нием обоих приращений, пропорцио- нальных составляющим скорости дви- жения (рис. 37). Направление силы тяги удобно определять относительно прямоуголь- ных координат х и у. В этом случае уравнение движения представляется двумя расчетными формулами х,+1 = х,- + Ах,- + Pi cos ф,- — ВАх,1 Ах,-1; У1+1 = у, + Ay, + Pi sin <р,- — BAz/, I kyi |, где ф — курсовой угол между поло- жительным направлением оси х и направлением силы тяги, отсчиты- ваемый против часовой стрелки с по- ложительным знаком. При моделировании на микро-ЭВМ по этим формулам движения морских судов достаточно большого водоизме- щения целесообразно принимать At = = 1 мин; расстояние определять в морских узлах (миля в час). Для этого следует нормировать силу тяги по формуле Pmax = Fmax (60)71852 т, а коэффициент сопротивления воды вычислить по формуле В = Pmax/V^ax, где Утах определена с размерностью миля/мин. В программе, реализую- щей вычисления по составным форму- лам, целесообразно также предупре- смотреть (как в программе 52) воз- Рис. 37. 103
Программа 52. Игра «высшие мореходные курсы» КИП4 Г4 ИПЗ 63 ПП 53 26 26 sin 1С X 12 + 10 ПЗ 43 ИП2 62 + 10 П2 42 ИП6 66 ПП 53 26 26 cos 1Г X 12 + 10 П6 46 ИП5 65 + 10 П5 45 L0 5Г 00 00 С/П 50 БП 51 00 00 t 0Е t 0Е х2 22 21 X 12 ИПВ 6L X 12 — 11 ИП9 69 ИП8 68 В/О 52 Сх ОГ П2 42 ПЗ 43 П4 44 П5 45 П6 46 1 01 ПО 40 БП 51 00 00 Инструкция. (Установить переключа- тель Р — Г в положение Г, ввести В = Fmax = = ЗбОО/У^ах (мили/мин) = РВ); для движения с места с координатами Хо = у о = 0 ввести <ро = = Р8; Рв = Р9; нажать клавиши БП 3 7 С/П; для движения с места с произвольными коор- динатами ввести хо = Р5; у0 = Р2; 1 = РО; 0 = = РЗ = Р4 = Р6; нажать клавиши В/О и С/П, в дальнейшем, сохраняя или изменяя <р,- — Р8, Pi = Р9, нажимать для пуска программы кла- виши В/О и С/П или С/П, для вычисления координат судна через п минут перед пуском программы ввести п = РО; после каждого i-ro выполнения программы РХ = Р5 = х,; PY = = Р2 = у,; Р6 = РЗ = &yi (расстояния в ми- лях), Р4 = I, мин. Рис. 38. 104
можность использования корабель- ного «автоштурмана» для вычисления координат судна через заданное число л интервалов времени At. Выберем для испытаний судно массой т = 5000 т, максимальной силой тяги Fmax = 463 000 Н, AF О 115,75 кг/мин, <р <115 “/мин и максимальной скоростью Vzmax = 37,5 морских узлов. Для At = 1 мин нахо- дим Ртах = 463 • 607(1852 • 5000) = = 0,18; АР С 0,045 и В=Рт„М.х/ /602 = 1,0368. Проведем ходовые испытания тако- го судна по программе 52 для хо = = Уо — 0, приняв <ро= 45 и Р, = 0,045; 0,09; 0,135; 0,18 и получив соответ- ственно Х1+1 = у,4-1 = 0,0318; 0,1262; 0,3069; 0,5809 и Ax,+ i = Aj/i+i = = 0,0318; 0,094; 0,1806; 0,2741. При 6 = РО; = 45; Р, = 0,18; получим х,+ 1 =yt+i = 2,645; Axi+1 = Ау,+1 = = 0,3503. Следовательно, за 10 мин судно прошло расстояние Ad = 2х2 = = 3,74 мили и достигло скорости V = д/2Ах2 = 0,454 мили в минуту или 0,454 • 60 = 29,72 морских узла. При Pi = 0,18, приняв фр= 30; 15; 0, соответственно получим х,+1 = 3,024; 3,428; 3,842; Ах,+1 = 0,3789; 0,4093; 0,4148; у,+1 = 2,958; 3,216; 3,405; Aj/i-i-i = 0,3131; 0,258; 0,189. Таким образом, при повороте на 45° за 3 мин сохранится значительная инерцион- ная составляющая, что необходимо учитывать капитану судна при его вождении вблизи берега и отмелей. После проведенных испытаний судна с выбранными характеристика- ми можно составлять карту акватории (подобную показанной на рис. 38) и отправляться в рейс между выбран- ными портами Бэ и Цэ, помня, что капитан должен привести судно в порт назначения с минимальными затратами времени на весь рейс, вклю- чая и остановку (соответствующую снижению скорости ниже условлен- ного значения) в заданном месте. При движении колесного транспор- та направление приращения расстоя- ния через каждый шаг At совпадает с направлением приложенной силы тяги, определяемым положением ко- лес автомобиля или железнодорожных рельсов для поезда. В этом случае приращение расстояния Ad будет равно сумме Р, и проекции инерцион- ной составляющей на направление силы тяги. Координаты достигнутой точки в этом случае определяются следующими формулами (рис. 39): 1 = х,- + ((Ad,- — В Adi I Ad,-1) cos ф, + + P,) cos i]),; yi+1 = yi + ((Ad,- — В Ad,-1 Ad,|) cos ip,- + +•₽<)) sin ip,-, где угол изменения направления (угол поворота за At) ip, = <р, — <р,-_ । и при- ращение расстояния Ad, = д/Ах,?+ Ау2. Так как направление приращения Ad определяется углом i|j„ то при вы- числениях можно принять В Ad | Ad | = = B(Ad)2. Для торможения моделируе- мого автомобиля можно воспользо- ваться алгоритмом, реализованным в программе 51. При повороте автомобиля возникает центробежная инерционная состав- ляющая сил, численно равная Q = = [Ad, — B(Ad,)2] sin которая может привести при крутых поворотах на большой скорости к заносу (боковому скольжению) и даже опрокидыванию автомобиля (как и люоого другого колесного самоходного средства). Кри- тическое значение QKp этой силы для автомобиля определяется опрокиды- вающим моментом М = 2h/l, где Л — высота центра тяжести, a Z — ширина колеи. Поэтому при моделировании движения автомобиля следует учесть влияние критического значения цент- робежной инерционной составляющей. Эти соображения учтены при со- ставлении программы 53, достаточно точно моделирующей движение авто- мобиля в различных условиях. Как 105
Программа 53. Игра «вождение автомобиля» ИП8 ИП7 + П7 КИП4 ипд х = 0 29 ИПЗ х2 68 67 10 47 Г4 6Г 5Е 29 63 22 ИП6 X2 + t х2 ИПВ X — П1 66 22 10 21 0Е 22 6L 12 11 41 ИП8 sin X ИПА XY — х<0 29 -yj ИП1 68 1С 12 6— 14 11 5С 29 21 61 ипд — х<0 35 Сх ИП8 COS X ИП9 + 6Г 11 5С 35 ОГ 68 1Г 12 69 10 П1 ИП7 sin х ПЗ ИП2 + П2 ИП1 ИП7 41 67 1С 12 43 62 10 42 61 67 COS X П6 ИП5 + П5 ИП6 С/П БП 00 1Г 12 46 65 10 45 66 50 51 00 Сх П2 ПЗ П4 П5 П6 П7 пд БП 00 ОГ 42 43 44 45 46 47 48 51 00 Сх 5 пд БП 00 0Г 05 4Г 51 00 Инструкция. (Установить переключа- тель Р — Г в положение Г; ввести QKp = PA; В — РВг, ввести i|>o = Р8; Ро = Р9; при старте с места с координатами Хо = Цо = 0 и <ро = О для первого пуска программы нажать клавиши БП 6 О С/П, при старте с места с другими координатами ввести хо = Р5; уо = Р2; <ро = = Р7: 0 = РЗ = Р4 = Р6 и для первого пуска программы нажать клавиши В/О и С/П; перед следующими пусками программы изменить и при движении кораблей, скорость автомобиля соответствует прираще- нию расстояния Adj — Ay'f за время At. Выберем для испытаний автофургон массой т = 1200 кг, максимальной силой тяги Fmax = 3600 Н, допусти- мыми измерениями силы тяги AF 900 Н/с, максимальным углом поворота хр = 15°/С, максимальной скоростью Vmax = 144 км/ч, высотой центра тяжести 1,5 м и шириной колеи 2 м. При At = 1 с вычислим Ртах = = ^max/^ = 3; ЛР<0,75/с; Vmax = = 40 м/с; В = РтахМах=1,875Х X 10“3 и QKp = 2 • 1,5/2 = 1,5. Для проверки характеристик дви- жения по прямой при яр = 0 вводим или сохранить угол поворота руля -ф, = Р8 и нормированную силу тяги Р, = Р9 а нажать клавиши В/О и С/П или С/П; для торможения, уменьшая силу тяги до нуля, нажать клавиши БП 7 0 С/П и перед следующими пусками клавишу С/П; после каждого выполнения про- граммы РХ = Р6 = \х,\ PY = Р5 = х„- Р2 = у,; РЗ = i\y:; Р4 = i; Р7 = «р,; Р8 = ip,; Р9 = Р,; при опрокидывании автомобиля высвечивается сим- вол ЕГГОГ. Р, = 0,75; 1,5; 2,25; 3; 3; ..., пустив первый раз программу нажатием клавиш БП 6 0 С/П и получив: Ах, = = 0,75; 2,25; 4,49; 7,45; 10,35; ...; X/= 0,75; 3; 7,49; 14,94; 25,29; ... Продолжив моделировать нажатием клавиши С/П, установим, что моде- лируемый автомобиль через 10 с достигнет скорости 22,92 м/с или 82,5 км/ч и пройдет 136,2 м, а через 38 с достигнет практически предель- ной скорости 39,76 м/с, пройдя рас- стояние 1125,4 м. Записав содержимое регистров памяти, введем гр = 15° и, проверив выполнение программы на- жатием клавиши ПП, установим, что в этом случае при повороте на макси- мальной скорости возникнет центро- бежная сила Q = 9,52, прерывающая 106
QKp. Следовательно, при такой ско- рости поворот автомобиля на большой угол гр вызовет опрокидывание. Вос- становив содержимое регистров памя- ти до поворота, примем гр = 0; Pt - 2,25 и, пустив программу нажатием клавиш БП 7 0 С/П, перед дальней- шими пусками программы нажатием клавиши С/П уменьшим тягу до нуля. Испытание свидетельствует, что моде- лируемый автомобиль полностью тор- мозится при максимальной скорости за 9 с при тормозном расстоянии 113,6 м. Проведя испытание выбранного автомобиля, можно составить карту маршрута с указанием границ дорог и препятствий и отправиться в пу- тешествие. С помощью микро-ЭВМ можно успешно моделировать движение инерционных объектов также в верти- кальной плоскости. Для примера рассмотрим моделирование движения управляемого подводного аппарата (подводной лодки или батискафа) массой то (равной массе вытесненной воды) в уравновешенном состоянии при наполовину заполненных бал- ластных цистернах. При полном за- полнении этих цистерн масса аппара- та т = то + Am, и он начинает погру- жаться под воздействием силы gf\m с возрастающей скоростью, ограни чиваемой сопротивлением воды. Дав- ление на аппарат возрастает и при глубине, превышающей критическую величину </кр, возникает опасность разрушения аппарата. При про- дувке балластных цистерн т = то — — кт, и аппарат всплывает под воздействием подъемной силы — gkm. Движение аппарата в горизонталь- ной плоскости и частично в верти- кальной обеспечивается движителем с максимальной силой тяги Fmax, направление которой может изменять- ся в пределах I <р I <ртах относи- тельно горизонтали (рис. 40). С учетом различного сопротивления воды (за- висящего от формы аппарата) при движении по горизонтали и вертикали текущие координаты подводного ап- парата определяются формулами Х, +1 = xt + Ах, + (Fi cos ф, — A\^Xi\\Xi\)/m', yi+1 =yt + kyt + (F sin <p,- — — A2&yi\kyi\ — d)/m, где A,=(A<ax/(AxJ; A2 = dX X(Aj/m„v)2; d = 9,81(At)2A7n, причем Дт = 0 в уравновешенном состоянии 107
Программа 54. Игра «подводное путешествие» КИП4 ИП7 ИПО + по ИП9 ИП8 COS X ИП6 Г4 67 60 10 40 69 68 1Г 12 66 t х2 X ИПА X — ИПО — ИП6 0Е 22 21 12 6— 12 11 60 13 66 + П6 ИП5 + П5 ИП9 ИП8 sin X ИПЗ 10 46 65 10 45 69 68 1С 12 63 t х2 дГ X ИПВ X — ИП1 ИП7 X 0Е 22 21 12 6L 12 11 61 67 12 + ИПО — ИПЗ + ПЗ ИП2 + х<0 51 10 60 13 63 10 43 62 10 5С 51 Сх П2 ИПС XY — х<0 58 ИП5 ИП2 ОГ 42 6С 14 11 5С 58 21 65 62 С/П БП 00 Сх П2 ПЗ П4 П5 П6 БП 50 51 00 ОГ 42 43 44 45 46 51 00 00 Инструкция. (Установить переключа- тель Р — Г в положение Г; ввести то = РО; (At)29,81 =Р7; А,=РА; А2=РВ; укр=РСу, для первого пуска программы нажимать кла- виши БП 6 3 С/П, для последующих — кла- виши В/О и С/П или С/П; перед пуском программы при необходимости изменить состо- яние балластных цистерн, вводя Am > 0, Ат = = О или Ат < О (соответственно при полной и половинной загрузке цистерн и при их про- дувке) в регистр 7, а также <р,- = Р8 или F, — = Р9; после каждого выполнения программы РХ = Р2 = у,; PY = P5 = х,: РЗ = Aу,; Р4 = i; Р6 = Ах,; при аварийном состоянии (у > укр) высвечивается сигнал ЕГГОГ. аппарата; Атп > 0 при заполнении и Ат < 0 при продувке балластных цистерн. Движение подводного аппарата согласно этим формулам моделиру- ется программой 54, при составлении которой предусмотрена сигнализация аварийного состояния после дости- жения критической глубины. Выберем для путешествия под во- дой батискаф массой т0 = 10 000 кг (в уравновешенном состоянии); пол- ной емкостью балластных цистерн 2Ат = 500 кг; максимальной силой тяги движителя Fmax = 500 Н (при заднем ходе F < 0) с допустимыми изменениями AF ^100 Н/с и на- правления силы тяги на угол ф < 20° вверх и вниз от горизонтали; мак- симальной горизонтальной скоро- стью Vxmax = 5 м/с; максимальной скоростью свободного погружения ^лтах = 3 м/с и максимальной глу- биной погружения укр = 100 м. При At = 1 с находим A i = = Гтач/(Ахтах)2 = 20; А2 = 9,81 А/п/ (Аутах) =272,5. Приняв Ат = 250; <ро = 0; Fo = 0, с помощью програм- мы 54 определим, что через 10 с батискаф погрузится до глубины уго = 11,4 м со скоростью 1,89 м/с. Моделируем уравновешивание бати- скафа, приняв Ат = 0, и определим, что еще через 10 с батискаф по инер- ции достигнет глубины 26,8 м при скорости погружения 1,32 м/с. Моделируем включение двигателя и набор максимальной мощности за 5 с при ф = 0 и определим, что через 10 с батискаф, продолжая погружать- 108
ся по инерции, достигнет глубины 38,26 м при скорости погружения 1,02 м/с и пройдет по горизонтали 1,34 м от места погружения со ско- ростью 0,3 м/с. Моделируем продувку балластных цистерн, приняв Ат = = — 250, и определим, что через 5 с батискаф достигнет по инерции макси- мальной глубины 1/25 = 40 м, после чего начнет всплывать, достигнув по- верхности воды через 56 с с верти- кальной скоростью 1,74 м/с на рас- стоянии 26,5 м от места погружения. Батискаф испытан и теперь, запас- шись картой подводного рельефа, можно с помощью программы 54 от- правляться в подводное путешествие. Подобным образом можно модели- ровать перемещение в вертикальной плоскости и других инерционных объектов, учитывая особенности их движения. Моделирование движения таких объектов несколько упрощается при отсутствии сопротивления среды, что характерно для космических по- летов за пределами атмосферы. В качестве простейшего примера рас- смотрим управление тормозным дви- гателем для мягкой посадки на Луну космической станции, радиально при- ближающейся к ней со скоростью Vo на высоте ho (рис. 41). Движение такой станции описывается простым уравне- нием та = mg — F, где тиа — масса и ускорение станции; g = go/(l + + h/г)2 — ускорение тяготения, рав- ное go = 1,64 м/с2 на поверхности Луны с радиусом г =1738 м, F = = С Ат — сила тяги, определяемая расходом топлива Ат за единицу времени. Заменив а разностным отношением AV/At, составим расчетную формулу hi+1 = hi -|- At(V,- — g0/(l -|- hi/r)2 + + c^mt/mt), где С — коэффициент пропорциональ- ности, зависящий от конструкции тормозного двигателя; т, — то + + mTt — кт,, где то — масса основной части станции; mTi — масса топлива. Для «мягкой» посадки с мини- мальной скоростью при приближении к поверхности Луны приходится достаточно быстро принимать реше- ния, тогда как при больших рас- стояниях от Луны для ускорения вычислений целесообразно выбирать большой шаг Ai. Поэтому при состав- лении программы 55, моделирующей управление посадкой космической станции, учтена возможность исполь- зования переменного шага At = = 1...10 с. При больших значениях шага в этом случае возникает погреш- ность в определении координат, но ее можно «объяснить» более равно- мерной работой двигателя при At > > 1 с, так как для игровых задач эта погрешность несущественна. Так как скорость станции определяется отрицательным приращением высоты, то ей следует приписывать отрица- тельный знак. Цель игры с программой 55 заклю- чается в посадке станции на поверх- ность Луны с достаточно малой скоростью при сохранении достаточ- ного запаса топлива. Так, при то = = 11000 кг; тто = 9000 кг; ho — = 1000 км; Vo=—5 км/с и С = Рис. 41. 109
= 120 рациональное расходование топлива обеспечивает посадку со ско- ростью менее 1 м/с, но преждевремен- ный расход топлива приводит к аварийному падению станции на поверхность Луны с большой ско- ростью. Более сложно управлять посадкой космической станции, находящейся на орбите или приближающейся к месту посадки под углом относи- тельно радиального направления, так как в этом случае приходится учи- тывать сложные гравитационные за- висимости. Вместе с этим при полетах ракет на небольшие расстояния, когда можно пренебречь кривизной земной поверхности и влиянием ее вращения, моделирование упрощается. Однако в этом случае приходится дополни- тельно учитывать сопротивление воз- духа в нижних слоях атмосферы, плотность которого изменяется с высо- той пропорционально множителю e-i,ie io ' прИ этом полет ракеты мас- сой т = то + т-„ где т, — масса топлива, описывается формулами (рис. 42) х,+1 = х, + Ах, + (At)2 cos <р,-[САт,- — -BeA'li(Ad,-)2/m,; ht+1 = hi + Ай, -f- (At)2 sin <р/|САт,- — -Be^df/mt-g, где m, = mo + mtt-1 — Am, — текущая масса ракеты; Am — расход топлива за 1 с; С — коэффициент силы тяги; В — коэффициент силы сопротивле- ния воздуха; А = — 1,16 • 10~4 м-1; Ad = д/Ax2 + АЛ2; g = 9,81 м/с2; <р — угол направления силы тяги относи- тельно горизонтали. Коэффициент С определяется кон- струкцией двигателя: В = С\т/ — максимальным прираще- нием расстояния в нижних слоях ат- мосферы при максимальной тяге. Дви- жение ракеты согласно приведенным формулам при At = 1 с моделируется программой 56. Простейшая цель игры с програм- мой 56 может заключаться в управле- нии полетом ракеты на заданное рас- стояние за минимальное время. Так как сопротивление верхних слоев атмосферы невелико, то эта цель достигается при рациональном выборе траектории полета ракеты. Для при- мера выберем характеристики ракеты с относительно маломощным и неэко- номичным двигателем, характерным для наиболее ранних конструкций: то = 1000 кг; тт0 = ЮОО кг; Ат = = 10 кг/с; С = 2000; максимальная Рис. 43. 110
Программа 55. Игра «посадка на Луну: ИПО ИП4 + П4 ИПС ИП9 X ИП6 ИП9 ИПО 60 64 10 44 6С 69 12 66 69 60 X — х<0 16 Сх П9 П6 ИП5 Ц- _2_ 12 11 5С 16 ОГ 49 46 65 10 13 ИПА ИПО X ИП7 ИПВ — 1 + х2 6— 60 12 67 6L 13 01 10 22 13 — ИП8 + Ш ИПО X П8 ИП7 + П7 11 68 10 41 60 12 48 67 10 47 ИП1 С/П БП 00 Сх П4 1 6 4 61 50 51 00 ОГ 44 01 0— 06 04 ВП 3 /-/ ПА 1 7 3 8 ПВ БП ОС 03 01 4— 01 07 03 08 4L 51 Ои 00 Инструкция. (С — PC); /г0(км/с) = Р7; — Vo (км/с)=Р8; то=Р5; тц=Р6 перед каж- дым пуском программы вводить или сохранять At = РО (1 At sj 10); Am, = Р9; для первого пуска нажать клавиши БП44С/П, для после- дующих — клавиши В/О и С/П или С/П; после каждого выполнения программы РХ = Р1 = = — Vi (км/с); PY = Р7 = Л, (км); Р4 = i; Р6 = = тт1(кг). Программа 56. Игра «управление ракетой» КИП4 ИПС ИП9 X ИП6 х2 ИПЗ х2 + ИПВ Г4 6С 69 12 66 22 63 22 10 6L X ИПА ИП2 X ех X — ИПД ИП9 — 12 6— 62 12 16 12 11 6Г 69 11 х <0 24 Сх пд ИП7 + — t ИП8 cos 5С 24 ОГ 4Г 67 10 13 0Е 68 1Г X ИП6 + П6 ИП6 + П5 XY ИП8 sin 12 66 10 46 66 10 45 14 68 1С X ИП1 — ИПЗ + ПЗ ИП2 + П2 L0 12 61 11 63 10 43 62 10 42 5Г 00 С/П БП 00 Сх П2 ПЗ П4 П5 П6 00 50 51 00 ОГ 42 43 44 45 46 1 ПО 9 8 1 П1 1 1 01 40 09 0- 08 01 41 01 0— 01 6 /-/ ВП 4 /-/ ПА БП 00 06 01 01 04 01 4— 51 00 Инструкция. (Установить переключа- тель Р — Г в положение Г; ввести В = РВ; С = PC; то = Р7); т-л = РД.тгря необходимости перед пусками программы изменять <р, = Р8; t\m, = Р9; для первого пуска программы на- жать клавиши БП 5 4 С/П, для последующих пусков — клавиши В/О и С/П; после каждого выполнения программ™ РХ — Р2 - hr, PY = = Р5- хг. РЗ = Ай,; Р4 = i (с); Р6 = Ах,; РД = = т7г, для вычисления координат через п > 1 шагов At = 1 с вводить п —РО. 111
скорость в нижних слоях атмосферы Vmax = Ю80 км/ч = 300 м/с; Аф 10 °/с. Следовательно, В = 2000 X X Ю/3002 = 2,222 222 2 • 10“'. Приняв <р = 90°; Апг = 10 кг, с по- мощью программы 56 найдем, что через 1 с ракета поднимется по верти- кали на 0,24 м, а через 50 с ракета достигнет высоты 1513,4 м со ско- ростью 86,4 м/с. Уменьшим с допус- тимой скоростью за 4 с угол ф до 50°, после чего ракета достигнет высоты 1880,5 м со скоростью 92,7 м/с и переместится по горизонтали на рас- стояние 43 м со скоростью 21 м/с. Продолжив испытания при ф = 50° и Атп = 10 кг/с, определим, что после сгорания топлива через 100 с ракета продолжит двигаться по инерции и через 105 с после старта достигнет максимальной высоты 5277 м (при вертикальной скорости 0,53 м/с) на расстоянии 11 187 м от места старта, разогнавшись до скорости 355,8 м/с по горизонтали. Продолжая модели- рование, установим, что ракета упадет на землю через 147 с после старта на расстоянии 22 874 м с вертикаль- ной скоростью 452,9 м/с и горизон- тальной скоростью 246,9 м/с. Выбрав более мощную ракету, можно моде- лировать ее полеты на большие рас- стояния, используя топливо как для разгона, так и для точного приземле- ния ракеты. При полетах ракет сила земного тяготения преодолевается только вер- тикальной составляющей силы тяги. Подобная особенность характерна и для полета вертолетов, горизонталь- ные перемещения которых обеспечи- ваются наклоном винта на некоторый угол ip (рис. 43). С учетом изменения плотности воздуха при наборе высоты полет вертолета моделируется форму- лами Xi+1 = Xi + &Xi + eAh‘k(Pi sin -ф,- — — BAx,| Дх,-1); hi+1 = hi + АЛ, + eAh\Pi cos ip,- — -C\hi\\hi\)-d, где / (A*max)' max —^пих(А) / m'i к—max/; C = (P -d)/(Aftmax)2; A = = — 1,16 • 10-*“M, d = 9,81(At)2. В этих соотношениях, моделируе- мых программой 57, пренебрегали изменением массы т вертолета по мере сгорания топлива, что допустимо при полетах на небольшие рас- стояния. Пусть моделируется полет верто- лета массой т = 2000 кг, максималь- ной силой тяги у земли Fmax = = 25 000 Н, AF 5000 Н/с, предель- ным углом наклона винта ф 10° и Аф 2 °/с, максимальной горизон- тальной скоростью VXmax = 180 км/ч и предельной вертикальной скоростью Vxmax = 27 км/ч и при допустимой вертикальной скорости посадки Vn 2 м/с. Приняв At = 1 с, вычислим Ртах = = 12,5; АР<2,5/с; С = (12,5 — — 9,81)/7,52 = 4,782222 • Ю 2; В = = 12,5 sin 10°/502 = 8,6824084 X 10“4. При ф = 0, как следует из испыта- ний по программе 56, и допусти- мом увеличении силы тяги верто- лет через 541 с достигнет макси- мальной высоты 2102 м. При увели- чении угла наклона до ф = 10° через 545 с с момента старта вертолет пройдет в горизонтальном направле- нии 3477,7 м, достигнув скорости Vx = 49,2 м/с при снижении до высо- ты 1974,5 м со скоростью Vh = = —0,4 м/с. Дальнейшие испытания показывают, что вертолет хорошо управляется в обоих направлениях оси х (при Р > 0 и Р < 0), но посадка вертолета с допустимой посадочной скоростью требует особого внимания пилота, так как инерционность верто- лета достаточно большая. Несложно моделировать движение в воде или в воздухе и для трех измерений, дополнив составленные 112
Программа 57. Игра «испытатели вертолетов» ИП9 ИП8 COS X ИПС ИПЗ t X2 X 69 68 1Г 12 6С 63 0Е 22 21 12 X — ИПА ИП2 X е* П1 X ипд — 12 11 6— 62 12 16 41 12 6Г 11 ИПЗ + ПЗ ИП2 + П2 КИП4 ИП9 ИП8 sin 63 10 43 62 10 42 Г4 69 68 1С X ИПВ ИП6 t х2 X X — ИП1 12 6L 66 0Е 22 21 12 12 11 61 X ИП6 + П6 ИП5 + П5 L0 00 ИП2 12 66 10 46 65 10 45 5Г 00 62 С/П БП 00 Сх П2 ПЗ П4 П5 П6 1 50 51 00 ОГ 42 43 44 45 46 01 ПО БП 00 40 51 00 Инструкция. (Установить переключа- тель Р — Г в положение Г, ввести А = — 1,16 X X 10“4 = РА; В = РВ; С = PC; (At)29,81 = РД); для первого пуска программы нажать клавиши БП 5 3 С/П; для последующих — клавиши В/О и С/П или С/П; перед пуском программы изменить при необходимости = Р8; Pi = Р9; для вычисления координат через п интерва- лов At ввести (при п > 1) п=РО; после каж- дого i-го выполнения программы (время счета около 18 с на один шаг) РХ =Р2 = hi; PY = — PS = Xi! РЗ = Д/г,; Р4 = i; Р6 — &х,. Программа 58. Игра «гигантский слалом» П9 ИП7 + П7 КИП4 ИПЗ х2 ИП6 х2 + 49 67 10 47 Г4 63 22 66 22 10 Ш ИП1 ИПВ X — ИП9 COS X ИПА 41 21 61 6L 12 11 69 1Г 12 6— ИП7 COS X + П1 ИП7 sin X П6 ИП5 67 1Г 12 10 41 67 1С 12 46 65 + П5 ИП1 ИП7 COS X ПЗ ИП2 + П2 10 45 61 67 1Г 12 43 62 10 42 С/П БП 00 t Сх П2 ПЗ П4 П5 П6 50 51 00 0Е ОГ 42 43 44 45 46 П7 БП 00 П8 ИП2 ИП5 ИП8 — ИПЗ 47 25 51 00 48 62 65 68 11 63 ИП6 — X — БП 40 66 13 12 11 51 40 Инструкция. (9,81 cos а = РА; В = РВ) перед каждым пуском программы вводить угол поворота лыж »|>, = РХ; для первого пуска нажать клавиши БП 4 3 С/П; для последую- щих — клавиши В/О и С/П или С/П; после каждого выполнения программы РХ = Р2 = = ус, PY=P5 = х.: РЗ = ДУg Р4 =i;P6 = \xg Р7 = <р,; для определения координаты y„ef точки пересечения вертикальной линии с координатой Хф ввести Хф = РХ и нажать клавиши БП 5 4 С/П,что приведет к высвечиванию Упер- 113
расчетные формулы и программы фрагментами для вычисления третьей координаты. Однако время выполне- ния программы в этом случае заметно возрастет, что при использовании программируемых микрокалькулято- ров с относительно малым быстро- действием снизит игровой эффект. Следует добавить, что моделирование поведения реальных объектов на ЭВМ является одним из наиболее важных для практики применения быстро- действующих вычислительных ма- шин. В некоторых случаях движение в третьем измерении приходится учитывать косвенно. Примером может служить спуск лыжника по плоскому склону горы, отклоненному от верти- кали на угол а. В этом случае при движении лыжника массой т вдоль линии максимального уклона (кото- рую целесообразно выбрать в качестве оси координаты у с положительным направлением в сторону спуска) на него действует сила тяги F = — mg cos а = mg\. Если лыжи на- правлены под углом ф к этой линии, то на лыжника действует сила тяги mgicosq) с проекциями Fx=mgi(cos<p)2 и Fx — mgi cos q> sin ф на координат- ные оси (рис. 44). Максимальная ско- рость лыжника Г^ограничена сопро- тивлением воздуха и трением лыж о снег, примерно пропорциональным квадрату скорости. При повороте лыж на угол гр за время At и отсутствии бокового сколь- жения инерционная составляющая, как и при поворотах колесного транс- порта (см. рис. 39), проектируется на направление движения лыж, а центробежную силу лыжник пре- одолевает наклоном туловища и лыж. Следовательно, спуск лыжника с горы описывается формулами Xi+1 = Xi + Xi + ((Ad,- — B(Ad,-)2) cos гр,- + + gi cos ф,-) sin ф,; yi+1 = yi + Ay, + ((Ad,- — B(Ad,-)2 X X cos гр,; -j- gi cos ф,-) cos ф,, где М,= д/Ах2+Ay2; В = gi/(Ad,)2, ф, — угол между направлением лыж и положительным направлением оси у; ф/ = Ф< — Ч><-1 — угол поворота за время At (знаки углов совпадают со знаком координаты х в том же направ- лении); gi = g cos а. Движение лыжника, описываемое этими формулами, моделируется про- граммой 58. Ее удобно использовать для моделирования различных лыж- ных состязаний, например по сла- лому. В таких состязаниях лыжники проходят ряд «ворот», обозначенных флажками. Каждая пара флажков с координатой х$ имеет различные координаты уф, и Уф2. В программе 58 предусмотрена возможность точного определения координаты упер точки пересечения линии флажков (или другой линии вертикальной) по хра- нящимся в памяти данным согласно формуле Упер = у, — (х,- — Хф)Ау,-/Ах,-. Для тренировок по слалому выбе- рем а = 60°, разметим координатную сетку с началом координат в точке старта и разместим пару ворот с координатами флажков Xi = 0; уц = = 150 м; у 12 = 160 м; х2 = — 100 м; у21 = 400 м; У22 = 410 м и финишные 114
ворота с координатами флажков Хф = 150 м; £/ф1 = 490 м; г/ф2 = 500 м (рис. 45). Приняв гр 10° и Vmax = = 72 км/ч = 20 м/с, при At = 1 с найдем gi = 9,81 cos 60° = 4,905 м/с2; В = 4.905/202 = 1,226 25 • 10“2. По- лагая флажок сбитым, если линия ворот пересечена ближе 0,4 м от флажка, начнем тренировочные спуски с помощью программы 58, пытаясь пройти без ошибок все ворота за минимальное число шагов. Относительно сложно моделирова- ние движения крылатых летательных аппаратов, определяемого силой F тяги, направленной перпендикулярно ей подъемной силой Q крыльев, силами Яри сопротивления воздуха и силой mg земного тяготения. В прямоугольной системе «самолетных» координат d и г, положительные направления которых совпадают с на- правлениями сил F и Q, полет само- лета под углом <р к горизонту (рис. 46) описывается уравнениями mad = F — Rf — mg sin <p; mar — Q — Rq — mg cos <p, где ad и ar — проекции ускорения самолета на оси координат. Рис. 45. Подъемная сила пропорциональна квадрату скорости Vd и зависит от положения закрылков или других управляемых элементов крыльев. При разбеге самолета по взлетной полосе до скорости Увзл подъемная сила ком- пенсирует силу земного тяготения, самолет отрывается от земли и наби- рает высоту. С увеличением высоты подъемная сила уменьшается про- порционально уменьшению плотности воздуха и на максимальной высоте Лтах компенсируется силой земного тяготения. С уменьшением плотности воздуха уменьшается его сопротивле- ние, но одновременно уменьшается и сила тяги большинства авиацион- ных движителей, в связи с чем можно пренебречь зависимостью скорости Vd от высоты. Поэтому после приближен- ной замены ускорения разностным отношением текущие координаты са- молета определяются по формулам di-}-1 = di -|- Ad;+1 = di Ad/ — — BAdi | Ad,-1 + Pi — G sin <pi+1; r,+1 = r,- + Ar,+1 = r,- + Ar,- — — Z)Ar, | Ar,-1 + CZ-(Ad,)2 — G cos <p(+1, где максимальная нормированная сила тяги Pmax = Fmex(At)7m; коэф- Рис. 46. 115
фициенты сопротивления воздуха В = = PnJV^Abt')2 = PmaJ^dmJ2 nD = = (C(Admax) — G)/(Armax) ; нормиро- ванная сила тяготения G = 9,81 (kt), «взлетный» коэффициент С — G / /(у1ЗЛ) (At)2 — G/(kdB3JI)2, «высотный» коэффициент А = (1/йтах) In (AdB3JI/ /ADmax)2, а коэффициент q определяет положение закрылков (gmln < q < 1). Текущие значения «земных» коор- динат х и h (рис. 46) определяются формулами преобразования коорди- нат Х;+ ] = X/ + Ad<+ 1 COS ф,+ 1 — — Ar,-i-1 sin <p,+1; hi+1 = hi + Adi+1 sin <p,+1 + + Ar,+i cos <p,-+i. Вычисление приращений Ad,+ i и Ar,+i усложняется при изменении направления силы тяги на угол ф,- = = ф, +1 — ф, с помощью рулей высоты, обычно управляемых положением рукоятки штурвала. Действие рулей высоты пропорционально квадрату скорости Vd, а положение рукоятки штурвала можно определить коэффи- циентом т, причем граничным зна- чениям интервала — 1 < т < 1 соот- ветствуют предельные положения штурвала «от себя» и «на себя». В простейшем случае зависимость между положениями штурвала и ру- лей высоты линейна, когда угол лр,- = = nt4’max(M/Admax)2 примет макси- мальное значение чртах при т = 1 и Ad, = Admax. В действительности на- правление силы тяги изменяется на меньший угол, так как приращения Adi+i и Ar,+ i определяются вектор- ными составляющими, пропорцио- нальными силами. Рассмотренные соотношения тем точнее описывают полет самолета, чем меньше шаг At. При недостаточно малом шаге возможна неустойчивость вычислений, возникающая вследствие обратной связи между вычисляемыми величинами и проявляющаяся в периодическом или чрезмерно бы- стром изменении результатов вы- числений, противоречащем физи- ческим условиям полета. Вероятность неустойчивости вычислений снижа- ется при уменьшении шага At, но в этом случае увеличивается время моделирования и приходится исполь- зовать микро-ЭВМ с достаточно боль- шим быстродействием. В противном случае (например, при использовании программируемых микрокалькулято- ров) необходимо так изменить модель, чтобы без заметного ухудшения ее точности устранить неустойчивость вычислений при выборе достаточно большого шага. Для полетов на малые расстояния допустимо пренебречь изменением массы т самолета при сгорании топлива. Кроме того, при малом шаге можно заменить векторную сумму приращений алгебраической, а для уменьшения неустойчивости вычисле- ний — учитывать силу RQ экспонен- циальным множителем. В этом случае Ad,+1 ж Ad, — Bkdi | Ad,-1 + Р,- — — G sin ф,+1; Ar,-+1 « evlAr;+ll[Ar,- + QCeAft‘(Ad,-)2 - — G cos ф/ +1], где Ar/+1 — содержимое квадратных скобок; коэффициент у = (1 /2С X X(Admax)2) In (Armax/2C(Admax)2). Приняв q = 1 (при необходимости изменение положения закрылков можно учесть уменьшением коэффи- циента С), составим согласно этим формулам программу 59, достаточно точно моделирующую полет самолета на небольшие расстояния. Выберем спортивный самолет с т=1500 кг; Fmax = 3000 Н; AF < ^750 Н/с; Увзл = 144 км/ч = 40 м/с, ^тах = 360 км/ч = 100 м/с, Ктах = = 36 км/ч = 10 м/с; Лтах = 6000 м; Ч’тах = 25 °/с. Приняв At = 1 с, найдем Ртах = 3000/1500 = 2; АР <0,5; а = = ^max/(Arfmax)2 = 25/1002 = 2,5 х 116
Программа 59. Игра «школа высшего пилотажа» КИП4 ИП2 ИПА X ех ИПС X ИП6 х2 X Г4 62 6— 12 16 6С 12 66 22 12 Вх ИП8 X ИП1 X ИП7 + П7 COS ИПО 0 68 12 61 12 67 10 47 1Г 60 X — ИПЗ + t х2 ИПД X ех 12 11 63 10 0Е 22 21 6Г 12 16 X ПЗ ИП6 t t х2 X ИПВ X 12 43 66 0Е 0Е 22 21 12 6L 12 — ИП9 + ИПО ИП7 sin X — П6 ИП7 11 69 10 60 67 1С 12 11 46 67 cos X ИПЗ ИП7 sin X — ИП5 + П5 1Г 12 63 67 1С 12 11 65 10 45 ИП6 ИП7 sin X ИПЗ ИП7 cos X + ИП2 66 67 1С 12 63 67 1Г 12 10 62 + х<0 75 Сх ПЗ П2 С/П БП 00 Сх 10 5С 75 ОГ 43 42 50 51 00 ОГ П2 ПЗ П4 П5 П6 П7 БП 00 42 43 44 45 46 47 51 00 Инструкция. (G — 9,81 (At)2 — РО; а = = ^max/(Adroax)2 = PA- А=РА; В=РВ; С- = PC; у = РД; перед пуском программы при необходимости изменять т, = Р8; Р, = Р9; для первого пуска нажать клавиши БП 7 8 С/П; для последующих — клавиши В/О и С/П или С/П; после каждого выполнения программы PX=P2 = hi+i; PY = P5 = xi+1; P3 = Arl+i,- P4 = i; P6 = hdi+i; P7 = <pi+i. X10 3; A = 2 In (40/100)/6000— = — 3,054 302 5 • 10 4; B = 2/1002 = = 2-Ю”4; C = 9,81/402 = 6,131 25 X X Ю3; у = (In (10/2C • 1002)/2C X X 1002 = — 4,322 271 2 • 10“3. С помощью программы 59 находим, что при увеличении тяги до макси- мума за 4 с самолет, пробежав около 500 м, через 23 с оторвется от земли и полетит со скоростью Vx = 42,35 м/с при скорости поъема V/, = 0,33 м/с. Через 4 мин после старта самолет летит на высоте 1220 м, преодолев при этом расстояние более 20 км со скоростью Vx = 99,98 м/с и подни- маясь со скоростью Fa = 6,3 м/с. Приняв т = 1 («взяв ручку на себя до упора»), находим, что наш самолет за следующие 35 с совершит «мертвую петлю», выходя из нее при h х 1220 м; Рис. 47. 117
Программа 60. Игра «полет на авиалайнере» КИП4 ИП9 ИП6 X2 ИПВ X — ИП6 + П6 Г4 69 66 22 6L 12 11 66 10 46 ИП5 + П5 ИПС ИП6 х2 X ИП8 X ИПА 65 10 45 6С 66 22 12 68 12 6— ИП2 X ех X t ИПЗ + ипд — ИП1 62 12 16 12 0Е 63 10 6Г 11 61 X XY — ПЗ ИП2 + х<0 40 Сх ПЗ 12 14 13 43 62 10 5С 40 ОГ 43 П2 L0 00 ИП6 ИП7 X С/П БП 00 Сх 42 5Г 00 66 67 12 50 51 00 ОГ П2 ПЗ П4 П5 П6 1 ПО БП 00 42 43 44 45 46 01 40 51 00 Инструкция. (ДЛ ах=Р1; А=РА; В = РВ; С = PC; 9,81 (At/ = РД; размерный коэффициент скорости k = Р7); при необходи- мости изменять q = 1 = Р8; Р; — Р9; для вычис- ления координат через п > 1 шагов ввести п = = РО; для первого пуска программы нажать х « 20 050 м; Ad ж 104 м; Аг - 5,6 м и <р = 371,8°. Осторожно уменьшив т, выровняем самолет и выполним сле- дующую фигуру высшего пилотажа или посадку. Программа 59 обеспечивает доста- точно точное моделирование полета, но время ее выполнения (около 30 с) значительно превышает At = 1 с, а при большем шаге возникает неустой- чивость. Поэтому для полетов тяже- лых самолетов можно пренебречь моделированием действия рулей вы- соты (рис. 47) и воспользоваться следующими расчетными форму- лами: х,+1 = Xi + Ах,- — ВАх,1 Ах,- | + Л; hi+ i = hi + (Ыь + gCeAft'(Ax,)2 — — G)^hmex/(qCeAh‘(^Xi)2), клавиши БП 4 9 С/П; для последующих пус- ков — клавиши В/О и С/П или С/П; после каждого выполнения программы (время счета около 15 с) РХ = V,:, PY=P2 = hi; РЗ = Ыи; Р4 = г; Р5 = xt; Р6 = Дх,(/г = 0,36 для V,, км/ч; go = 1). где G = 9,81 (At)2. Эти формулы реализованы програм- мой 60, при составлении которой пре- дусмотрено использование «автопило- та» для вычисления координат через п > 1 шагов At, а структура формулы для приближенного вычисления fe,+ i обеспечивает устойчивость вычисле- ний при большом шаге At ^10 с. При использовании микро-ЭВМ с большими быстродействием и ресур- сом памяти можно существенно повы- сить точность моделирования инер- ционных объектов. Эффективность такого моделирования повышается при использовании персональных ЭВМ, допускающих отображение на дисплее текущей траектории движе- ния управляемого объекта.
список ЛИТЕРАТУРЫ 1. Гарднер М. Математические головоломки и развлечения.— М.: Мир, 1971.— 510 с. 2. Гарднер М. Математические досуги.— М.: Мир, 1971,— 496 с. 3. Гарднер М. Математические новеллы.— М.: Мир, 1974.— 454 с. 4. Гик Е. Я. Шахматы и математика.— М.: Наука, 1983.— 174 с. 5. Доморяд А. П. Математические игры и раз- влечения.— М.: Физматгиз, 1961.— 266 с. 6. Кетков Ю. Я. Программирование на БЕЙСИКЕ.— М.: Статистика, 1978.— 156 с. 7. Романовский Т. Б. Микрокалькуляторы в рассказах и играх.— Рига: Зинатне, 1984.— 120 с. 8. Трохименко Я. К., Любич Ф. Д. Инженер- ные расчеты на микрокалькуляторах.— К.: Техшка, 1980.— 384 с. 9. Трохименко Я. К., Любич Ф. Д. Инженер- ные расчеты на программируемых микро- калькуляторах.— К.: Техшка, 1985.— 328 с. 10. Трохименко Я. К., Любич Ф. Д. Микро- калькулятор, Ваш ход! — М.: Радио и связь, 1985,— 216 с. 11. Трохименко Я. К., Любич Ф. Д. Радио технические расчеты на микрокалькуля- торах.— М.: Радио и связь, 1983.— 256 с. 12. Цветков А. Н., Епанечников В. А. При- кладные программы для микро-ЭВМ «Элек- троника БЗ-34», «Электроника МК-56», «Электроника МК-54».— М.: Финансы и статистика, 1984.— 174 с. 13. Комски Д. М. Хори, игри и автомати.— София: Техника, 1974.— 174 с.
ОГЛАВЛЕНИЕ Предисловие 3 ИГРЫ И КИБЕРНЕТИКА 5 ВХОДНЫЕ ЯЗЫКИ МИКРО-ЭВМ 15 Глава 3 РЕШЕНИЕ ЛОГИЧЕСКИХ ЗАДАЧ 25 Глава 4 ИГРЫ С ПОЛНОЙ ИНФОРМАЦИЕЙ 43 Глава 5 ИГРЫ С НЕПОЛНОЙ ИНФОРМАЦИЕЙ 66 Глава 6 МИКРО-ЭВМ — СУДЬЯ 80 Глава 7 ИГРЫ С МОДЕЛИРОВАНИЕМ ДВИЖЕНИЯ ИНЕРЦИОННЫХ ОБЪЕКТОВ 99 Список литературы 119 Научно-популярное издание ЯРОСЛАВ КАРПОВИЧ ТРОХИМЕНКО д-р техн, наук ИГРЫ С МИКРО-ЭВМ Редактор О. П. Веремейчик Оформление художника А. А. Белянина Художественный редактор В. С Шапошников Технические редакторы С. В. И в а н у с, Н. А. Бондарчук Корректоры Г. Г. Бондарчук, Н. Г. Петрик Информ, бланк № 3316 Сдано в набор 19.03.86. Подписано в печать 12.09.86. БФ 05857. Формат 70X90/16. Бумага офс. № 1. Гарн. школьная. Печ. офс. Усл. печ. л. 8,77. Усл. кр.-отт. 32,19. Уч.-изд. л. 9,63. Тираж 35 000 экз. Зак. 6—1166. Цена 55 к. Издательство «Техн пса», 252601, Киев, 1, Крещатик, 5. Головное предприятие республиканского производственного объединения «Полиграфкнига», 252057, Киев-57, ул. Дов- женко, 3.
55 к. Киев «Техшка» 1986 « * • • Ы a q а о “ * • и а о а а - « О F1 S3 □ ** Q в га а ед