Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.doc
Скачиваний:
32
Добавлен:
12.03.2016
Размер:
3.29 Mб
Скачать
    1. Создаем первую большую программу

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

Прежде, чем приступить к большой программе, прочтите и изучите все, что вы еще не успели изучить в части IV, особенно “Отладку больших программ”.

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

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

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

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

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

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

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

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

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

      1. Программирование по методу “сверху-вниз”

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

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

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

  2. пауза три секунды

  3. музыка

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

  5. музыка

  6. свет в окне

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

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

  1. пейзаж - Landscape

  2. музыка - Music

  3. тарелка - Flying_Saucer

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

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

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

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

  1. горизонт

  2. синева

  3. луна

  4. звезды

  5. дерево

  6. дерево

  7. дерево

  8. дом

  9. дом

  10. трава

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

  • дом - House

  • дерево - Tree

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

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

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

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

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

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

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

  • дом - аналогично дереву

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]