Модули - это отдельные файлы, содержащие дополнительные процедуры. Дело в том, что сам язык Паскаль имеет довольно ограниченное количество процедур и функций, они не позволяют производить некоторые действия. Для этого и существуют модули - они содержат в себе действия, расширяющие язык. При этом все процедуры в модулях собраны по тематическим группам. Например, модуль Graph содержит функции работы с графикой - построение линий, окружностей, многоугольников, дуг, рисование точек и т.д. Модуль DOS - позволяет обращаться к системным средствам MS-DOS, таким как чтение/удаление/создание каталогов, обращение к самой системе. Модуль CRT - позволяет обращаться к средствам консоли (клавиатура+экран): перемещать курсор в любое положение, очищать экран, менять цвет букв и фона, читать и опрашивать клавиатуру (в чем разница смотри внизу страницы), создавать текстовые окна и мн. другое.
Сами модули хранятся во внешних файлах, которые имеют расширение ".tpu" - Turbo Pascal UNIT (англ. "Модуль турбо паскаля"). Однако не всегда этот файл может существовать. К примеру, использование модуля Graph требует наличия файла graph.tpu, а вот использование модуля Crt обходиться и без файла crt.tpu. Почему, спросите вы? Дело в том, что процедуры этого модуля находятся в т.н. "Системном модуле", иначе говоря в файле "turbo.tpl". Этот файл содержит в себе все внутренние функции Турбо Паскаля и некоторых его модулей.
Итак, чтобы работал модуль Crt и чтобы можно было использовать его функции и процедуры, не нужно никаких дополнительных программных средств. Подключение модулей к программе происходит с помощью служебного слова uses, после которого указывается имя модуля. Причем uses обязательно должно быть в самом начале программы, но после слова Program. Вот пример подключения Crt:
Program UsesCRT;
uses Crt;
Begin
...
end.
Теперь мы можем использовать процедуры из этого модуля. Далее я представлю программу, реализующую это, но сначала опишу новые процедуры из модуля CRT, которые будут в ней использоваться. Обратите внимание на переводы названий процедур. Меня часто просят делать это из-за проблем с английским. Что ж, думаю это не лишнее.
1: Процедура ClrScr, модуль: CRT. (сокр. от англ. Clear Screen - очистка экрана). О процедуре см. ниже. Эта процедура очищает экран.
2: Процедура GotoXY(X, Y: Byte;), модуль: CRT.
Эта продедура осуществляет переход на указанную переменными X и Y позицию экрана. При этом номер строки - это Y, а номер позиции в строке - это X. Экран имеет 25 строк по 80 символов в каждой. То есть максимально можно сделать следующее:
GotoXY(80,25);
3: Процедура Delay(A: Word;), модуль: CRT. (анг. "Задержка");
Эта процедура выполняет задержку программы на указанное количество миллисекунд. Указывается оно параметров A, который, не может быть отрицательным. Используется эта процедура при необходимости замедлить выполнение программы - например, в программе "Снежинки" она тормозит сам ход снегопада - без ее использования все выполнялось бы слишком быстро.
4: Функция ReadKey: Char;, модуль: CRT.
Эта функция возвращает от своей работы последнюю нажатую клавишу. Очень похоже на работу Readln, только не ждет нажатия <Enter> и завершается сразу же при нажатии клавиши. При этом в переменную Char, к которой присваивается эта функция, заносится введенный символ.
Следующая функция из модуля CRT, которая понадобится:
5: Функция KeyPressed: Boolean;, модуль: CRT.
Эта функция возвращает TRUE если была нажата клавиша. Выше отмечалась разница между "чтением" клавиатуры и "опрос" клавиатуры. Вот здесь как раз и используется эта разница: KeyPressed - это опрос клавиатуры. Readln - это чтение. (В модуле Crt также есть похожая функция - ReadKey). Разница здесь в том, что при чтении клавиатуры программа ждет, пока с нее не будут введены данные. При опросе нет ожидания и если клавиша сразу не была нажата, то программа продолжает свою работу. Получше вы сможете разобраться когда будете использовать эту функцию.
Ну и завершающий этап перед самим текстом программы - это новый раздел - const. В нем описываются константы, используемые в программе. Далее все понятно на наглядном примере. Помните, что так можно описывать и строку и символ и даже массив:
Const
S='Here is string.'; { Константа - строка }
A: Array[1..5] of Char = ('a','b','c','d','e'); { Массив }
Итак, программа:
{ СHЕЖИHКИ }
uses crt;
const n=79;
Var
x:array[1..n] of byte;
i,k:byte; c:char;
Begin
clrscr;
for i:=1 to n do
begin
x[i]:=0;
end;
repeat
k:=random(80);
if x[k]=0 then x[k]:=1;
for i:=1 to n do
begin
if x[i]>0 then
begin
gotoxy(i,x[i]);
write(' ');
x[i]:=x[i]+1;
gotoxy(i,x[i]);
write('*');
if x[i]>23 then x[i]:=0;
end;
end;
delay(100);
until keypressed;
end.
При выполнении этой программы обратите внимание на Delay, чтобы добиться лучшего эффекта, установите его соответствующим образом, в зависимости от компьютера. К примеру, на Pentium III 800 это дело работает только с параметром Delay(2000). Меньше - слишком быстро.