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

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

Прежде чем наполнять паскалевским содержимым наши части и процедуры, нужно сделать “скелет” программы, то есть “пустую” программу, в которой все части и процедуры ничего не делают, а только рапортуют о своем существовании, примерно так: “Работает процедура Дом”. Когда мы запустим такую программу-скелет и увидим, что все части и процедуры рапортуют в нужном порядке, мы можем надеяться, что ничего не перепутали и структура программы правильная. Вот после этого и можно постепенно заселять жителей, то есть наполнять пустые процедуры реальным содержанием. Если мы не проделаем этого заранее, то при отладке не будем знать, отчего у нас на экране получается ерунда - то ли оттого, что мы неправильно запрограммировали процедуру, то ли от того, что перепутали порядок вызова процедур.

Сначала для простоты отладим “пустую” программу без разбивки пейзажа, и если она работает правильно, тогда составим “пустую” программу полностью. Вот программа без разбивки пейзажа:

USESGraph,CRT;

VARDevice, Mode :Integer;

PROCEDURELandscape;

BEGIN WriteLn(‘Работает процедура Пейзаж’) END;

PROCEDUREMusic;

BEGIN WriteLn(‘Работает процедура Музыка’) END;

PROCEDUREFlying_Saucer;

BEGIN WriteLn(‘Работает процедура Летающая тарелка’) END;

BEGIN

Device:=0;

InitGraph(Device, Mode, ’<путь к гр.др.>’);

DirectVideo:=false;

Landscape; { рисование пейзажа }

WriteLn(‘Работает пауза 3 секунды’); { пауза три секунды }

Music; { музыка }

Flying_Saucer; { движение тарелки }

Music; { музыка }

WriteLn(‘Работает свет в окне’); { свет в окне }

ReadLn;

CloseGraph

END.

Пояснение. В нашей программе мы используем и модуль Graph и модуль CRT, так как нам понадобятся и графика и музыка. В этом случае оператор WriteLn просто так не работает. Чтобы он все-таки заработал, необходимо предварительно выполнить операторDirectVideo:=false. Смысл его рассматривать не будем.

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

Если все у нас правильно, то результатом работы программы будет такая последовательность сообщений:

Работает процедура Пейзаж

Работает пауза 3 секунды

Работает процедура Музыка

Работает процедура Летающая тарелка

Работает процедура Музыка

Работает свет в окне

Теперь составим “пустую” программу полностью, с разбивкой пейзажа.

USESGraph,CRT;

VARDevice, Mode :Integer;

PROCEDURE Tree;

BEGIN WriteLn(‘Работает процедура Дерево’) END;

PROCEDURE House;

BEGIN WriteLn(‘Работает процедура Дом’) END;

PROCEDURELandscape;

BEGIN

WriteLn(‘Работает процедура Пейзаж’);

WriteLn(‘Работает Горизонт процедуры Пейзаж’); { горизонт }

WriteLn(‘Работает Синева процедуры Пейзаж’); { синева }

WriteLn(‘Работает Луна процедуры Пейзаж’); { луна }

WriteLn(‘Работают Звезды процедуры Пейзаж’); { звезды }

Tree; { дерево }

Tree; { дерево }

Tree; { дерево }

House; { дом }

House; { дом }

WriteLn(‘Работает Трава процедуры Пейзаж’); { трава }

END;

PROCEDUREMusic;

BEGIN WriteLn(‘Работает процедура Музыка’) END;

PROCEDUREFlying_Saucer;

BEGIN WriteLn(‘Работает процедура Летающая тарелка’) END;

BEGIN

Device:=0;

InitGraph(Device, Mode, ’<путь к гр.др.>’);

DirectVideo:=false;

Landscape; { рисование пейзажа }

WriteLn(‘Работает пауза 3 секунды’); { пауза три секунды }

Music; { музыка }

Flying_Saucer; { движение тарелки }

Music; { музыка }

WriteLn(‘Работает свет в окне’); { свет в окне }

ReadLn;

CloseGraph

END.

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

Если наша “пустая” программа верна, то результатом ее работы будет такая последовательность сообщений (новые сообщения я выделил жирным шрифтом):

Работает процедура Пейзаж

Работает Горизонт процедуры Пейзаж

Работает Синева процедуры Пейзаж

Работает Луна процедуры Пейзаж

Работают Звезды процедуры Пейзаж

Работает процедура Дерево

Работает процедура Дерево

Работает процедура Дерево

Работает процедура Дом

Работает процедура Дом

Работает Трава процедуры Пейзаж

Работает пауза 3 секунды

Работает процедура Музыка

Работает процедура Летающая тарелка

Работает процедура Музыка

Работает свет в окне

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

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