| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Модули. Мастерим падающие снежинки
Дело в том, что сам язык Паскаль имеет довольно ограниченное количество процедур и функций, они не позволяют производить некоторые действия. Для этого и существуют модули - они содержат в себе действия, расширяющие язык. При этом все процедуры в модулях собраны по тематическим группам. Например, модуль 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:
Теперь мы можем использовать процедуры из этого модуля. Далее я представлю программу, реализующую это, но сначала опишу новые процедуры из модуля 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, только не ждет нажатия Ну и последняя процедура (точнее, функция) из модуля 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'); { Массив }
(в фигурных скобках указаны комментарии)
Итак, сегодня это все, что нам понадобиться. Пишем программу:
При выполнии этой программы обратите внимание на Delay,
чтобы добиться лучшего эффекта, установите его соответсвующим
образом, в зависимости от вашего компьютера. К примеру, на моем
компьютере (Pentium III 800) это дело работает только с параметром
Delay(2000). Меньше - слишком быстро. Кроме того, автор
программы также рекомендует проделать над ней следующее:
Что и будет вам сегодня новогодним заданием! Решайте!
Теперь этот раздел стал не просто собранием оригинальных
вопросов, а уже является как бы приложением к обучающему процессу. Я
постараюсь размещать здесь больше алгоритмов и новых процедур,
применение которых иногда просто необходимо для дальнейшего
продвижения.
Вопрос 1. Можно ли в Паскале специально на некоторое
время задерживать действия, т.е. производить действия через
какой-либо заданный отрезок времени? (например: произвести
какое-нибудь действие, а только через 3 секунды произвести другое)
Да, для этого используйте вышеописанную процедуру Delay из модуля
Crt.
Вопрос 2. В выпуске 11 от 14 ноября 2000 г. предложена
программка печатающая цикл из вещественных чисел от 1.00 до 1.90 с
шагом 0.1. В разделе VAR Вы предлагаете переменным A и Step задать
вещественный тип Single, я попробовал выдаёт ошибку: Error 116: Must
be in 8087 mode to compile this. Попробовал использовать другие типы
Double, Extended, Comp, результат тот-же, получилось нормально
только с типом Real, я думал вначале что может название типа не так
записываю, но тогда должен был выдать Error 3: Unknown identifier.
Как это было пару раз раньше (написал bate, вместо byte). Да, у меня
стоит полный Pascal 7.1 если конечно это имеет какое-то
значение.
Нет, то что у Вас стоит Pascal 7.1 значения не имеет. Тут дело в
том, что при вычислениях чисел некоторых вещественных типов
используется сопроцессор. Сопроцессор (FPU) это - дополнение к
Вашему центральному процессору (CPU), он берет на себя часть
математических вычислений (в том числе вещественных чисел - с
плавающей точкой), снижая нагрузку на CPU.
В Паскале, чтобы использовать таковой необходимо включить
соответсвующую опцию: меню Options, пункт Compiler...,
далее в разделе Numeric Processing поставьте отметьте
(пробелом) пункт 8087/80287.
Вопрос 3. Может ли Паскаль считывать данные до нажатия
"Ввода" (Например, как в Windows: нажмите Esc для отмены)?
Да, конечно можно. Для этого используйте функцию ReadKey:
Char из модуля Crt (см. выше), которая читает последний
введенный символ. Создайте цикл с проверкой на необходимую клавишу и
все! Вот пример чтения строки до нажатия Esc (аналог Readln, только
с Esc):
Комментарии:
Во-первых, обратите внимание на символ #. Этим символом
указываются специальные клавиши, к примеру Esc - #27, Enter - #13 и
т.д. Более подробную таблицу я приведу в дальнейшем на сайте.
Далее - я вывожу прочитанную переменную на экран. Зачем? Да
потому, что ReadKey не выводит прочитанный символ на экран, только
возвращает его программе.
И последнее - до того, как дополнить строку введенным символом, я
проверяю его на #27 (Esc). Делаю это затем, чтобы сам символ #27 не
записывался в строку. Думаю, вы и сами уже догадались.
Вопрос 4. Можно ли сделать ввод данных скрытым
звёздочками (***), например, как при вводе пароля?
Думаю, я уже ответил на этот вопрос в предыдущем примере. ReadKey
- не выводит символы на экран. Можно вместо Write(C)
поставить Write("*");
Вопрос 5. Есть ли в Паскале функция, с помощью которой
внутренний динамик может "бипнуть" (Примерно, как при загрузке
компьютера)?
Да, есть. Для этого в модуле CRT существует две взаимосвязанные
процедуры:
Sound(Hz: Word) - вызывает звук, подаваемый через
системный динамик, с указанной частотой в Герцах. Звук будет
верещать пока не будет вызвана процедура NoSound.
Рубрика: Работа с Pascal
Вышел MySQL 5.1.30, первый стабильный рели....
После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:
Подробнее... |
Рубрика: MySQL
| Добавлено: 28.11.2008
Тестирование параллельных программ.
Тестирование параллельного программного обеспечения представляет собой более сложную задачу по сравнению с тестированием последовательной программы. Программист должен знать о подводных камнях при тестировании параллельного кода, имеющихся методологиях и инструментарии.
Подробнее... |
Рубрика: Тестирование
| Добавлено: 28.11.2008
Архитектура AMD64 (EM64T).
Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.
Подробнее... |
Рубрика: Архитектура AMD
| Добавлено: 27.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|