LibKing » Книги » comp-programming » Жак Арсак - Программирование игр и головоломок

Жак Арсак - Программирование игр и головоломок

Тут можно читать онлайн Жак Арсак - Программирование игр и головоломок - бесплатно полную версию книги (целиком). Жанр: comp-programming, издательство Наука. Гл. ред. физ.-мат. лит., год 1990. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Жак Арсак - Программирование игр и головоломок
  • Название:
    Программирование игр и головоломок
  • Автор:
  • Жанр:
  • Издательство:
    Наука. Гл. ред. физ.-мат. лит.
  • Год:
    1990
  • ISBN:
    5-02-013959-9
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Жак Арсак - Программирование игр и головоломок краткое содержание

Программирование игр и головоломок - описание и краткое содержание, автор Жак Арсак, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Рассматриваются способы программирования различных занимательных игр и головоломок с числами, геометрическими фигурами и др. Изложение большинства игр и головоломок ведется в несколько этапов. Сначала разъясняется сама постановка задачи и требования, предъявляемые к алгоритму ее решения.

В следующем разделе книги обсуждается сам алгоритм и возможные пути его реализации.

В конце книга по многим играм и головоломкам даются наброски их программной реализации. Используемый при этом язык типа Паскаля допускает перевод на другие широко распространенные языки программирования.

Для начинающих программистов, студентов вузов и техникумов.

Программирование игр и головоломок - читать онлайн бесплатно полную версию (весь текст целиком)

Программирование игр и головоломок - читать книгу онлайн бесплатно, автор Жак Арсак
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

КОНЕЦ_ЕСЛИ

ВЕРНУТЬСЯ

Последовательность операций следующая:

— проверяется условие t ,

— если оно истинно, то проверяется u ,

— если u истинно, то выполняется a , и все возобновляется.

Допустим, что условия t и u таковы, что я имею возможность проверить u , даже если проверка условия t дает значение ЛОЖЬ [29] Вот пара условий, которая не обладает этим свойством: t : x ≠ 0; u : sin(1/ x ) > 0. — Примеч. ред. . Тогда, пока условия t и u истинны, в цикле выполняется а .

Вот другая последовательность, которая может встретиться:

— проверяется условие t ,

— если оно истинно, то проверяется u ,

— если u ложно, то выполняется b , и все возобновляется.

Таким образом, мы приходим к форме, для которой можно доказать, что она всегда эквивалентна исходной (с точностью до ограничения, что должна существовать возможность вычисления и даже в случае, когда t ложно).

ПОКА t ВЫПОЛНЯТЬ

ПОКА t И u ВЫПОЛНЯТЬ а ВЕРНУТЬСЯ

ПОКА t И НЕ u ВЫПОЛНЯТЬ b ВЕРНУТЬСЯ

ВЕРНУТЬСЯ

Мы перепишем программу для определения равнин, чтобы придать ей форму ПОКА, заключенного в скобки ЕСЛИ:

i := 1; р : = 0;

ПОКА in ВЫПОЛНЯТЬ

ЕСЛИ a [ i ] = a [ iр ]

ТО x := a [i]; р := р + 1; i := i + 1

ИНАЧЕ i := i + 1

КОНЕЦ_ЕСЛИ

ВЕРНУТЬСЯ

Мы обнаруживаем, что в нашем случае мы не можем объединить два условия с помощью операции И: если i не удовлетворяет условию, что i не больше n , то нельзя поставить вопрос относительно a [ i ]. Обрисуем трудность подходящим образом:

— нужно либо добавить в таблицу а поле, которое содержит какую-нибудь несущественную для нас величину (мы к этой величине не обращаемся);

— либо нужно допустить, что операция И не коммутативна. Для вычисления t и u мы вычисляем t , и если результат есть ЛОЖЬ, то все кончено и притом с результатом ЛОЖЬ. В противном случае результат есть значение условия u .

Тогда можно использовать наше преобразование:

i := 1; р := 0;

ПОКА in ВЫПОЛНЯТЬ

ПОКА in И а [ i ] = a [ iр ] ВЫПОЛНЯТЬ

x := а [ i ]; р := р + 1; i := i + 1

