
- •Языки и системы программирования Алгоритмы
- •Языки программирования
- •Область применения языков программирования
- •Сложность и эффективность языков программирования
- •Трансляторы
- •Характеристика с/п Pascal abc
- •Используемые в с/п Pascal abc «горячие клавиши»
- •Структура программы на Паскале
- •Сообщения об ошибках. Отладка программы.
- •Система подсказок.
- •Команды вывода данных на экран
- •Константы
- •Переменные
- •Арифметические выражения. Приоритет арифметических операций
- •Стандартные арифметические функции
- •Процедуры инкремента и декремента
- •Примеры решения линейных задач
- •Ввод данных с клавиатуры
- •Примеры решения диалоговых задач
- •Линейные задачи для самостоятельной работы
- •Лаб. 1. Линеаризовать выражение:
- •Лаб. 2. Линейные диалоговые задачи (на одно действие)
- •Лаб. 3. Диалоговые задачи на несколько действий
- •Ветвление
- •Логические выражения
- •Вложенное ветвление
- •Лаб. 4. Задачи на ветвление:
- •Лаб. 5. Задачи на ветвление с вычислениями:
- •Выбор варианта
- •Лаб. 6. Задачи на выбор варианта:
- •Как выбрать цикл?
- •Экстренные события в теле цикла
- •Лаб. 7. Числовые задачи с циклом For
- •Лаб. 8. Сюжетные задачи с циклом For
- •Лаб. 9. Задачи с условными циклами
- •Библиотека crt
- •Библиотека sounds
- •Лаб. 10. Задачи с использованием циклов и библиотек crt и sounds
- •Порядковые типы данных
- •Перечислимый тип данных
- •Символьный тип данных
- •Ограниченный (интервальный) тип данных
- •Лаб. 11. Задачи со строками
- •Массивы
- •Решение задач с массивами
- •Поиск минимального (максимального) элемента массива
- •Сортировка массива.
- •Двумерные и многомерные массивы
- •Лаб. 12. Задачи с одномерными массивами
- •Лаб. 13. Задачи с двумерными массивами
- •Множества
- •Файлы данных
- •Записи и базы данных
- •Библиотека GraphAbc
- •Действия с графическим окном:
- •Точечная графика
- •Графические примитивы
- •Текст в графическом окне
- •Использование готовых точечных рисунков
- •Вспомогательные алгоритмы
- •Рекурсия
- •Событийное программирование
- •Использование таймеров
- •Использование сторонней библиотеки ukeyb
Библиотека crt
Паскаль содержит небольшое число встроенных команд, но зато может расширять свои возможности за счёт создания новых команд. Не обязательно описывать новые команды прямо в тексте программы. Можно подключить описания, хранящиеся в отдельных файлах – модулях. Универсальные модули, пригодные для подключения ко многим программам называются библиотеками. Библиотеки группируют команды по темам, например, библиотека, отвечающая за мультипликацию, библиотека, организующая вывод музыки и т.д… Некоторые библиотеки входят в поставку PascalABC. Они называются стандартными библиотеками. К ним относится и библиотека CRT. При её подключении возникает специальное текстовое окно для ввода и вывода. Большинство команд из CRT относятся к управлению выводом текста в это окно. Но в CRT входят также команды управления клавиатурой.
Для подключения к программе библиотеки используется команда USES, после которой указывается одна или (через запятую) несколько библиотек (например, uses crt; ). Эта команда располагается в следующей после заголовка строке, до других описаний.
При включении в программу библиотеки CRT, можно использовать такие новые команды:
TextSize(высота); Устанавливает размер символов в пунктах (по умолчанию 10 пунктов). Пункт - отрезок 1/3 мм.
CRTWindowSize(ширина,высота); Устанавливает размер текстового окна в символах.
Window(x1,y1,x2,y2); Определяет на экране текущее окно (в котором в дальнейшем будет происходить весь ввод-вывод). Устанавливает курсор в левый верхний угол текущего окна. Координаты задаются в символах текущего размера.
ClrScr; Очищает цветом фона все текстовое окно (или текущее окно, установленное процедурой window). Устанавливает курсор в левый верхний угол очищенного окна.
ClrEol; Очищает все символы с позиции курсора до конца строки без перемещения курсора.
DelLine; Удаляет строку, содержащую курсор.
InsLine; Вставляет пустую строку в позиции курсора.
HideCursor; Скрывает текстовый курсор.
ShowCursor; Делает текстовый курсор видимым.
TextBold; Устанавливает жирный стиль символов.
TextNormal; Устанавливает нормальный стиль символов.
TextColor(цвет); Устанавливает цвет текста, печатаемого после этой команды. Цвета, используемые в этой и следующей команде, указываются либо числом, либо английским словом-константой:
основные цвета их светлые оттенки
0 Black |
чёрный |
|
8 DarkGray |
тёмно-серый |
1 Blue |
синий |
|
9 LightBlue |
светло-синий |
2 Green |
зелёный |
|
10 LightGreen |
светло-зелёный |
3 Cyan |
бирюзовый |
|
11 LightCyan |
голубой |
4 Red |
красный |
|
12 LightRed |
светло-красный |
5 Magenta |
малиновый |
|
13 LightMagenta |
сиреневый |
6 Brown |
коричневый |
|
14 Yellow |
жёлтый |
7 LightGray |
серый |
|
15 White |
белый |
TextBackGround(цвет); Устанавливает цвет фона позади печатаемых после этой команды символов. Если после этой команды применить ClrScr, то поменяется цвет всего окна.
GotoXY(x,y); Перемещает курсор в позицию (x,y). Ближайший ввод или вывод начнётся с этой позиции.
ScrollingOff; / ScrollingOn; Отключает / включает прокрутку при выводе.
Кроме перечисленных команд для управления текстовым выводом, библиотека CRT содержит ещё две функции, помогающие при вводе отдельных символов с клавиатуры.
Ожидание нажатия одного символа: readkey; В разделе VAR объявляется переменная типа char для хранения одного символа. Используется она так: kl:=readkey;
В некоторых случаях нужно посмотреть нажатую клавишу, не ожидая её нажатия (не нажато, ну что ж, пойдём дальше). В этих случаях удобно использовать функцию keypressed; булевского типа. Она даёт true, если нажата хоть какая-нибудь клавиша и false, если ничего не нажато.
Обычно readkey и keypressed используют совместно: если нажато, посмотрим, что нажато. Например, if keypressed then kl:=readkey;
Рассмотрим пример задачи с использованием библиотеки CRT. Нужно организовать заставку к игре «Смертельная битва». Пусть слово «Смертельная» движется слева направо, а «битва» - немного ниже справа налево. Дойдя до середины, слова должны остановиться.
Движение организуем так: в цикле верхнее слово ставим каждый раз правее, а нижнее – левее. Чтобы за словами не оставался след, мы верхнее слово начинаем с пробела (который затирает предыдущую букву), а нижнее слово оканчиваем пробелом. Начальные и конечные координаты подбираем так, чтобы слова в последний раз стали ровно посередине экрана. Чтобы при движении курсор не моргал около слова, мы отключаем его.
program
zastavka; uses
crt; var
x1,x2:integer; begin TextSize(12);
//Зададим размер символов
CRTWindowSize(80,25);
//Зададим размер экрана
Textbackground(0); clrscr;
//Затемним и очистим экран textcolor(12);
//Зададим красный цвет текста x1:=1;
x2:=69; //Задаём начальные координаты
слов HideCursor;
//Отключим курсор repeat gotoxy(x1,12);
write(' СМЕРТЕЛЬНАЯ'); //Верхнее слово
gotoxy(x2,14);
write('БИТВА '); //Нижнее слово sleep(50);
//Делаем задержку
x1:=x1+1; x2:=x2-1;
//Перемещаем слова until
x1>33; end.
Команда sleep(50); позволяет замедлить движение.
Второй пример: Пусть слово «МЯЧИК» летает по экрану, отражаясь от его краёв. При каждом отражении слово меняет цвет. Остановка движения – по нажатию любой клавиши. Движение организуем так. Ставим слово в текущих координатах, делаем паузу и стираем слово (написав на его месте пробелы). Затем меняем координаты и ставим его на новом месте.
Следующая задача – более сложная, уже целый проект: Написать программу – клавиатурный тренажёр. В пустом окне сверху вниз движется случайно выбранная русская заглавная буква случайного цвета (след не затирается). Если нажать клавишу с этой буквой, новая буква начнёт падать в новом столбце. Если нажать неправильный символ, увеличивается счётчик ошибок, а буква продолжает падение. Если буква доходит до конца столбца, новая буква появляется в соседнем столбце. Когда заканчивается последний столбец, окно очищается, и выводятся результаты. Чем раньше мы нажимаем правильную букву, тем больше пустой остаток в данном столбце. Сумма таких остатков и будет нашим результатом – очками.
Для выбора случайной буквы мы придумаем случайный номер буквы (в пределах от 1 до 33) и возьмём её под этим номером из алфавита, который хранится в строковой переменной. (Подробности о работе со строками - при изучении этой темы).