Вывод текста в графическом режиме
Процедура WriteLn печатает маленькие буквы скучного начертания. В модуле Graph имеются процедуры SetTextStyleи OutTextXY, которые общими усилиями печатают буквы разного размера (в том числе и очень крупного) нескольких изящных очертаний, причем процедура SetTextStyle задает стиль и размер букв, а процедура OutTextXY печатает строку букв заданного стиля и размера в заданном месте экрана. Например, в результате выполнения фрагмента
SetTextStyle (4,0,8);
OutTextXY(200,300,’Hello!’)
на экране появится строка Hello!, выполненная шрифтом4 (готический) размера 8. Левый верхний угол строки будет находиться в точке (200,300). Число 0 означает обычное горизонтальное направление текста, 1 – вертикальное, 2 - горизонтальное с лежащими буквами. Цвет текста, как и цвет фигур, определяется процедурой SetColor.
Всего в Паскале есть 5 стандартных шрифтов:
0 - обычный растровый (остальные - векторные)
1 - полужирный
2 - тонкий
3 - газетный
4 – готический
Размер букв зависит от шрифта. Можно независимо менять высоту и ширину букв. Для этого существует процедура SetUserCharSize. Например, SetUserCharSize(7,3, 9,4) устанавливает ширину букв в 7/3 раза больше нормальной, а высоту - в 9/4.
К сожалению, стандартный набор векторных шрифтов Паскаля не поддерживает русские буквы. Если вы хотите красиво писать по-русски, вам придется где-нибудь найти подходящие файлы русских шрифтов.
Недостаток OutTextXY - она выводит только строковые выражения. Покажу, как обмануть ее и напечатать значение числового выражения. Пусть переменная aописана, как Integer, и равна 937. Оператор OutTextXY(200,200, a) не захочет ее печатать. Тогда придумаем переменную as и опишем ее, как String. Следующий фрагмент делает дело:
a:=937;
Str(a,as);
OutTextXY(200,200, as)
Процедура Strпреобразует число a=937 в строку из трех символов as=’937’.
Для симметрии покажу и обратную процедуру Val:
VAR a,err :Integer;
as :String;
Begin
as:='937';
Val(as,a,err);
WriteLn (a+1);
ReadLn
End.
Пояснения: Процедура Val преобразует строку из трех символов 937 в число 937. В результате оператор WriteLn (a+1) печатает число 938. На смысле переменной err останавливаться я не буду.
Задание 132: У вас имеется текстовый файл из произвольного числа строк. Организуйте вывод этого файла на экран векторным шрифтом. Если у вас есть время, организуйте управление с клавиатуры: пролистывание текста, выбор шрифта, выбор цвета шрифта и фона.
Управление цветом в текстовом режиме(модуль CRT)
Если вам не нужно рисовать на экране картинки, то вам не нужен и графический режим. Тем более, что вывод текста в текстовом режиме можно сделать достаточно красиво и удобно. Делается это с помощью модуля CRT. Вот какие процедуры он предлагает для этого:
TextColor(Yellow) | Выбор цвета текста |
TextBackground(Blue) | Выбор цвета фона под текстом. Я имею в виду цвет не всего экрана, а той узенькой полоски, на которой появляется текущий текст |
ClrScr | Очистка экрана. Если в программе предварительно была выполнен оператор TextBackground (Blue), то после выполнения ClrScr весь экран станет синим |
GotoXY(61,14) | Поместить курсор в 61 столбец 14 строки |
До сих пор вы не умели управлять положением текстового курсора на экране. При помощи процедуры GotoXYвы сможете помещать курсор в произвольную точку экрана, а значит и текст печатать в произвольном месте экрана. Вспомним, что в текстовом режимеэкран обычно разделен на 25 строк по 80 столбцов. Строки пронумерованы сверху вниз, столбцы - слева направо. Чтобы поместить курсор в 61 столбец 14 строки, достаточно записать GotoXY(61,14).
Задача: Закрасить экран красным цветом и посредине экрана желтыми буквами на синем фоне написать “Вход”.
Программа:
USES CRT;
BEGIN
TextBackground (Red);
ClrScr;
TextColor (Yellow);
TextBackground (Blue);
GotoXY(38,13);
WriteLn(‘Вход’)
END.
Работа с датами и временем (модуль DOS)
Каждый компьютер имеет часы и календарь. Каждый пользователь может спросить у компьютера, сколько времени и какое сегодня число, а при желании и подправить то и другое. Для работы с временеми датойна Паскале необходим новый для вас модуль DOS. Мы рассмотрим четыре процедуры этого модуля, которые работают с временем и датой:
GetTime | Узнать время |
SetTime | Установить время |
GetDate | Узнать дату |
SetDate | Установить дату |
Чтобы воспользоваться этими процедурами, вы должны придумать имена переменным, обозначающим дату и время:
God год (с 1980 по 2099)
Mes месяц (1-12)
Den день месяца
Den_Ned номер дня недели (от 0 (воскресенье) до 6 (суббота))
Chas час
Min минута
Sec секунда
Sotki сотые доли секунды
Все эти переменные должны быть целочисленными, однако не типа Integer, к которому вы привыкли, а типа Word. Таково требование упомянутых процедур. Переменная типа Word должна быть целым числом из диапазона 0 - 65535.
Вот программа, которая узнает у компьютера, какое сегодня число и сколько времени:
USES DOS;
VAR God, Mes, Den, Den_Ned, Chas, Min, Sec, Sotki : Word;
Begin
GetDate(God, Mes, Den, Den_Ned);
WriteLn(‘Сегодня ’ , Den, ‘ . ‘ ,Mes, ‘ ‘ ,God, ‘ года‘);
GetTime(Chas,Min,Sec,Sotki);
WriteLn(‘Сейчас ’ , Chas,' час. ' ,Min, ' мин. и ' ,Sec, ' сек.')
End.
Задание 133 «Быстрота реакции»: Определите быстроту своей реакции: На экране через случайный промежуток времени (секунды через 2 - 4) возникает квадрат. Как только он возник, быстрее нажимайте на какую-нибудь клавишу. Пусть компьютер вычислит, сколько сотых долей секунды прошло между этими двумя событиями.
Возможно, вас не удовлетворит работа GetTime в этой программе. Попробуйте сделать определитель быстроты реакции, не связываясь с процедурами модуля DOS. Например, засеките по секундомеру, сколько времени ваш компьютер выполняет пустой цикл for i:=1 to 10000000 do; и создайте на этой основе свою единицу времени.
А вот как установить дату и время:
SetDate(1997, 5, 22) -установить дату 22 мая 1997 года
SetTime(23, 58, 32, 93) -установить время 23 часа 58 мин 32 сек и 93 сотых
Имейте в виду, что эти процедуры устанавливают дату и время не только для Паскаля, а для всего компьютера. Будьте осторожны, а не то файлы, сохраненные вами, будут иметь неверный атрибут времени.
Задание 134 «Определитель дня недели»: Вы вводите любую дату. Компьютер должен определить день недели и напечатать его в виде “понедельник”, “вторник” и т.д. При этом вы не должны испортить календарь, то есть после того, как ваша программа завершит работу, календарь компьютера должен показывать правильную дату, а не ту, что вы ввели.