ВЕРНУТЬСЯ

ПОКА in И а [ i ] ≠ a [ iр ] ВЫПОЛНЯТЬ

i : = i + 1

ВЕРНУТЬСЯ

ВЕРНУТЬСЯ

Первый цикл движется по таблице а , пока обнаруживается, что элементы равны между собой. Более точно, р и i изменяются одинаково, так что разность iр остается постоянной. Все элементы a [ i ] сравниваются с одним и тем же элементом, и величина x остается постоянной, равной этому элементу, на протяжении всего цикла.

Второй цикл изменяет i до тех пор, пока не обнаружится пара элементов, отстоящих на р + 1.

Уточним ситуацию выхода из первого внутреннего цикла. Мы собираемся найти конец равнины, которая лучше всех предыдущих, мы фиксируем ее длину р и ее значение х , a i обозначает первый элемент после этой равнины. Мы можем надеяться найти пару j , jр с

a [ j ] = a [ jр ]

только пока jр остается на равнине, которую мы собираемся пройти. Наименьшее соответствующее i значение j удовлетворяет условию jр = i , или j = i + р .

Следовательно, можно увеличивать i от р в обоих циклах, не меняя действия программы, что ускоряет ее работу.

Чтобы ускорить и первый внутренний цикл, мы присвоим переменной x ее значение перед циклом и сохраним ее начальное значение в j . Так как iр остается постоянным, то можно вычислить значение р также и после выхода из цикла. Начальные значения суть i = j и р = р 0, а конечные значения i и р удовлетворяют соотношениям iр = jр 0, откуда р = i + р 0− j :

i := 1; р := 0

ПОКА in ВЫПОЛНЯТЬ

x := а [ i ]; j := i

ПОКА in И а [ i ] = x ВЫПОЛНЯТЬ

i := i + 1

ВЕРНУТЬСЯ

р := i + рj ; i := i + p

ПОКА in И а [ i ] ≠ a [ iр ] ВЫПОЛНЯТЬ

i := i + 1

ВЕРНУТЬСЯ

ВЕРНУТЬСЯ

Вы можете получить эту программу непосредственно, минуя механизм преобразования программ. Но этот способ кажется мне требующим больших умственных усилий,

Может быть, это связано с ходом мыслей, который я приобрел, преподавая [30].

Головоломка 35.

Хорошенько учтите то, что вы знаете: обозначим через и таблицу, которая дает последние элементы наилучших возрастающих последовательностей для (всех возможных) длин от 1 до m .

Покажем сначала, что u i < u i +1. Предположим, что это не так: пусть существует такая последовательность длины i + 1, у которой последний элемент не больше u i . Так как эта последовательность возрастает, то ее предпоследний элемент меньше u i +1и потому меньше u i . Тогда, удаляя последний элемент этой последовательности, мы получили бы последовательность длины i с последним членом, меньшим u i , что противоречило бы предположению, что u i — последний элемент последовательности длины i с наименьшим возможным последним элементом.

Рассмотрим теперь следующий элемент x нашего вектора. Разместим его в упорядоченной таблице u . Может случиться, что x > u m . Тогда элемент x можно присоединить к концу последовательности длины m ; тем самым получилась бы (впервые) возрастающая последовательность длины m + 1, которая вследствие своей единственности была бы оптимальна.

Если x меньше u 1, то им следует заменить для построения новой наилучшей последовательности с длиной 1. Если же, наконец, оказывается, что u i < x < u i +1, то x можно присоединить к концу последовательности с длиной i + 1, чтобы получить последовательность с длиной i + 1, которая лучше уже известной, и поэтому u i +1следует заменить на х . Так как и упорядочена, то вы можете разместить в ней x с помощью дихотомического поиска.

Эта операция требует порядка log 2 m действий для m , не превосходящих n . Так как вам требуется n обращений к таблице, то вы получаете верхнюю границу числа действий порядка n log 2 n , что чрезмерно завышено.

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Жак Арсак читать все книги автора по порядку

Жак Арсак - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программирование игр и головоломок отзывы


Отзывы читателей о книге Программирование игр и головоломок, автор: Жак Арсак. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img