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

uses CRT;

Var

с: char

Begin

textbackground (red);

clrscr; {заполняем экран красным цветом}

writeln ("нажмите любую клавишу...");

с:= ReadKey, {ждем нажатия любой клавиши}

textbackground (black);

clrscr {восстанавливаем черный фон экрана}

end.

Процедура Window определяет текстовое окно – область экрана, которая в дальнейшем будет рассматриваться процедурами вывода, как весь экран. Сразу после вызова процедуры курсор помещается в левый верхний угол окна, а само окно очищается (заполняется цветом фона). По мере вывода курсор, как обычно, смещается вправо и при достижении правой границы окна переходит на новую строку, а если он к этому моменту находился на последней строке, содержимое окна сдвигается вверх на одну строку, т.е. осуществляется «прокрутка» окна. Заголовок процедуры:

Procedure Window (xi, yi, х2, y2: byte);

Здесь x1...y2 – координаты левого верхнего (х1, y1) и правого нижнего (х2, y2) углов окна. Они задаются в координатах экрана, причем левый верхний угол экрана имеет координаты (1,1), горизонтальная координата увеличивается слева направо, а вертикальная – сверху вниз.

В следующем примере иллюстрируется вывод достаточно длинного сообщения в двух разных окнах:

uses CRT;

Var

     k: integer;

Begin {создать левое окно – желтые символы на синем фоне:}

textbackground (blue);

window (5, 2, 35, 17);

textcolor (yellow);

for k:= i to 100 do

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

      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 циклов вывода некоторого текста за 5*55=275 миллисекунд системных часов. Затем файловая переменная связывается с экраном с помощью процедуры быстрого доступа Assign CRT и точно так же подсчитывается количество N2 циклов вывода. В конце программы счетчики NI и N2 выводятся на экран.

Страницы: 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



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