Основы алгоритмизации и программирования. Часть четвертая. Файловая система Turbo Pascal. Асламова В.С - 42 стр.

UptoLike

83
12. Процедура AssignCRT. Связывает текстовую файловую перемен-
ную F c экраном с помощью непосредственного обращения к видеопамяти (т.
е. к памяти, используемой адаптером для создания изображения на экране). В
результате вывод в такой текстовый файл осуществляется значительно (в
3…5 раз) быстрее, чем, если бы этот файл был связан с экраном стандартной
процедурой Assign. Заголовок процедуры:
Procedure AssignCRT (F: Text);
В
следующей программе измеряется скорость вывода на экран с помо-
щью стандартной файловой процедуры и с помощью непосредственного
обращения к видеопамяти. Вначале файловая переменная F связывается
медленнойпроцедурой Assign со стандартным устройством CON (т.е. с эк-
раном) и подсчитывает количество N1 циклов вывода некоторого текста за
5*55 = 275 миллисекунд системных часов. Затем файловая переменная свя-
зывается
с экраном с помощью процедуры быстрого доступа AssignCRT и
точно так же подсчитывается количество N2 циклов вывода. В конце про-
граммы счетчики N1 и N2 выводятся на экран.
Показания системных часов хранятся в оперативной памяти компью-
тера в виде четырехбайтного слова по адресу [$0040:$006C] и наращиваются
на единицу каждые 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
{цикл вывода за пять интервалов}
while MemL[$0040:$006C] < t+6 do
begin
inc (N1);
84
Write (F, txt)
end;
Close (F);
{Вывод с помощью быстрой процедуры
прямого доступа к экрану}
AssignCRT (F);
Rewrite (F):
N2:=0;
ClrScr;
t := MemL [$0040:$006C];
while MemL[$0040:$006C] = t do
while MemL[$0040:$006C] < 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.
Программирование звукового генератора
В модуль CRT включены три процедуры, с помощью которых можно
запрограммировать произвольную последовательность звуков.
1. Процедура Sound заставляет динамик звучать с нужной частотой.
Заголовок процедуры:
Procedure Sound (F:Word);
Здесь F – выражение типа Word, определяющее частоту звука в герцах.
После обращения к процедуре включается динамик, и управление немедлен-
        12. Процедура AssignCRT. Связывает текстовую файловую перемен-                      Write (F, txt)
ную F c экраном с помощью непосредственного обращения к видеопамяти (т.                 end;
                                                                                        Close (F);
е. к памяти, используемой адаптером для создания изображения на экране). В
                                                                                                              {Вывод с помощью быстрой процедуры
результате вывод в такой текстовый файл осуществляется значительно (в                                         прямого доступа к экрану}
3 5 раз) быстрее, чем, если бы этот файл был связан с экраном стандартной               AssignCRT (F);
процедурой Assign. Заголовок процедуры:                                                 Rewrite (F):
                             Procedure AssignCRT (F: Text);                             N2:=0;
                                                                                        ClrScr;
        В следующей программе измеряется скорость вывода на экран с помо-
                                                                                        t := MemL [$0040:$006C];
щью стандартной файловой процедуры и с помощью непосредственного                        while MemL[$0040:$006C] = t do
обращения к видеопамяти. Вначале файловая переменная F связывается                      while MemL[$0040:$006C] < t+6 do
“медленной” процедурой Assign со стандартным устройством CON (т.е. с эк-                begin
раном) и подсчитывает количество N1 циклов вывода некоторого текста за                       inc (N2);
                                                                                             Write (F, txt)
5*55 = 275 миллисекунд системных часов. Затем файловая переменная свя-
                                                                                        end;
зывается с экраном с помощью процедуры быстрого доступа AssignCRT и                     Close (F);
точно так же подсчитывается количество N2 циклов вывода. В конце про-                   ClrScr;
граммы счетчики N1 и N2 выводятся на экран.                                             WriteLn (N1, N2: 10)         {Печатаем результат}
        Показания системных часов хранятся в оперативной памяти компью-          end.
тера в виде четырехбайтного слова по адресу [$0040:$006C] и наращиваются
                                                                                   Следует учесть, что вывод на экран обычным образом – без использо-
на единицу каждые 55 миллисекунд.
                                                                             вания файловой переменной (например, оператором Write (txt)) также
    Uses CRT;
    Var                                                                      осуществляется с помощью непосредственного доступа к видеопамяти, по-
      F: Text;                                                               этому ценность процедуры AssignCRT весьма сомнительна. Прямой доступ к
      t:LongInt;                          {начало отсчета времени}           видеопамяти регулируется глобальной логической переменной DirectVideo
      N1, N2: Word;                       {счетчики вывода}                  модуля CRT: если эта переменная имеет значение TRUE, доступ разрешен,
    Const
                                                                             если FALSE – доступ к экрану осуществляется с помощью относительно
      txt = ′Text′;
    begin                                                                    медленных средств операционной системы MS-DOS. По умолчанию пере-
           {---Стандартный вывод в файл---}                                  менная DirectVideo имеет значение TRUE.
           Assign (F, ′CON′);
           Rewrite (F);                                                                    Программирование звукового генератора
           N1 := 0;                       {готовим счетчик вывода}
           ClrScr;                        {очищаем экран}
           t := MemL [$0040:$006C];       {запоминаем начальный момент}            В модуль CRT включены три процедуры, с помощью которых можно
    {ждем начала нового 55-мс интервала, чтобы исключить погрешность в       запрограммировать произвольную последовательность звуков.
    определении времени:}                                                          1. Процедура Sound заставляет динамик звучать с нужной частотой.
           while MemL[$0040:$006C] = t do                                    Заголовок процедуры:
                                          {цикл вывода за пять интервалов}
                                                                                   Procedure Sound (F:Word);
           while MemL[$0040:$006C] < t+6 do
           begin                                                                   Здесь F – выражение типа Word, определяющее частоту звука в герцах.
                inc (N1);                                                    После обращения к процедуре включается динамик, и управление немедлен-
                                   83                                                                             84