Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Графика Паскаль.doc
Скачиваний:
6
Добавлен:
23.08.2019
Размер:
1.48 Mб
Скачать

4.Инициализация генератора случайных чисел

Возможно, такая ситуация при выводе звёздного неба нас и устроит. А представьте, что вы создаёте игру, в которой количество выпавших на гранях кубика точек будет загадываться таким вот образом — каждый раз одно и то же. Интересно будет играть в такую игру?

Дело в том, что функция random генерирует так называемую псевдослучайную последовательность (последовательность, вычисленную по определённой формуле). Значения, которые выдаёт эта формула, зависят от передаваемого ей параметра. Значит, чтобы «случайная» последовательность при каждом запуске получалась другой, ей надо передавать каждый раз другой (случайный) параметр.

Получается своеобразный замкнутый круг: чтобы последовательность получалась случайной, ей требуется передать случайный параметр; чтобы получить случайный параметр, надо сгенерировать случайную последовательность...

Этот круг был «разорван» следующим образом: в качестве параметра решено было взять количество тысячных долей секунды системного времени, взятого в момент запуска программы — согласитесь, что это величина достаточно случайная. И проделывает эту операцию (передачу тысячных долей секунды в функцию генерации псевдослучайной последовательности) процедура randomize. В программу её достаточно вставить один раз, обычно в начало.

• Добавьте в программу процедуру randomize:

• Запустите программу несколько раз, сравните расположение звёзд:

5.Случайное число из промежутка

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

Для начала сделаем звёзды разноцветными.

• Вы, конечно, помните, что в Pascal доступны 16 цветов (с номерами от 0 до 15). Какой командой можно загадать случайное число из этого промежутка? (random(16))

• Измените программу так, чтобы на экран выводились точки случайного цвета.

• Запустите её.

Да, звёзды теперь разноцветные, но что-то уж слишком тёмные, не бывает таких звёзд! Чтобы звёзды выводились только в светлых тонах, необходимо вместо промежутка [0;15] взять промежуток [9;15] (вспомните таблицу цветов). Как же получить такой промежуток?

Давайте порассуждаем:

  • функция random(16) возвращает случайное число из промежутка, длиной в 16 значений;

  • в промежутке [9;15] содержится 15-(9-1)=7 значений;

  • значит, нам нужна функция random(7) — она вернёт значение из промежутка [0:6];

  • чтобы «сдвинуть» этот промежуток до требуемого, достаточно к значению функции прибавить 9 — получится random(7)+9.

• Измените формулу в программе так, чтобы звёзды были светлыми.

6.Звезды сияют и плывут

А теперь вспомним про дифракцию, которая поможет нам сделать звёзды более выразительными, «сиятельными».

Лучи, расходящиеся от яркого центра звезды, постепенно теряют свою яркость, не меняя при этом цветовой тон. Для рисования такой звезды нам потребуется процедура Star, в которую параметрами передаются координаты и цвет центра.

• Добавьте в программу процедуру, выводящую звезду, и вызов этой процедуры:

• Запустите программу — теперь в звёздах больше романтики?

Разбор

Звёздочка в процедуре Star рисуется из девяти точек: в центре белая, самая яркая; рядом с ней с четырёх сторон цветные точки (светлые, из промежутка [9;15]); дальше располагаются точки того же цветового тона, но более тёмные:

Благодаря способу кодирования цвета в Pascal, цвета одного тона имеют номера, различающиеся на 8:

значение

цвет

значение

Цвет (оттенки)

0

Черный

8

Серый

1

Синий

9

Синий

2

Зеленый

10

Зеленый

3

Голубой

11

Голубой

4

Красный

12

Красный

5

Лиловый

13

Лиловый

6

Коричневый

14

желтый

7

серый

15

белый

• Уменьшите количество звёзд до 50—100, иначе слишком уж ярко на небесах...

Коротко о главном

  • Цикл с параметром исполняет некоторую команду определённое количество раз. Это количество задаётся с помощью переменной цикла.

  • Переменную цикла можно использовать в теле цикла для проведения вычислений.

  • Функция random(n) возвращает целое случайное число из диапазона [0;п-1].

  • Для того, чтобы при каждом запуске программы функция random(n) генерировала новую случайную последовательность, в начале программы производят её инициализацию процедурой randomize.

  • В блок-схеме переменная цикла, её начальное, конечное значение и шаг изменения записываются в блоке-шестиугольнике:

Типичные ошибки

  • Если в программе необходим элемент случайности, не забывайте инициализировать генератор случайных чисел командой randomize.

  • При использовании вложенных циклов используйте разные переменные цикла.

  • Если цикл необходим в процедуре, не используйте для него такую же переменную, что и для цикла в основной программе. Для цикла в процедуре следует использовать локальные переменные.

Урок №8

Условный оператор

Сегодня вы научитесь:

  • Работать с буфером обмена в IDE.

  • Выполнять действия, зависящие от некоторого условия.

  • Использовать составной оператор.

  • Проверять условие для группы объектов.

А не появилось ли у вас желание после прошлого урока заполнить звёздами небо на картинке с домиком? Появилось? Вот сегодня мы это и сделаем — если звёзды зажигаются, значит, на них кто-то должен смотреть...