Рефераты. Основы программирования на языке Паскаль

readln, {ждем нажатия enter}

clrscr; {очищаем окно}

{создать правое окно - белые символы на красном фоне:}

textbackground (red);

textcolor (white);

window (40, 2, 70, 17);

for k:= i to 100 do

write ("нажать клавишу enter... ");

readln;

TextMode (Co8o) {сбросить все установки}

end.

Обращение к процедуре Window игнорируется, если какая-либо из координат выходит за границы экрана или если нарушается одно из условий: Х2>Х1 или Y2>Y1. Каждое новое обращение к Window отменяет предыдущее определение окна. Границы текущего окна запоминаются в двух глобальных переменных модулях CRT: переменная WindMin типа Word хранит X1 и Y1 (Х1 - в младшем байте), а переменная того же типа WindMax - Х2 и Y2 (Х2 - в младшем байте). При желании вы можете изменять их нужным образом без обращения к Window. например, вместо оператора

Window (40, 2, 70,17);

можно было бы использовать два оператора:

WindMin:=39+(lshl8); WindMax:= 69+(16 shl 8);

(в отличие от обращения к Window, координаты, хранящиеся в переменных WindMin и WindMax, соответствуют началу отсчета 0, 0).

Процедура GotoXY переводит курсор в нужное место экрана или текущего окна. Заголовок процедуры:

Procedure GotoXY (Х, Y: Byte);

Здесь X, Y - новые координаты курсора. Координаты задаются относительно границ экрана (окна), т.е. оператор

GotoXY (1,1);

Оператор указывает, перевести курсор в левый верхний угол экрана (или окна, если к этому моменту на экране определено окно). Обращение к процедуре игнорируется, если новые координаты выходят за границы экрана (окна).

Функции WhereX и WhereY. С помощью этих функций типа Byte можно определить текущие координаты курсора: WhereX возвращает его горизонтальную, а WhereY - вертикальную координаты.

В следующей программе в центре экрана создается окно светло-бирюзового цвета, которое обводится рамкой.

Program Prim52;

Uses CRT; {подключить библиотеку (модуль) CRT}

Const { константы, определяющие графические символы }

{ необходимые для вычерчивания рамки окна }

lu=#218; { левый верхний угол рамки }

ru=#191; { правый верхний угол рамки }

ld=#192; { левый нижний угол рамки }

rd=#217; { правый нижний угол рамки }

h=#196; { горизонтальная черта }

v=#179; { вертикальная черта }

{ координаты окна: }

x1=14; y1=5; { верхний левый угол }

x2=66; y2=20; { нижний правый угол }

Var k:integer;

Begin ClrScr; { очиститъ экран}

textmode(co80); { сброситъ все установки }

textbackground(lightcyan); { фон окна светло-бирюзовый }

textcolor(yellow); { цвет текстов в окне желтый }

window(x1,y1,x2,y2); { открытъ окно с координатами }

ClrScr;

{ рисуем рамку вокруг окна}

Write(lu); { левый верхний угол }

for k:=x1+1 to x2-1 do

write(h); { верхнюю горизонтальную черту }

write(ru); { правый верхний угол }

for k:=y1+1 to y2-1 do { рисуем вертикальные линии }

{ посимвольно слева и справа и построчно за счет цикла} 

Begin GotoXY(1,k-y1+1); { курсор на левую границу }

write(v); { вывести вертикальную черточку }

GotoXY(x2-x1+1,whereY); { курсор на правую границу }

write(v); { вывести вертикальную черточку }

{ перейти на новую строку, пока не кончится цикл }

end;

write(ld); { левый нижний угол }

Window(x1,y1,x2,y2+1);

GotoXY(2,y2-y1+1); { kypcop в нижний левый угол+1}

{ нового окна, без учета рамки }

for k:=x1+1 to x2-1 do write(h);{ нижнюю горизонтальную черту}

write(rd); { нижний правый угол}

TextBackground(LightCyan);

GotoXY(2,2); { курсор в левый верхний угол}

{нового окна без учета рамки}

readln;

end.

Три следующие процедуры без параметров могут оказаться полезными при разработке текстовых редакторов.

Процедура ClrEOL стирает часть строки от текущего положения курсора до правой границы окна (экрана). Положение курсора не меняется.

Процедура DelLine уничтожает всю строку с курсором в текущем окне (или на экране, если окно не создано). При этом все строки ниже удаляемой (если она есть) сдвигаются вверх на одну строку.

Процедура InsLine вставляет строку: строка с курсором и все строки ниже ее сдвигаются вниз на одну строку; строка, вышедшая за нижнюю границу окна (экрана), безвозвратно теряется; текущее положение курсора не меняется.

Процедуры LowVideo, NormVideo и HighVideo. С помощью этих процедур без параметров можно устанавливать соответственно пониженную, нормальную и повышенную яркости символов. Например:

Uses CRT;

begin

LowVideo;

Writeln ('пониженная яркость');

NormVideo;

Writeln ('нормальная яркость');

HighVideo;

Writeln ('повышенная яркость')

end.

На практике нет разницы между пониженной и нормальной яркостью изображения.

Процедура Assign CRT связывает текстовую файловую переменную F с экраном с помощью непосредственного обращения к видеопамяти (т.е. к памяти, используемой адаптером для создания изображения на экране). В результате вывод в такой текстовый файл осуществляется значительно быстрее (в 3...5 раз), чем если бы этот файл был связан с экраном стандартной процедурой Assign. Заголовок процедуры: Procedure Assign CRT (F: Text);

В следующей программе измеряется скорость вывода на экран с помощью стандартной файловой процедуры и непосредственного обращения к видеопамяти. Вначале файловая переменная F связывается «медленной» процедурой Assign со стандартным устройством CON (т.е. с экраном) и подсчитывается количество N циклов вывода некоторого текста за 555=275 миллисекунд системных часов. Затем файловая переменная связывается с экраном с помощью процедуры быстрого доступа Assign CRT и точно так же подсчитывается количество N2 циклов вывода. В конце программы счетчики NI и N2 выводятся на экран.

Показания системных часов хранятся в оперативной памяти компьютера в виде четырехбайтного слова по адресу [$0040:$006С] и наращиваются на единицу каждые 55 миллисекунд.

Uses CRT;

var

F: Text;

t: Longint; {начало отсчета времени}

N1, N2: Word; {счетчик вывода}

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.