Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

Глава 10. Создадим первую большую программу

Теперь напишем первую реальную программу. Достаточно большую для начинающих (строк на 100). Прежде чем приступить к большой программе, прочтите и изучите все, что вы еще не успели изучить в части 4, особенно "Отладку больших программ".

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

10.1. Постановка задачи

Программу мы будем составлять для следующей задачи.

Задача. Создать мультфильм такого содержания:

  1. На экране возникает ночной пейзаж и секунды 3 ничего не происходит (см. рисунок).

  1. Затем звучит "космическая" музыка (секунд на 5).

  2. Затем сверху слева появляется летающая тарелка (пусть это будет небольшой эллипс) и не спеша опускается на землю (до линии горизонта).

  3. Затем снова раздается та же музыка.

  4. Затем в окне ближайшего дома вспыхивает свет.

10.2. Программирование по методу "сверху вниз"

Любая реальная (то есть достаточно большая и делающая "реальные" вещи) программа на Паскале содержит процедуры. Обычно более "основные" процедуры (Р, I, N...) обращаются к менее "основным" (tochka, tire), те - к еще менее - "основным" и т. д. Такая организация называется иерархией. Она подобна организации подчинения в армии - генералы приказывают полковникам, те - майорам и т. д.

Первая задача, стоящая перед программистом, - разбить программу на несколько частей, исходя из смысла задачи. В разделе 8.2 это были части Р, I, Р, I, N, G. Обычно для правильного разбиения нужен опыт. В нашем случае разбиение напрашивается само собой исходя из последовательности действий мультфильма:

  1. Рисование пейзажа.

  2. Пауза 3 с.

  3. Музыка.

  4. Движение тарелки.

  5. Музыка.

  6. Свет в окне.

Теперь, когда мы разбили программу на части, нужно решить, какую из частей сделать процедурой, а какую можно описать просто группой операторов. Процедура выгодна тогда, когда часть или достаточно сложная (пейзаж), или встречается больше одного раза (музыка).

Итак, у нас будет 3 процедуры. Придумаем им имена:

  • пейзаж - Landscape

  • музыка - Music

  • тарелка - Flying_Saucer

Теперь относительно каждой из процедур нужно решить, следует ли ее разбивать на части, причем рассуждать нужно так же, как при разбиении на части всей программы:

Music. Для музыки можно было бы использовать процедуры-ноты, но мы для простоты ограничимся набором операторов Sound и Delay. He разбиваем на части.

Flying_Saucer. Движение тарелки по экрану ничем не отличается от движения окружности, которое программируется небольшим циклом. Здесь тоже не нужно разбиения на части.

Landscape. Вот здесь без разбиения не обойтись. Для этого по смотрим, из чего состоит пейзаж. Он включает землю и небо. Земля состоит из горизонта, зеленой краски травы, домов и деревьев. Небо состоит из синей краски неба, звезд и луны. Вы можете раз делить пейзаж на две большие части - землю и небо, каждую из которых можно делить дальше. Это будет логично и четко. Мы же для простоты забудем о земле и небе и будем считать пейзаж прямо состоящим из горизонта, травы, домов, деревьев, синевы, звезд и луны. Порядок рисования выберем такой:

  1. Горизонт.

  2. Синева.

  3. Луна.

  4. Звезды.

  5. Дерево.

  6. Дерево.

  7. Дерево.

  8. Дом.

  9. Дом.

  10. Трава.

Ни одна из этих 10 частей не является достаточно большой, чтобы претендовать на ранг процедуры. Однако дом и дерево встречаются не один раз, значит, они и будут процедурами. Придумаем им имена:

  • Дом - House,

  • Дерево - Tree.

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

Поговорим о том, как запрограммировать на Паскале наши самые мелкие части:

  • Горизонт - просто линия во весь экран;

  • Синева - заливаем верхнюю часть экрана до горизонта синей краской;

  • Луна - желтая окружность, залитая желтой краской;

  • Звезды - звездное небо мы уже делали. Здесь надо будет только позаботиться, чтобы звезды не появлялись ниже горизонта;

  • дерево - залитые эллипс и прямоугольник;

  • дом - делается аналогично дереву;

  • трава - делается аналогично синеве.

У вас может возникнуть следующий вопрос: "Процедура Tree рисует некое дерево в определенном месте экрана. Как, используя эту процедуру 3 раза, можно получить 3 дерева в разных местах экрана?" Ответ: здесь нам на помощь придут переменные величины, о чем позже.