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

10.3. Сначала - работа над структурой программы

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

USES Graph, CRT;

VAR Device, Mode :integer;

PROCEDURE Landscape;

BEGIN WriteLn('Pa6oraeт процедура Пейзаж') END;

PROCEDURE Music;

BEGIN WriteLn('Paбoтaeт процедура Музыка') END;

PROCEDURE Flying_Saucer;

BEGIN WriteLn('Paбoтaeт процедура Летающая тарелка') END;

BEGIN

Device:=0;

InitGraph(Device, Mode, '<путь к графическим драйверам>');

DirectVideo:=false;

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

WriteLn('Paбoтaeт пауза 3 секунды'); {пауза 3 секунды}

Music; {музыка}

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

Music; {музыка}

WriteLn('Pa6oTaeT свет, в окне'); {свет в окне}

ReadLn; CloseGraph

END.

Пояснения. В нашей программе мы используем и модуль Graph, и модуль CRT, так как нам понадобятся и графика и музыка.

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

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

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

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

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

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

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

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

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

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

USES Graph, CRT;

VAR Device, Mode :integer;

PROCEDURE Tree;

BEGIN WriteLn('Paбoтaeт процедура Дерево') END;

PROCEDURE House;

BEGIN WriteLn('Paбoтaeт процедура Дом') END;

PROCEDURE Landscape;

BEGIN

WriteLn('Paбoтaeт процедура Пейзаж');

WriteLn('Paбoтaeт Горизонт процедуры Пейзаж'); {горизонт}

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

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

WriteLn('Paбoтaют Звезды процедуры Пейзаж'); {звезды}

Tree; {дерево}

Tree; {дерево}

Tree; {дерево}

House; {дом}

House; {дом}

WriteLn('Pa6oтaeт трава процедуры Пейзаж'); {трава}

END;

PROCEDURE Music;

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

PROCEDURE Flying_Saucer;

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

BEGIN

Device:=0;

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

DirectVideo:=false;

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

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

Music; {музыка}

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

Music; {музыка}

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

ReadLn; CloseGraph

END.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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