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

Показания системных часов хранятся в оперативной памяти компьютера в виде четырехбайтного слова по адресу [$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;

                   {нисходящая гамма}

                   for k:=3 downto 0 do

                             for n:=12 downto 1 do

                                      begin

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

                                                Delay (Temp);

                                                NoSound

                                      end

end.

В следующей программе перемножается матрица на вектор, основу которой составляет ранее рассмотренные Program Prim 29 i Prim 29а. Здесь максимальные размеры матрицы – 10*10 элементов типа byte. Ввод информации производится в окне светло-бирюзового цвета, вывод результатов – в окне малинового цвета, цвет букв – желтый.

Программа в начале работы издает звуки частотой от 130 до 2130 Гц, затем при вводе величины a – частотой 2000 Гц, b – 1500 Гц длительностью n=100 мс. В конце работы программа издает звуки от 2130 до 130 Гц. Программа использует подпрограмму Wind, написанную на основе Prim 52.

  Program Prim53;  Uses CRT;  var i,j,n,m,k,l:integer; a:array[1..50,1..70] of byte;                   b:array[1..10] of byte;

                   c:array[1..10] of longint;

                   cv:byte;

      {$i C:\TURBO\ wind.pas}

 BEGIN

       Clrscr;                     {очистить экран }

   cv:=11;                         {цвет 11, светло-бирюзовый}

 wind(1,1,50,7);                 { открыть окно, обращения к процедуре}

       Sound(330);                 { включить звук, частотой 330 гц }       Delay(1000);                { задержать на 1000 миллисекунд }       NoSound;                    { выключить звук }

       writeln ('ввести количество строк и столбцов');

       GotoXY(2,3); l:=4;          {l устанавливает курсор по y}

        readln(n,m);

        for i:=1 to n do

        for j:=1 to m do

      begin GotoXY(2,l);

      writeln(' введите a[',i,',',j,'] элемент матрицы а ');

      GotoXY(34,l);            { перевести курсор в конец текста:}

                               {ввести  a[i,j] – элемент матрицы'}

      ClrEol;                { удалить конец строки до границы окна}

      readln(a[i,j]);          { ввести очередное а в конце текста }

       end;

       L:=L+1;{}

         for j:=1 to m do

      begin GotoXY(2,l);

         writeln(ввести b[',j,'] элемент вектора  b');

      GotoXY(33,l);

       ClrEol;

       readln(b[j]); end;

   cv:=5;                       { фиолетовый цвет для нового окна }

   wind(20,2,80,18);  GotoXY(2,2); l:=3;

    for i:=1 to n do       { начало перемножения матрицы на векторы }

  begin c[i]:=0;

    for j:=1 to m do

     c[i]:=c[i]+ a[i,j]*b[j]; end;

                           { конец перемножения матрицы на вектор }

Страницы: 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 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.