Д. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1) (1119452), страница 59
Текст из файла (страница 59)
Совьи (Е, В. Золвеу, 1плегпаг(опа) огай Вел4елг 40 (1972), 355-371), Период 1972-1984 годов закрыт Совьи в работах 1пгегпабопа) Вгаб Нек1еи 46 (1978), 89-102; 7. Воуа1 огаа Вес. А149 (1986), 83-107. Последующее развитие обсуждается в книге Шу Тезука (8Ьп Тевпйа, Юп11огш Влпс(от л1шпЬегв (Воввоп: К1инег, 1995)). Для подробного изучения использования случайных чисел в чигвенном анализе обратитесь к книге д, М. Напппегв1еу апб В. С. НапдвсошЬ, Монга Саг1о Мейос1в (Еопбоп: МелЬпеп, 1964), В ней показано, как некоторые численные методы улучшаются с помощью "квазислучайных" чисел, специально предназначенных для определенных целей (необязательно удовлетворяющие статистическим критериям, которые мы обсуждали).
Происхождение метода Монте-Карло для компьютеров обсуждается в работе Н. Метгоро1ш апб Н. ЕсЬЬагпл 1п олап)в1ав Иаш 1909-1984, специальный выпуск 1ов А1ашов Вс)енсе 15 (1987), 125-136. Каждому читателю будет интересно рассмотреть упр. 6, приведенное ниже. УПРАЖНЕНИЯ 1. [в1 ) Используя метод (1), напишите программу со следующими характеристиками для машины НХХ. Вызов последовательности: Эиг йвМП Входные условия; гА = й — положительное целое число < 5000 Выходные усаовия: гА+- случайное целое число 1; 1<1'<в, все значения равновероятны; гХ =?, переполнение выключено 2.
]16] Кое-кто напуган тем, что компьютеры в будущем будут править миром. но правнтельспю их'успокаивает заявлениями, что мщвина не может сделать ничего нового, так как она только повинуется командам ее создатьэя, программиста. леди лавлейс (ьоте1асе) в 1844 голу писала: "Аналитическая машина не претендует на создание чего-либо. Она может сделать все, если нзеестлно, кек ей приказать это выполнить". Ее утверждение развивалось многими философами. Обсудите это высказывание в связи с генераторами случайных чисел, 3. ]Уй] (Игре е ковши.) Напишите программу моделирования бросания двух играаьных костей, на каждой из которых выпадают значения 1, 2,, б с равной вероятностью. Если сумма равна 7 или 11 прн первом бросании, то игрок выиграл; если сумма равна 2, 3 илн 12, то проиграл.
При любой другой сумме называем сумму "очко" и продолжаем бросать игральные кости до тех пор, пока выпадет либо 7 (проигрыш), либо очко (вынгрыш). Играется десять игр. Результат каждого бросания игральных костей можно напечатать в виде гоп, где ш н и — цифры, выпавшие на каждой из двух игральных костей, и сопроводить их соответствующими комментариями (например, "змеиные глаза" либо "мааенький солдат", либо "трудная дорога" и т, д.).
4. ]40] (Солиглер, или пасьянс.) Уйма драгоцекного времени уходит на раскладывание пасьянса, и, возможно, автоматика существенно вторгнется в эту область. Напишите программу„которая (!) Тасует модель колоды карт; (й) раскладмвает несколько обычных пасьянсов, основанных на порядке карт в колоде, и (й)) выводит на дисплей результат игры, показывая, насколько близко программа подходит к выигрьппу. Сохраните собранные статистические данные. Программа по запросу может начать жульничать. б. ]46] (Лнщерашурнее творчество компьютера.) Телевизионная программа "Лумаю. щая машина" была показана по телесети СВ$26 октября 1960 года.
Среди всего прочего она отвела важнейшее место двум небольшим пьесам в стиле вестерн', написанных компьютером. Здесь помещены два сценария в том виде, в каком они были напечатаны компьютером. сценарий йг1. (Револьвер в правой руке, деньги в левой руке, стакан на столе, бутылка на столе, кобура на грабителе, револьвер шерифа в правой руке шериФа, кобура шерифа на шерифе.) ГРАБи Гель.
'(Грабитель за окном.) идет к двери; открывает дверь; входит; закрывает дверь; идет в угол; кладет в углу деньги; идет к столу; кладет оевольвер на стол; сидит и ерзает; сидит за столом; беоет стакан правой рукой (пустцй): ставит стакан на стол; берет бутылку правой рукой; наливает; ставит бутылку на стол; берет стакан правой рукой; пьет из стакана; ставит стакан на стол; берет бутылку правой рукой; сидит за столом; сидит за столом;идет в угол; идет к окну; идет к столу; ставит бутылку на стол; сидит и ерзает; сидит за столом; сидит и еозает; идет к окну; идет к столу; подымает стакан правой рукой. шериФ: (шериф за окном.) Видит грабителя (грабитель видит шерифа); илет к двери. ГРАБИТЕЛЬ; Ставит стакан на стол; берет револьвер правой рукой; проверяет револьвер.
шеРиФ: хсдет; открывает двери; видит грабителя (грабитель видит шерифа); входит. ГРАБИТЕЛЬ: Идет к окну; целится, 'стреляет; шеРИФ ЛЕГКО РАнЕн. ШЕРИФ: Идет к окну; целится; стреляет; ПРОМАХНУЛСЯ; идет к двери; идет к окну. ГРАБИТЕЛЬ: Идет к двери; целится; целится. ШЕРИФ: Целится,' стрвлявт; ПРОМАХНУЛСЯ. ГРАБИТЕЛЬ: Стреляет; ШЕРИФ ЛЕГКО РАНЕН. ШЕРИФ: Идет к двери; целится; стреляет; ПРОМАХНУЛСЯ; выходит; целится. ГРАБИТЕЛЬ: ШЕРИФ: ГРАБИТЕЛЬ: ШЕРИФ; ГРАБИТЕЛЬ: ШЕРИФ: Целится; стреляет; ПРОмАХНУЛся; целится; стреляет; ПРОМАХНУЛ- СЯ.
Стреляет„ПРОмдхнулСя; идет к окну; целится; стреляет; ПРОМАХ- НУЛСЯ. Целится; стреляет; ПРОМАХнуЛСя, целится; стоеляет; ПРОМАХНУЛ- СЯ; целится; стреляет; шЕРиф ЛЕГКО РАНЕН. Целится; стреляет; ПОПАДАЕТ В ГРАБи"ГЕЛя. Роняет РЕВОЛЬВЕР; грабитель умирает. Кладет револьвЕО в кобуру; идет к столу; беоет стакан правой рукой (пустой); берет стакан из правой руки в левую руку; берет бутылку поавой Рукой, наливает; ставит бутылку на стол,' берет стакан из левой Руки в правую РукУ; пьет иЗ Стакана; беРет стакан из правой Руки в лЕвуЮ РУку; беРет бутылку правой Рукой; наливает; ставит бутылку на стол; беоет стакан из левой руки в правую руку; пьет из стакана; ставит стакан на стол; идет в угол; берет деньги поавой рукой; идет к двери; выходит; закрывает дверь. ЗАИАВес. на шеоифе.) ГРАБИТЕЛЬ: ГРАБИ ГЕЛЬ: (Грабитель за окном,) Идет к двери; откоывает дверь; входит; закрывает дверь; идет в угол; кладет деньги в углу; идет к окну; кладет оевольвео у окна; прислоняется к окну и смотрит; идет в угол; считает деньги; идет к столу; берет стакан правой оукой (пустой); берет стакан из правой руки в левую Руку; берет бутылку правой Рукой; наливает; ставит бутылку на стол; берет стакан из левой руки в ноевую оуку; пьет из стакана: ставит стакан на стол; берет бутылку в правую руку; наливает; идет в угол; ставит бутылку в угол; идет к окну; берет Револьвео в правую оуку; провеояет револьверд кладет револьвео в кобуру; идет к столу; берет стакан в правую оуку; пьет из стакана; идет к окну; ставит стакан у окна.
(шеоиф за окном.) Видит грабителя (грабитель видит шеоифа); идет к двеои, Берет ОввОльввр иЗ кобуры поавой оукой; поовеояет револьвер; идет к двери; пооверяет оевольвегх кладет оевольвео у двери. Откоывает двеои; видит грабителя (грабитель видит шеоифа); входит; ШЕРИФ: идет к окну. Сценарий 462. (Револьвео в правой оуке; деньги в левой руке; стакан на столе; бутылка на столе: кобура на грабителе; револьвер шерифа в поавой руке шерифа; кобура шеоифа ГРАВИТЕЛь; Верст Револьеео поавой Рукой. ШЕРИФ: Идет к Столу.
ГРАБИ'ГЕЛь: !)елитси; стРеляет; ПРОмАхнулСЯ; прицеливается; стоеляет.„ПОПАЛ В ШЕРИФА; задул ствол; кладет Револьвер в кобуоу. шЕРиго: Роняет Револьвер; шериф умер. ГРАБИ ГЕЛЬ: ИдЕт в угал; берет деньги в правуЮ Руку; идЕт к двери; ВыХОдИт; ЗакрЫВает ДВЕоЬ. ЗАНАВЕС. Внимательный читатель этих сценариев обнаружит представленную здесь в высшей степени напряженную драму.
Программа старательно следит за персме|цснием каждого актера, за тем, что он держит в руках, и т. д. Действия актеров случайные, регулировались определенными вероятностями; вероятности глупых действий возрастали в зависимости от того, как много актер пил и как часто промахивался стрелок. Читатель в состоянии сделать вывод о дополнительных свойствах программы, изучая образцы сценариев.
Конечно, даже лучшие сценарии переписывают прежде, чем их поставят, н в особенности когда неопытный писатель готовит начальный набросок. Здесь сценария точно такие, какие действительно использовались для показа. Сценарий гйз. Музыка. сП Грабитель всматривается через окно хижины.
КП Лицо грабителя. СП Грабитель вхОдит е лачуГУ, КП Грабитель видит бутылку виски иа столе. кп шеоиф за хижиной. СП Грабитель видит шерифа. ДП Шериф в дверях за плечом грабителя, обэ хватаются за Револьверы. СП Шериф вытаскивает рееальеЕО. ДП Стреляет. Попадает в грабителя. СП Шериф поднимает мешки с деньгами. сП Гоабитель шатается. СП Грабитель умиОает. Падает поперек стола после попытки сделать последний выстоел в шерифа. СП шеоиф идет к двеои с деньгами, сп тело грабителя все еше лежит поперек стола. кэмеоэ катится назад. (смех) Сценарий !РВ Музика, кП окно.
Появляется грабитель. СП Грабитель входит в кижину с двумя мешками денег. СП Грабитель кладет мешки денег на бочку, кП Грабитель видит виски иа столе. СП Грабитель наливает виски за столом. идет считать деньги. Смеется. СП ШеРиф за хижиной. СП Вид из окна. СП Грабитель видит шерифа через окно, ДП Шериф вхадит в хижину, Вытаскивает.
Стреляет. КП ШЕРИФ. КОРЧИТСЯ ОТ ВЫСТРЕЛЭ. СП/2 ШеРиФ идет, шатаясь к столу, чтобы выпить... падает мертвый. СП ГОабитель покидает хижину с мешками денег.» [Замечание. КП вЂ” "крупный план", СП вЂ” "средний план" н т. д, Приведенные сценарии любезно предоставлены Томасом Г. Вулфом !'Пмппьт Н. '»тоН) — продюсером телепере- дачи, впервые предложившим идею каписання компьютером небольшой пьесы, а также » ~© 1962 ЬУ СО1ПШЬ!а ВПМГ!Сае!!Пэ БУЭГ»т, 1ПС.