на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Основы программирования на языке Паскаль
p align="left">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; {счетчик вывода}

const

txt= 'Text';

begin

{-----стандартный вывод в файл------}

Assign (F, “CON”);

Rewrite (F);

N1:=0; {готовим счетчик вывода}

ClrScr; {очищаем экран}

{запоминаем начальный момент:}

t:= Meml [$0040:$006C];

{ждем начало нового 55-миллисекундного интервала, чтобы исключить погрешность в определении времени:}

while Meml [$0040:$006C]=t do;

{цикл вывода за 5 интервалов}

while Meml [$0040:$006C]<t+6 do

begin

inc (N1);

Write (F, txt)

end;

Close (F);

{вывод с помощью быстрой процедуры прямого доступа к экрану}

AssignCRT (F);

Rewrite (F);

N2:=0;

ClrScr;

t:= Meml [$0040:$006C];

while Meml [$0040:$006]=t do;

while Meml [$0040:$006]<t+6 do

begin

inc (N2);

Write (F, txt)

end;

Close (F);

{печатаем результат}

ClrScr;

Writeln (N1, N2:10)

end.

Следует учесть, что вывод на экран обычным образом, без использования файловой переменной (например, оператором Write (txt)), также осуществляется с помощью непосредственного доступа к видеопамяти, поэтому ценность процедуры AssignCRT весьма сомнительна. Прямой доступ к видеопамяти регулируется глобальной логической переменной DirectVideo модуля CRT: если эта переменная имеет значение True, доступ разрешен, если False -- доступ к экрану осуществляется с помощью относительно медленных средств операционной системы MS--DOS. По умолчанию переменная DirectVideo имеет значение True.

11.3. Программирование звукового генератора

Звуковые возможности пк основаны на одноканальном управляемом звуковом генераторе, вырабатывающем электромагнитные колебания звуковой частоты. Колебания подаются на встроенный в пк динамик и заставляют его звучать.

В модуль CRT включены три процедуры, с помощью которых вы сможете запрограммировать произвольную последовательность звуков.

Процедура Sound заставляет динамик звучать с нужной частотой. заголовок процедуры Procedure Sound (F: Word); здесь F - выражение типа Word, определяющее частоту звука в герцах. После обращения к процедуре включается динамик, и управление немедленно возвращается в основную программу, в то время как динамик будет звучать впредь до вызова процедуры NoSound.

Процедура NoSound выключает динамик. Если он к этому моменту не был включен, вызов процедуры игнорируется.

Процедура Delay oбеспечивает задержку работы программы на заданный интервал времени. Заголовок процедуры: Procedure Delay (T: Word);

Здесь Т -- выражение типа Word, определяющее интервал времени (в миллисекундах), в течение которого задерживается выполнение следующего оператора программы.

Для генерации звукового сигнала обычно используется вызов описанных процедур по схеме Sound--Delay--NoSound. следующая программа заставит пк воспроизвести простую музыкальную гамму. Используемый в ней массив F содержит частоты всех полутонов в первой октаве от «до» о «си». При переходе от одной октавы к соседней, частоты изменяются в два раза.

Uses CRT;

const

F: array [1..12] of Real =

(130.8, 138.6, 146.8, 155.6, 164.8, 174.6, 185.0, 196.0, 207.7,

220.0, 233.1, 246.9); {массив частот 1-й октавы}

Temp = 100; {темп исполнения}

var

k, n: integer;

begin

{восходящая гамма}

for k:=0 to 3 do

for n:=1 to 12 do

Begin

Sound (Round (F[n]*(1 shl k)));

Delay (Temp);

NoSound

end;

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



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.