МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Реферат: Обучающая программа Графика программированию в графическом режиме на языке turbo-pascal 7.x

    *

    0

    ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

          В данном разделе Вы ознакомитесь с возможностями компьютера

     в области мультипликации, т.е. созданием эффекта движения статичес-

     ких изображений.

          Этот эффект можно достич используя динамическую  и видеопамять

     компьютера, одноканальный звукогенератор, возможность сдвига и нало-

     жение изображений. Динамическая память используется для сохранения

     образа подвижного обьекта и ,возможно, образа фона изображения и не

     связывает пргограммиста с предопределенными размерами сохраняемых

     фрагментов экрана.

          Эффект движения создается циклическим уничтожением обьекта в

     старом положении и выводом его образа из динамической памяти на

     экран в новое положение. Уничтожение осуществляется либо заменой

     соответствующего фрагмента экранного изображения образом фона из

     динамической памяти, либо наложением на него образа такого же обь-

     екта из динамической памяти с проведением поразрядной логической

     операции суммирования по mod 2.

          Имеется возможность создания изображения одновременно на двух

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

     изображений на экране дисплея.

          Рассмотрим процедуры, обеспечивающие эти возможности.

    #

               ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

    *     function ImageSize(X1,Y1,X2,Y2:word):word;

          Возвращает число байт,необходимых для сохранения прямоугольлной

     области экранного изображения.Параметры (X1,Y1),(X2,Y2) задают соот-

     ветственно координаты левого верхнего и правого нижнего узлов сохра-

     няемой области экрана. Определяемый обьем памяти включает в себя

     обьем растрового образа сохраняемой области экрана и два двухбайтных

     слова, используемые для хранения ширины Width=X2-X1+1  и высоты

     heidht=Y2-Y1+1 этой области.

          Если обьем памяти, необходимый для сохранения области экрана,

     превышает или равен 64К, то функция возвращает значение 0, а вспомо-

     гательная функция GraphResult возвращает значение - 11(константа

     grError). Учитывая, что в системе Turbo-Pascal при использовании

     графического адаптера EGA независимо от графического режима полному

     экрану соответствует дисплейная страница обьемом 128К. Указанное

     ограничение по памяти эквивалентно ограничению площадей сохраняемых

     областей до 1/2 площади экрана.

          Для сохранения фрагмента экрана в динамической памяти компью-

     тера необходимо создать соответствующую динамическую переменную. Это

     делает процедура GetMem.

    *     procedure GetMem(var p:pointer; Size:word);

          Создает новую динамическую переменную размера Size, которая

     указывает размер динамической области в байтах, и помещает адрес

     начала этого блока памяти в ссылочную переменную p, совместимую по

     типу со всеми другими типами указателей.

          На новую динамическую переменную можно ссылаться через указа-

     тель р^. Наибольший размер блока, который можно разместить единовре-

     менно, составляет 65 521 байт, наименьший - 1 байт.

               ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

           Если динамическая область не фрагментирована, например в нача-

     ле программы, последовательные вызовы данной процедуры возвращают

     соседние блоки памяти. Когда в динамической области недостаточно

     места для размещения новой переменной, возникает ошибка времени вы-

     полнения программмы. Чтобы избежать этого можно использовать следу-

     ющую функцию.

    *     function MaxAvail:longint;

          Возвращает размер наибольшего непрерывного свободного блока,

     имеющегося в динамической области памяти компьютера в текущий

     момент.

    *     procedure GetImage(X1,Y1,X2,Y2:word;var BitMap);

          Сохраняет в динамической памяти растровый образ заданной

     прямоугольной области экрана. Параметры (X1,Y1),(X2,Y2) - координаты

     левого  верхнего и правого нижнего узлов сохраняемой области экрана.

     BitMap - нетипизированный параметр, указывающий на динамическую пе-

     ременную хранения рассматриваемого изображения,которая создается

     предварительно процедурой GetMem.

           Приведем фрагмент программы, в которой обеспечивается сохране-

     ние в динамической памяти прямоугольной области экрана с координа-

     тами левого верхнего угла (50,50) и правого нижнего угла (100,100):

    #

                ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

           .......

           var p:pointer;

               Size:word;

           begin                  {тело программы}

           ........

                Size:=ImageSize(50,50,100,100);

                If MaxAvail<Size then begin RestoreCrtMode;

                      writeln('Мало динамической памяти');

                      Halt(1) end

                    else begin GetMem(p,Size);

                               GetImage(50,50,100,100,p^);

                         end;

            ........

            end.                     {конец программы}

    #

                 ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

    *     procedure PutImage(X,Y:integer; var BitMap;BitBlt:word);

          Выводит в заданное место экрана хранимое в динамической памяти

     растровое изображение и при необходимости определенным образом ком-

     бинирует его с предшествующим экранным изображением.

          (X,Y) - Координаты верхнего левого угла размещения на экране

                  выводимого прямоугольного образа.

          BitMap - Указывает на динамическую переменную хранения выводи-

                   мого изображения.

          BitBlt - Определяет поточечную операцию между имеющимся и

                   выводимым изображениями и может принимать значения

                   следующих операций:

     NormalPut = 0; - простое замещение - исходное изображение замещается

                                          выводимым

     XORPut    = 1; - сложение по модулю 2 - коды цветов одноименных то-

                                             чек складываются по модулю 2

           Например, если точку с цветом 4(красный) вывести в точку с

     цветом 4(красный), то на экране получим точку с цветом, код которого

     соответствует значению следующего выражения:

      4(10)+4(10) = 0100(2)+0100(2) = 0000(2) = 0(10) ,

     т.е. получим точку черного цвета.

     OrPut     = 2; - поразрядная операция ИЛИ - выполняется поточечная

                                                 операция ИЛИ

           Например,   4(10) или 4(10)=0100(2)или 0100(2)=0100(2)=4(10),

     т.е. получим точку того же цвета.

    #

                 ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

     AndPut = 3 - поразрядная операция И - выполняется поточечная

                                           операция И

            Например, 4(10)&4(10)=0100(2)&0100(2)=0100(2)= 4(10),

     т.е. получим точку того же цвета.

     NotPut = 4 - замещение с поразрядной инверсией - полное замещени ис-

                                     ходного изображения в области вывода

                                     предварительно инвертированным выво-

                                     димым изображением

            Например, точка с цветом 4(10) будет заменена точкой с цветом

            -      ----

            4(10)= 0100(2) = 1011(2) = 11(10) - светло-бирюзовый

            Процедура никогда не выполняет отсечения выводимого изображе-

     ния на границах текущего окна просмотра,если при этом оно не выходит

     за границы экрана. Если же выходит, то изображение не выводится

     вовсе, если это левая верхняя или правая границы экрана,и отсекается

     если это нижняя часть.

            При неоднократном использовании динамической памяти с разными

     динамическими переменными она бысто "засоряется" и становится непри-

     годной к использованию. Чтобы этого избежать следует регулярно унич-

     тожать использованные динамические переменные. Для этого существует

     в модуле Sistem  процедура Dispose.

    #

                 ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

    *     procedure Dispos(varp:pointer);

          Уничтожает динамическую переменную, на которую указывает р и

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

     После использования данной процедуры значение ссылочной переменной

     становится неопределенным и обращение р^ приводит к ошибке.Необходи-

     мо вновь создать динамическую переменную.

          Приведем пример программы, которая создает эффект движения по

     экрану обьекта в области 50*50 пикселов, первоначально размещенного

     у левой границы экрана, к его правой границе:

     .......

     var p:pointer;

         I:integer;

     ......

     begin

     ......

       GetMem(p,ImageSize(0,50,50,100));  {выделение динамической памяти}

       GetImage(0,50,50,100,p^);          {сохранение обьекта в памяти}

       for I:=1 to (GetMaxX-50) do        {перемещение обьекта}

         begin PutImage(I-1,50,p^,XORPut);{уничтожение обьекта в прежнем

                                                             состоянии}

               PutImage(I-1,50,p^,NormalPut);{копирование обьекта в новое

         end;                                 состояние

       Dispose(p);                         {освобождение памяти}

     ......

     end.

    #

                 ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

    1     Проиллюстрируем приведенный выше пример:

    #

                 ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

    *    procedure SetActivePage(Page:word);

         Направляет весь последующий графический выод на страницу видео-

     буфера, задаваемую параметром Page. Эта страница может и не отобра-

     жаться в это время на экране дисплея. Таким образом обеспечивается

     построение новых изображений за счет времени просмотра текущих,чтобы

     затем мгновенно обновить экран и создать эффект движения.

          Лабораторные компьютеры поддерживают двухстраничную организацию

     видеобуфера. Страницы имеют номера 0 и 1 и графический вывод

     по умолчанию осуществляется на 0-ю страницу.

    *     procedure SetVisualPage(Page:word);

          Задает номер Page отображаемой на экран дисплейной страницы

     видеобуфера. По умолчанию визуализируется страница, на которую нап-

     равляется графический вывод.

           Приведем пример программы, обеспечивающей создание эффекта

     перемещения обьекта как в предыдущем примере:

    #

                 ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

     ......

       var:integer;

     ......

       begin

     ......                {по умолчанию вывод и визуализация 0-страницы}

         for I:=1 to(GetMaxX-50) do

                           {перемещение обьекта}

           begin Bar(I-1,50,I+50-1,100);

                            {формирование обьекта в (I-1)положении}

                 SetActivePage(1);

                            {установка вывода на 1-ю страницу}

                 ClearDevice;

                             {очистка 1 страницы}

                 Bar(I,50,I+50,100);

                             {формирование обьекта в I положении}

                 SetVisualPage(1);

                             {визуализация 1 страницы}

                 SetActivePage(0);

                             {установка вывода на 0-ю страницу}

                 ClearDevice;

                             {очистка 0-й страницы}

           end;

     ......

     end.

    #

                 ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

    *     procedure Sound(Frequency:word);

          Включает внутренний звукогенератор компьютера. Параметр

     Frequency задает частоту генерации однотонального звука в герцах

     в диапазоне от 37 до 32767.

                    Частоты первой октавы нотного ряда

     --------------------------------------------------------------------

     Ноты       До      Ре      Ми      Фа      Соль    Ля      Си

     --------------------------------------------------------------------

     Частоты    523,3   587,3   659,3   698,5   784,0   880,0   987,7

     --------------------------------------------------------------------

            Частоты нот каждой более высокой или низкой октавы прибли-

     женно получаются удвоением или делением на 2 частот одноименных нот

     последующей или предыдущей октавы соответственно.

           Звуковой генератор работает под управлением специальной мик-

     росхемы-таймера и центральный процессор после выполнения процедуры

     Sound можежтж продолжать вычислительный процесс одновременно с рабо-

     той звукогенератора.

    *     procedure NoSond;

          Прекращает работу звукогенератора. Приведем фрагмент программы

     программы, обеспечивающий воспроизведение ноты "До" в течение 3 сек.

     ...... Sound(523);

            Delay(3000);

            NoSound;        ......

                 ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

    2            Приведем пример использования описанных выше  процедур.

    #

                 ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

    *     function ReadKey:char;

          Считывает символ с клавиатуры не отображая его на экран. Если

     перед обращением к данной функции функция KeyPressed имела значение

     true , то символ считывается немедленно, в пртивном случае функция

     ожидает нажатия клавиши.

          Обычные алфавитно-цифровые клавиши возвращают однобайтные коды

     в стандарте ASCII. Специальные клавиши (управление курсором, Alt,

     Ctrl и т.п. при нажатии возвращают расширение, двухбайтные коды

     ASCII. При нажатии специальной клавиши функция возвращает сначала

     нулевой символ null,а затем расширенный код клавиши.

          Нулевые символы не могут быть получены никаким другим путем.

     Этим обеспечивается то, что следующим символом будет расширенный код

     клавиши.

          В качестве расширения стандарт языка разрешает вставлять в

     строку символов управляющие символы, например #.

          Приведем фрагмент программы, в котором в переменную с именем Ch

     считывается символ или расширенный код клавиши и для переменой

     FuncKey булевского типа устанавливается значение true, если символ

     является кодом специальной клавиши:

     ......

     Ch:=ReadKey;

     If Ch<> # then FuncKey:=False

         else

           begin

             FuncKey:=true;

             Ch:=ReadKey

           end;

     ......

                  ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН

    *     procedure SetWriteMode(WriteMode:integer);

          Устанавливает режим записи при вычерчивании линий с помощью

     процедур формирования прямолинейных изображений (кроме процедуры

     Bar3D). Процедура описана в модуле Craph. Параметр может принимать

     следующие значения:

     CopyPut = 0 - простое замещение - вычерчиваемая линия "затирает" то,

                                       что было на экране.

     XORPut  = 1 - сложение по mod 2 - обеспечивается комбинирование вы-

                                       водимой линии с экранным изображе-

                                       нием на основе выполнения поточеч-

                                       ной поразрядной операции суммиро-

                                       вания по модулю2.

           Важно, что два одинаковых вывода на экран в режиме XORPut при-

     ведут сначала к стиранию линии на экране, а затем в восстановлению

     исходного экранного изображения.

    0

    01КАКОВЫ ФУНКЦИИ ПРОЦЕДУРЫ ImageSize?

    1 Создание новой динамической переменной.

    2  Сохранение в динамической памяти растрового образа заданной прямоугольной области экрана.

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

    4 Вывод в заданное место экрана хранимого в динамической памяти растрового изображения.

    *

    02КАКОЕ СУЩЕСТВУЕТ ОГРАНИЧЕНИЕ ПО ПЛОЩАДИ СОХРАНЯЕМЫХ В ДИНАМИЧЕСКОЙ ПАМЯТИ ОБЛАСТЕЙ ЭКРАНА?

    1 Ограничений нет.

    2 Не более одного экрана.

    3 Не более 1/2 экрана.

    4 Не более 1/4 экрана.

    *

    ОЗТРЕБУЕТСЯ ЛИ КОНТРОЛИРОВАТЬ РАЗМЕР СВОБОДНОЙ ДИНАМИЧЕСКОЙ ПАМЯТИ?

    1 Да. С помощью функции MaxAvail.

    2 Да. С помощью процедуры GetMem.

    3 Нет, не требуется. Размер динамической памяти не ограничен.

    4 Да, требуется. Контроль осуществляется с помощью процедуры Dispose.

    *

    04КАКОГО ЦВЕТА БУДЕТ ВЫВЕДЕНО ИЗОБРАЖЕНИЕ ТОЧКИ НА ЭКРАНЕ, ЕСЛИ ТОЧКУ КРАСНОГО  (4)  ЦВЕТА  ЗАМЕСТИТЬ  С  ПОМОЩЬЮ  ПРОЦЕДУРЫ Putlmage (X,Y,p~,XORPut) точкой синего (1) цвета?

    1 Черного (0).

    2 Светло-бирюзового(11).

    3 Красного (4).

    4 Малиновый(5).

    *

    05КАКУЮ ОРГАНИЗАЦИЮ ВИДЕОБУФЕРА ПОДДЕРЖИВАЮТ ЛАБОРАТОРНЫЕ КОМПЬЮТЕРЫ IBM PC С АДАПТЕРОМ EGA ПРИ ИСПОЛЬЗОВАНИИ ЯЗЫКА TURBO-PASCAL?

    1 Одностраничную.

    2 Двухстраничную.

    3 Трехстраничную.

    4 Четырехстраничную.

    *

    06С ПОМОЩЬЮ КАКОЙ ПРОЦЕДУРЫ УСТАНАВЛИВАЕТСЯ СТРАНИЦА ВИДЕОБУФЕРА, НА КОТОРУЮ НАПРАВЛЯЕТСЯ ПОСЛЕДУЮЩИЙ ГРАФИЧЕСКИЙ ВЫВОД?

    1 SetVisualActivePage

    2 SetWriteMode

    3 Dispose

    4  SetActivePage

    *

    07КАКОВЫ ФУНКЦИИ ПРОЦЕДУРЫ SetWriteMode?

    1  Считывание символа с клавиатуры не отображая его на экран.

    2 Установка режима записи при вычерчивании линий с помощью процедур формирования прямолинейных изображений.

    3 Устанавливает номер страницы видеобуфера, на которую осуществляется последующий графический вывод.

    4 устанавливает номер визуализируемой страницы видеобуфера.

    *

    О

    011Ответ неверный. Эту функцию осуществляет процедура GetMem.          002

       *

       2Ответ неверный. Эту функцию осуществляет процедура GetImage.        002

       *

       3Ответ правильный.                                                   005

       *

       4Ответ неверный. Эту функцию осуществляет процедура PutImage.        002

       *

    *

     021Ответ неверный. Объем памяти, необходимый для сохраненеия области 002 экрана, не должен быть равен или превышать 64К, что соответствует 1/2 площади экрана.

       *

       2Ответ неверный. Объем памяти, необходимый для сохраненеия области 002 экрана, не должен быть равен или превышать 64К, что соответствует 1/2 площади экрана.

       *

       3Ответ правильный.                                            005

       *

       4Ответ неверный. Объем памяти, необходимый для сохраненеия области 002 экрана, не должен быть равен или превышать 64К, что соответствует 1/2 площади экрана.

       *

    *

     031Ответ првильный. Функция MaxAvail возвращает наибольший непрерывный 005 свободный блок, имеющийся в динамической области памяти в текущий момент.

       *

       2Ответ неверный. Контроль требуется, однако, процедура GetMem        003 выполняет другие функции.

       *

       3Ответ неверный. Если в динамической области недостаточно места для  002 размещения новой переменной, возникает ошибка времени выполнения программы. Чтобы этого избежать следует пользоваться функцией MaxAvail, которая возвращает размер наибольшего непрерывного свободного блока динамической области памяти.

       *

       4Ответ неверный. контроль требуется, но с помощью функции MaxAvail.  003

       *

    *

     041Ответ неверный. При использовании в качестве значения параметра     002 BitBlt константы XORPut коды цветов точек складываются по модулю 2:

    4(10) + 1(10) = 0100(2) + 0001(2) = 0101(2) = 5(10)

       *

       2Ответ неверный. При использовании в качестве значения параметра     002

        BitBlt константы XORPut коды цветов точек складываются по модулю 2:

             4(10) + 1(10) = 0100(2) + 0001(2) = 0101(2) = 5(10)

       *

       3Ответ неверный. При использовании в качестве значения параметра     002 BitBlt константы XORPut коды цветов точек складываются по модулю 2:

             4(10) + 1(10) = 0100(2) + 0001(2) = 0101(2) = 5(10)

       *

       4Ответ правильный.                                            005

       *

    *

     051Ответ неверный. Эти компьютеры имеют двухстраничную организацию     002 видеобуфера.

       *

       2Ответ правильный.                                                   005

       *

       3Ответ неверный. Эти компьютеры имеют двухстраничную организацию     002 видеобуфера.

       *

       4Ответ неверный. Эти компьютеры имеют двухстраничную организацию     002 видеобуфера.

       *

    *

     061Ответ неверный. процедура SetVisualPage задает номер отображаемой на 002 экран дисплейной страницы видеобуфера.

       *

       2Ответ неверный. Процедура SetWriteMode выполняет другие функции.    002

       *

       3Ответ неверный. Процедура Dispose выполняет другие функции.         002

       *

       4Ответ правильный.                                            005

       *

    *

     071Ответ неверный. Процедура SetWriteMode устанавливает режим записи   002 при вычерчивании линий с помощью процедур формирования прямоугольных изображений.

       *

       2Ответ правильный.                                            005

       *

       3Ответ неверный. Процедура SetWriteMode устанавливает режим записи   002 при вычерчивании линий с помощью процедур формирования прямоугольных изображений.

       *

       4Ответ неверный. Процедура SetWriteMode устанавливает режим записи   002 при вычерчивании линий с помощью процедур формирования прямоугольных изображений.

       *

    *

    0

    Приложение 3

    Экранные формы





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


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.