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

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

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

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

USES Graph,CRT;

VAR Device, Mode:Integer;

PROCEDURE Landscape;

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

PROCEDURE Music;

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

PROCEDURE Flying_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 секунды

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

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

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

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

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

USES Graph,CRT;

VAR Device, Mode:Integer;

PROCEDURE Tree;

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

PROCEDURE House;

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

PROCEDURE Landscape;

BEGIN

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

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

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

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

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

Tree; { дерево }

Tree; { дерево }

Tree; { дерево }

House; { дом }

House; { дом }

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

END;

PROCEDURE Music;

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

PROCEDURE Flying_Saucer;

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

BEGIN

Device:=0;

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

DirectVideo:=false;

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

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

Music; { музыка }

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

Music; { музыка }

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

ReadLn;

CloseGraph

END.

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: