Модули. Мастерим падающие снежинки. |
Ну а сегодня я расскажу вам о новой возможности Паскаля, а именно о использовании модулей. На примере использования модуля CRT мы с вами разберем программу. Программа демонстрирует падающие снежинки.
Модули |
Модули - это отдельные файлы, содержащие дополнительные процедуры. Дело в том, что сам язык Паскаль имеет довольно ограниченное количество процедур и функций, они не позволяют производить некоторые действия. Для этого и существуют модули - они содержат в себе действия, расширяющие язык. При этом все процедуры в модулях собраны по тематическим группам. Например, модуль Graph содержит функции работы с графикой - построение линий, окружностей, многоугольников, дуг, рисование точек и т.д. Модуль DOS - позволяет обращаться к системным средствам MS-DOS, таким как чтение/удаление/создание каталогов, обращение к самой системе. Модуль CRT - позволяет обращаться к средствам консоли (клавиатура+экран): перемещать курсор в любое положение, очищать экран, менять цвет букв и фона, читать и опрашивать клавиатуру (в чем разница объясню позже), создавать текстовые окна и мн. другое.
Сегодня мы как раз и рассмотрим этот модуль. Надо сказать, что существует достаточное их количество, эту информацию мы постараемся постепенно освоить.
Использование модулей |
Сами модули хранятся во внешних файлах, которые имеют расширение ".tpu" - Turbo Pascal UNIT (англ. "Модуль турбо паскаля"). Однако не всегда этот файл может существовать. К примеру, использование модуля Graph требует наличия файла graph.tpu, а вот использование модуля Crt обходиться и без файла crt.tpu. Почему, спросите вы? Дело в том, что процедуры этого модуля находятся в т.н. "Системном модуле", иначе говоря в файле "turbo.tpl". Этот файл содержит в себе все внутренние функции Турбо Паскаля и некоторых его модулей. Теперь понимаете, почему у вас не работал один файл "turbo.exe"?
Сегодня мы и займемся модулем CRT. Скажу сразу, что он содержит довольно большое количество процедур и функций, сегодня мы пройдем только основные, требующиеся нам для написания нашей новогодней программы. Да и выпуск как-никак праздничный, поэтому я постараюсь быть краток :))
Итак, чтобы работал модуль Crt и вы могли использовать его функции и процедуры, не нужно никаких дополнительных программных средств. Если вы пользуетесь дистрибутивом, который скачали с моего сайта (файлы turbo.exe, turbo.tpl, tubo.tph), то вам его вполне хватит! Я ведь уже упоминал о том, что весь Crt находиться в turbo.tpl.
Подключение модулей к программе происходит с помощью служебного слова uses, после которого указывается имя модуля. Причем uses обязательно должно быть в самом начале программы, но после слова Program. Вот пример подключения Crt:
Program UsesCRT;
uses Crt;
begin
.
.
.
end.
Теперь мы можем использовать процедуры из этого модуля. Далее я представлю программу, реализующую это, но сначала опишу новые процедуры из модуля CRT, которые будут в ней использоваться. Не забывайте выписывать их на будмагу или оформлять в отдельный файл. Так будет проще их запомнить. (Чуть-чуть позже я выложу на сайте полные списки процедур и функций большинства модулей с описаниями и примерами использования).
Да, кстати - обратите внимание на переводы названий процедур. Меня часто просят делать это из-за проблем с английским. Чтож, думаю это не лишнее.
1: Процедура ClrScr, модуль: CRT. (сокр. от англ. Clear Screen - очистка экрана).
Эта продедура очищает экран. Если вы знакомы с бейсиком, то знаете процедуру CLS. Аналогичная операция есть и в операционной системе MS-DOS - также называется CLS. ClrScr делает тоже самое.
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). Разница здесь в том, что при чтении клавиатуры программа ждет, пока с нее не будут введены данные. При опросе нет ожидания и если клавиша сразу не была нажата, то программа продолжает свою работу. Получше вы сможете разобраться когда будете использовать эту функцию.
Итак, сегодня это все, что нам понадобиться. Пишем программу:
{ С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). Меньше - слишком быстро. Кроме того, автор программы также рекомендует проделать над ней следующее:
1. усложнить задачу можно подсчетом опавших снежинок в каждом столбце, если наглядно то получить сугробы!
2. снежинки падают под углом, в одну сторону, две стороны <= и =>