Информатика, программирование: Обучающая программа Графика программированию в графическом режиме на языке turbo-pascal 7.x, Реферат

СОДЕРЖАНИЕ

ВВЕДЕНИЕ...................................................... 7

1. НАЗНАЧЕНИЕ ОБУЧАЮЩЕЙ ПРОГРАММЫ............................. 9

1.1. Обзор существующих обучающих средств и методов........... 9

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

режиме........................................................ 12

1.2.1. Роль ЭВМ в учебном процессе СПГУАП..................... 12

1.2.2. Методика обучения с помощью обучающей программы........ 13

1.2.3. Возможности языка TURBO-PASCAL 6.0\7.О ................ 16

1.3. Техническое задание...................................... 17

1.3.1. Постановка задачи...................................... 17

1.3.2. Выбор технических средств и программного обеспечения... 18

1.3.3. Технико-экономическое обоснование ..................... 18

2. ОПИСАНИЕ БАЗЫ ДАННЫХ....................................... 20

2.1. Методическое оснащение базы данных....................... 20

2.2. Структура базы данных.................................... 22

2.3. Возможности изменения или обновления .................... 25

2.3.1. Теория................................................. 25

2.3.2. Вопросы................................................ 26

2.3.3. Справки ............................................... 28

3. ОПИСАНИЕ ПРОГРАММЫ......................................... 30

3.1. Общие сведения........................................... 30

3.2. Функциональное назначение................................ 31

3.3. Описание логической структуры............................ 32

3.4. Используемые технические средства........................ 38

3.5. Вызов и загрузка......................................... 39

3.6. Входные и выходные данные................................ 39

4. ОПИСАНИЕ ПРИМЕНЕНИЯ........................................ 41

4.1. Назначение программы..................................... 41

4.2. Условия применения....................................... 41

4.2.1. Технические средства................................... 41

4.2.2. Общие характеристики входной и выходной информации..... 42

4.3. Пример использования..................................... 42

5. РУКОВОДСТВО ПРОГРАММИСТА................................... 45

5.1. Назначение и условия применения программы................ 45

5.2. Характеристики программы................................. 45

5.3. Обращение к программе.................................... 46

5.4. Входные и выходные данные................................ 46

6. РУКОВОДСТВО ОПЕРАТОРА...................................... 47

6.1. Назначение программы .................................... 47

6.2. Условия выполнения программы............................. 47

6.3. Выполнение программы..................................... 47

6.4. Сообщения оператору...................................... 48

7. ТЕХНОЛОГИЯ ИСПОЛЬЗОВАНИЯ ОБУЧАЮЩЕЙ ПРОГРАММЫ............... 49

8. ПЛАНИРОВАНИЕ РАБОТ ПО СОЗДАНИЮ  ОБУЧАЮЩЕЙ ПРОГРАММЫ.

СМЕТА ЗАТРАТ.................................................. 51

8.1. Построение ленточного  графика........................... 51

8.2. Расчет  сметы  затрат ................................... 54

9. ВОПРОСЫ ОХРАНЫ ТРУДА И ОКРУЖАЮЩЕЙ СРЕДЫ.БЕЗОПАСНОСТЬ И

ХАРАКТЕРИСТИКА САНИТАРНО-ГИГИЕНИЧЕСКИХ УСЛОВИЙ ТРУДА НА

РАБОЧЕМ МЕСТЕ ПОЛЬЗОВАТЕЛЯ.................................... 57

9.1. Основные санитарно-технические требования к помещению ... 57

9.2. Характеристика санитарно-гигиенических условий труда..... 57

9.2.1. Микроклимат производственного помещения................ 57

9.2.2. Вредные вещества и пыль................................ 59

9.2.3. Излучение.............................................. 60

9.2.4. Освещенность........................................... 60

9.2.5. Шум.................................................... 61

9.3. Расчет необходимого воздухообмена........................ 61

9.4. Система освещения........................................ 62

9.5. Инженерно-технические мероприятия по созданию

благоприятных условий труда................................... 62

9.5.1. Защита от шума......................................... 62

9.5.2. Защита от излучения.................................... 63

9.5.3. Меры защиты от поражения электрическим током........... 63

9.6.  Организация рабочего места пользователя при работе

с терминалом.................................................. 65

9.7. Противопожарные требования............................... 65

9.8.Приборы контроля параметров среды ........................ 66

ЗАКЛЮЧЕНИЕ.................................................... 68

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ.............................. 69

ПРИЛОЖЕНИЕ 1  Текст программы................................. 70

ПРИЛОЖЕНИЕ 2  База данных..................................... 107

ПРИЛОЖЕНИЕ 3  Экранные формы  ................................ 157

ВВЕДЕНИЕ

Обучение - очень важный процесс в современном обществе. От того насколько качественно и эффективно оно будет осуществляться зависит благосостояние народа. В нынешней сложной экономической ситуации крайне необходим прилив новых хорошо подготовленных кадров во все сферы народного хозяйства. Необходимо быстрое внедрение всех достижений науки и техники в производство- Возрождение отечественного производства - залог экономического подъема, роста социального благо­состояния народа.

Компьютер - одно из главных изобретений века. В последнее десятилетие он стал неотъемлемой частью жизни человека. Компьютер применяют в самых различных областях жизнедеятельности начиная с решения простейших математических задач, моделирования различных процессов, применение в банковском деле, медицине, образовании, издательском деле, использование компьютера для управления различной техникой в том числе автомобилем, самолетом, космическим кораблем до использования в быту, играх.

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

Первые попытки внедрить компьютер В обучение были сделаны еще в 50-х годах , когда в качестве устройства ввода/вывода использовался телеграфный аппарат. В течение последующих 40-лет ведутся непрерывные интенсивные исследования в этой области. За это время компьютерная техника изменилась, стала более совершенной, появились персональные компьютеры , микрокомпьютеры. Разработано программное обеспечение , обеспечивающее довольно широкое использовать технический возможности компьютера. Снижение стоимости компьютерной техники позволило внедрить ее в образовательных учреждениях. Теперь компьютеры пошли в школы, институты и в количественном выражении Компьютеризация образования идет высокими темпами: в отдельных странах число школьных компьютере составляет уже десятки и сотни тысяч, а в США - миллионы. И в нашей стране школьники старших классов уже в течение семи лет изучают такой предмет как информатика, знакомятся с компьютерами и основами работы на них.  Однако, обучение с помощью компьютера остается малоэффективным. Основная причина состоит в том, что разра­ботчики автоматизированных обучающих систем преследуют цель компью­теризация обучения ради самой компьютеризацию!. Мало внимания уде­ляется дидактике.

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

В настоящее время уже создано множество средств обучения с помощью компьютера- Их можно квалифицировать следующим образом: компьютерные учебники, предметно-ориентированные среды (микромиры, моделирующие программы, учебные пакеты), лабораторные практикумы тренажеры, контролирующие программы.

Компьютеры прочно вошли в учебный процесс Санкт-Петербургской государственной академии аэрокосмического приборостроения. Компьютер здесь служит не Только предмета изучения, но и средством обучения. Уже внедрены и применяются ряд компьютерных программ для обучения и контроля, в частности контролирующие программы, моделирующие с эле­ментами контроля по таким предметам как "Охрана труда", "Экономика и планирование производства", "Схемотехника", "Кодирование информации" и др...

Однако, потребности академии в компьютерных обучающих программах не удовлетворены. Именно поэтому темой данной дипломной разработки стала программа для обучения работе в графическом режиме. В учебном плане академии отсутствует лекционный курс по теме "Графический режим языка Turbo-Pascal". Это делает сложным работу со студентами на лабораторных практикумах, вызывает много вопросов у студентов и усложняет работу преподавателей. Среди уже существующих обучающих программ отсутствует программа обучения работе в графическом режиме. К требуемой программе предъявлялись совершенно конкретные специаль­ные требования . Перед разработчиком была поставлена задача создания программы для обучения с элементами контроля, дающей возможность повторного изучения материала, поясняющей ошибки обучаемому студенту. Программа должна включать в себя соответствующий методический мате­риал по заданной теме, подобрать и оформить который предстояло также разработчику.

Именно такая программа была создана. Программа имеет название "Графика" , содержит теоретический материал по заданной теме, конт­рольные вопросы с необходимыми поясняющими справками.

Разработчик надеется, что цель восполнения пробела лекционного курса, повышения качества и интенсивности обучения студентов с   ' " помощью данной программы, им достигнута.

1.  НАЗНАЧЕНИЕ ОБУЧАЮЩЕЙ ПРОГРАММЫ

1.1.  Обзор существующих обучающих средств и методов

Известно, что возможности применения компьютеров в учебном процессе весьма многообразны. Он может служить для моделирования изучаемых явлений или систем, для реализации учебных игр, применяться для выполнения вычислений, для редактирования текстов, в качестве различного рода тренажеров, а также как инструмент автоматизации проектирования, программируемого управления экспериментами, как информационно-поисковая или экспертная система, наконец, как средство практического обучения самой компьютерной технике и программированию. Вместе с тем, особый интерес представляет использование компьютера в качестве дидактического инструмента общего назначения, применимого для обучения любым знаниям.

Идея обучения с помощью компьютера появилась давно. Первые попытки относятся к концу 50-х годов. В то время уже имелась возможность "общения" человека с компьютером посредством используемого в качестве устройства ввода/вывода телеграфного аппарата-телетайпа. Надлежащим образом запрограммированный компьютер заносит в свою память набираемый человеком на клавиатуре телетайпа текст запроса, а по окончании ввода этого текста производит некоторый анализ его и печатает на телетайпе заранее заготовленный, или конструируемый из подходящих элементов текст ответа. Или проще - компьютер выдает на телетайп текст вопроса или условия задачи и ждет ввода с клавиатуры ответа, который затем сверяется с имеющимся эталоном, чтобы выдать оценку: верно/неверно. С тех пор во всем мире ведутся непрерывные научные поиски решения проблемы эффективного и дешевого способа обучения с помощью компьютера.

Проблему дороговизны попробовали решить в 70-е годы специа­листы Иллинойского университета. Их силами была создана поражавшая своими техническими возможностями суперсистема PLATOIY. Каждому учащемуся здесь был предоставлен уже не телетайп, а комфортабельный терминал с плазменным дисплеем, обеспечивающим выдачу произвольного текста, графики и цветных кадров с микрофишей в сопровождении звука. Расчеты на низкую стоимость системы не оправдались и после проведе­нных испытаний в условиях обучения школьным предметам выявилась сложность, дидактическая неэффективность и трудоемкость подготовки учебных материалов. Создание компьютерных систем обучения приняло широкий размах и в связи с этим говорили о революции в образовании. Но в действительности существенного влияния на практику обучения разрабатываемые системы не оказали, и ни одна из них не получила сколько-нибудь значительного применения: системы создавались сами по себе, а обучение людей производилось с помощью книг и лекций. С появлением массового производства недорогих и удобных в использовании микрокомпьютеров, компьютеризация в настоящее время в количествен­ном выражении идет высокими темпами.

В конце 80-х годов проблемной лабораторией электронных вычис­лительных машин Московского государственного университета была создана микрокомпьютерная система обучения "Наставник". Эта система предназначена для обучения предметам теоретического характера в вузах, техникумах, профессионально-технических училищах, общеобразовательных школах, центрах подготовки, переподготовки и повышения квалификации кадров на предприятиях. Типовой вариант системы рассчитан на обучение одновременно до 32 учащихся, обслуживаемых одним микрокомпьютером. Система проста и удобна в управлении, не требует специальной подготовки преподавателей и удобна для обучаемых. Все общение с компьютером происходит по подсказкам и контролем с его стороны.  В состав аппаратуры системы входит микрокомпьютер общего назначения, дисплей с клавиатурой, гибкий магнитный диск или маг­нитная лента, принтер, специализированное оборудование для связи учащихся и преподавателя с компьютером, включающее мини терминалы, источники электропитания мини терминалов и контроллер для сопряже­ния их с микрокомпьютером, систему кабелей. Программное обеспечение системы состоит из пяти частей. Три части, "Обучение", "Экзамен", "Тест" , обеспечивают возможность проведения соответствующих заня­тий. Существуют еще две служебные подсистемы - подготовки управля­ющей информации и обработки протоколов. Программное оснащение реализовано и функционирует в диалоговой системе структурирован­ного программирования ,. ДССП , которая после ее начальной загрузки, обеспечивает всю дальнейшую работу.  По вводимым с клавиатуры командам производится дозагрузка требуемой подсистемы и ввод управляющей информации . Далее система работает не обращаясь к внешней памяти. И только в конце занятия согласно вводимым командам производит распечатку и(или) запись в архив протокола. Алгоритмы функционирования основных подсистем разработаны так, что обеспечивают управление обучением и проведение экзаменов или тестов независимо от конкретного содержания учебных материалов. т.е. пригодны для автоматизированных занятий по любым предметам. Работа подсистемы "Обучение" заключается в предоставлении учебных материалов, разбитых на секции, и назначении упражнений по каждому разделу, в случае неверных ответов обучаемому выдается справка, поясняющая суть ошибки и отсылающая к необходимому абзацу инструк­тивного текста. В отдельных случаяx назначаются дополнительные упражнения. В случае успешного ответа на все вопросы по разделу обучаемый переходит к изучению следующей секции. В случае неверного ответа - возврат в предшествующую секцию или отправка к преподава­телю. Подсистемы "Экзамен" и "Тест" предназначены для контроля знаний и умений. В режиме "Экзамен" обучаемый получает от преподавa- теля набор секций, в которых получает определенное преподавателем число упражнений с ограниченным числом попыток ответов. Верные ответы подтверждаются, а неверные отрицаются, однако справки не выдаются.  "Тест" отличается от "Экзамена" тем, что каждый учащийся отвечает на все имеющиеся в учебном материале вопросы, причем попытка ответа предоставляется только одна. Ответы не подтвержда­ются и не отрицаются. Вся работа учащегося протоколируется . Учебно-мето- дическое оснащение наименее фиксировано и наиболее открыто для наращивания и развития. Жестко определены только форматы и правила оформления учебных материалов. Никаких ограничений по тематике и содержанию учебных материалов, равно как и методик или дидактических приемов, кроме необходимости выражаться в форме множественного выбора, нет. Подробнее о микрокомпьютерной системе " Наставник" можно прочитать в [1].

В период с 1991 по 1994 годы Российским НИИ информационных систем по заданию государственного комитета высшей школы России были проведены четыре конкурса "Электронный учебник", В результате этих конкурсов в фонде РосНИИ ИС накоплено более 150 компью­терных обучающих программ готовых к распространению на IBM PC и

совместимых с ними. Их классификация и краткая характеристика, применяемых в них методов подробнее приведена в [2] Среди этих программ можно выделить следующие основные группы : инструмен­тальные системы , прикладные пакеты, учебные пакеты. Инструмен­тальные среды предназначены для создания компьютерных обучающих программ. Они сокращают трудоемкость при создании этих программ, то же время дают возможность легко участвовать в разработке прог­рамм преподавателям, не являющимся квалифицированными программист ми. Примерами отечественных инструментальных сред могут служить такие системы как "Адонис", "Урок", "Аосмикро", "Сценарий" и др.. Недостатком таких систем является то, что они дорогостоящи. Кроме того для эффективного применения инструментальных систем необходимо привлечение стабильной группы специалистов, что создает определенные трудности. Обучающие программы могут создаваться на базе прикладных пакетов, которые позволяют преобразовывать математические выраже­ния, производить вычисления, строить графики, обрабатывать экс­пертные данные и т.п. ... По сравнению с инструментальными средами прикладные пакеты дешевле, более универсальны, доступны широкому кругу пользователей. Альтернативой прикладным пакетам могут служить учебные пакеты.

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

1) компьютерные учебники;

2) предметно-ориентированные среды (микромиры, моделирующие программы, учебные пакеты);

3) лабораторные практикумы;

4) тренажеры;

5) контролирующие программы;

Проблема практического применения ЭВМ в учебном процессе продолжает стоять и сейчас. Важно использовать все новейшие достижения науки и техники для более эффективного обучения школьников, студентов, специалистов самых разных специальностей, На кафедре общей физики Новосибирского государственного универ­ситета компьютеры при чтении лекций начали использовать около 10 лет назад. С 1992 года здесь ведутся разработки по созданию универсального автоматического комплекса, предназначенного для лекционных демонстраций. В комплекс входят персональные ЭВМ, видеоаппаратура, TV-мониторы и программное обеспечение. К настоя­щему времени уже создан и действует макет такого комплекса, лекционная мультимедиа аудитория ("ЛЕММА"). Программное обеспечение - это полный набор средств создания, модификации и воспроиз­ведения мультимедиа продуктов, предназначенных для сопровождения лекционных курсов. Мультимедиа продукт создается из слайдов(гра­фических изображений в стандарте PCX) , анимации (анимационных сюжетов в стандарте FLI), задач (исполнимых программ DOS) и видео сюжетов, записанных на видеокассетах в стандартах PAL/SECAM. Муль­тимедиа продукт включает информацию о демонстрационных единицах и их расположении на информационных носителях, названия демонстрации и способы их представления. Программы обеспечение выполнено в сис­теме Turbo-Pascal с использованием стандартной библиотеки Turbo Vision и состоит из трех основных программ:

1) Программа "Планировщик лекций". Выполняет функции создан* настройки и модификации мультимедиа продуктов, вставки в продукт новых и изъятие устаревших материалов, просмотр материалов, планирование сценарием для лекционной работы. В режиме разметки видео­фрагментов выполняет полный набор функций управления видеоаппаратурой и обеспечивает разметку выбранного видео сюжета.

2) Программа "Ассистент". Предназначена для предоставления демонстрационного лекционного материала в процессе лекций. Матери ал выбирается в соответствии со сценарием.

3) Программа "Демонстратор анимации" . Данная программа осу­ществляет демонстрацию анимационных сюжетов в стандарте FLI аниматора Autodesk Animator и организует управление анимацией в ходе исполнения. Возможна приостановка воспроизведения. Для пояснения представляемого материала используется "указка" - графический курсор, управляемый манипулятором "мышь".

Сценарий лекций составляется методистами - профессиональными лекторами - применительно к конкретной тематике лекций с учетом подготовки аудитории. Более подробно данный метод описан в [3]

Все описанные выше обучающие средства и методы имеют общую цель - максимально возможное использование компьютера в процессе обучения. Однако, они не решают задачу , поставленную перед разработчиком темы данной дипломной работы. Поиски наиболее рационального решения вопроса применения ЭВМ в обучении идут и сейчас. Разработка данной дипломной работы - это еще одна попытка использовать компьютер как средство обучения.

1.2. Назначение программы для обучения работе в графическом режиме

1.2.1. Роль ЭВМ в учебном процессе СПГУАП

В учебном процессе очень важна в последнее время роль ЭВМ. Научно-технический прогресс требует от учебных заведений оперативности в решении вопросов технического обеспечения учебного процесса. Однако, слабое финансирование не позволяет в полной мере соответствовать этим требованиям.

В настоящее время вычислительная техника развивается доста­точно быстро. Появляются Как новые машины, так и все более слож­ное и разнообразное программное обеспечение. ЭВМ входит в нашу жизнь все больше и в самых различных областях науки и производ­ства, сферы обслуживания и образования. Потребность в грамотных пользователях возрастает с каждым днем.   ЭВМ прочно вошли в учебный процесс Санкт-Петербургской Государственной Академии аэрокосмического приборостроения. Академия имеет кафедру "Вычис­лительных машин", которая готовит специалистов по вычислительной технике. Помимо будующих программистов-электронщиков на кафедре проходят подготовку и студенты других специальностей. Студенты изучают курсы "Алгоритмизация и программирование", "Языки прог-рамирования", "Вычислительные комплексы, системы и сети" и др..

Лаборатории кафедры оснащены персональными ЭВМ, микроЭВМ, имеется класс аналоговых вычислительных машин, вычислительный центр, установлена локальная сеть. Студенты Академии учатся пользоваться компьютером как помощником в учебе. Они приобретают навыки работы на компьютере, учатся программировать . В Академии на многих кафедрах введены курсы лабораторных работ на компьютере. Они пред­ставляют собой набор контрольных работ. В частности, такие прог­раммы введены по курсам "схемотехника", "охрана труда". На кафедре экономики введен курс лабораторных работ на компьютере. Программа предоставляет студенту возможность смоделировать то или иное произ­водство и самому проследить результаты его работы, в затем сделать выводы. Такие программы повышают интерес студентов к предмету, дают возможность получить навыки работы с компьютером, сокращают время на изучение той или иной темы, освобождают преподавателя для индивидуальной работы со студентами.

Компьютеры прочно вошли в учебный процесс СПГУАП. Это обеспечивает высокое качество подготовки специалистов по всем специальностям.

1.2.2. Методика обучения с помощью обучающей программы

Данная обучающая программа предназначена для студентов младших курсов Академии аэрокосмического приборостроения. Она восполняет отсутствие курса лекций по теме "Графический режим языка Turbo-Pascal".

Теоретический материал изложен следующим образом. В начале раздела приводится его краткое содержание и цели его изучения. Затем приводятся названия процедур и функций с параметрами , а ниже описываются их назначение и роль параметров. Название процедур и функций для наглядности выделены красным цветом . Процедуры и функции, требующие иллюстрации содержат графические комментарии.

Одновременно с теоретическим материалом программа содержит контрольные вопросы. Это обеспечивает возможность студенту самос­тоятельно изучить предлагаемый материал и самостоятельно проверить свои знания. После изучения тем 3-7 студенту предлагается отве­тить на четыре вопроса, случайным образом выбираемые из имеющихся в базе данных. Контрольные вопросы оформлены следующим образом. Сам вопрос расположен наверху экрана. Ниже приведены четыре вари­анта ответов. Студенту предлагается выбрать правильный и ввести его номер. Такая форма вопросов удобна . Практически студенту необходимо найти все ошибки в приведенных вариантах ответов . Необходимо помнить при написании базы данных, что при такой форме контрольных вопросов нецелесообразно приводить варианты ответов типа "Да", "Нет", "Возможно".  И вопросы должны формулироваться соответственно.

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

Программа для обучения работе в графическом режиме языка Turbo-Pascal содержит 7 разделов:

1) программирование графических режимов;

2) управление курсором и полем рисования;

3) формирование прямолинейных монохромных изображений;

4) управление цветом и стилем изображений;

5) программирование цветных криволинейных изображений;

6) формирование графических текстов;

7) программирование динамические озвученные сцены;

Первый раздел посвящен графическим режимам. В разделе, на базе элементарной структуры Turbo-Pascal-программы, показано использование графических средств языка.  Здесь изучаются процедура вхождения в графический режим, UnitGraph, процедура восстановления текстового режима, CloseGraph, процедура изме­нения графического режима и процедура восстановления исходного текстового режима. В разделе приводится описание вспомогательных процедур и функций, с помощью которых можно получить справки о текущем графическом режиме и графическом адаптере.  Этот раздел вводит студента в курс изучаемой темы. Знание этого раздела будет необходимо при написании любой программы с использованием графики.

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

Система меню данной обучающей программы дает возможность обучаемому самому уста навивать порядок изучения разделов. Однако, автор рекомендует начать изучение разделов в порядке их следования Если обучаемый уже владеет информацией, содержащейся в первых двух разделах, то их можно просто просмотреть, чтобы еще раз вспомнить возможности графического режима. Такой просмотр не займет много времени, но поможет быстрее и точнее ответить на контрольные вопросы следующих разделов.

Третий раздел посвящен формированию прямолинейных монохром­ных изображений. Цель данного раздела обучить студента пользовать­ся операторами построения прямолинейных фигур: отрезков, прямоугольников, параллелепипедов и ломаных линий. Рассматривается возможность закраски фигур определяемым предварительно стилем и цветом. Изучив этот раздел студент должен не только научиться строить фигуры с использованием приведенных процедур, но и видеть разницу между аналогичными с первого взгляда процедурами, находить наиболее рациональное решение поставленной задачи. На это обраща­ется большое внимание в контрольных вопросах.

Этот и все последующие разделы содержат после теоретической части контрольные вопросы. Обучаемому предоставляется возможность дважды через меню войти в каждый из этих разделов. При этом повторное изучение теории обязательно. После ответов на вопросы выстав­ляется оценка. Эта оценка хранится в разделе "Результаты Вашей работы". Таким образом можно получить две оценки за одну тему. Обе они будут зафиксированы и учтены при выставлении оценки работы за сеанс. Все дальнейшие разделы включая третий посвящены непосредст­венно формированию графических изображений. Они по сути самостоя­тельные под темы. Однако, каждый следующий раздел содержит часть информации предыдущий разделов, опирается на эту информацию, ис­пользует в приводимых примерах и в контрольных вопросах. Поэтому и последующие разделы рекомендуется в первый раз изучать в порядке их следования.

Четвертый раздел знакомит с операторами управления стилем и цветом изображений.  В данном разделе приведены процедуры установки цвета фона и цвета рисования, процедуры изменения одного или нес­кольких цветов палитры, а также процедуру дающую справочную инфор­мацию о текущей цветовой палитре. Цветовая палитра проиллюстриро­вана.  Приведен пример и стандартных стилей закраски. Изучив данный раздел студент получает возможность управлять стилем рисо­вания, а именно: устанавливать тип контурных линий (один из четы­рех стандартных или нестандартный), устанавливать стиль закраски (один из 12 стандартных) или формировать свой, нестандартный образец закраски. Приведено также описание справочных процедур возвращающих значение текущих цвета и стиля рисования.

Пятый раздел посвящен криволинейный изображениям. В нем студент сможет ознакомиться с процедурами построения дуг окруж­ности и эллипса, контуров окружности и эллипса, круга, секторов криволинейных фигур, а также с процедурой закраски ограниченных областей, закрашенного эллипса и сектора. Данные процедуры про­иллюстрированы и это дает возможность быстрее разобраться в их возможностях. При формировании иллюстраций к данным процедурам были использованы различные цвета и стили закраски. Это обеспе­чивает повторение уже изученного в разделе четыре материала. Пятый раздел знакомит студента с понятием генератора случайных чисел и функцией возврата случайного числа.

Шестой раздел назван "Формирование графических текстов". Он посвящен операторам языка, с помощью которых возможно формиро­вать стандартные шрифты (один растровый и четыре штриховых) и нестандартные (их количество зависит от содержимого внутренней таблицы шрифтов компьютера). Примеры этих шрифтов приведены в качестве иллюстраций в программе. В этом разделе рассматривается возможность изменения пропорций штриховых шрифтов, вспомогатель­ные процедуры возврата ширины заданной текстовой строки, привязки выводимого текста к текущему положению курсора, возврат параметров текущего текстового шрифта. Вывод символьной строки осуществляется с помощью процедур OutText и OutTextXY. Они также рассмотрены в разделе. Знание возможностей языка Turbo-Pascal, в частности графи­ческих шрифтов, дает возможность более полно их использовать. Поэтому изучение данного раздела не менее важно чем изучение преды­дущих .

Последний раздел программы является наиболее сложным для изу­чения, однако и наиболее интересным с точки зрения будущего прог­раммиста. Он знакомит со способами программирования эффектов муль­типликации с использованием динамической и видеопамяти компьютера, программированием звуковых эффектов с использованием одноканального звукогенератора. Здесь рассматриваются наиболее общие приемы мульти­пликации, основанные на предварительном формировании, сохранении и быстром выводе, если требуется с наложением, на экран статических изображений. Это обеспечивается наличием средств работы с динами­ческой памятью компьютера и возможностью использования страничной организации его видеобуфера. Программа знакомит студентов с соот­ветствующими процедурами. В качестве иллюстрации приведен пример создания эффекта движения вдоль экрана объекта в области 50x50 пикселов.  Создание звуковых эффектов с использованием одноканального звукогенератора сводится к включению, выключению и программированию определенных законов изменения частоты звукогенератора. Это дела­ется с помощью процедур Sound и NoSound. В программе также приведен пример использования звукогенератора.

Для обучения с помощью данной обучающей программы необходимо знать язык Pascal , интегрированную среду и персональный компьютер IBM PC. Программа рассчитана на работу с ней в течение 40 минут . Если после работы с программой в течение этого времени студент получил неудовлетворительные оценки, то целесообразно дать ему возможность пополнить свои знания с помощью учебной литературы, а затем вернуться к компьютерной версии.

1.2.3. Возможности языка TURBO-PASCAL 6.0\7.0

Pascal является широко распространенным языком программирова­ния высокого уровня. Система программирования Turbo-Pascal была разработана в середине 80-х годов фирмой Borland International (США). Turbo - торговая марка фирмы-разработчика. Turbo-Pascal включает в себя как язык программирования - одно из расширений языка Pascal для ЭВМ типа IBM, так и среду, предназначенную для написания, отладки и запуска программ.   Turbo-Pascal имеет широкие возможности.  Практически он полностью реализует аппаратные возможности персонального компьютера фирмы IBM и совместимых с ним. Система имеет два основных достоинства: просто­та и естественность языка программирования Pascal, великолепные сервисные возможности диалоговой среды программирования фирмы Borland.  Язык характеризуется расширенными возможностями по сравнению со стандартом, хорошо развитой библиотекой стандартных модулей,  позволяющих использовать возможности операционной  ., системы,  создавать оверлейные структуры, организовывать ввод-вывод , формировать графические изображения и т.д.. Среда программирования позволяет создавать тексты программ, компили­ровать их, находить ошибки и оперативно их исправлять, компоновать программы из отдельных частей, включая стандартные модули, отлажи­вать и выполнять отлаженную программу.

За последние годы фирма выпустила шесть модификаций этой системы, известных как версии 3.0, 4.0, 5.0, 5.5, 6.0, 7.0. Каждая из них представляет собой усовершенствование предыдущей, однако, и все программы, разработанные для младших версий, могут практически без изменений компилироваться и исполняться на более поздних. С помощью Turbo-Pascal можно создавать любые программы - от программ, предназ­наченных для решения простейших вычислительных задач, до сложных современных систем управления базами данных и операционных систем. Система не уступает, а в некоторых случаях и более проста в приме­нении, по сравнению с профессиональным языком программирования СИ.

Пакет Turbo-Pascal 7.0 предоставляет пользователю также большой объем справочной информации. Он как и версия 6.0 обеспечи­вает многооконный и много файловый режим работы, использование манипулятора "мышь", позволяет применять объектно-ориентированное программирование, обладает встроенным ассемблером, имеет инструмен­тальное средство создания интерактивных программ - Turbo-Vision -и т.д.

Пакет Turbo-Pascal 7.0 позволяет работать в обычном режиме MS DOS и может быть использован практически на любой машине. Версия имеет ряд преимуществ по сравнению с предыдущими:

1) выделение цветом различных элементов исходного текста программы - идентификаторов, зарезервированных слов, коммента­риев, строк, чисел и т.д., что позволяет уже на стадии ввода исходного текста устранить многие ошибки, описки;

2) многофайловая система помощи с возможностью ее перестройки пользователем;

3) наличие локального меню с содержанием, зависящем от текущего состояния среды ;

4) ряд дополнительных расширений языка, таких, как использование открытых массивов, параметров-констант, типизированного адресного оператора и т.д.. дающих программисту дополнительные возможности, позволяющих совмещать требования, накладываемые на программы операционной системой MS DOS и средой Windows, пользоваться некоторыми возможностями, которых нет в языке Pascal и которые есть в других языках, например в языке СИ;

5) наличие дополнительных стандартных процедур и функций;

6) наличие дополнительных ключей компилятора;

7) расширенные возможности объектно-ориентированного программирования;

8) получение более эффективных кодов программ (использование кодового сегмента для размещения строковых констант и констант типа-множества, удаление пустых строк, проверка переполнения величин целых типов, более быстрый ввод-вывод текстовых файлов и т.д.);

9) усовершенствованные программы Turbo Vision; 10) новая улучшенная компоновка системы меню.

1.3. Техническое задание

1.3.1. Постановка задачи

Техническое задание данной дипломное работы требует разработать программу для обучения работе в графическом режиме языка Turbo-Pascal 6.0/7.0 , предназначенную для студентов младших курсов Санкт-Петербургской государственной Академии аэрокосмического приборостроения. Программа должна отвечать следующим требованиям:

1) позволять индивидуально изучить работу с компьютеров в графическом режиме

2) содержать 7 разделов для изучения :

- программирование графических режимов

- управление курсором и полем рисования

- формирование прямолинейных монохромных изображений

- управление цветом и стилем изображений

- программирование цветных криволинейных изображений

- формирование графических текстов

- программирование озвученных динамических сцен

3) представлять изучаемый материал наглядно, сопровождая текст необходимыми иллюстрациями

4) предусматривать возможность повторения изученного мате­риала

5) предусматривать возможность контроля приобретенных знаний

6) регистрировать результаты контроля знаний

7) обеспечивать возможность разъяснения студенту в случае необходимости его ошибок

8) иметь продолжительность сеанса не более 45 минут

9) программа должна быть написана на языке программирования Turbo-Pascal , не ниже версии 6.О..

1.3.2. Выбор технические средств и программного обеспечения

Для реализации данного технического задания необходимо использование персонального компьютера типа IBM или совмести­мого с ним, растровый дисплей с  графическим адаптером типа EGA, имеющий объем видеобуфера 256 К ,графическим выводом 640x350 пиксел , 16 регистрами палитры (режим ЮН).

В качестве программного обеспечения необходимо иметь DOS, инструментальную интегрированную среду Turbo-Pascal 7.O.

1.3.3. Технико-экономическое обоснование

Разрабатываемая программа предназначена для студентов младших курсов СПГУАП. В учебном плане отсутствует курс лекций по данной теме и изучение графического режима полностью оставлено для самостоятельного изучения. Однако, для многих студентов работа только с литературой является затруднительной, малопонятной и для получения удовлетворительных результатов требует больших временных затрат.

Применение компьютерной программы для обучения в данном случае является целесообразным.  В процессе работы с такой программой студент приобретает навыки работы с компьютером, что является целью курса, и получает конкретные знания по теме "Графические средства алгоритмического языка Turbo-Pascal". Диалог ЭВМ-пользователь (в данном случае обучаемый) ведется в удобном для последнего темпе, что обеспечивает лучшее усваивание материала. Каждый студент имеет возможность изучать разделы темы в удобном для него порядке. Это экономит время студента для изучения более важных для него разделов и игнорирование разделов, которые ему уже знакомы. В то же время преподаватель имеет воз­можность уделять внимание студентам в индивидуальном порядке. Программа предусматривает элементы проверки знаний в виде контрольных вопросов в конце разделов. Такая система обучения дает возможность студенту самостоятельно оценить свои знания. После ответа на вопрос обучаемый получает справку о его правильности и пояснения в случае неверного ответа. После ответов на все вопросы раздела он может изучить тему вновь и вновь ответить на контрольные вопросы. Принцип "обучение + контроль" повышает уровень получаемых знаний.

В предыдущих разделах были описаны многочисленные средства и методы обучения с помощью компьютера. Однако, разработка насто­ящей программы для обучения является необходимой и целесообраз­ной в условиях данного учебного заведения. Целью создания данной программы является удовлетворение нужд учебного процесса с учетом технических возможностей академии, а именно разработка методи­ческих материалов по программированию с использованием ЭВМ типа IBM PC и языка Turbo-Pascal. Среди уже существующих компьютерных обучающих программ отсутствует программа для обучения работе в графическом режиме языка Turbo-Pascal. Таким образом разработка методических материалов необходима при использовании любых методов обучения.  Кроме того существующие обучающие программы не отвечают ряду требований технического задания , в частности по содержанию программы, ее оформлению, ограничению по продолжительности сеанса, выбору языка программирования.

Разработка данной программы является экономически обосно­ванной. Существует теоретическая возможность приобретения академией уже существующего аналогичного программного обеспече­ния и адаптация его для решения конкретной задачи по обучению работе в графическом режиме. Это потребует значительных мате­риальных затрат как на приобретение такого программного обеспе­чения , так и на его обработку и подготовку к работе . В сложив­шейся экономической ситуации такое решение проблем для академии невозможно. Данная дипломная работа решает вопрос обеспечения учебного процесса необходимым компьютерным сопровождением и экономит материальные средства академии.

2. ОПИСАНИЕ БАЗЫ ДАННЫХ

2.1. Методическое оснащение базы данных

В 1992 году фирма Borland International выпустила два пакета программирования, основанные на использовании языка Паскаль -Borland Pascal 7.0 и Turbo Pascal 7.O. Первый пакет включает в себя три режима работы: в обычном режиме операционной системы MS DOS, в защищенном режиме MS DOS и в среде Windows. Этот пакет требует для использования своих возможностей довольно большой объем памяти -примерно 30 Мбайт на Жестком диске и не менее 2 Мбайт оперативной памяти. Пакет Turbo-Pascal 7.0 обладает ограниченными возможностя­ми и дает возможность работать только в обычном режиме MS DOS. Однако, он доступен для использования на обычных персональных ком­пьютерах типа IBM и его стоимость по сравнению с первым пакетов значительно ниже»

Turbo-Pascal включает в себя язык программирования - одно из расширений языка Паскаль для ЭВМ типа IBM и среду, предназначенную для написания, отладки и запуска программы. Язык имеет расширенные возможности по сравнению со стандартом, хорошо развитую библиотеке модулей, позволяющих использовать возможности операционной системы, создавать оверлейные структуры, организовывать ввод-вывод, форми­ровать графические изображения и т.д.

Целью написания данной программы является ознакомить студен­тов с возможностями языка Turbo-Pascal б.0\7.0 по формированию, вводу и выводу графической информации. При написании базы данных были использованы учебные пособия [4], [5]  и [6]

Работа посвящена возможностям языка TURBO-PASCAL по работе с графической информацией. Студентам предлагается ознакомиться со стандартными модулями Graph, Crt, а также с отдельными процедурами других модулей.

Модуль Graph содержит типы, константы, переменные и подпрог­раммы, позволяющие программисту создавать изображения с использова­нием широкого набора графических адаптеров(CGA, MCGA, EGA, VGA, Hercules, AT&T400, 3270PC,IBM8514). При работе с этими адаптерами весь экран разбивается на отдельные "точки" - пиксели, которые можно закрасить в тот или иной цвет. Каждый пиксель имеет две коор­динаты: X и Y. Количество пикселей зависит от типа адаптера и реж­има его работы. Данная программа написана для адаптера EGA и режи­ма EGAHi с размером поля 640x350, палитрой состоящей из 16 цветов и двумя страницами видеопамяти. Данный режим позволяет выделять окна на экране дисплея. В этом случае используются координаты в пределах окна. Курсор в графическом режиме невидим, однако его можно переместить в любую точку экрана, посмотреть его координаты.

Модуль Graph содержит 8 стандартных типов, описывающих цвета палитры, характеристики линий, характеристики текста, орнамент и цвет заполнения, задаваемый пользователем орнамент заполнения, коо­рдинаты точки, окно вывода графической информации, данные о дуге. Константы и переменные указанных типов приведены в таблицах в [5].

Обучающая программа предлагает студентам ознакомиться с процедурами и функциями следующего назначения:

1) процедуры управления графическим режимом ;

2) функции управления графическим режимов;

3) процедуры управления экраном, окном, страницей;

4) процедуры управления цветом и палитрой;

5) функции управления цветом и палитрой;

6) функции работы с точками;

7) процедуры работы с линиями;

8) процедуры построения фигур из линий;

9) процедуры построения криволинейных фигур;

10) процедуры работы с текстом;

11) функции работы с текстом;

12) процедуры обмена с памятью;

13) функции обмена с памятью;

Подавляющее большинство процедур и функций модуля Graph можно использовать только после задания графического режима   ^ процедурой UnitGraph.

Модуль Crt содержит константы, переменные и подпрограммы, предназначенные для работы с консолью. В отличие от стандартного ввода-вывода, когда он осуществляется через операционную систему, подпрограммы модуля Crt работают с BIOS и, даже непосредственно с видеопамятью. При работе с экраном он разбивается на строки, а строки на отдельные позиции, в которые можно поместить только один символ. Есть возможность открывать окна, задавать цвета символов и фона. Обучающая программа знакомит студентов с частью процедур и функций данного модуля, а именно:

1) процедуры работы с экраном;

2) функции работы с клавиатурой;

3) процедуры управления звуком;

4) процедуры разнообразного назначения.

Кроме перечисленных выше процедур и функций программа знакомит обучаемого с понятием случайного числа, функцией Random, и генера­тором случайных чисел Randomize , которые описаны в стандартном модуле System.

Процедуры и функции, представленные на рассмотрение в данной работе, сгруппированы для изучения в 7 разделов:

1 раздел - программирование графических режимов;

2 раздел - управление курсором и полем рисования ;

3 раздел - формирование прямолинейных монохромных изображений;

4 раздел - управление цветом и стилем изображений;

5 раздел - программирование цветных криволинейных изображений;

6 раздел - формирование графических текстов;

7 раздел - программирование озвученных динамических сцен ;

Изучая эти разделы студент последовательно узнает как задать графический режим, как узнать его параметры, изменить, временно выйти из режима, научиться управлять курсором и полем рисования, открывать окна, пользоваться цветовой палитрой и имеющимися в арсенале языка типами линий и стилей закраски. Полезным будет изучение разделов 5,6 , которые содержат информацию о возможнос­тях построения криволинейных фигур, формирование графических текс­тов стандартных типов и ряда нестандартных. Наиболее сложным является последний раздел, посвященный озвученным динамическим сценам. В этом разделе студент знакомится с динамической памятью компьютера и страничной организацией видеобуфера. Это основные средства, с помощью которых стало возможным создание эффекта мультипликации на экране дисплея. В этом же разделе представлен звукогенератор, позволяющий обеспечить звуковое сопровождение .

В меню программы перечисленные разделы следуют в порядке, указанном выше. Этот порядок следования разделов соответствует последовательному изучению материала от простого к сложному. Однако, система меню дает возможность студенту нарушить этот поря­док и изучать разделы в порядке, удобном ему. При этом следует учесть, что каждый последующий раздел опирается на знание предыду­щих, в контрольных вопросах следующих разделов содержатся вопросы, касающиеся предыдущих тем. Поэтому рекомендуется знакомиться пер­вый раз с темой последовательно. Доступ к разделам 3,4,5,6,7 ограничен . Студенту предоставляются только две попытки ответить на контрольные вопросы. Рекомендуется после первого изучения и неудачного ответа во второй раз начать изучение с раздела, который показался наиболее простым и понятным.

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

2.2. Структура базы данных

База данных представляет собой набор 17 файлов типа запись Семь из них содержат теоретическую часть семи изучаемых разделов, пять - тексты контрольных вопросов к разделам 3,4,5,6,7 и пять -тексты справок к этим вопросам. Схема обращений процедур к файлам базы данных приведена в табл. 1

Таблица 1

Схема обращений процедур к файлам базы данных

Номер раздела Имя модуля Имя процедуры Имена файлов базы данных
теория вопросы Справки
1 Razdel1 Razdel10 Raztex1 - -
2 Razdel2 Razdel20 Raztex2 - -
3 Razdel3 Razdel30 Raztex3 Joing Iod
4 Razdel4 Razdel40 Raztex4 Joi Iodi
5 Razdel5 Razdel50 Raztex5 Join Iodin
6 Razdel6 Razdel60 Raztex6 Jois Iodis
7 Razdel7 Razdel70 Raztex7 jos ios

Структура базы данных приведена в таблицах 2, 3, 4

Таблица 2

Структура базы данных.

Теория

Поле Р1 Поле Р2
... ...
ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ
* procedure DrawPoly(NumPoints:word;
* var PolyPoints);
7

Строит ломаную линию.

NumPoints - число вершин многоугольника PolyPoints - переменная без типа, содержащая NumPoints+1 пар координат вершин многоугольника (первая и последняя вершины должны совпадать).

* procedure FillPoly(NumPoints:word;var PolyPoints);
8 Закрашивает многоугольник текущим цветом и орнаментом. Параметры NumPoints и PolyPoints имеют тот же смысл и тип, что и одноименные параметры процедуры DrawPoly.
... ...
0

Поле Р1 - флаги: * - признак выделения строки цветом

7,8 - признак наличия иллюстрации к тексту и ее номер

  О - признак конца файла

Поле Р2 - текст.

Таблица 3

Структура базы данных.

Вопросы

Поле Р1 Поле Р2 Поле Р3
... ... ...
* 02 КАК ПОСТРОИТЬ СТОЛБЧАТУЮ ДИАГРАММУ В ЗАРАНЕЕ СФОРМИРОВАН­НОЙ РАМКЕ?

1 Bar3D(X1, Y1, X@, Y2, depth, true);

  SetViewPort(X1, Y1, X@, Y2, false);

  ClearViewPort;

  Bar3D(X1, Y1, X@, Y2, depth, false);

2 Bar3D(X1, Y1, X@, Y2, depth, true);

  SetViewPort(X1, Y1, X@, Y2, true);

  ClearViewPort;

  Bar3D(X1, Y1, X@, Y2, depth, false);

3 Bar3D(X1, Y1, X@, Y2, depth, true);

  Bar3D(X1, Y1, X@, Y2, depth, false);

4 Bar3D(X1, Y1, X@, Y2, depth, true);

  Bar3D(X1, Y1, X@, Y2, depth, true);

*
... ...
0

Таблица 4

Поле Р1 Поле Р2 Поле РЗ Поле Р4 Поле Р5

SetViewPort. Координаты окна002 отсчитываются

от левого верхнего угла экрана в то время как

для процедуры Bar3D от левого верхнего угла

окна.

*

1 3 Ответ правильный. 005
*
4 Ответ не точный. На экране появятся затененные контуры нижнего параллелепипеда. 003
*
... ... ... ...
0

Поле Р1 - флаги:   * - признак конца вопроса

1 - признак наличия иллюстрации и ее номер

О - признак конца файла

Поле Р2 - номера вопросов.

Поле РЗ - флаги: 1,2,3,4 - номера ответов.

* - признак конца справки

Поле Р4 - текст справок.

Поле Р5 - оценка.

2.3. Возможности изменения или обновления

2.3.1. Теория

Данная структура базы данных является удобной для использова­ния . Она легко может быть дополнена в случае необходимости, час­тично или полностью заменена. Файлы теоретической части являются файлами типа запись и содержат по два поля.

Первое поле - Р1 . Так оно названо в программе и под него отведен один символ. Это поле используется как поле флага и анали­зируется программой с помощью условного оператора CASE. Значения флагов поля Р1 приведено в табл.5

Таблица 5

Символ поля Р1 Значение Действия программы
0 Конец файла При считывании записи с этим символом в поле Р1 программа возвращает Вас в меню,
если Вы изучали разделы 1 Или 2, или переходит в [режим контрольных вопросов, если изучался раздел 3-7.

 

*

1 вывод  строки  другим

 цветом

Строка выводится на экран другим (красным) цветом. Этим символом отмечены строки, содержащие названия изучаемых процедур и функций. Это сделано для наглядности изучения. В случае необходимости эти значки возможно убрать и Текст будет выво­дится одним (синим) цветом. Возможно выделить и другие строки цветом, внеся в поле Р1 соответствующих записей значок '*'.  Возможно изменить цвет выделенных строк путем замены параметра процедуры SetColor в операторах CASE константы '*' процедур RAZDELXO .

 

# признак  конца страницы Используется только в разделах процедурах RAZDEL6, RAZDEL7, в операторе CASE при проверке наличия иллюстрации. При обнаружении этого символа заканчи­вается цикл вывода текста из файла теории.

 

любой другой ASCII-символ

признак  наличия иллюст-

рации

Оператор CASE сравнивает этот символ с имеющимися у него константами и выводит соответствующую иллюстрацию на экран. Если символ среди констант не обнаружен, это не мешает дальнейшему считыванию текста. Поэтому целесообразно иллюстрации обозначать сразу при написании базы данных, а затем вносить соответствующие изменения в программу.

 

Второе поле - Р2 - составляет 69 символов и содержит непос­редственно текст теоретической части изучаемой темы. Программа написана таким образом, что из файла теории считывается на экран по 32 строки. Экран удерживает изображение до нажатия любой сим­вольной клавиши, после чего он очищается и выводятся следующие 32 строки текста и т.д. до конца файла. При этом каждые 32 стро­ки образуют страницу текста. Началу каждой новой страницы соот­ветствует заголовок - название изучаемого раздела. Это целесо­образно, так как теория имеет значительный объем, экраны пол­ностью заполнены. В случае необходимости (нехватки строк) следует "добить" пустые строки, чтобы страница состояла из 32  строк. Количество пустых строк будет в данном случае незначительно, однако такая структура делает базу данных наглядной и удобной для работы даже неспециалисту и не загромождает поле Р1 лишними знаками типа признака вывода пустой строки.

При внесении изменений в файл теоретической части базы данных следует помнить следующее:

1) поле Р1 должно занимать 1 символ. В случае отсутствия в нем флага поле должно быть пустым;

2) поле Р2 должно занимать 69 символов. Если в строке необхо­димо поместить больше символов, То их следует перенести на другую строку, а если значащих символов меньше 69, то следует "добить" символы "пробел" так, чтобы строка составляла всего 69 символов;

3) звездочкой необходимо помечать строки, которые следует выделить другим (красным) цветом;

4) если базу данных дополняют, то следует не забыть указать в начале страницы название раздела;

5) символ - признак иллюстрации можно ставить в любом месте страницы. Место нахождения иллюстрации будет определено програм­мным путем;

5) в конце файла следует поставить значок '0' в поле Р1. Поле Р2 этой записи считываться не будет ;

6) после окончания написания базы данных следует проверить еще раз соответствие всех строк необходимой длине (после нажатия клавиши END курсор должен останавливаться в позиции 70);

2.3.2. Вопросы

Файлы, содержащие вопросы к разделам 3,4,5,6,7 являются так же как и файлы теории файлами типа запись. Они содержат по три поля.

Первое поле Р1 и под него выделен один символ. Поле исполь­зуется как поле флагов. Значения этих флагов приведены в табл.6

Таблица 6

Значения флагов поля Р1

Символ поля Р1 Значение Действия программы
0 Конец файла При считывании записи с этим символом программа прекращает поиск нужного номера вопроса.
* Конец вопроса Прекращается вывод содержимого поля РЗ (текста вопроса) на экран.
Любой другой ASCII-символ Признак наличия иллюстрации CASE сравнивает этот символ с имеющимися у него константами и выводит соотв. иллюстрацию на экран. Если символ среди констант не обнаружен, это не мешает дальнейшему считыванию текста. Поэтому целесообразно иллюстрации обозначать сразу при написании БД,а затем вносить соотв. изменения в ПО.

Второе поле - Р2. Оно состоит из двух символов и предназначено для обозначения начал и номеров вопросов. Поле может содержать но­мера с 01 по 99. При считывании записи программа анализирует поле Р2 и если считанный номер соответствует требуемому, то выводит содержимое поля РЗ (текст вопроса) на экран до тех пор, пока в поле Р1 не появится признак конца вопроса.

Третье поле - РЗ - содержит текст самих вопросов и под него выделено 69 символов. Аналогично полю Р2 файла теории это поле должно содержать ровно 69 символов и, в случае если значащих сим­волов в строке меньше 69, следует "добить" символы "пробел".

В отличие от порядка считывания файла теории, файл вопросов имеет флаг признака конца вопроса. Таким образом на экран выво­дится текст вопроса начиная с нужного номера и до появления флага признака конца вопроса. Поэтому при наборе текста вопросов необходи­мо следить, чтобы вопрос поместился в поле экрана , т.е. не превышал 32 строк, имелись необходимые пустые строки, отступы, красные строки и т.д... Пустые строки в конце вопроса "добивать"  не следует.

При внесении изменений в файл вопросов базы данных следует помнить следующее:

1) поле Р1 должно занимать 1 символ. В случае отсутствия в нем флага поле должно быть пустым;

2) поле Р2 должно занимать 2 символа;

3) поле РЗ должно занимать 69 символов. Если в строке необхо­димо поместить больше символов, то их следует перенести на другую строку, а если значащих символов меньше 69, то следует "добить" символы "пробел" так, чтобы строка составляла всего 69 символов;

4) текст вопроса должен начинаться номером вопроса, содержа­щимся в поле Р2 и кончаться символом '*' , содержащимся в поле Р1;

5) символ - признак иллюстрации можно ставить в любом месте поля Р1 напротив текста вопроса. Место нахождения иллюстрации будет определено программным путем;

6) в конце файла следует поставить значок '0' в поле Р1. Остальные поля этой записи считываться не будут ;

7) после окончания написания базы данных следует проверить еще раз соответствие всех строк необходимой длине (после нажатия клавиши END курсор должен останавливаться в позиции 72);

2.3.3. Справки

Файл справок является файлом типа запись и имеет пять полей. Первое поле - Р1 - поле флагов, под которое отведен один знак. Значение флагов поля Р1 приведено в табл.7

Таблица 7

Значения флагов поля Р1

Символ поля Р1 Значение Действия программы
0 Конец файла При считывании записи с этим символом программа прекращает поиск нужного номера вопроса.
* Конец вопроса Прекращается вывод содержимого поля РЗ (текста вопроса) на экран.
Любой другой ASCII-символ Признак наличия иллюстрации Оператор CASE сравнивает этот символ с имеющимися у него константами и выводит соответствующую иллюстрацию на экран. Если символ среди констант не обнаружен, это не мешает дальнейшему считыванию текста. Поэтому целесообразно иллюстрации обозначать сразу при написании базы данных, а затем вносить соответствующие изменения в программу.

     Поле Р2 содержит номера вопросов от 01 до 99. Под это поле отводится 2 знака. Программа, считывая поле Р2 анализирует его значение и, если оно соответствует нужному номер вопроса, то начинает поиск нужного номера ответа в поле РЗ вплоть до появле­ния признака конца вопроса в поле Р1.

Поле РЗ - поле флагов. Под него отведен один знак. Числа 1,2,3,4 - номера ответов. При полном обновлении базы данных воз­можно увеличить или уменьшить количество вариантов ответов. Однако, необходимо при этом внести изменения и в программу. Поле РЗ содер­жит и признак конца справки. Таким образом, программа, найдя нужный номер ответа начинает считывать и выводить на экран справку -содержимое поля Р4 до появления значка '*' в поле РЗ.

Поле Р4 содержит текст справок. Под него отведено 68 знаков. Необходимо при написании базы данных четко соблюдать размеры всех полей.

Поле Р5 - поле оценки. Под него отведено 3 знака. Это обуслов­лено разницей в длине ASCIIZ-строки и строки типа string. Оценка должна выглядеть следующим образом:  001, 002, 003, 004, или 005. Программа обращается к этому полю когда находит нужный номер ответа Поэтому оценку следует помещать в поле Р5 в записях, содержащих номера ответов.

Как правило, текст справки не превышает текста вопроса, но следует помнить,  что объем ее не должен превышать объема экрана, т.е. 32 строки.

При внесении изменений в файл справок следует помнить следующее:

1) поле Р1 должно занимать 1 символ. В случае отсутствия в нем флага поле должно быть пустым;

2) поле Р2 должно занимать 2 символа;

3) поле РЗ должно занимать 68 символов. Если в строке необхо­димо поместить больше символов, то их следует перенести на другую строку, а если значащих символов меньше 68, то следует "добить" символы "пробел" так, чтобы строка составляла всего 68 символов;

4) текст справки должен начинаться номером ответа и кончаться символом '*' , содержащимися в поле РЗ;

5) запись, содержащая в поле Р1 признак конца вопроса не счи­тывается далее и не выводится на экран. Поэтому конец вопроса и конец последней справки в вопросе не должны попадать в одну запись, т.е. должны находится в разных строках.

6) символ - признак иллюстрации можно ставить в любом месте поля Р1 напротив текста справки. Место нахождения иллюстрации будет определено программным путем;

7) в конце файла следует поставить значок 'О1 в поле Р1. Остальные поля этой записи считываться не будут ;

8) после окончания написания базы данных следует проверить еще раз соответствие всех строк необходимой длине (после нажатия клавиши END курсор должен останавливаться в позиции 76);

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

3. ОПИСАНИЕ ПРОГРАММЫ

3.1. Общие сведения

Настоящая дипломная работа посвящена разработке программы для обучения работе в графическом режиме языка Turbo-Pascal. Цели и задачи данной разработки, а также методика обучения с помощью данной программы/ возможности языка были описаны выше, в разделе "Назначение обучающей программы". Программа написана на языке Turbo-Pascal. Этот язык является языком высокого уровня . Он имеет рад преимуществ перед другими языками высокого уровня. Самые главные его достоинства - это простота и естественность, великолеп­ные сервисные возможности.  Наличие типа запись, возможности модульного программирование, наличие библиотеки стандартных модулей дают возможность быстро и эффективно создавать самые разнообразные программные продукты начиная от решения простейших вычислительных задач и кончая сложными современными системами управления базами данных и операционных систем. В данном случае с его помощью была создана программа для обучения, которая работает с базой данных. Возможности языка и его преимущества более подробно описаны в п.1.2.3 .

Программа называется "Графика" . Она состоит из основной программы, содержащейся в файле с именем "Graphic", восьми само­стоятельных модулей с именами Razdel1, Razdel2, Razdel3, Razdel4, Razdel5, Razdel6, Razdel7, MyBook.

Основная программа формирует заставку к программе, обращается к файлу Veden, содержащему текст введения, выводит текст введения, формирует систему меню, через которое затем обращается к процедурам модулей Razdel1 – Razdel7, получает из этих процедур переменные , содержащие оценки за ответы на контрольные вопросы, присваивает их значение своим переменный, хранит их в течение всей работы с прог­раммой и отвечает за формирование раздела "Результаты Вашей работы" системы меню. Основная программа регламентирует доступ к разделам. Переменные NOMER3 - NOMER7 являются счетчиками и обеспечивают вход в процедуры модулей Razdel3 – Razdel7 не более двух раз за сеанс. При этом основная программа хранит все оценки, полученные за ответы на контрольные вопросы , и все их выводит на экран по обращению к разделу меню "Результаты Вашей работы".

Модули Razdel1 – Razdel7 содержат процедуры с именами Razdel10 - Razdel70 соответственно. Эти процедуры устанавливают связь с файлами базы данных, выводят текст теории, вопросов, справок, содержат программный текст иллюстраций к теории, вопросам и справкам. По результатам ответов студента на контрольные вопросы процедура формирует переменную. После отработки модуля значение этой переменной переприсваивается определенной переменной основной программы. И основная программа хранит это значение до окончания работы с программой.

База данных состоит из трех логических частей, которые содержат теоретическую часть, контрольные вопросы и справки. Они расположены в каталоге следующим образом. Теоретическая часть размещается в вось­ми файлах типа запись . Файлы с именами Raztex1, Raztex2, Raztex3, Raztex4, Raztex5, Raztex6, Raztex7 содержат тексты теоретической части по семи разделам соответственно. Файл Veden содержит текст вве­дения. К разделам , содержащимся в файлах Razdel3 – Razdel7 имеются контрольные вопросы , размещенные в файлах Joing, Joi, Join, Jois, Jos, и справки , размещенные в файлах lod, lodi, lodin, lodis, los. Файлы контрольных вопросов и справок так же являются файлами типа запись. Структура базы данных,  ее содержание, возможности дополне­ния, обновления или частичного изменения, схема обращений процедур к базе данных подробно описаны в разд.2.

Модуль MyBook является библиотечным модулем. Он включает в себя четыре процедуры, которые неоднократно встречаются в текстах основ­ной программы и процедур рабочих модулей.  Процедура OKNO -формирует экранную рамку, в которой будут размещаться тексты прог­раммы. Процедура OKN01 формирует заставку с надписью "Контрольные вопросы". Процедура GraphRegim обеспечивает вход в графический режим. Эти три процедуры используются практически во всех процеду­рах и в основной программе. Процедура Diogramraa формирует последнюю иллюстрацию к разделу 5 и вынесена в данный модуль так как занимает значительный объем.

Разработанная программа является самостоятельной программной единицей. Для ее функционирования необходимо иметь в арсенале следующие средства :  персональный компьютер типа IBM или совместимый с ним, дисплей с графическим адаптером типа EGA, имеющим объем видеобуфера 256 К, графическим выводом 640x350 пиксел, 16 регистрами палитры. В качестве программного обеспечения необходимо иметь DOS, инструментальную интегрированную среду Turbo-Pascal 7.0, файлы bold.chr, goth.chr, sans.chr, trip.chr нестандартных шрифтов, файлы с текстом программы, файлы , содержа­щие базу данных. Для работы с программой , при условии наличия выще указанных технических и программных средств, следует обратиться к файлу с именем "Graphic". При этом необходимые данные загружаются в оперативную память компьютера и далее работа с программой идет в диалоговом режиме, не требующем вмешательства программиста. Выход из программы осуществляется также по желанию обучаемого при входе в раздел меню "Конец работы".

3.2. Функциональное назначение

Программа для обучения работе в графическом режиме предназ­начается для обучения студентов младших курсов Санкт-Петербургской государственной Академии аэрокосмического приборостроения навыкам программирования, а именно работе в графическом режиме языка Turbo-Pascal .

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

1) Программирование графических режимов.

2) Управление курсором и полем рисования.

3) Формирование прямолинейных монохромных изображений.

4) Управление цветом и стилем изображений.

5) Формирование цветных криволинейных изображений.

6) Формирование графических текстов.

7) Программирование озвученных динамических сцен.

Эти разделы содержат наименование процедур и функций, их параметры, условия и примеры использования в программах. Текст сопровождается необходимыми иллюстрациями. Ввиду отсутствия лекций по данной теме, наличие обучающей программы дает возмож­ность студентам самостоятельно и с минимальными затратами времени освоить работу с графикой . Разделы 3-7 содержат контрольные воп­росы. Элемент контроля знаний обеспечивает студентам возможность самоконтроля, резко повышает уровень знаний, т.к. в случае необ­ходимости обучаемый имеет возможность повторно изучить любую тему и ответить на контрольные вопросы - проверить Полученные знания.

Программа имеет специальное назначение. Она может быть исполь­зована только для обучения заданной теме, а именно работе в графи­ческом режиме. База данных, в случае необходимости, может быть из­менена, дополнена. Однако эти изменения могут быть сделаны только в пределах темы. При этом, если к новому теоретическому материалу или контрольным вопросам необходимо сделать некоторые иллюстрации, то в таком случае потребуется вмешательство программиста. Текст иллюстраций содержится в процедурах модулей и вмешательство в их содержимое требует специальных знаний. Существует теоретическая возможность изменения темы программы. Однако это потребует измене­ния меню программы, полной замены базы данных и соответственно внесения изменений в процедуры модулей. А именно - создание новых иллюстраций. Все это потребует очень больших трудозатрат програм­миста и эквивалентно созданию новой программы.

3.3. Описание логической структуры

Обучающая программа "Графика" в своем составе содержит основную программу "Graphic" , семь рабочих модулей, один библиотечный модуль. Назначение каждого из них подробно описано в п,3.1. Текст программы приведен в приложении. Структура обучающей программы приведена на рис. 1    Основная программа "Graphic" вызывает на исполнение модули  Razdel1 – Razdel7. Каждый модуль содержит по одной процедуре, которые обеспечивают связь с файлами базы данных, вывод текста теории и контрольных вопросов на экран, вывод справок, регистрацию  оценок.

Использование модулей в данном случае является целесооб­разным по следующим причинам. Это удобно в случае дополнения или изменения базы данных. Если потребуется внесение дополнительных иллюстраций, то нетрудно войти в требуемый раздел и внести допол­нения в условный оператор CASE. Модуль является автономно компили­руемой программной единицей. Это позволяет работать с одним из модулей программы, не нарушая при этом другие, облегчает поиск ошибок программирования. В данной работе каждый модуль отвечает за обеспечение изучения одного из разделов темы "Графический режим". И один модуль - МУВООК - является библиотечным, содержит процедуры, встречающиеся часто во всех модулях.  После окончания работы модуля управление возвращается к главной программе. Главная программа использует в своей работе переменные модулей, а именно переменные формирования оценок REZ3 - REZ7. Подробнее эти переменные описаны ниже в подразделе 3.6.

Схема алгоритма функционирования программы приведена на рис. 2  Алгоритм функционирования рабочих модулей приведен на рис. 3  Рассмотрим первый алгоритм.

Структура обучающей программы


Рис. 1

Алгоритм функционирования программы


Рис. 2

Алгоритм функционирования рабочих модулей


Рис. 3

Блок номер 1 - формирование заставки. В текст заставки входит название программы, "Графика", ее назначение, имя разработчика. Формируется заставка в графическом режиме.

Блок 2 - процедура Windo1. Эта процедура устанавливает связь с файлом текстом введения и выводит его на экран. Более подробно работу блока можно описать с помощью блоков 1-4,7 изображенных на рис.

Блок 3 - выбор режима работы. В данном случае обучаемому требуется выбрать один из трех режимов: работа модуля - изучение теории и ответы на контрольные вопросы, Вывод результатов - полу­чение ведомости оценок, конец - выход из программы, т.е. окончание работы с ликвидацией всех ее результатов. Главная программа содер­жит процедуру VERTIKALNOE_MENU , которая формирует окно меню прог­раммы.  Процедура написана в графическом режиме. Меню содержит девять разделов, названия которых соответствуют  фактическим параметрам упомянутой процедуры. Выбор режима работы,  т.е. выбор соответствующего названия раздела осуществляется с помощью условного оператора CASE. В операторе CASE выражением, значение которого вычисляется , является параметр REGIME процедуры VERTIKALNOE__MENU. Он может принимать значения 1 - 9 . На экране это соответствует девять положениям курсора. Таким образом, если параметр REGIME принимает значения 1 - 7 , то далее управление передается модулю с соответствующим именем. На схеме алгоритма -блоку 5 . Если параметр REGIME принимает значение 8, то управление переходит к блоку схемы с номером 4 и производится вывод результа­тов работы. Если же параметр REGIME равен 9 , то работа с програм­мой заканчивается.

Блок 4 - вывод результатов. Этот процесс оформлен в главной программе как составной оператор условного оператора CASE. Он выполняется при условии, что параметр REGIME равен 8. В операторе вывода результатов производится формирование самой ведомости оценок в виде таблицы. В эту таблицу вписываются с помощью оператора writeln переменные главной программы, содержащие оценки за работу с программой. Подробнее формирование этих переменных будет описано в подразделе 3.6. После отработки составного оператора с выводом ре­зультатов программа возвращается в окно меню.

Блок 5 - отработка модуля. Это - рабочий блок . При входе в этот режим главная программа передает управление одному из семи рабочих модулей - RAZPEH, RAZDEL2, RAZDEL3, RAZDEL4, RAZDEL5, RAZDEL6,  RAZ0EL7. Модули обеспечивают изучение семи разделов по теме "Графический режим". Работа модулей описана подробнее в данном подразделе ниже. Схема алгоритма функционирования модулей приведена на рис.

При входе в режим "Конец" обучаемому еще раз задается вопрос: "Вы хотите закончить работу с программой Y/N ? "  При нажатии на клавишу "У"("Н")  программа заканчивает свою работу . При этом все результаты работы с контрольными вопросами уничтожаются. При нажатии на любую другую клавишу программа возвращается в окно меню.

Рассмотрим подробнее алгоритм функционирования рабочих модулей, изображенный на рис.

Блок 1 - процедура GraphRegim. Эта процедура содержится в библиотечном модуле МУВООК. Она осуществляет вход в графический режим.

Следующие далее блоки 2-8 обеспечивают вывод теоретичес­кой части на экран.

Блок 2 - Связь с файлом теории. Этот блок содержит операторы связи с необходимым файлом текста теории. Таблица соответствия между процедурами модулей и файлами базы данных приведена в подраз­деле 2.2. Файл открывается для чтения, производится проверка на наличие файла в каталоге .

Блок 3, блок 13 - процедура ОКНО . Эта процедура содержится в библиотечном модуле MYBOOK и отвечает за оформление экрана. Она создает рамку и устанавливает фоновый цвет и цвет рисования основ­ного текста.

Блок 4 - вывод текста теории. Этот блок обеспечивает считыва­ние из открытого файла записей и вывод содержимого поля Р2 на экран . Цикл Рог выводит на экран 31 строку текста. После вывода 31 строки на экран, экран очищается и выводятся следующие 31 строка вплоть до появления признака конца файла в поле Р1 очередной счи­тываемой записи. Проверка признака конца файла оформлена оператором цикла REPEAT . В процедурах RAZDEL6-7 использован дополнительно зна­чок # для пометки конца строки. По этому значку с помощью оператора CASE(вывод иллюстраций)прекращается вывод текста теории. Это необхо­димо, т.к. в этих разделах присутствуют рисунки требующие всего экрана.

Блок 5 - проверка условия наличия иллюстрации. Эта проверка производится после считывания очередной записи файла теории с по­мощью условного оператора CASE. С константами оператора сравнива­ется содержимое поля Р1. В случае наличия иллюстрации она выво­дится на экран. Если иллюстрация не требуется/то выполняется далее считывание текста теории и после окончания цикла REPEAT очистка экрана.

Блок 6 - вывод иллюстрации. Вывод осуществляется с помощью оператора OutTextXY.

Блок 7 - очистка экрана. Производится после вывода 31 строки текста.

Блок 8 - проверка конца файла. Осуществляется с помощью опера­тора цикла REPEAT. В поле Р1 последней записи содержится значок"0". При обнаружении этого значка считывание прекращается и цикл завер­шает свою работу.

Блоки 9 -24 обеспечивают работу с контрольными вопросами.

Блок 9 - проверка наличия контрольных вопросов. Этот блок означает, что если это алгоритм работы модулей RAZDEL1 или RAZDEL2 , то блок 8 является последним и так как эти разделы не содержат контрольные вопросы, то после условной вершины блока 9 модуль заканчивает свою работу. Если же мы рассматриваем работу алгоритма для модулей, которые содержат контрольные вопросы, то по "Да" переходим к блоку 10.

Блок 10 - процедура OKNO1 . Эта процедура содержится в библио­течном модуле MYBOOK и формирует заставку с надписью "Контрольные вопросы".

Блок 11 - Случайный выбор номеров вопросов. Выбираются четыре номера вопросов из десяти имеющихся . Это делается случайным обра­зом с помощью генератора случайных чисел RANDOMIZE и функции Random, которая формирует случайное число. Выбранные номера вопро­сов запоминаются в массиве М[0..3] . Элементы этого массива ис­пользуются при поиске нужного вопроса при выводе текста теорети­ческой части и при поиске нужного номера вопроса для вывода текста справки.

Блок 12 - связь с файлом текста вопросов. Блок содержит операторы , устанавливающие связь с файлом текста вопросов, откры­вающие его для чтения и обеспечивающие проверку наличия файлов в каталоге.

Блок 14 - вывод текста очередного вопроса. Записи начинают считываться по одной. Поле Р2 сравнивается с содержимым массива случайно выбранных чисел М[0..3]  . При обнаружении необходимого номера вопроса начинается его вывод на экран с помощью процедуры OutTextXY вплоть до появления признака конца вопроса "*", содер­жащегося в поле Р1.

Блок 15 - проверка наличия иллюстрации. Признаком наличия иллюстрации служит любой символ кроме "*" , "О" в поле Р1. Если при считывании очередной записи обнаружен признак наличия иллюстрации, то она выводится на экран . Проверка наличия иллюст­рации и ее выбор осуществляется с помощью условного оператора CASE.

Блок 16 - вывод иллюстрации. Вывод осуществляется с помощью оператора outTextXY других операторов формирования графических изображений в зависимости от содержания иллюстрации.

Блок 17 - проверка введенного числа. При выводе очередного вопроса на экран внизу экрана располагается надпись : "ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___ " . Обучаемый должен ввести число 1,2,3 или 4. Если введено какое-либо другое число, то на экране останется текст вопроса, место для ввода номера ответа останется пустым. Если же число введено верно, то программа переходит к обработке введенной информации.

Блок 18 - связь с файлом текста справок. Устанавливается связь с файлом текста справок, файл открывается для чтения, осуществля­ется проверка наличия файла в каталоге.

Блок 19 - вывод текста справок. Поиск нужной справки происхо­дит вначале с помощью условного оператора If , когда выбирается запись с нужным номером вопроса . Далее в цикле REPEAT вплоть до появления Признака конца вопроса "*" в поле Р1 происходит поиск нужного номера ответа. Когда номер ответа найден, он выводится на экран .

Блок 20 и 21 - аналогичны блокам 15 и 16.

Блок 22 - фиксация результатов. При считывании и выводе на экран первой записи справки переменной REZY присваивается значе­ние поля Р5 файла текста справок, это поле содержит оценку за ответ на вопрос. Переменная REZY накапливает оценки за четыре ответа. После окончания работы модуля значение этой переменной присваивается переменной главной программы ballY[nomerX]. При повторном вхождении в данный раздел переменная REZY обнуляется.

Блок 23 - очистка экрана. Производится с помощью процедуры ClearDevice.

Блок 24 - Проверка условия конца вопросов. Если вопрос не последний, то программа возвращается к выполнению блока 14 и далее.  Если уже считано и выведено четыре вопроса , то модуль заканчивает свою работу.

3.4. Используемые технические средства

Для работы с данной программой необходимо иметь следующие технические средства: персональный компьютер типа IBM или совмес­тимый с ним , растровый дисплей с графическим адаптером типа EGA, который будет иметь объем видеобуфера 256 К , графический вывод 640x350 пиксел, 16 регистров палитры.

В качестве программного обеспечения для работы данной прог­раммы необходимо иметь DOS, инструментальную интегрированную среду Turbo-Pascal 7.0, набор файлов нестандартных шрифтов bold.chr, goth.chr, sans.chr, trip.chr.

3.5. Вызов и загрузка

Для работы программы необходимо иметь в памяти компьютера следующие файлы: загрузочный модуль graphic.exe, модули razdell.tpu, razde!2.tpu, razdelS.tpu, razde!4.tpu, razdelS.tpu, razde!6.tpu, razde!7.tpu, библиотечный модуль mybook.tpu, файлы нестандартных шрифтов bold.chr,  goth.chr, sans.chr, trip.chr , модуль из библи­отеки языка Pascal graph.tpu, драйвер egavga.bgi, текстовые файлы базы данных: raztexl.pas, raztex2.pas, raztexS.pas, raztex4.pas, raztexS.pas, raztex6.pas, raztex7.pas - содержащие тексты теории, joing.pas,  iod.pas , joi.pas,  iodi.pas,  join.pas,  iodin.pas, jois.pas, iodis.pas, jos.pas, ios.pas - содержащие текст вопросов и справок.

Все они хранятся на жестком диске. Запуск программы осуществля­ется обращением к загрузочному модулю graphic.exe. При этом все необходимые модули автоматически загружаются в оперативную память Объем данной обучающей программы 80 000 байт. Любая IBM PC имеет объем оперативной памяти, доступной для пользовательских программ, не менее 640 Кбайт. Таким образом объем данной обучающей программы является незначительным и никаких трудностей с использованием опера­тивной памяти нет.

Программа имеет одну входную точку - начало программы.

3.6. Входные и выходные данные

Программа для обучения "Графика", работает в диалоговом режиме. Однако, ЭВМ ведет диалог с обезличенным пользователем. ЭВМ не регистрирует фамилии обучаемых и соответственно не ведет журнал. От программиста или оператора не требуется ввод какой-либо информации для запуска программы и начала ее работы. Запуск осуществляетя обращением к загрузочному модулю graphic.exe.

От обучаемого требуется при ответе на контрольные вопросы ввести номер правильного ответа. Согласно введенному числу из файла справок считывается число - оценка за ответ. Оценки за все ответы складываются и затем выставляется одна оценка за работу со всеми вопросами раздела. Таким образом вводимый обучаемым номер ответа можно рассматривать как входную информацию, которая после обработки формирует определенные выходные данные - оценку работы за сеанс.

Контрольные вопросы содержат разделы 3 - 7 . Доступ к изучению этих разделов ограничен. Возможно только два раза ответить на конт­рольные вопросы этих разделов. Все получение оценки фиксируются и хранятся в переменных главной программы до окончания работы с программой.  По разделу меню "Результаты Вашей работы" можно полу­чить на экране ведомость оценок. Обращение к данному разделу меню возможно в любой момент работы.

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

NomerX - переменная, регламентирующая число возможных обраще­ний к процедурам. Может принимать два значения - 1 и 2.

REZY - переменная процедуры, которой присваивается значение выставляемой оценки.

ballY[NomerX] - Переменная, хранящая значение оценки в главной программе. Формируется следующим образом:

baUY[NomerX] :=REZY

Itog[NomerX] - переменная накопления результатов работы за сеанс по итогам двух попыток. Формируется следующим образом:

Itog[NomerX]:=ItogTNomerX3+baIlY[NomerX]

tog[NomerX] - переменная вывода результатов работы за сеанс по итогам двух попыток, формируется следующим образом:

tog£NonterX3: =Round(Itog[NomerX]/K[NomerX]),

где К[NomerX] - переменная, накапливающая число попыток ответов на контрольные вопросы.

Таблица 8

Соответствие между переменными главной программы

и процедур

Имя процедуры Апеременная процедуры

Переменные главной программы

REZY NomerX BallY[NomerX] Itog[NomerX] Tog[NomerX]
RAZDEL30 REZ3 1 Ball3[1] Itog[1] Tog[1]
REZ3 2 Ball3[2] Itog[2] Itog[2]
RAZDEL40 REZ4 1 Ball4[1] Itog[1] Itog[1]
REZ4 2 Ball4[2] Itog[2] Itog[2]
RAZDEL50 REZ5 1 Ball5[1] Itog[1] Itog[1]
REZ5 2 Ball5[2] Itog[2] Itog[2]
RAZDEL60 REZ6 1 Ball6[1] Itog[1] Itog[1]
REZ6 2 Ball6[2] Itog[2] Itog[2]
RAZDEL70 REZ7 1 Ball7[1] Itog[1] Itog[1]
REZ7 2 Ball7[2] Itog[2] Itog[2]

4. ОПИСАНИЕ ПРИМЕНЕНИЯ

4.1. Назначение программы

Программа для обучения работе в графическом режиме языка Turbo-Pascal предназначена для обучения студентов младших курсов Санкт-Петербургской государственной академии аэрокосмического приборостроения. Программа рассчитана на студента, знакомого со стандартом языка, имеющего понятие об инструментальной интегрирован­ной среде , имеющего элементарные навыки работы с персональным ком­пьютером.

Программа содержит семь разделов для изучения по теме "Графи­ческий режим языка Turbo-Pascal" : программирование графических режимов, управление курсором и полем рисования, формирование прямо­линейных монохромных изображений, управление цветом и стилем изоб­ражений, программирование цветных криволинейных изображений, форми­рование графических текстов, программирование озвученных динамичес­ких сцен. Эти разделы практически полностью охватывают тему.

Программу Предполагается использовать как реальное средство обучения. Так как лекционных занятий по теме "Графические средства языка Turbo-Pascal" нет, то наличие данной программы восполняет пробел в теоретической и частично практической подготовки студентов по данной теме. Внедрение данной программы облегчит труд и студентов и преподавателей. Студенты смогут овладеть необходимыми знаниями в более короткий срок и будут освобождены От необходимости поиска нужной литературы. Кроме того режим контроля позволит студенту без помощи преподавателя разобраться в своих ошибках, повторить изучение и вновь проверить свои знания с помощью контрольных вопросов. В про­цессе работы с обучающей программой студент получает и практические навыки общения с ЭВМ, что в условиях дефицита машинного времени также важно. Преподаватель в этом случае освобождается от объяснения студентам теоретического материала и получает достаточно времени для индивидуальной работы с ними. Работая с программой каждый обучаемый может затратить неодинаковое время на изучение каждого раздела. Ин­дивидуальный темп работы обеспечивает повышение качества знаний.

4.2. Условия применения

4.2.1. Технические средства

Предлагаемая программа для обучения написана на языке Turbo-Pascal 7.0 . Она предназначена для установки на IBM PC и требует наличия монитора со следующими характеристиками: графический адаптер типа EGA, который будет иметь объем видео­буфера 256 К , графический вывод 640x350 Пиксел, 16 регистров палитры.

Необходимо иметь в качестве программного обеспечения операционную систему DOS , инструментальную интегрированную среду Turbo-Pascal 7.0 , набор файлов нестандартных шрифтов bold.chr, goth.chr, sans.chr, trip.chr.

4-2.2. Общие характеристики входной и выходной информации

Программа для обучения "Графика" работает в диалоговом режиме. При этом ЭВМ работает с обезличенным пользователем и требует лишь механической реакции на свои действия. Для начала работы программы достаточно обратиться к загрузочному модулю graphic.exe. В качестве входной информации в данной программе можно рассматривать вводимы обучаемым номера правильных ответов при работе с контрольными вопро­сами. Введение номера ответа влечет за собой следующие действия программы: Введенный номер считывается с клавиатуры и фиксируется в переменной СН. Затем при считывании файла справок значение этой переменной сравнивается со значением соответствующего поля номеров ответов. При совпадении этих значений переменной оценки RE2X присва­ивается значение поля Р5 , в котором расположены оценки за все варианты ответов. Далее эта переменная накапливает оценки за все четыре ответа/ обрабатывает их и формирует оценку за работу с разде­лом. Эта оценка передается в главную программу. Главная программа обеспечивает вывод этих оценок на экран по разделу меню "Результаты Вашей работы". Кроме того главная программа обрабатывает все оценки по разделам и формирует оценку работы за сеанс. Таким образом значения переменных вывода оценок являются выходной информацией. Подробнее процесс формирования выходной информации описан в подпунк­те 3.6.

4.3. Пример использования

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

Итак, программа запущена на исполнения. На экране появляется заставка с названием программы -  "Графика",  полное наименование -"Программа для обучения работе в графическом режиме", фамилия разработчика, место и год создания. Для "перелистывания экранов" необходимо пользоваться клавишей Enter.

Нажимаем Enter. На экран выводится текст введения. В нем кратко описано содержание данной обучающей программы. После его прочтения можно перейти непосредственно к работе.

Нажимаем Enter. На экране появляется окно вертикального меню. Внешний вид меню изображен в приложении 3. Перемещая курсор с по­мощью клавиш-стрелок вниз и вверх мы можем выбрать желаемый режим работы. Их, как было описано выше в подразделе 3.3 ,три. Выберем режим обучения. Допустим, курсор остановился на разделе 3 с назва­нием "Формирование прямолинейных монохромных изображений". Для изучения этого раздела следует нажать клавишу Enter.

Нажимаем Enter. Появляется экран , оформленный небольшой по толщине рамкой во весь экран. В верхней строке помещается название изучаемого раздела : ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРА­ЖЕНИЙ. В левой части экрана расположен текст теории, который содер­жит наименования процедур, выделенных красным цветом, и пояснения их работы. В правой части экрана расположены рисунки, поясняющие их работу, а именно фигуры, которые можно построить с помощью данных процедур. Изучив полученную информацию, можно перейти к следующему экрану. Текст теории раздела 3 содержится на трех экранах.

Изучив содержимое третьего экрана нажимаем клавишу Enter. На экране появляется заставка с надписью "Контрольные вопросы". Далее , после очередного нажатия Enter , на экран будет выведен текст первого вопроса.

Экран вопроса выглядит следующим образом. Экран оформлен той же рамкой, что и экран теории. Верхние строки занимает текст вопроса, выделенный крупным шрифтом. Ниже вертикально располо­жены четыре варианта ответа на поставленный вопрос. Если выве­денный вопрос содержит иллюстрацию, то она расположена на уровне вариантов ответов в правой части экрана.  Нижнюю строку экрана занимает надпись :  "ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___". Прочитав все варианты и проанализировав их нужно выбрать один и ввести его, нажав клавишу с соответствующей цифрой. Если нажата клавиша отличная от клавиш 1,2,3 или 4, то После нажатия клавиши Enter введенный символ будет стерт, вопрос останется на экране. Номер ответа придется ввести вновь.

Если введено допустимое число, то после нажатия клавиши Enter на экран будет выведен текст справки. Экран при этом оформлен ана­логично экрану вопроса. Текст справки располагается в средней части экрана и содержит оценку за ответ в формулировке "правильно" или "неверно" и краткую информацию о допущенных ошибках.

После нажатия Enter на экран выводится текст второго вопроса. Действия ЭВМ и обучаемого аналогичны действиям с первым вопросам.

После прочтения последней справки последнего вопроса мы нажимаем Enter и возвращаемся в окно меню. Далее можно войти в любой другой раздел для изучения. Войдем в раздел "Результаты Вашей работы". Для этого переместим курсор в позицию с данным названием и нажмем клавишу Enter. На экране появилась ведомость оценок. Текст выполнен ярко-розовым цветом на синем фоне. Слева перечислены названия 7 изучаемых разделов, а справа два столбца оценок -первая попытка и вторая попытка. В графе "Формирование прямолинейных монохромных изображений" первая попытка стоит оценка (например "2"). В остальных графах стоят "О". Последняя графа левого столбца называ­ется "Оценка работы за сеанс" . В этой графе 1 попытка стоит оценка "4".

Для выхода из раздела "Результаты Вашей работы" необходимо вновь нажать клавишу Enter. Если повторно войти в третий раздел и ответить на вопросы, а затем войти в раздел "Результаты Вашей работы", то в графе "Формирование графических режиме" вторая попытка будет стоять не "О", а оценка (например, "4").  Третий раз войти в третий раздел нельзя, т.к. разрешено сделать только две попытки.

Через меню войдем в четвертый раздел "Управление цветом и стилем изображений". Порядок работы в этом разделе такой же как и в преды­дущем, как и в последующих. После изучения теории отвечаем на конт­рольные вопросы. Закончив работу с вопросами обучаемый попадает в окно меню и вновь может узнать результаты своей работы в виде оценок.  Для этого необходимо вновь войти в раздел "Результаты Вашей работы, подведя курсор к разделу с этим названием и нажав клавишу Enter. Теперь к уже имеющимся двум оценкам по разделу "Формирование прямолинейных монохромных изображений" добавилась еще одна оценка в графе "Управление цветом и стилем изображений" первая попытка (например, "5") . Изменилась оценка работы за сеанс первой попытки и стала "4".

Нажав вновь клавишу Enter вернемся в окно меню. На этом закон­чим работу с программой. Для этого необходимо подвести курсор к разделу с названием "Конец работы". На экране появляется заставка с надписью "Вы хотите закончить работу с программой Y/N?" . Нажимаем клавишу "Y" или "Н" и выходим из программы. При нажатии любой другой клавиши на экране появится окно меню.

Если после выхода из программы вновь в нее войти и через меню войти в раздел "Результаты Вашей работы", то во всех графах будут находится "О". Это означает, что при выходе из программы результаты работы с ней не сохраняются. Поэтому, перед выходом из программы следует предъявить ведомость оценок преподавателю.

5. РУКОВОДСТВО ПРОГРАММИСТА

5.1. Назначение и условия применения программы

Программа для обучения работе в графическом режиме языка Turbo-Pascal предназначена для обучения студентов младших курсов СПГУАП. Она знакомит студентов в основами программирования в графическом режиме, возможностями языка и turbo-среды, дает навыки работы с компьютером. Программа содержит материал для изучения по следующим темам:

1) Программирование графических режимов.

2) Управление курсором и полем рисования.

3) Формирование прямолинейных монохромных изображений.

4) Управление цветом и стилем изображения.

5) Программирование цветных криволинейных изображений.

6) Формирование графических текстов.

7) Программирование озвученных динамических сцен.

Изучение темы по данным разделам обеспечивает основная прог­рамма graphic и семь модулей RAZTEX1-RAZTEX7.

Основная программа выполняет следующие функции: формирует заставку, окно меню, вызывает на исполнение модули , формирует и выводит на экран ведомость оценок. Модули RAZTEX1-RAZTEX7 выпол­няют функции: связь с файлами базы данных, вывод на экран текста теории, вопросов, справок, считывание оценки за ответы на вопросы из файла справок.

Для успешной работы программы необходимо иметь персональный компьютер IBM или совместимый с ним, растровый дисплей с графи­ческим адаптером типа EGA с объемом видеобуфера 256 К, разрешением экрана 640x350 пиксел, 16 регистрами палитры. В качестве программ­ного обеспечения необходимо иметь DOS, инструментальную интегриро­ванную среду Turbo-Pascal 7.0 . Вызов И загрузка программы подроб­нее описаны ниже в подразделе 5.3.

5.2. Характеристики программы

Программа для обучения рассчитана на работу в течение 45 минут. Программа работает в диалоговом режиме. В начале работы студенту предлагается воспользоваться окном меню для выбора раздела для изучения. Далее выдается теоретическая часть . После нее предлага­ются контрольные вопросы. Вопросы выдержаны в режиме "вопрос -четыре варианта ответа" . Обучаемому предлагается выбрать один и ввести номер правильного ответа. Введенный ответ обрабатывается и выводится на экран справка о его правильности.

Инструментальная интегрированная среда Turbo-Pascal имеет хорошо развитую службу помощи. Поэтому при возникновении ошибок она выдает на экране в верхней строке код ошибки и ее название. Для избежания возникновения ошибок следует внимательно вносить изменения в базу данный и программу , если это потребуется, четко выдерживать размеры полей файлов записей базы данных. Изменения в программу вносить только после подробного знакомства с програм­мными документами. Особое внимание следует обратить на необходимость преобразования ASCIIZ-строки в строку стандарта Pascal при выводе ее на экран, а также преобразование символьного представления числа в двоичную форму перед тем как проводить сравнения его с числом.

Если на экране при выводе текста появляются значки - признаки конца строки - это значит, что не соблюдены длины полей в соответствующем файле базы данных.

5.3. Обращение к программе

Для успешной работы программы необходимо иметь в памяти компьютера следующие файлы: загрузочный модуль graphic.exe, библиотечные модули RAZDELl.tpu, RAZDEL2.tpu, RAZDEL3.tpu, RAZDEL4.tpu, RAZDELS.tpu, RAZDEL6.tpu, RAZDEL7.tpu, MYBOOK, файлы нестандартных шрифтов bold.chr, goth.chr, sans.chr, trip.chr, модуль среды Turbo-Pascal graph.tpu, драйвер egavga.bgi, тексто­вые файлы базы данных : raztexl.pas, raztex2.pas, raztexS.pas, raztex4.pas, raztexS.pas, raztex6.pas, raztex7.pas - содержащие тексты теоретической части, joing.pas, iod.pas, joi.pas, iodi.pas, join.pas, iodin.pas, jois.pas, iodis.pas, jos.pas, ios.pas - содер­жащие тексты вопроов и справок .

Все эти файлы хранятся на жестком диске. Запуск программы на исполнение осуществляется обращением к загрузочному модулю graphic.exe. При этом необходимые модули автоматически подгружа­ются в оперативную память компьютера. Объем данной обучающей прог­раммы 80 000 байт, что значительно меньше объема оперативной памяти любого персонального компьютера.

Необходимо, чтобы загрузочный модуль, библиотечные модули программы, а также файлы нестандартных шрифтов, модуль graph.tpu и драйвер egavga.bgi находились в одном каталоге. В противном случае работа программы становится невозможной.

5.4. Входные и выходные данные

Как пояснялось выше данная обучающая программа работает в диалоговом режиме с обезличенным пользователем. Программа не требует ввода фамилии, группы и т.д. и соответственно не веден никаких журналов. Для запуска программы на исполнение от програм­миста не требуется ввод какой-либо входной информации.  В качестве входной информации можно рассматривать введение обучаемым номеров правильных ответов. Введенное число считывается, анализируется и в результате выводятся на экран оценки, являющаяся выходными данными. Оценку можно увидеть , войдя в раздел "Результаты Вашей работы". Ведомость результатов работы сохраняется в течение всех работы с программой, однако после выхода из программы ведомость ликвидируется. Таким образом выходная информация имеет место, однако не сохраняется.  Подробнее о процессе формирования выходных данных можно узнать из подраздела 3.6.

6. РУКОВОДСТВО ОПЕРАТОРА

6.1. Назначение программы

Программа для обучения работе в графическом режиме "Графика" предназначена для обучения студентов младших курсов Санкт-Петербург­ской государственной академии аэрокосмического приборостроения работе с графическим режимом языка Turbo-Pascal. Программа предус­матривает изучение темы по семи разделам , которые оформлены в семи модулях. Программу предполагается использовать для обучения студентов различных специальностей. Изложенный в ней материал дает возможность студентам быстро и эффективно овладеть навыками работы в графическом режиме. Подробнее с назначением данной обуча­ющей программы можно ознакомиться в подразделе 1.2.

6.2. Условия выполнения программы

Данная обучающая программа написана на языке Turbo-Pascal 7.0 Для ее успешной работы необходимо наличие персонального компьютера типа IBM или совместимого с ним. Программа написана в расчете на графический адаптер типа EGA с объемом видеобуфера 256 К, графичес­ким выводом 640x350 пиксел, 16 регистров палитры.  Перечисленные аппаратурные средства являются минимально необходимыми для работы программы.

В качестве программного обеспечения необходимо иметь DOS, Turbo-Pascal 7.0, в текущем каталоге - файлы нестандартных шрифтов, используемые  программой: goth.chr, sans.chr, trip.chr, bold.chr, библиотечный модуль Turbo-Pascal - graph.tpu, драйвер egavga.bgi. Непосредственно для работы программы требуется иметь в текущем каталоге загрузочный модуль программы "Графика" - graphic.exe, библиотечные модули программы - RAZDELl.tpu, RAZDEL2.tpu, RAZDELS.tpu, RAZDEL4.tpu, RAZDELS.tpu, RAZDEL6.tpu, RAZDEL7.tpu, файлы базы данных - raztexl.pas, raztex2.pas, raztex3.pas, raztex4.pas, raztexS.pas, raztex6.pas, raztex7.pas, joing.pas, joi.pas, join.pas, jois.pas, jos.pas, iod.pas, iodi.pas, iodin.pas, iodis.pas, ios.pas.

6.3. Выполнение программы

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

1) Включить компьютер и подготовить его к работе.

2) Проверить наличие на данной ЭВМ необходимых для выполнения программы программных средств перечисленных в подразделе 6.2.

3) В случае отсутствия каких-либо файлов в текущем каталоге, но наличии их на другом диске, переписать в текущий каталог пользуясь командами Norton Commander.

4) Запуск программы осуществляется из Norton Commander. Необхо­димо обратиться к загрузочному модулю программы с именем graphic.exe. При этом необходимые модули автоматически будут загружены в оператив­ную память. Далее программа будет выполняться в диалоговом режиме. На экране появится заставка с названием программы.

5) Чтобы работать с программой необходимо "листать" экраны с помощью клавиши Enter. При работе с вопросами вводить номер правиль­ного ответа с клавиатуры путем нажатия на клавиши с соответствующими цифрами.

6) Для выхода из программы необходимо войти в раздел меню "Конец работы" и нажать клавишу с символом "Y" или "Н". После этого для возвращения в Norton Commander необходимо нажать любую клавишу.

7) В случае внезапного прекращения работы программы или начального отказа от запуска вернуться в Norton Commander и еще раз проверить наличие необходимого программного обеспечения. Если ошибка загрузки и запуска не найдена, видимо ошибка в программе или базе данных и следует обратиться к программисту.

6.4. Сообщения оператору

В процессе работы программы оператору могут выдаваться следующие сообщения.

При окончании работы с программой , после ответа на вопрос "Вы хотите закончить работу с программой Y/N ?", на экран, закрашенный розовым цветом выдается сообщение "Press ENTER to return to the Norton Commander". По этому сообщению следует нажать клавишу ENTER и выйти в Norton Commander. Работа с программой завершена.

Если в процессе выполнения программы не найден файл базы данных, к которому в данный момент обращается программа, то на экран выводится сообщение "Runtime error 002 at 0125:04E5. Press ENTER to return to the Norton Commander". По этому сооб­щению следует нажать клавишу ENTER, выйти в Norton Commander, проверить наличие файла базы данных который не был найден. Если файл отсутствует, то следует его загрузить в текущий каталог. Если файл имеется в каталоге, то вероятнее всего ошибка в прог­рамме и следует обратиться к программисту. В любом случае сущест­вует возможность исключить неисправный модуль и продолжать работу с программой . Эту задачу может также решить программист.

Если в процессе выполнения программы в определенный момент времени файл базы данных найден, однако он пуст, на экран выводится сообщение:"Runtime error 100 at 01B6:076А. Press ENTER to return to the Norton Commander". По этому сообщению оператору следует нажать клавишу ENTER, вернуться в Norton Commander, проверить содер­жимое файла.

Если на экране появляются значки признака конца строки, а затем надпись "Runtime error 100 at 0454:OOAF. Press ENTER to return to the Norton Commander" , то это означает, что ошибка содержится в файле базы данных, а именно не соблюдены длины полей записей. При возникновении такой ошибки следует обратиться к программисту.

7. ТЕХНОЛОГИЯ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ

Предлагаемый программный продукт является средством обучения студентов работе в графическом режиме алгоритмического языка TURBO-PASCAL 6.0\7.0. Программа рассчитана на использова­ние в качестве теоретически-практической подготовки студентов 1,2,4,5,8 факультетов Санкт-Петербургской Государственной Академии аэрокосмического приборостроения по курсам "Информа­тика", "Алгоритмизация и программирование", "Методы программи­рования".

Данная обучающая программа работает  в режиме  "Обучение -контроль". При начале работы студенту предлагается через сис­тему меню выбрать  для изучения один из следующих разделов: программирование графических режимов,  управление курсором и полем  рисования,  формирование  прямолинейных   монохромных изображений, управление цветом и стилем изображений,  програм­мирование  цветных  криволинейных  изображений,  формирование графических текстов,  программирование озвученных динамических сцен. Когда студент выбрал тему для изучения , ему предлагается теоретических курс по этой теме, снабженный необходимыми иллюст­рациями, звуковыми эффектами, поясняющими излагаемый материал. Первые два раздела на этом завершаются и студент возвращается в начало , он может вновь через  меню выбрать очередной  раздел. Разделы 3,  4, 5,  6 и  7 содержат  контрольные вопросы. Студент, выбравший для изучения один из этих разделом имеет возможность после получения теоретической информации самостоятельно прове­рить свои знания.   Ему предлагается ответить на 4 вопроса по теме. После ответа на каждый вопрос обучающийся получает справку о правильности ответа. В случае неверного ответа поясняется ошиб­ка.  За каждый ответ выставляется оценка и результирующая оценка работы с данным разделом запоминается в разделе меню "Результаты Вашей работы". Результаты работы сохраняются до выхода из програм­мы. Таким образом в конце работы преподаватель может просмотреть все оценки и при необходимости зафиксировать из в групповом журна­ле.  К разделам, содержащим контрольные вопросы, студент может обратиться только два раза.

Данная обучающая программа предусматривает индивидуальное обучение студентов. Темп диалога ЭВМ-пользователь задает сам сту­дент. Это, а также возможность повторного изучения каждой темы, дает в результате лучшее усвоение изучаемого материала.

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

В настоящее время курс лекций по теме "Графический режим" отсутствует. Практические занятия ведутся с использованием мето­дической разработки кафедры Вычислительных машин "Графические средства алгоритмического языка TURBO-PASCAL", выпущенной в 1992 году . Практически изучение графического режима и его возможнос­тей оставлено на самостоятельную работу студентам. Обучающая программа так же предусматривает самостоятельную работу с исполь­зованием ЭВМ . Однако, она имеет следующие преимущества:

1) наглядность изучаемого материала;

2) индивидуальный темп диалога ЭВМ-пользователь;

3) самостоятельный контроль знаний и как следствие повышение их качества;

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

5) возможность, в случае необходимости, быстрого обновления и расширения базы данных вплоть до полного замены изучаемых тем;

8. ПЛАНИРОВАНИЕ НАУЧНО-ТЕХНИЧЕСКОЙ ПОДГОТОВКИ ПРОИЗВОДСТВА

8.1. Построение ленточного графика проектирования программы

Планирование научно-технической подготовки производства заключается в составлении календарных планов выполнения комп­лексов работ, определении денежных средств, необходимых для их реализации, а также потребных трудовых и материальных ре­сурсов. Разработка программного обеспечения является одной из трудоемких задач, что приводит к высоким затратам и большому удельному весу стоимости программы. Рассмотрим и оценим затраты , необходимые для реализации задач, поставленных темой данной работы.

В соответствии с технических заданием требуется создать про­грамму для обучения работе в графическом режиме языка TURBO-PASCAL 6.0\7.0. Для ее создания необходимо не только написание программы, но и подготовка соответствующих методических материалов. Так как тема обучающей программы связана с программированием, то данную работу могут полностью выполнить инженеры-программисты. При разра­ботке темы данной дипломной работы целесообразно привлечение группы специалистов, состоящей из трех человек: одного инженера-программиста первой категории и двух инженеров-программистов третьей категории.

Для составления ленточного графика проектирования программы необходимо составить перечень необходимых работ, которые потребу­ется выполнить в процессе проектирования, и оценить их трудоем­кость. В соответствии с технологией и планированием разработки программ работу по созданию данной программы можно разбить на сле­дующие компоненты: разработка требований, составление алгоритма, написание программы, отладка. Для определения временных затрат используем метод экспертных оценок и метод обработки экспертных оценок - раздельное оценивание составляющих затрат. При этом определяем для каждого вида работ ai - наименьшую возможную, mi - наиболее вероятную , bi - наибольшую возможную величину затрат. Ожидаемая величина затрат MOi и стандартное отклонение Qi для каждой компоненты составят соответственно:

ai+4m+b;

M0i= ---------   ,

        6 

bi-ai

Qi = ---------   .

        6 

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

n

МО = Е Moi    ,

    I=1

  n

Q =    E Qi2

 I=1

Оценка затрат времени на разработку программы приведена в табл. 9

Таблица Затраты времени на разработку программы, чел.-дн.

Компоненты ai mi bi MOi Qi MO Q
Разработка требований
13 17 21 17,0 1,3
Составление алгоритма 23 24 33 25,3 1,7 89,9 2,6
Написание программы 23 30 30 28,8 1,2
Отладка 26 29 31 28,8 0,8

Для составления перечня работ разобьем компоненты на сос­тавляющие следующим образом:

1) разработка требований: разработка требований к программ­ному обеспечению, разработка методических материалов;

2) составление алгоритма: составление алгоритма;

3) написание программы: написание основной программы, написание процедур, создание базы данных;

4) отладка: отладка основной программы, отладка модулей, общая отладка.

Оценку трудоемкости проводим в соответствии с данными табл. 9   Перечень работ и их трудоемкость приведены в табл. 10

Таблица 10

Перечень работ по созданию обучающей

Программы

Компоненты Наименование работы Код работы Исполнитель Длительность работ, дн.
Разработка требований Разработка требований к программному обеспечению 1 Инженер-программист 1 категории 3
Разработка требований Разработка методических материалов 2 Инженер-программист 3 категории 14

Продолжение табл. 10

Компоненты Наименование работы Код работы Исполнитель Длительность работ, дн.
Составление алгоритма Составление алгоритма 3 Инженер-программист 1 категории 15
Инженер-программист 3 категории 10,3
Написание программы

Написание

основной программы

4 Инженер-программист 1 категории 5
Написание подпрограмм 5 Инженер-программист 3 категории 5
Создание базы данных 6 Инженер-программист 3 категории 18,8
Отладка Отладка основной программы 7 Инженер-программист 1 категории 12,8
Отладка модулей 8 Инженер-программист 3 категории 13
Общая отладка 9 Инженер-программист 3 категории 2

Как видно из приведенной выше таблицы для работы над программой привлекаются инженеры-программисты 1 и 3 категории. Причем с учетом всех видов работ целесообразно привлечь одного инженера программиста 1 категории и двух инженеров-программистов 3 катего­рии. В этом случае часть работ возможно выполнять параллельно.

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

Ленточный график возможно построить пользуясь табл. , распределив работы между исполнителями с учетом квалификации и загрузки. Ленточный график работы над созданием обучающей прог­раммы приведен в табл. 11

Таблица 11

Код работы

Длительность работы, дн.

   3    7          17         26            38

1 ---
2

-------

-------

3

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

         --------

4 ----
5 ----
6 -----------------------
7 -----------------
8 ------------------
9 --

8.2. Расчет сметы затрат

К разработке обучающей программы привлечены три инженера-программиста разной категории. Специалистам назначаются месячные оклады. Из составленного выше ленточного графика видно, что инженер-программист 1 категории имеет загрузку 35 рабочих дней, один инженер-программист 3 категории имеет 35 рабочих дней и второй инженер-программист 3 категории - 28 рабочих дней. С уче­том выходных и праздничных дней в среднем в месяце приходится 20 рабочих дней. Их расчета 20 рабочих дней месяца сделаем расчет фонда заработной платы. Инженер-программист 1 категории будет работать 1 месяц 15 дней, первый инженер-программист 3 категории - 1 месяц 15 дней, а второй инженер-программист - 1 месяц 8 дней.  Каждому специалисту начисляется основная и допол­нительная заработная плата в соответствии с отработанным временем Расчет фонда заработной платы приведен в табл. 12

Таблица 12

Должность

Оклад

Руб./мес.

Дополнитель-ная заработ-ная плата, % Дополнитель-ная заработ-ная плата, % Количество рабочих дней Общий фонд заработной платы, руб.
Инженер програм-мист 1 категории 800 15 120 35 3 783 500
Инженер програм-мист 3 категории 600 15 90 35
Инженер програм-мист 3 категории 600 15 90 28

Предполагается работа на арендуемой технике. Стоимость одного часа машинного времени 1000 руб.. Время работы над программой составляет  98 дней, что соответствует  764 часам из расчета 8-часового рабочего дня.  Арендная плата за это время составит 764 000 руб.. Отчисления на социальное страхо­вание, расходы на научные и производственные командировки и накладные расходы составляют соответственно 14%, 5%, 60% общего фонда заработной платы. После изготовления программа должна пройти недельное испытание. Для этого необхоимо ис­пользовать ЭВМ. Таким образом необходимо дополнительное ма­шинное время в обьеме 40 часов. В смете затрат расходы на арендную плату за 40 часов машинного времени внесем в статью "Работы и услуги сторонних организаций".

Расчет сметы затрат приведен в табл. 13

Таблица 13

Смета затрат

Статья расхода Сумма, руб. Итоговая сумма Сумма, %    к итогу
Специальное оборудование для 764 000 научных работ 764 000 7 476 465 10,0
Общий фонд заработной платы 3 787 500 50,2
Отчисление на социальное страхование 529 690 7.0
Расходы на научные производственные командировки 189 175 2,5
Работы и услунни сторонних организаций 40 000 0,3
Накладные расходы 2 270 100 30,0

9. ВОПРОСЫ ОХРАНЫ ТРУДА И ОКРУЖАЮЩЕЙ СРЕДЫ.

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

9.1. Основные санитарно-технические требований к помещению

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

1) основные санитарно-технические требования к вычислитель­ному центру;

2) характеристика санитарно-гигиенических условий труда пользователя;

3) расчет необходимого воздухообмена;

4) система освещения;

5) инженерно-технические мероприятия по созданию благопри­ятных условий труда пользователя;

- защита от шума,

- защита от излучения,

- меры защиты от поражения электрическим током;

6) противопожарные требования;

7) организация рабочего места при работе с терминалом;

8) приборы контроля параметров среды.

Рассматриваемое помещение является вычислительный центр. Во время учебных занятий в нем находится группа пользователей из 10 человек. Площадь вычислительного центра составляет 30 кв. м. и высотой 3,5 м.  К вычислительному центру предъявляются следующие требования:

1) размеры помещения (площадь, объем, высота) должны соот­ветствовать количеству работающих в нём человек и размещаемому в нем комплексу технических средств;

2) рациональное цветовое оформление помещения;

3) обеспечение изоляции от шумов, принятие мер для снижения шума, проникающего в помещение извне;

4) соблюдение требований, предъявляемых к отделке помещения;

5) обеспечение системы отопления и вентиляции;

6) соблюдение норм чистоты воздуха, температуры, относите­льной влажности;

7) соблюдение норм освещенности;

8) соблюдение защиты помещения от вхождения в него посторон­них лиц;

9.2. Характеристика санитарно-гигиенических условий труда

9.2.1.Микроклимат производственного помещения

Микроклимат производственного помещения определяется темпе­ратурой, относительной влажностью и скоростью движения воздуха.

Согласно ГОСТ 12.1.005-76 "ССБТ. Воздух рабочей зоны" нормиро­вание параметров микроклимата в рабочей зоне производится в зависи­мости от периода года, категории работ по энергозатратам, избытка явного тепла. По избыткам явной теплоты помещение учебной лаборато­рии относится к помещениям с незначительными избытками явной тепло­ты, приходящимися на 1 куб.м объема помещения,  23,2 Дж/(м*с). В данном помещении выполняются легкие физические работы, характерис­тика которых приведена в табл. 14.

В табл. 15 приведены оптимальные параметры микроклимата, допус­тимые параметры для холодного и переходного периода года приведены в табл. 16, а для теплого периода года в табл. 17.

Таблица 14

Характеристика легкой физической работы

Работа Категория Энергозатраты организма Характеристика работы
Легкая физическая 1 до 172 Дж/с (150 ккал/ч)

Производимая сидя, стоя или связанная с ходьбой, но не тре­бующая систематичес­кого физического напряжения или

поднятия тяжестей

Таблица 15

Оптимальные параметры микроклимата

Период года Температура, С Относительная влажность, % Скорость движения воздуха, м/с

Холодный и переходный (температура наружного

воздуха ниже +10 град. С)

20 - 23 60 - 40 не более 0,2
Теплый (температура на­ружного воздуха +10 С и выше) 22 - 25 60 - 40 не более 0,2

Таблица 16

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

периода года

Температура возуха, С Относительная влажность, % не более Скорость движения воздуха, м/с, не более Температура воздуха вне постоян ных рабочих мест С
19 - 25 75 0,2 15 - 26

    

Таблица 17

Допустимые параметры для теплого периода года

Температура возуха, С Относительная влажность, % не более Скорость движения воздуха, м/с, не более Температура воздуха вне постоянных рабочих мест С
Не более чем на 3 выше средней температуры наружного воздуха в 13 ч При 28 С не более 55, при 27 С не более 60, при 26 С |не более 65, при 25 С не более 70, при 24 С и ниже не более 75 0,2 - 0,5 Не более чем на 3 выше средней температуры наружного воздуха в 13 ч самого жаркого месяца

    

9.2.2. Вредные вещества и пыль

При работе пользователей в вычислительном центре профилактика вычислительной техники не проводится, вредные вещества не используются. Однако, в помещении присутствует нетоксичная пыль. Максимально-разовая предельно-допустимая концентрация нетоксичной пыли, скапливающейся на оборудовании составляет 0,5 мг/куб. м. , а среднесуточная - 0,15 мг/куб. м.

9.2.3. Излучение

В табл. 18  приведены нормированные значения излучения.

Таблица 18

Нормированные значения излучения на рабочем месте

Наименования показателей Нормированные значения, не более
Уровень неиспользованного рентгеновского излучения на расстоянии 0,05 м 100 мкР/ч
Плотность потока ультра­фиолетового излучения 10 Вт/кв. м.

Напряженность электричес­кого поля на рабочем месте

15кВ/м

15 кВ/м.

9.2.4. Освещенность

Нормированное значение освещенности на рабочем месте по СНиП П-4-79  приведено в таблице 19.

Таблица 19

Наименьшая освещенность рабочих поверхностей в производственных помещениях /по СНиП П-4-79/

Характеристика зрительной работы Наименьший размер объекта различения, мм Освещенность Ен, лк
газорязрядные Лампы накаливания
Система освещения
Комбинир. общая Комбинир. общая
Высокой точности От 0,3 до 0,5 750 300 600 200

9.2.5. Шум

Согласно ГОСТ 12.1.003-83 устанавливаются допустимые уровни звукового давления. Они приведены в

Таблица 20

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

Рабочие

Места

Уровни звукового давления, дБ, в октавных полосах со среднегеометрическими частотами, ГЦ Уровень звука, ДБА
63 125 250 500 1000 2000 4000 8000

Помещения вычис-

Лительных центров

71 61 54 49 45 42 40 38 50

9.3. Расчет необходимого воздухообмена

Для нормализации  воздушной среды производится расчет воздухообмена в производственном помещении.

Согласно СН 245-71 в производственных помещениях с объемом на одного работающего менее 20 куб. м. следует проектировать подачу наружного воздуха в количестве не менее 30 куб.м./ч на каждого ра­ботающего. Рассчитаем объем приточного воздуха L по кратности воз­духообмена:

L = k * v, м/ч ,

где k - рекомендуемая кратность воздухообмена, которая для обычных производственных помещений обычно составляет 1 - 10 (в расчетах мы принимаем ее равной 2),

v - объем помещения.

Таким образом,

L =2 * 160 = 320 куб.м/ч.

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

9.4.Система освещения

Искусственное освещение по своему устройству бывает двух систем: общее и комбинированное . При выборе системы освещения учитывают психологические, физиологические, экономические и конструктивные факторы. Так как в помещении выполняются работы высокой точности IIIв, то целесообразнее использовать систему общего освещения. В нее включаются потолочные и подвесные люминесцентные светильники общей освещенностью 400 лк. Светильники распределяются равномерно рядами и параллельно источникам прямого света, так чтобы экран монитора находился в зоне защитного угла светильника, и его проекция не приходилась на экран монитора. Причем, для таких светильников рекомендуется использовать люминесцентные лампы мощностью по 40 Вт серий ЛП013, ЛП031, ЛПОЗЗ.

Для улучшения освещенности важно правильно подобрать цветовую отделку интерьера и оборудования. Обычно потолок и стены выше пане­лей 1.5 - 1.7 м, если они не облицованы звукопоглощающим материалом, окрашиваются водоэмульсионной краской светлых, холодных тонов.

9.5. Инженерно - технические мероприятия благоприятных условий труда

9.5.1. Защита от шума

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

Для обеспечения изоляции помещения от шумов, проникающих извне можно использовать акустическую обработку помещения, которая заклю­чается в облицовке потолка и стен звукопоглощающим материалом, причем для достижения максимально возможного звукопоглощения необхо­димо облицевать не менее 60% общей площади внутренних поверхностей помещения.

Для сохранения стабильности звукопоглощающих характеристик такого покрытия необходимо периодически осуществлять различные про­филактические мероприятия. Для уменьшения звука, поступающего извне данное помещение не должно граничить с помещениями, имеющими повы­шенные уровни воздушного и ударного шума, а также располагаться вблизи таких "шумных" помещений. Источники загазованности и вибрации в данном помещении отсутствуют.

9.5.2.Защита от излучения

Результаты спец исследований показали, что мониторы испускают слабые рентгеновские лучи, но интенсивность такого излучения сос­тавляет менее половины мили рентгена в час - намного меньше допус­тимого уровня. Но даже от такого незначительного излучения можно защититься. В зависимости от условий воздействия электромагнитных полей (ЭМП), характера и местонахождения источника могут быть использованы следующие виды защиты :

1) защита временем, использующаяся в случае невозможности снизить интенсивность излучения в рабочей зоне;

2) защита расстоянием, позволяющая существенно уменьшить степень поражения излучением, так как интенсивность убывает пропор­ционально квадрату расстояния;

3) экранирование источника излучения или рабочего места. Оно должно отвечать следующим требованиям :

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

- обеспечивать удобства в работе;

- обеспечивать безопасность работы в отношении механических и электрических травм.

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

1) ввиду того, что незначительная утечка излучения из кинес­копа обнаруживается только в пределах нескольких миллиметров от поверхности экрана и по мере удаления доза уменьшается, то можно применять защиту расстоянием. Нормальным расстоянием, на котором излучение не регистрируется даже чувствительной измеризмерительной аппаратурой является расстояние  0.3 - 0.4 метра;

2) можно использовать защитный экран или сетку.

9.5.3.  Меры защиты от поражения электрическим током

Статистика показывает, что число травм, вызванных электри­ческим током, составляет 11-12% от их общего числа. Но из всех случаев со смертельным исходом наибольшее количество происходит в результате поражения электрическим током. Причем до 80% всех слу­чаев электротравматизма со смертельным исходом приходится на элек­трооборудование напряжением до 1000 Вив первую очередь 220...380 В.

Электрооборудование в основном относится к установкам напря­жением до 1000 В, исключения составляют лишь экранные пульты, дис­плеи, электронно-лучевые трубки, которые имеют напряжение в несколь­ко киловольт.

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

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

Таблица 21

Классификация помещения по степени опасности поражения человека электрическим током

Класс помещения Характеристика помещения
Без повышенной опасности Сухое, не жаркое, с токонепроводящим по­лом, без токопроводящей пыли, отсутству­ет возможность одновременного прикосновения человека к имеющим соединение  с землей металлоконструкциями зданий, тех­нологическим аппаратам, механизмам и т.п. с одной стороны,  и к металлическим корпусам  электрооборудования,  которые при пробое изоляции могут оказаться под напряжением, - с другой стороны

К техническим  мероприятиям, обеспечивающим  безопасность работ со снятием напряжения относятся:

- отключение оборудования на участке, принятие мер против оши­бочного или самопроизвольного включения, ограждение при необходи­мости рабочих мест и оставшихся под напряжением токоведущих частей;

- проверка отсутствия напряжения;

- установка заземления.

Применение только одних организационных и технических меропри­ятий по предупреждению поражения электрическим током не может в полной мере обеспечить необходимую электробезопасность при эксплуа­тации. Наряду с ними в вычислительных центрах используют защитное заземление. Нормативное значение сопротивления заземления приведено в табл. 22

Таблица 22

Нормативное, значение сопротивления заземления

Напряжение сети Режим нейтрали Назначение заземления Сопротивление заземления, Ом

До 1000 В

Выше 1000 В

Изолированная Изолированная Защитное Защитное

Rз =< 10

Rз =< 0,5

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

Таблица 23

Напряжение цепи, кВ Сопротивление изоляции, МОм

до од 0,1

0,1 - 0,5

0,5 - 1,0

5,0

20,0

100

9.6. Противопожарные требования

К  помещению, в котором располагается вычислительный центр предъявляются требования:

1) здание, в котором предусмотрено размещение ЭВМ, должно быть 1 степени огнестойкости;

2) все виды кабельных коммуникаций должны быть проложены в металлических газовых трубах;

3) подпольные пространства под съемными полами должны быть разделены несгораемыми перегородками;

4) силовые кабельные линии должны быть надежно изолированы;

5) в наличии должны быть первичные огнетушительные средства;

По пожароопасности зоны данное помещение относится к классу П-IIa. Для ликвидации пожаров помещение вычислительного центра площадью 40 кв. м. должно располагать одним углекислотным огнетушителем типа ОУ-2, ОУ-5,  или ОУ-8.

Для своевременного обнаружения, оповещения и принятия мер быстрой ликвидации пожара в помещении необходима установка дымовых пожарных извещателя. При установке извещателя на высоте 4 м и площади помещения 40 кв. м. достаточно одного дымового изве­щателя.

9.7. Организация рабочего места пользователя при работе с терминалом

1) При организации рабочего места с терминалом на одного пользователя необходимо выделять не меньше б кв. метров. Высота юмещения должна быть не меньше 4 метров.

2) Помещение обязательно должно оборудоваться огнетушителем, сигнализацией и телефоном (и городским и местным).

3) Помещение должно быть оборудовано одноместными столами и мягкими стульями с меняющимися по высоте сиденьями и спинками стула. Столы должны иметь длину не менее 0.7 метра и ширину, обеспечивающую место перед клавиатурой 0.3 метра.

4) Разрешающая способность человеческого глаза составляет примерно 0.3 мм на расстоянии 500 мм. Благоприятная для обозрения площадь лежит в пределах 500-700 мм. Для зрительного распознавания алфавитно-цифровых знаков необходим растр размером 5-7 точек, поэтому ширина и высота линий изображения этих знаков должна быть не менее 1.5 мм при удалении 500 мм и 2.9 мм при удалении 700 мм от работающего. Угол обзора по вертикали составляет 15. В положении сидя этот угол не превышает 15 относительно горизонтали. Оптималь­ное расстояние от глаз до экрана монитора 0.6-0.7 м., допустимое не менее 0.5 метра. Рассматривать информацию на экране ближе 0.5 метра не рекомендуется.

5) Требуемая и допустимая контрастность элементов рабочего места снизу ограничена возможностью распознавания, а сверху допус­каемой освещенностью, исключающей ослепление работающего. В поле зрения работающего контрастность должна быть в пределах от 8:1 до 15:1. При этом исключается наличие глянцевых поверхностей, соз­дающих блики и отражающий свет. Уменьшению усталости и повышению удобства обслуживания способствует определенное размещение комму­никаций работающего с машиной.

9.8.Приборы контроля параметров среды

Метрологическое обеспечение  осуществляется на  основе положений ГОСТ 12.0.005-84  "Метрологическое обеспечение в области безопасности труда. Основные положения"  /М., 1984/, системы стандартов безопасности труда,  санитарных  норм и правил Минздрава СССР и др.

Приборы для контроля опасных и вредных производственных фак­торов представлены в

Таблица 24

Приборы контроля

Измеряемая величина единица измерений Рабочие средства измерений Погрешность
тип диапазон
частотный динами­ческий
1. Температура, С и относительная влаж­ность воздуха, % Аспирационный психометр MB-4M

-

-

-31 . . .

51 С

10 . . .

100 %

+0,1 С

+5%

2. Скорость движения воздуха, м/с Термометр, электроанемометр TAM-1 -

0,1 . . .

5 м/с

+2,1

м/с

3. Уровень звукового давления в октавных полосах частот, дБ вшв-ооз

10 . . .

20000 Гц

25 . . .

140 дБ

+1 дБ
4. Освещенность, лк. Люксметр Ю-116 мкм

0,38. . .

0,72 мкм

5 . . .

100000 лк

+10 %
5. Массовая концент­рация пыли, мг/куб.м Радиоизотопный пылемер  ПРИЗ-2 -

0,1 . . .

100 иг/м

+20 %

ЗАКЛЮЧЕНИЕ

В результате разработки данной дипломной работы написана программа для обучения работе в графическом режиме. Программа предназначена для студентов младших курсов Санкт-Петербургской государственной академии аэрокосмического приборостроения и знакомит их с графическими средствами языка Turbo-Pascal 6.0/7.0.

Программа содержит семь разделов для изучения:

1) Программирование графических режимов.

2) Управление курсором и полем рисования.

3) Формирование прямолинейных монохромных изображений.

4) Управление цветом и стилем изображений.

5) Программирование цветных криволинейных изображений.

6) Формирование графических текстов.

7) Программирование озвученных динамических сцен.

Программа позволяет индивидуально, в удобном для каждого обуча­емого темпе , изучать работу с компьютером в графическом режиме. Изучаемый материал представлен в программе наглядно, теоретический материал сопровожден необходимыми иллюстрациями, что делает его более понятным. Предусмотрена возможность повторного изучения мате­риала. В процессе обучения производится контроль приобретенных знаний в виде Контрольных вопросов. При ответах на контрольные вопросы студенту выставляются оценки, которые регистрируются и могут быть выведены на экран в любой момент работы с программой. Имеется возможность разъяснения студенту его ошибок в случае наличия таковых. После ответа на каждый вопрос на экран выводится комментарий, содер­жащий оценку в форме "правильно/неправильно" и в случае неверного ответа пояснения сущности ошибки. Продолжительность сеанса работы программы составляет 45 минут.

Программа написана на языке Turbo-Pascal 7.0 и требует для использования наличия персонального компьютера типа IBM, монитора типа EGA с графическим выводом 640x350 пиксел, 16 регистрами палитры.

Разработанная программа полностью соответствует требованиям Технического задания.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Брусенцов Н.П., Маслов С.П., Х.Рамиль Альварес Микрокомпьютерная система обучения "Наставник". М.: Наука , 1990.  223 с.

2. Демушкин А7С7, КирилловА.И., Сливин Н.А., Чубров Е.В., Кривошеев А.О., Фомин С.С. Компьютерные обучающие программы // Информатика и образование, 1995. N 3.

3. Казаков В.Г., Дорошквин А.А., Задорожный П.М., Князев Б.А. Лекционная мультимедиа аудитория  // Информатика и образование, 1995. N4.

4. Фаронов В.В. турбо паскаль: в 3 т. М.: Учебно-инженерный центр "МВТУ-ФЕСТО ДИДАКТИК", 1992.Т.1: Основы турбо Паскаля. 286 с.

5. Епанешников A.M., Епанешников В.А. Программирование в среде TURBO-PASCAL 7.O.M.: "ДИАЛОГ-МИФИ", 1995. 282 С.

6. Петров В.И. Графические средства алгоритмического языка TURBO-PASCAL : Методические указания к выполнению лабораторных работ  N 1,2 / ЛИАП.СПб., 1992. 33 с.

7. Петров В.И. Графические средства алгоритмического языка TURBO-PASCAL : Методические указания к выполнению лабораторных работ  N 3,4,5 / ЛИАП.СПб., 1992. 43 с.

8. Технико-экономическое обоснование исследовательских и инженерных решений в дипломных проектах и работах: учебное пособие / под редакцией Минько Э.В., Покровского А.В. /Свердловск Уральский университет, 1990. 144 с.

9. Евдокимов В.И. Охрана труда и окружающей среды: Методические указания по дипломному проектированию / ЛИАП.Л., 1989. 34 с.

10. Евдокимов В.И., Козаченко В.И., Нейман Л.А., Румянцев В.В. Охрана труда в приборо- и радиоаппаратостроении: Учебное пособие / СПГУАП. СПб., 1993. 81 с.

ПРИЛОЖЕИЕ 1

Текст программы

program GRAPHIC;  {главная программа "Графика"}

uses Crt, Graph, Dos, Strings, MYBOOK, RAZDEL1, RAZDEL2, RAZDEL3, 

RAZDEL4 , RAZDEL5 , RAZDEL6 , RAZDEL7 ;

Type Dlina=string[6Q];

var  Gd,Gm: integer;

Regime: byte;

NOMER3 , NOMER4 , NOMER5 , NOMER6 , NOMER7 : integer ;

Ball3 :array[l. .2} of integer; {переменные вывода результатов} ball4 :array[l. .2] of integer; { работы по разделам}

ball5 :array[l. .2] of Integer;

ball6 :array[l. .2] of integer; ball7:array[l. .2] of integer; Itog  :array[l, .2] of integer; {переменная накопления

   результатов работы за сеанс}

tog:array[l. .2] of integer; {переменная вывода результатов

работы за сеанс}

К:аггау[1. .2] of integer; {переменная контролирующая число

обращений к процедурам рабочих модулей }

Dh: Char; {переменная для принятия символа с клавиатуры}

procedure Windol;         {введение }

Type Ann=record

     PPl:char;

     РР2:array [0. .69] of char;

end;

var FF:file of Ann;

    A: Ann;

    St :string[68];

label 1;

begin

Assign (FF, 'VEDEN. pas' );  {связь с файлом текста введения}

{SI-}

Reset(FF);

{SI + }

IF lOResulto 0 then Writeln ('Heт файла VEDEN1);

ClearDevice;

OKNO;   {процедура оформления экрана}

For N:=0 to 31 do  {цикл вывода текста введения }

 begin

  Read(FF,A);

  St:=StrPas(A.PP2);

   case A.PP1 of  {проверка наличия иллюстрации и их вывод}

   ‘ ‘: OutTextXY( 20 , 10*N+10 , St ) ;

   ‘0‘ : GoTo 1 ;

 end;

end;

1:readkey;

Close(FF);

end;

procedure Cursor(Flag:boolean); {Если Flag=True, то курсор видим;}

{ если Flag=False,TO невидим}

const sizeCursor:word=0;

var  Red:registers;

begin

 with Red do

  begin

   if Flag then

    begin

     CX:=SizeCursor; {Восстановим старый размер курсора}

    end

  else

   begin

    BH:=0;        {0-я страница дисплея}

    АН:=03;       {функция чтения размера и позиции курсора}    

    Intr($10,Red);

    SizeCursor:=CX;{сохраняем размер курсора}

    СН:=$20;      {делаем курсор невидимым}

   end;

  АН:=01; {функция установки размера курсора}

  Intr($10,Red);

 end;

end;

procedure SVETFON(C,F:byte); {установка цвета и фона}

begin

 TextColor(C);

 TextBackground(F)

end;

procedure VERTIKALNOE_MENU(Kl,K2,Kp:byte;SS1,SS2,SS3,SS4,SS5,SS6,

 SS7,SS8,SS9:dlina;Var Result:byte);

{процедура создания окна меню}

Label Met;

Const Kr=9;

Var M:array[l..Kr] of string[60];

    I,T:byte;

    Ch:char;

    Fl:boolean;

begin

 Cursor(False);

 Fl:=True;

 M[1]:=SS1;M[2]:=SS2;M[3]:=SS3;M[4]:=SS4;M[5]:=SS5;M[6]:=SS6;  

 M[7]:=SS7;M[8]:=SS8;M[9]:=SS9;

 T:=Length(M[I]);

for I:=2 to Kp do

 if Length(M{I])>T then T:=Length(M[I]);

 for l:=l to Kp do

  begin

   if 1=1 then SVETFON(1,13)

else SVETFON(13,1);

GoToXY(Kl,K2+i);

    write(M[I]);

end;

SVETFON(13,1);

I:=l;

while Fl=True do begin

  Ch:=ReadKey;

   if Ch=#13 then Fl:=False;

   if(Ch=#0) and KeyPressed then

   begin

    Ch:=ReadKey;

    case Ch of

    #80: begin

           GoToXY(Kl,K2+i);

  SVETFON(13,1);

  write(M[I]);

  if i=(Kp+l) then

  begin

   I:=l;

   SVETFON(3,l);

   GoToXY(Kl,K2+l);

   SVETFON(1, 13);  

   write(M[I]);

   SVETFON(13,1);

   goto Met;

  end;

  GoToXY(Kl,K2+I);

  SVETFON(1,13);

  write(M[I]);

  SVETFON(13,1);

end;

    #72: begin

 if 1=1 then goto Met;

 GoToXY(Kl,K2+I);

 SVETFON(1371);

 write(M[I]);

 i:=I-1;

 GoToXY(Kl,K2+I);

 SVETFON(1,13);

 write(M[I])

end

    end;

Met:

   end ;

  end;

  Result :=I;

  SVETFON(13,1);

  Cursor(True) ;

end;

begin {Начало основной программы}

 GraphRegim;

 SetBKColor(l);

 SetTextStyle(0,0,5);

 SetColor(12);

 OutTextXY(40,50, 'Т Р А Ф И К А');

 SetTextStyle(0,0,1);

 SetColor(15);

 OutTextXY(100,225,'Программа для обучения работе в графическом

режиме’);

 OutTextXY(170,245,'Разработал Черноткач Р. И.');  

 OutTextXY(232,285,'СПГУАП');

 OutTextXY{240,305,'2002’);

 readkey;

 SetTextStyle(0,0,l);

 Windo1;

 CloseGraph;

 NOMER3:=0;     {переменные, контролирующие доступ к разделам}   

 NOMER4:=0;     {{ не более двух раз) за сеанс}

 NOMER5:=0;

 NOMER6:=0;

 NOMER7:=0;

 К[1]:=0;

 К[2]:=0;

 while True do begin

TextBackground(3);

ClrScr;

Cursor(False);

GoToXY(15,5);

TextColor(l);

write('Какой раздел Вы хотели бы изучить?');

GoToXY(10,10);

VERTIKALNOE_MENU(10,10,9,

'  Программирование графических режимов

'  Управление курсором и полем рисования

'  Формирование прямоллинейньгх монохромных изображений

'  Управление  цветим и стилем изображений

'  Программирование цветных криволинейных изображений

'  Формирование графических текстов

'  Программирование озвученных динамических сцен

' Результаты Вашей работы

'  Конец работы

Regime);

case Regime of

  1:RAZDEL10;

  2:RAZDEL20;

  3:begin

NOMER3:=NOMER3+1;

If NOMER3<3 then

begin

  RAZDEL30;

  ball3[NOMER3]:=REZ3;

  Itog[nomer3]:=Itog[nomer3]+ball3[nomer3];

  K[nomer3]:=K[nomer3]+l;

end

         end;

  4: begin

 NOMER4:=NOMER4+1;

 If NOMER4<3 then

 begin

  RAZDEL40;

  ball4[nomer4]:=rez4;

  Itog[nomer4]:=Itog[nomer4]+ball4[nomer4];

  K[nomer4]:=K[nomer4]+l;

 end

        end;

5:begin

NOMER5:=NOMER5+1;

If NOMER5<3 then

begin

 RAZDEL50;

 Ьа115[погаег5]:=rez5;

 Itog[nomer5]:=Itog[nomer5]+ball5[nomer5];

 K[nomer5]:=K[nomer5]+1;

end;

       end;

6:begin

   NOMER6:=NOMER6+1;

   If NOMER6<3 then

   begin

RAZDEL60;

ball6[nomer6]:=rez6;  Itog[nomer6]:=Itog[nomer6]+ball6[nomer6]; K[nomer6]:=K[nomer6]+l;

        end;

  end

7:begin

NOMER7:=NOMER7+1;

IF NOMER7<3 then

begin

 RAZDEL70;

 ball7[nomer7]:=rez7;

 Itog[nomer7]:=Itog[nomer7]+ball7[nomer7];

end;

  end;

8:begin                {вывод результатов работы}

   If K[l]<>0 then

   tog[l3:=Round(Itog[l]/K[1);

   If K[2]<>0 then

   tog[2]:=Round(Itog[2]/K[2]);

  TextBackground(1);

  ClrScr;

       TextColor(12);

       writeln;

       Write('РЕЗУЛЬТАТЫ  ВАШЕЙ  РАБОТЫ’);

  writeln;

  writeln('l попытка       2 попытка':80);

  writeln;

  wtiteln('ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ

ИЗОБРАЖЕНИЙ');

  writeln;

  writeln('  УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЙ1);

  writeln;

  writeln('ПРОГРАММИРОВАНИЕ ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ

 ИЗОБРАЖЕНИЙ');

 writeln;

 writeln('  ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ');

 writeln;

 writeln('  ПРОГРАММИРОВАНИЕ ОЗВУЧЕННЫХ ДИНАМИЧЕСКИХ СЦЕН');

 writeln;

 writeln;

 writeln('  ОЦЕНКА РАБОТЫ ЗА СЕАНС');

 GotoXY(64,6);  writeln(ball3[1]);

 GoToXY(75,6);  writeln(ball3[2]);

 GoToXY(64,8);  writeln(ball4[l]);

 GoToXY(75,8);  writeln(ball4[2]);

 GoToXY(64,10); writeln(ball5[l]);

 GoToXY(75,10); writeln(ball5[2]);

 GoToXY(64,12); writeln(ball6[l]);

 GoToXY(75,12); writeln(bal16[2]);

 GoToXY(64,14); writeln(bal17[l]);

 GoToXY(75,14); writeln(ball7[23)

 GoToXY(64,18); writeln(tog[l]);

 GoToXY(75,18); writeln(tog[2]);

 readkey;

end;

9:begin

   GraphRegim;

   OKNO;

   SetTextStyle{0,0,4);

   SetColor(4);

       OutTextXY(150,80,'Bы хотите');

   OutTextXY(60,120,'закончить работу')

   OutTextXY(100,160,'с программой?');

   OutTextXY(230,280,'Y/N');

   Dh:=ReadKey;

If (Dh='y') or (Dh='н') then

begin

 Cursor(True);

 ClrScr;

 Halt

end

else

 CloseGraph;

        end;

     end;

  end;

  CloseGraph;

end.

{$A+, B-, D+, E+, F-, G-, I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+}

{$M 16384,0,655360}

Unit RAZDEL1;

interface

uses Crt, Graph, Dos, Strings, MYBOOK;

type An=record

 P1:Char;

 P2:array[0..69] of Char;

end;

var Fl:file of An ;

    A: An;

    Gd,Gm,Y,N:integer;

    St:string[68];

procedure RAZDEL10; {Обеспечение работы с разделом "Программиро вание графических режимов"}

implementation

procedure RAZDEL10;

Label 1;

begin

  GraphRegim;

  Assign(Fl,'RAZTEX1.pas');

  {SI-}

    Reset (Fl);

  {SI+}

  If lOResult <>0 then Writeln ('Нет файла RAZTEX1.pas');

  Repeat;

  ClearDevice;

  OKNO;

  Y:=10;

  For N:=0 to 31 do

  begin

   Read(Fl,A); St:=StrPas(A.P2);

   case A.P1 of

   ' ':OutTextXY(20,Y*N+10,St);

   '*':begin

        SetColor{4);

   OutTextXY(20,Y*N+10,St);

   SetColor(l);

  end;

   '0':GoTo 1;

  end;

end;

1: readkey;

   until A.P1='O';

   Close(Fl);

   CloseGraph;

   end;

begin

end.

  {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+}        

  {$M 16384,0,655360}                                          

  Unit RAZDEL2;                                                 

  interface                                                    

                                                               

  uses Crt,Graph,Dos,Strings,MYBOOK;                           

    type An=record                                               

       P1:Char;                                                

       P2:array[0..69] of Char;                                

  end;                                                         

    var F2:file of An ;                                          

      A: An;                                                   

      Gd,Gm,X,Y,N:integer;                                     

      St:string[68];                                           

                                                                

  procedure RAZDEL20; {Обеспечение работы с разделом "Управление

                       курсором и полем рисования"}            

                                                               

  implementation                                                

    procedure RAZDEL20;                                          

    Label 1;                                                     

    begin                                                        

   GraphRegim;                                                  

   Assign(F2,'RAZTEX2.pas');                                   

   {SI-}                                                       

   Reset(F2);                                                  

   {SI+}                                                        

   If IOResult <> 0 then Writeln ('Нет файла RAZTEX2.pas');    

   repeat                                                      

   ClearDevice;                                                

   OKNO;                                                        

   Y:=10;                                                      

   For N:=0 to 31 do                                           

   begin                                                       

    Read(F2,A);                                                 

    St:=StrPas(A.P2);                                          

    case A.P1 of                                               

    ' ':OutTextXY(20,Y*N+10,St);                               

    '*':begin                                                   

         SetColor(4);                                          

         OutTextXY(20,Y*N+10,St);                              

         SetColor(1);                                          

        end;                                                    

    '0':GoTo 1;                                                

    end;                                                       

   end;                                                        

1: readkey;                                                     

   until A.P1='0';                                             

   Close(F2);                                                  

   CloseGraph;                                                 

  end;                                                          

                                                               

 begin                                                         

 end.

Unit RAZDEL3;                                                      

                                                                      

  interface                                                          

                                                                     

  uses Crt,Graph,Dos,Strings,MYBOOK;                                  

                                                                     

  type An=record {Теоретическая часть }                              

        P1:Char; {переменная поля флагов: конец файла, номер         

                  иллюстрации, строка, выделяемая цветом}            

        P2:array[0..69] of Char;  {переменная поля текста}           

  end;                                                               

                                                                     

  type Ant=record {Текст вопросов}                                   

        P1:Char;  {переменная поля флагов: конец файла, конец        

                   вопроса, номер иллюстрации}                       

        P2:array[0..1] of Char; {переменная  номера вопроса}         

        P3:array[0..69] of Char; {переменная поля текста}             

  end;                                                               

                                                                     

  type Antr=record { Справки }                                       

        P1:Char; {переменная поля флагов: конец файла, конец вопроса,

                  номер иллюстрации}                                 

        P2:array[0..1] of Char; {переменная поля номера вопроса}     

        P3:array[0..0] of Char; {переменная поля флагов: номера      

                                 справки, конца справки}             

        P4:array[0..69] of Char; {переменная поля текста}            

        P5:array[0..2] of Char;  {переменная поля оценки}            

  end;                                                                

                                                                     

  var F3:file of An ;  {переменные теоретической части}              

      A: An;                                                         

      St:string[68];                                                 

      Y,N:integer;                                                   

                                                                     

  var F32:file of Ant;  { переменные вопросов}                        

      At:Ant;                                                        

      R1:string[2];                                                  

      Z1:integer;                                                    

      S:string[68];                                                   

                                                                     

  var F33:file of Antr;   {переменные справок}                       

      Atr:Antr;                                                      

      R2:string[2];                                                  

      R3:string[1];                                                   

      Stt:string[68];                                                

      R4:string[2];                                                  

      Z2,Z3,Z4:integer;                                              

      CH:  Char; {переменная для принятия символа с клавиатуры}      

      K,J,I:integer; {переменные циклов}                             

      M: array[0..3] of integer; {массив для хранения четырех        

                                  выбранных номеров вопросов}        

      Code:integer;                                                  

                                                                     

  var R5:string[1];   {переменные вывода результатов}                

      Z5:integer;                                                     

      REZ3:Longint; {переменная оценки}                              

                                                                     

  procedure RAZDEL30; {Обеспечение работы с разделом "Формирование   

                       прямолинейных монохромных изображений"}       

                                                                     

                                                                     

  implementation                                                      

                                                                     

  const Mn:array[1..5] of PointType=((X:460;Y:30),(X:590;Y:90),      

                   (X:590;Y:120),(X:430;Y:120),(X:460;Y:30));        

        Mno:array[1..5] of PointType=((X:460;Y:170),(X:590;Y:230),   

                    (X:590;Y:260),(X:430;Y:260),(X:460;Y:170));      

         {Константы для формирование иллюстраций к тексту теории}    

                                                                     

  const Ww:array[1..5] of PointType=((X:390;Y:60),(X:510;Y:60),      

                      (X:510;Y:260),(X:390;Y:260),(X:390;Y:60));     

        WWW:array[1..5] of PointType=((X:380;Y:50),(X:520;Y:50),     

                      (X:520;Y:270),(X:380;Y:270),(X:380;Y:50));     

         {Константы для формирования иллюстраций к тексту вопросов}  

                                                                      

                                                                     

   procedure RAZDEL30;                                               

                                                                      

   Label 0,1,2,3;                                                    

                                                                     

   begin                                                             

    REZ3:=6;                                                          

    GraphRegim;                                                      

    Assign(F3,'RAZTEX3.pas');  {Связь с файлом теста теории}         

    {SI-}                                                            

    Reset(F3);                                                       

    {SI+}                                                            

    If IOResult <> 0 then Writeln ('Нет файла RAZTEX3.pas');         

    repeat                                                            

    OKNO;                                                            

    Y:=10;                                                           

    For N:=0 to 31 do  {Цикл вывода текста теории}                   

    begin                                                             

     Read(F3,A);                                                     

     St:=StrPas(A.P2); {Преобразование ASCIIZ-строки A.P2 в строку   

                        типа string}                                  

     case A.P1 of          {Иллюстрации к тексту}                    

     ' ': OutTextXY(20,Y*N+10,St);                                   

     '*': begin                                                      

           SetColor(4);                                               

           OutTextXY(20,Y*N+10,St);                                  

           SetColor(1);                                              

          end;                                                       

     'щ': begin                                                      

           SetColor(4);                                              

           Line(460,120,593,120);                                    

           OutTextXY(460,160,'0');                                    

           OutTextXY(593,130,'(X,Y)');                               

           SetColor(1);                                              

          end;                                                       

     '2':begin                                                        

          SetColor(4);                                               

          OutTextXY(460,160,'0            dX');                      

          OutTextXY(600,180,'dY');                                    

          OutTextXY(550,200,'(dX,dY)');                              

          Line(460,170,593,170);                                     

          Line(593,170,593,200);                                     

          Line(460,170,593,200);                                      

          SetColor(1);                                               

         end;                                                        

     '3':begin                                                       

          SetColor(4);                                               

          OutTextXY(430,245,'(X1,Y1)');                              

          Line(460,260,593,285);                                     

          OutTextXY(580,270,'(X2,Y2)');                               

          SetColor(1);                                               

         end;                                                        

     '4':begin                                                       

          SetBKColor(2);                                             

          SetColor(4);                                               

          Rectangle(460,40,590,90);                                  

          SetColor(1);                                                

         end;                                                        

     '5':begin                                                       

          SetFillStyle(1,4);                                         

          Bar(459,129,591,181);                                       

          SetFillStyle(8,5);                                         

          SetColor(4);                                               

          Bar(460,130,590,180);                                      

          SetColor(1);                                               

         end;                                                        

     '6':begin                                                       

          SetFillStyle(6,5);                                          

          SetColor(4);                                               

          Bar3D(460,240,590,300,20,true);                            

          SetCOLOR(1);                                               

          SetFillStyle(1,15);                                        

          SetBKColor(11);                                            

         end;                                                        

     '7':begin                                                        

          SetBKColor(15);                                            

          SetColor(4);                                               

          DrawPoly(5,Mn);                                            

          SetColor(1);                                                

         end;                                                        

     '8':begin                                                       

          SetColor(4);                                               

          SetFillStyle(11,5);                                        

          SetBKColor(15);                                            

          FillPoly(5,Mno);                                           

          SetColor(1);                                                

          SetFillStyle(1,15);                                        

         end;                                                        

     '0':GoTo 0;                                                     

     end;                                                             

    end;                                                             

  0:readkey;                                                         

    ClearDevice;                                                      

    OKNO;                                                            

    until A.P1='0';                                                  

    Close(F3);                                                       

    Assign(F32,'Joing.pas');  {связь с файлом вопросов}              

    {SI-}                                                            

    Reset(F32);                                                      

    {SI+}                                                             

    If IOResult<>0 then Writeln('Нет файла Joing.pas');              

    Assign(F33,'Iod.pas');  {связь с файлом справок}                 

    {SI-}                                                            

    Reset(F33);                                                      

    {SI+}                                                            

    If IOResult<>0 then Writeln('Нет файла Iod.pas');                

    OKNO1;           {заставка "Контрольные вопросы"}                 

    readkey;                                                         

    ClearDevice;                                                     

    Randomize;        {Выбор четырех номеров вопросов}               

    For J:=0 to 3 do                                                  

     begin                                                           

    1:I:=Random(10);                                                 

      If I=0 then GOTO 1;                                            

      For K:=0 to J-1 do                                             

       begin                                                         

        If M[k]=I then GOTO 1;                                       

       end;                                                           

       M[J]:=I;                                                      

     end;                                                            

     repeat                                                          

     OKNO;                                                            

     begin                                                           

      Read(F32,At);                                                  

      R1:=StrPas(At.P2); {Преобразование ASCIIZ-строки At.P2 в строку

                          типа string}                               

      Val(R1,Z1,Code); {Преобразование символьного представления     

                        номера вопроса в двоичную форму}             

      Y:=20;                                                         

      If(Z1=M[0]) or (Z1=M[1]) or (Z1=M[2]) or (Z1=M[3]) then        

      begin                                                          

       repeat                                                         

       S:=StrPas(At.P3); {Преобразование ASCIIZ-строки At.P3 в строку

                          типа string}                               

       OutTextXY(20,Y,S);     {Вывод текста вопроса}                  

       case At.P1 of          {иллюстрации к тексту вопросов}        

       '1':begin                                                     

            DrawPoly(5,Ww);                                          

            DrawPoly(5,Www);                                          

            Bar3D(410,100,470,120,20,true);                          

            Bar3D(410,120,470,250,20,false)                          

           end;                                                      

       '2':begin                                                     

            Bar3D(200,250,300,300,30,true);                          

            Bar3D(200,300,300,320,30,true)                           

           end;                                                       

       '3':begin                                                     

            Line(380,150,550,190);                                   

            Line(380,190,550,190);                                   

            Line(380,230,550,190);                                   

            OutTextXY(375,140,'(X,Y)');                              

            OutTextXY(375,170,'dY');                                 

            OutTextXY(555,190,'(X1,Y1)');                             

            OutTextXY(375,200,'dY');                                 

           end;                                                      

       end;                                                          

       Y:=Y+10;                                                       

       Read(F32,At);                                                 

       until At.P1='*';                                              

     2:OutTextXY(50,330,'ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___');     

       CH:=ReadKey;                                                  

       SetColor(4);                                                  

       OutTextXY(320,325,CH);                                         

       SetColor(1);                                                  

       readkey;                                                      

       If(CH<>'1') and (CH<>'2') and (CH<>'3') and (CH<>'4') then    

       begin                                                          

        SetFillStyle(1,11);                                          

        Bar(318,320,327,340);                                        

        GoTo 2;                                                       

       end                                                           

       else                                                          

       repeat                                                        

       Read(F33,Atr);                                                 

       R2:=StrPas(Atr.P2);  {Преобразование ASCIIZ-строки Atr.P2 в   

                             строку типа string }                    

       Val(R2,Z2,Code); {Преобразование символьного представления    

                         номера вопроса в двоичную форму}            

       If Z2=Z1 then                                                 

        begin                                                        

         repeat                                                      

         If Atr.P3=CH then                                           

          begin                                                      

           Y:=100;                                                   

           OKNO;                                                      

           repeat                                                    

           Stt:=StrPas(Atr.P4); {Преобразование ASCIIZ-строки Atr.P4

  в строку типа string }                

           R5:=StrPas(Atr.P5); {Преобразование ASCIIZ-строки Atr.P5

  в строку типа string }                

           Val(R5,Z5,Code); {Преобразование символьного

    представления оценки в двоичную форму}                

           REZ3:=Round((REZ3+Z5)/2); {Формирование оценки}           

           OutTextXY(20,Y,Stt);    {Вывод текста справки}            

           Y:=Y+10;                                                   

           case Atr.P1 of         {иллюстрации к тексту справок}     

           '1':begin                                                 

                Line(380,150,550,190);                               

                MoveRel(380,190);                                    

                Line(380,190,550,190);                               

                LineTo(550,190);                                     

                OutTextXY(555,190,'(X1,Y1)');                        

                OutTextXY(370,140,'(X,Y)');                          

                OutTextXY(390,200,'(X,Y+dY)');                       

               end;                                                  

           '2':begin                                                 

                GOTOXY(100,190);                                     

                LineTo(100,190);                                     

                LineRel(30,40);                                       

                LineRel(0,80);                                       

               end;                                                  

           '3':begin                                                 

                GOTOXY(100,190);                                     

                LineTo(380,150);                                     

                LineRel(30,40);                                      

                LineRel(0,80);                                       

               end;                                                  

           end;                                                      

           Read(F33,Atr);                                            

           until Atr.P3='*';                                          

           readkey;                                                  

           GOTO 3;                                                   

         end                                                         

         else  Read(F33,Atr);                                        

         until Atr.P1='*';                                           

        end                                                          

        until Atr.P1='0';                                             

       end                                                           

       else                                                          

  3: end;                                                            

     until At.P1='0';                                                 

     Close(F32);                                                     

     Close(F33);                                                     

     CloseGraph;                                                     

   end;                                                              

                                                                     

  begin                                                              

  end.

Unit RAZDEL4;                                                       

                                                                    

 interface                                                          

                                                                    

 uses Crt,Graph,Dos,Strings,MYBOOK;                                 

                                                                    

 type An = record {Теория}                                          

     P1:Char;  {Переменная поля флага : конец файла, номер          

               иллюстрации}                                         

     P2:array[0..69] of char; {Переменная поля текста}              

 end;                                                               

                                                                     

 type Ant=record {Текст вопросов}                                   

      P1:Char;   {Переменная поля флага:конец файла, номер иллюст-  

                  рации, конец вопроса}                             

      P2:array[0..1] of Char; {Переменная поля номера вопроса}      

      P3:array[0..69] of Char; {Переменная поля текста вопроса}     

 end;                                                               

                                                                     

 type Antr=record { Справки }                                       

      P1:Char; {Переменная поля флага:конец файла, конец вопроса,   

                номер иллюстрации}                                  

      P2:array[0..1] of Char;  {Переменная поля номера вопроса}     

      P3:array[0..0] of Char; {Переменная поля флага: номер справки 

                               и конец справки}                     

      P4:array[0..69] of Char; {Переменная поля текста справки}     

      P5:array[0..2] of Char; {Переменная поля оценки}              

 end;                                                               

                                                                    

 var F4: file of An ;  {Переменные теории}                           

     A:An;                                                          

     N,Y:integer;                                                   

     St:string[68];                                                 

                                                                     

 var F32:file of Ant;  { Переменные вопросов}                       

     At:Ant;                                                        

     R1:string[2];                                                  

     Z1:integer;                                                     

     S:string[68];                                                  

 var F33:file of Antr;   {Переменные справок}                       

     Atr:Antr;                                                      

     R2:string[2];                                                   

     R3:string[1];                                                  

     Stt:string[68];                                                

     R4:string[2];                                                   

     Z2,Z3,Z4:integer;                                              

     CH:  Char;{Переменная для принятия символа с клвиатуры}        

     K,J,I:integer; {Переменные циклов}                             

     M: array[0..3] of integer; {Массив для хранения черырех        

                                выбранных номеров вопросов}         

     Code:integer;                                                  

                                                                    

 var R5:string[1];   {переменные вывода результатов}                

     Z5:integer;                                                     

     REZ4:Longint;  {переменная оценки}                             

                                                                    

                                                                     

 procedure RAZDEL40;                                                

                                                                    

 implementation                                                     

                                                                     

 procedure RAZDEL40;                                                

                                                                    

 Label 0,1,2,3;                                                     

                                                                     

 begin                                                              

  REZ4:=6;                                                          

  GraphRegim;                                                        

  Assign(F4,'RAZTEX4.pas'); {Связь с файлом текста теории}          

  {SI-}                                                             

  Reset(F4);                                                        

  {SI+}                                                              

  If IOResult <> 0 then Writeln ('Нет файла RAZTEX4.pas');          

  repeat                                                            

  ClearDevice;                                                      

  OKNO;                                                              

  Y:=10;                                                            

  For N:=0 to 31 do           {Вывод текста теории}                 

   begin                                                             

    Read(F4,A);                                                     

    St:=StrPas(A.P2); {Преобразование ASCIIZ-строки A.P2 в строку   

                       типа string}                                 

    OutTextXY(20,Y*N+10,St);                                         

    case A.P1 of                                                    

    '*':begin                                                       

         SetColor(4);                                               

         OutTextXY(20,Y*N+10,St);                                   

         SetColor(1);                                               

        end;                                                        

    '1':begin SetFillStyle(1,15);                                    

         Bar(350,45,600,340);                                       

         SetFillStyle(1,0);                                         

         Bar(350,45,600,65);                                        

         SetFillStyle(1,1);                                          

         Bar(350,65,600,85);                                        

         SetFillStyle(1,2);                                         

         Bar(350,85,600,105);                                       

         SetFillStyle(1,3);                                         

         Bar(350,105,600,120);                                      

         SetFillStyle(1,4);                                         

         Bar(350,120,600,135);                                       

         SetFillStyle(1,5);                                         

         Bar(350,135,600,150);                                      

         SetFillStyle(1,6);                                         

         Bar(350,150,600,165);                                       

         SetFillStyle(1,7);                                         

         Bar(350,165,600,185);                                      

         SetFillStyle(1,8);                                         

         Bar(350,185,600,200);                                      

         SetFillStyle(1,9);                                         

         Bar(350,200,600,215);                                      

         SetFillStyle(1,10);                                         

         Bar(350,215,600,235);                                      

         SetFillStyle(1,11);                                        

         Bar(350,235,600,255);                                      

         SetFillStyle(1,12);                                         

         Bar(350,255,600,275);                                      

         SetFillStyle(1,13);                                        

         Bar(350,275,600,295);                                      

         SetFillStyle(1,14);                                        

         Bar(350,295,600,315);                                      

         SetFillStyle(1,15);                                        

         Bar(350,315,600,340);                                       

        end;                                                        

    '2':begin                                                       

         SetBKColor(15);                                            

         SetFillStyle(1,15);                                         

         Bar(200,100,600,300);                                      

         SetFillStyle(2,2);                                         

         Bar(200,100,600,120);                                      

         SetFillStyle(3,2);                                         

         Bar(200,120,600,145);                                      

         SetFillStyle(4,2);                                         

         Bar(200,145,600,168);                                       

         SetFillStyle(5,2);                                         

         Bar(200,168,600,190);                                      

         SetFillStyle(6,2);                                         

         Bar(200,190,600,210);                                       

         SetFillStyle(7,2);                                         

         Bar(200,210,600,228);                                      

         SetFillStyle(8,2);                                         

         Bar(200,228,600,246);                                      

         SetFillStyle(9,2);                                         

         Bar(200,246,600,264);                                      

         SetFillStyle(10,2);                                         

         Bar(200,264,600,282);                                      

         SetFillStyle(11,2);                                        

         Bar(200,282,600,300);                                      

         SetFillStyle(1,0);                                          

        end;                                                        

    '0':GoTo 0                                                      

    end;                                                            

   end;                                                              

   readkey;                                                         

0:until  A.P1='0'  ;                                                

  readkey;                                                           

  Close(F4);                                                        

  Assign(F32,'Joi.pas');  {связь с файлом вопросов}                 

  {SI-}                                                             

  Reset(F32);                                                        

  {SI+}                                                             

  If IOResult<>0 then Writeln('Нет файла Joi.pas');                 

  Assign(F33,'Iodi.pas');                                           

  {SI-}                                                             

  Reset(F33);     {связь с файлом справок}                          

  {SI+}                                                             

  If IOResult<>0 then Writeln('Нет файла Iodi.pas');                

  OKNO1;           {"Контрольные вопросы"}                          

  readkey;                                                          

  ClearDevice;                                                      

  Randomize;        {Выбор четырех номеров вопросов}                

  For J:=0 to 3 do                                                  

   begin                                                            

  1:I:=Random(10);                                                  

    If I=0 then GOTO 1;                                             

    For K:=0 to J-1 do                                              

     begin                                                          

      If M[k]=I then GOTO 1;                                         

     end;                                                           

     M[J]:=I;                                                       

   end;                                                             

   M[1]:=1;                                                          

   repeat                                                           

   OKNO;                                                            

   begin                                                            

    Read(F32,At);                                                   

    R1:=StrPas(At.P2);{Преобразование ASCIIZ-строки At.P2 в         

                        строку типа string}                         

    Val(R1,Z1,Code);  {Преобразование символьного представления     

                       номера вопроса в двоичную форму}             

    Y:=20;                                                          

    If(Z1=M[0]) or (Z1=M[1]) or (Z1=M[2]) or (Z1=M[3]) then         

    begin                                                           

     repeat                                                          

     S:=StrPas(At.P3); {Преобразование ASCIIZ-строки At.P3 в        

                        строку типа string}                         

     OutTextXY(20,Y,S); {Вывод текста вопроса}                       

     case At.P1 of                                                  

     ' ':begin                                                      

         end;                                                       

     end;                                                            

     Y:=Y+10;                                                       

     Read(F32,At);                                                  

     until At.P1='*';                                               

     OutTextXY(50,330,'ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___');      

   2:CH:=ReadKey;                                                   

     SetColor(4);                                                   

     OutTextXY(320,325,CH);                                          

     SetColor(1);                                                   

     readkey;                                                       

     If(CH<>'1') and (CH<>'2') and (CH<>'3') and (CH<>'4') then     

     begin                                                           

      SetFillStyle(1,11);                                           

      Bar(318,320,327,340);                                         

      GoTo 2;                                                       

     end                                                             

     else                                                           

     repeat                                                         

     Read(F33,Atr);                                                  

     R2:=StrPas(Atr.P2); {Преобразование ASCIIZ-строки Atr.P2 в     

                          строку типа string}                       

     Val(R2,Z2,Code);   {Преобразование символьного представления   

                       номера вопроса в двоичную форму}             

     If Z2=Z1 then                                                  

     begin                                                          

      repeat                                                        

      If Atr.P3=CH then                                             

       begin                                                        

        Y:=100;                                                     

        OKNO;                                                        

        repeat                                                      

        Stt:=StrPas(Atr.P4);   {Преобразование ASCIIZ-строки Atr.P4 в

                          строку типа string}                       

        R5:=StrPas(Atr.P5); {Преобразование ASCIIZ-строки Atr.P5 в  

                          строку типа string}                        

        Val(R5,Z5,Code); {Преобразование символьного представления  

                          оценки в двоичную форму}                  

        REZ4:=Round((REZ4+Z5)/2);  {Формирование оценки }           

        OutTextXY(20,Y,Stt);                                        

        Y:=Y+10;                                                    

        case Atr.P1 of                                              

        ' ':begin                                                    

            end;                                                    

        end;                                                        

        Read(F33,Atr);                                              

        until Atr.P3='*';                                            

        readkey;                                                    

        GOTO 3;                                                     

       end                                                          

       else  Read(F33,Atr);                                         

      until Atr.P1='*';                                             

     end                                                            

     until Atr.P1='0';                                               

    end                                                             

   else                                                             

3:end;                                                              

   until At.P1='0';                                                  

  Close(F32);                                                       

  Close(F33);                                                       

  CloseGraph;                                                       

 end;                                                                

                                                                    

 begin                                                              

 end.

Unit RAZDEL5;                                              

                                                              

    interface                                                 

                                                              

    uses Crt,Graph,Dos,Strings,MYBOOK;                         

                                                              

    type An = record                                          

          P1:Char;                                            

          P2:array[0..69] of char;                             

    end;                                                      

                                                              

    type Ant=record {Текст вопросов}                          

          P1:Char;                                            

          P2:array[0..1] of Char;                             

          P3:array[0..69] of Char;                            

    end;                                                      

                                                              

    type Antr=record { Справки }                              

          P1:Char;                                            

          P2:array[0..1] of Char;                             

          P3:array[0..0] of Char;                             

          P4:array[0..69] of Char;                            

          P5:array[0..2] of Char;                             

    end;                                                      

                                                              

    var F5: file of An ;                                      

        A:An;                                                 

        N,Y:integer;                                          

        St:string[68];                                        

                                                              

    var F52:file of Ant;  { переменные вопросов}              

        At:Ant;                                               

        R1:string[2];                                         

        Z1:integer;                                           

        S:string[68];                                         

        V:char;                                               

                                                              

    var F53:file of Antr;   {переменные справок}              

        Atr:Antr;                                             

        R2:string[2];  {поле Ant.P1-номер вопроса}            

        R3:string[1];  {поле Ant.P2-номер варианта ответа}    

        Stt:string[68];{поле Ant.P3-текст справки}            

        R4:string[2];  {поле Ant.P4- оценка}                  

        Z2,Z3,Z4:integer;                                     

        CH:  Char;        {номер варианта ответа}             

        K,J,I:integer;                                        

        M: array[0..3] of integer;                            

        Nom:Longint;                                          

        Code:integer;                                         

                                                              

    var R5:string[1];   {переменные вывода результатов}       

        Z5:integer;                                           

        REZ5:Longint;                                         

                                                              

    procedure RAZDEL50;                                       

                                                              

    implementation                                            

                                                              

    procedure RAZDEL50;                                       

                                                              

    Label 0,1,2,3;                                            

                                                              

    begin                                                     

    REZ5:=0;                                                  

    GraphRegim;                                               

    Assign(F5,'RAZTEX5.pas');                                 

    {SI-}                                                     

    Reset(F5);                                                

    {SI+}                                                     

    If IOResult <> 0 then Writeln ('Нет файла RAZTEX5.pas');  

    repeat                                                    

    ClearDevice;                                              

    OKNO;                                                     

    Y:=10;                                                    

    For N:=0 to 31 do                                         

    begin                                                     

     Read(F5,A);                                              

     St:=StrPas(A.P2);                                        

     case A.P1 of                                             

     ' ':OutTextXY(20,Y*N+10,St);                             

     '*':begin                                                

          SetColor(4);                                        

          OutTextXY(20,Y*N+10,St);                            

          SetColor(1);                                        

         end;                                                 

     '1':begin                                                

          SetColor(4);                                        

          Arc(500,150,0,278,30);                              

          OutTextXY(490,140,'(X,Y)');                         

          OutTextXY(500,150,'.');                             

          SetColor(1);                                        

         end;                                                 

     '2':begin                                                

          SetColor(4);                                        

          Circle(500,300,30);                                 

          OutTextXY(475,290,'(X,Y)');                         

          OutTextXY(500,300,'.');                             

          SetColor(1);                                        

         end;                                                 

     '3':begin                                                

          SetBKColor(15);                                     

          SetColor(4);                                        

          Ellipse(500,100,0,278,50,25);                       

          OutTextXY(490,90,'(X,Y)');                          

          OutTextXY(500,100,'.');                             

          SetColor(1);                                        

         end;                                                 

    '4': begin                                                

          SetColor(2);                                        

          Ellipse(500,180,10,270,50,30);                      

          Line(500,135,460,225);                              

          SetFillStyle(4,14);                                 

          FloodFill(455,180,2);                               

         end;                                                 

    '5': begin                                                

          SetColor(4);                                        

          Ellipse(500,300,0,361,50,30);                       

          FillEllipse(500,300,50,30);                         

          SetFillStyle(1,15);                                 

          SetColor(1);                                        

         end;                                                 

    '6': begin                                                

          SetFillStyle(7,13);                                 

          PieSlice(500,120,0,120,50);                         

         end;                                                 

    '7': begin                                                

          SetFillStyle(9,13);                                 

          Sector(500,200,0,270,50,30);                        

          SetFillStyle(1,15);                                 

         end;                                                 

     '8':begin                                                

          SetFillStyle(1,9);                                  

          Bar(250,100,600,200);                               

          SetViewPort(250,100,600,200,true);                  

          FloodFill(260,110, 1);                              

          Randomize;                                          

          repeat                                              

            PutPixel(Random(GetMaxX),Random(GetMaxY),15);     

            Delay(15);                                        

           until KeyPressed;                                  

           SetFillStyle(1,15);                                

           SetViewPort(5,5,635,345,true);                     

         end;                                                 

    '9': begin                                                

          Diogramma;                                          

         end;                                                 

     '0':GoTo 0                                               

    end;                                                      

   end;                                                       

 0:readkey;                                                   

   until  A.P1='0';                                           

   Close(F5);                                                 

   Assign(F52,'Join.pas');  {связь с файлом вопросов}         

   {SI-}                                                      

   Reset(F52);                                                

   {SI+}                                                      

   If IOResult<>0 then Writeln('Нет файла Join.pas');         

   Assign(F53,'Iodin.pas');                                   

   {SI-}                                                      

   Reset(F53);     {связь с файлом справок}                   

   {SI+}                                                      

   If IOResult<>0 then Writeln('Нет файла Iodin.pas');        

   OKNO1;           {"Контрольные вопросы"}                   

   readkey;                                                   

   ClearDevice;                                               

   Randomize;        {Выбор четырех номеров вопросов}         

   For J:=0 to 3 do                                           

   begin                                                      

  1:I:=Random(6);                                             

  If I=0 then GOTO 1;                                         

    For K:=0 to J-1 do                                        

     begin                                                    

      If M[k]=I then GOTO 1;                                  

     end;                                                     

     M[J]:=I;                                                 

   end;                                                       

   repeat                                                     

   OKNO;                                                      

   begin                                                      

    Read(F52,At);       { вывод текста вопросов и справок }   

    R1:=StrPas(At.P2);                                        

    Val(R1,Z1,Code);                                          

    Y:=20;                                                    

    If(Z1=M[0]) or (Z1=M[1]) or (Z1=M[2]) or (Z1=M[3]) then   

     begin                                                    

     repeat                                                   

     S:=StrPas(At.P3);                                        

     OutTextXY(20,Y,S);                                       

     case At.P1 of                                            

      '2':begin                                               

          end                                                 

     end;                                                     

     Y:=Y+10;                                                 

     Read(F52,At);                                            

     until At.P1='*';                                         

     OutTextXY(50,330,'ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___');

   2:CH:=ReadKey;                                             

     SetColor(4);                                             

     OutTextXY(320,325,CH);                                   

     SetColor(1);                                             

     readkey;                                                 

     If(CH<>'1') and (CH<>'2') and (CH<>'3') and (CH<>'4') then

     begin                                                    

      SetFillStyle(1,11);                                     

      Bar(318,320,327,340);                                   

      GoTo 2;                                                 

     end                                                      

     else                                                     

     repeat                                                   

     Read(F53,Atr);                                           

     R2:=StrPas(Atr.P2);                                      

     Val(R2,Z2,Code);                                         

     If Z2=Z1 then                                            

     begin                                                    

      repeat                                                  

      If Atr.P3=CH then                                       

      begin                                                   

       Y:=100;                                                

       OKNO;                                                  

       repeat                                                 

       Stt:=StrPas(Atr.P4);                                   

       R5:=StrPas(Atr.P5);        {формирование оценки}       

       Val(R5,Z5,Code);                                       

       REZ5:=Round((REZ5+Z5)/2);                              

       OutTextXY(20,Y,Stt);                                   

       Y:=Y+10;                                               

       case Atr.P1 of                                         

       '1':begin                                              

           end;                                               

       '0':GoTo 3;                                            

       end;                                                   

       Read(F53,Atr);                                         

       until Atr.P3='*';                                      

       readkey;                                               

       GOTO 3;                                                

      end                                                     

      else  Read(F53,Atr);                                    

      until Atr.P1='*';                                       

     end                                                      

     until Atr.P1='0';                                        

    end                                                       

    else                                                      

 3: end;                                                      

   until At.P1='0';                                           

   Close(F52);                                                

   Close(F53);                                                

   CloseGraph;                                                

  end;                                                        

   begin                                                      

   end.

Unit RAZDEL6;                                                     

                                                                     

   interface                                                         

                                                                      

   uses Crt,Graph,Dos,Strings,MYBOOK;                                

                                                                     

   type An = record {Теория}                                         

         P1:Char;  {Переменная поля флага : конец файла, номер       

                     иллюстрации}                                    

         P2:array[0..69] of char; {Переменная поля текста}           

    end;                                                             

                                                                     

   type Ant=record {Текст вопросов}                                  

         P1:Char;   {Переменная поля флага:конец файла, номер иллюст-

                     рации, конец вопроса}                           

         P2:array[0..1] of Char; {Переменная поля номера вопроса}    

         P3:array[0..69] of Char; {Переменная поля текста вопроса}   

   end;                                                              

                                                                     

   type Antr=record { Справки }                                      

         P1:Char; {Переменная поля флага:конец файла, конец вопроса, 

                    номер иллюстрации}                               

         P2:array[0..1] of Char;  {Переменная поля номера вопроса}   

         P3:array[0..0] of Char; {Переменная поля флага: номер справки

                                  и конец справки}                   

         P4:array[0..69] of Char; {Переменная поля текста справки}   

         P5:array[0..2] of Char; {Переменная поля оценки}            

   end;                                                               

                                                                     

   var F6: file of An ;  {Переменные теории}                         

       A:An;                                                         

       Y,N,T1,T2,T3,T4:integer;                                      

       St:string[68];                                                

                                                                     

   var  F62:file of Ant;  { переменные вопросов}                      

        At:Ant;                                                      

        R1:string[2];                                                

        Z1:integer;                                                  

        S:string[68];                                                 

                                                                     

   var F63:file of Antr;   {Переменные справок}                      

       Atr:Antr;                                                     

       R2:string[2];                                                 

       R3:string[1];                                                  

       Stt:string[68];                                               

       R4:string[2];                                                 

       Z2,Z3,Z4:integer;                                             

       CH:  Char;{Переменная для принятия символа с клвиатуры}       

       K,J,I:integer; {Переменные циклов}                            

       M: array[0..3] of integer; {Массив для хранения черырех       

                                  выбранных номеров вопросов}        

       Code:integer;                                                 

                                                                     

   var R5:string[1];   {переменные вывода результатов}               

       Z5:integer;                                                    

       REZ6:Longint;  {переменная оценки}                            

                                                                     

   procedure RAZDEL60; {Обеспечение работы раздела "Формирование     

                        графических текстов}                         

                                                                     

   implementation                                                    

                                                                      

   procedure RAZDEL60;                                               

                                                                     

   Label 0,1,2,3;                                                    

                                                                      

   begin                                                             

    REZ6:=6;                                                         

    GraphRegim;                                                       

    Assign(F6,'RAZTEX6.pas');                                        

    {SI-}                                                            

    Reset(F6);                                                       

    {SI+}                                                             

    If IOResult <> 0 then Writeln ('Нет файла RAZTEX6.pas');         

    repeat                                                           

    ClearDevice;                                                     

    OKNO;                                                             

    For N:=0 to 31 do                                                

    begin                                                            

     Read(F6,A);                                                     

     St:=StrPas(A.P2);   {Преобразование ASCIIZ-строки A.P2 в строку 

                         типа string}                                

     case A.P1 of                                                    

     ' ':OutTextXY(20,10*N+10,St);                                    

     '*':begin                                                       

          SetColor(4);                                               

          OutTextXY(20,10*N+10,St);                                  

          SetColor(1);                                                

         end;                                                        

     '1':begin                                                       

          SetFillStyle(1,1);                                         

          Bar(10,30,630,338);                                        

          SetColor(15);                                              

          SetTextStyle(2,0,1);                                       

          OuttextXY(50,50,'TriplexFont, HorizDir, 15');              

          SetTextStyle(1,0,3);                                       

          SetColor(12);                                              

          OutTextXY(50,100,'DefaultFont, HorizDir, 12') ;            

          SetTextStyle(3,0,4);                                       

          SetColor(13);                                              

          OutTextXY(50,160, 'SmallFont, HorizDir, 13');              

          SetTextStyle(4,0,5);                                        

          SetColor(10);                                              

          OutTextXY(50,220,'SanSerifFont, HorizDir, 10');            

          SetTextStyle(0,0,3);                                       

          SetColor(14);                                               

          OutTextXY(50,300,'GothicFont, HorizDir, 14');              

          SetTextStyle(0,1,2);                                       

          SetColor(14);                                              

          OutTextXY(30,30,'DefaultFont,VertDir');                    

          SetTextStyle(0,0,1);                                       

          SetColor(1);                                               

         end;                                                         

     '2':begin                                                       

          SetColor(4);                                               

          SetTextStyle(1,0,1);                                       

          SetUserCharSize(1,1,1,1);                                  

          OutTextXY(20,120,'Turbo-Pascal 7.0');                      

          SetUserCharSize(3,2,3,2);                                  

          OutTextXY(20,160,'Turbo-Pascal 7.0');                       

          SetUserCharSize(2,1,2,1);                                  

          OutTextXY(20,230,'Turbo-Pascal 7.0');                      

          SetTextStyle(0,0,1);                                       

          SetColor(1);                                                

         end;                                                        

     '3':begin                                                       

          T1:=InstallUserFont('Goth');                               

          T2:=InstallUserFont('sans');                               

          T3:=InstallUserFont('trip');                               

          T4:=InstallUserFont('bold');                               

          If GraphResult<grOK then                                    

            begin                                                    

             OutTextXY(40,180,'Ошибка инсталляции');                 

             readkey;                                                

            end;                                                     

             SetFillStyle(1,1);                                       

             Bar(10,30,630,335);                                     

             SetTextStyle(T1,0,4);                                   

             SetColor(13);                                           

             OutTextXY(100,60,'Goth.chr, HorizDir') ;                

             SetTextStyle(T2,0,4);                                   

             SetColor(10);                                           

             OuttextXY(100,110,'Sanse, HorizDir');                    

             SetTextStyle(T3,0,4);                                   

             SetColor(4);                                            

             OutTextXY(100,170, 'Trip, HorizDir');                   

             SetTextStyle(T4,0,4);                                   

             SetColor(14);                                           

             OutTextXY(100,230,'Bold, HorizDir');                    

             SetTextStyle(0,1,2);                                    

             SetColor(15);                                           

             OutTextXY(45,35,'Goth.chr, VertDir');                   

             SetTextStyle(0,0,1);                                    

             SetColor(1);                                             

            end;                                                     

     '#':GoTo 0;                                                     

     '0':GoTo 0                                                      

                                                                      

     end;                                                            

   end;                                                              

 0:readkey;                                                           

   until A.P1='0';                                                   

   Close(F6);                                                        

   Assign(F62,'Jois.pas');  {связь с файлом вопросов}                

   {SI-}                                                             

   Reset(F62);                                                       

   {SI+}                                                              

   If IOResult<>0 then OutTextXY(50,100,'Нет файла Jois.pas');       

   Assign(F63,'Iodis.pas');                                          

   {SI-}                                                             

   Reset(F63);     {связь с файлом справок}                          

   {SI+}                                                             

   If IOResult<>0 then Writeln('Нет файла Iodis.pas');               

   OKNO1;           {"Контрольные вопросы"}                           

   readkey;                                                          

   ClearDevice;                                                      

   Randomize;        {Выбор четырех номеров вопросов}                

   For J:=0 to 3 do                                                   

    begin                                                            

   1:I:=Random(10);                                                  

     If I=0 then GOTO 1;                                             

     For K:=0 to J-1 do                                              

      begin                                                          

       If M[k]=I then GOTO 1;                                        

      end;                                                            

      M[J]:=I;                                                       

    end;                                                             

    M[1]:=1;                                                         

    repeat                                                            

    OKNO;                                                            

    begin                                                            

     Read(F62,At);                                                    

     R1:=StrPas(At.P2);{Преобразование ASCIIZ-строки At.P2 в         

                          строку типа string}                        

     Val(R1,Z1,Code);  {Преобразование символьного представления     

                         номера вопроса в двоичную форму}            

     Y:=20;                                                          

     If(Z1=M[0]) or (Z1=M[1]) or (Z1=M[2]) or (Z1=M[3]) then         

      begin                                                          

       repeat                                                        

       S:=StrPas(At.P3); {Преобразование ASCIIZ-строки At.P3 в       

                          строку типа string}                        

       OutTextXY(20,Y,S); {Вывод текста вопроса}                     

       case At.P1 of                                                 

       ' ':begin                                                     

           end;                                                      

       end;                                                           

       Y:=Y+10;                                                      

       Read(F62,At);                                                 

       until At.P1='*';                                               

       OutTextXY(50,330,'ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___');     

     2:CH:=ReadKey;                                                  

       SetColor(4);                                                  

       OutTextXY(320,325,CH);                                         

       SetColor(1);                                                  

       readkey;                                                      

       If(CH<>'1') and (CH<>'2') and (CH<>'3') and (CH<>'4') then    

       begin                                                         

        SetFillStyle(1,11);                                          

        Bar(318,320,327,340);                                        

        GoTo 2;                                                       

       end                                                           

       else                                                          

       repeat                                                        

       Read(F63,Atr);                                                

       R2:=StrPas(Atr.P2); {Преобразование ASCIIZ-строки Atr.P2 в    

                            строку типа string}                      

       Val(R2,Z2,Code);   {Преобразование символьного представления  

                         номера вопроса в двоичную форму}            

       If Z2=Z1 then                                                 

       begin                                                         

        repeat                                                       

        If Atr.P3=CH then                                            

         begin                                                       

          Y:=100;                                                    

          OKNO;                                                       

          repeat                                                     

          Stt:=StrPas(Atr.P4);   {Преобразование ASCIIZ-строки Atr.P4

                            строку типа string}                      

          R5:=StrPas(Atr.P5); {Преобразование ASCIIZ-строки Atr.P5 в 

                            строку типа string}                      

          Val(R5,Z5,Code); {Преобразование символьного представления 

                            оценки в двоичную форму}                 

          REZ6:=Round((REZ6+Z5)/2);  {Формирование оценки }          

          OutTextXY(20,Y,Stt);                                       

          Y:=Y+10;                                                   

          case Atr.P1 of                                             

          ' ':begin                                                   

              end;                                                   

          end;                                                       

          Read(F63,Atr);                                             

          until Atr.P3='*';                                           

          readkey;                                                   

          GOTO 3;                                                    

         end                                                         

         else  Read(F63,Atr);                                        

        until Atr.P1='*';                                            

       end                                                           

       until Atr.P1='0';                                              

      end                                                            

     else                                                            

  3:end;                                                             

     until At.P1='0';                                                

    Close(F62);                                                      

    Close(F63);                                                      

    CloseGraph;                                                       

   end;                                                              

                                                                     

   begin                                                             

   end.

Unit RAZDEL7;                                                      

                                                                           

        interface                                                          

                                                                            

        uses Crt,Graph,Dos,Strings,MYBOOK;                                 

                                                                           

        type An = record {Теория}                                           

             P1:Char;  {Переменная поля флага : конец файла, номер         

                      иллюстрации}                                         

             P2:array[0..69] of char; {Переменная поля текста}             

        end;                                                               

                                                                           

        type Ant=record {Текст вопросов}                                   

             P1:Char;   {Переменная поля флага:конец файла, номер иллюст-  

                         рации, конец вопроса}                             

             P2:array[0..1] of Char; {Переменная поля номера вопроса}      

             P3:array[0..69] of Char; {Переменная поля текста вопроса}     

        end;                                                               

                                                                           

        type Antr=record { Справки }                                        

             P1:Char; {Переменная поля флага:конец файла, конец вопроса,   

                       номер иллюстрации}                                  

             P2:array[0..1] of Char;  {Переменная поля номера вопроса}     

             P3:array[0..0] of Char; {Переменная поля флага: номер справки 

                                      и конец справки}                     

             P4:array[0..69] of Char; {Переменная поля текста справки}     

             P5:array[0..2] of Char; {Переменная поля оценки}              

        end;                                                               

        var F7: file of An ;  {Переменные теории}                          

            A:An;                                                           

            N,Y,T:integer;                                                 

            St:string[68];                                                 

                                                                           

        var F72:file of Ant;  { Переменные вопросов}                       

            At:Ant;                                                        

            R1:string[2];                                                  

            Z1:integer;                                                     

            S:string[68];                                                  

        var F73:file of Antr;   {Переменные справок}                       

            Atr:Antr;                                                       

            R2:string[2];                                                  

            R3:string[1];                                                  

            Stt:string[68];                                                

            R4:string[2];                                                  

            Z2,Z3,Z4:integer;                                              

            CH:  Char;{Переменная для принятия символа с клвиатуры}        

            K,J,I:integer; {Переменные циклов}                             

            M: array[0..3] of integer; {Массив для хранения черырех        

                                       выбранных номеров вопросов}         

            Code:integer;                                                  

                                                                           

        var R5:string[1];   {переменные вывода результатов}                

            Z5:integer;                                                    

            REZ7:Longint;  {переменная оценки}                             

        var Size:word;                                                      

            pt:pointer;                                                    

            u,Nn,xt,yt:integer;                                            

                                                                           

                                                                            

        procedure RAZDEL70;                                                

                                                                           

        implementation                                                      

                                                                           

        procedure RAZDEL70;                                                

                                                                            

                                                                           

                                                                           

        Label 0,1,2,3;                                                     

                                                                            

        begin                                                              

         REZ7:=6;                                                          

         GraphRegim;                                                        

         Assign(F7,'RAZTEX7.pas');         {связь с файлом теории}         

         {SI-}                                                             

         Reset(F7);                                                        

         {SI+}                                                              

         If IOResult <> 0 then Writeln ('Нет файла RAZTEX7.pas');          

         repeat                                                            

         OKNO;                                                              

         For N:=0 to 32 do                                                 

          begin                                                            

            Read(F7,A);                                                     

            St:=StrPas(A.P2);   {Преобразование ASCIIZ-строки A.P2 в строку

                              типа string}                                 

            case A.P1 of                                                   

            ' ':OutTextXY(20,10*N+10,St);                                  

            '*':begin                                                      

                 SetColor(4);                                              

                 OutTextXY(20,10*N+10,St);                                  

                 SetColor(1);                                              

                end;                                                       

            '1':begin                                                       

                 For Nn:=0 to 3 do                                         

                  begin                                                    

                   GetMem(pt,ImageSize(0,200,50,250));                     

                   GetImage(0,200,50,250,pt^);                             

                   u:=0;                                                   

                   while  u<(GetMaxX) do                                   

                   begin                                                    

                    PutImage(u-1,150,pt^,1);                               

                    u:=u+8;                                                

                    PutImage(u-1,150,pt^,1);                                

                   end;                                                    

                   Dispose(pt);                                            

                  end;                                                     

                end;                                                        

            '2':begin                                                      

                 SetViewPort(10,50,630,330,true);                          

                 SetBKColor(0);                                             

                 SetViewPort(20,60,620,320,true);                          

                 ClearViewPort;                                            

                 SetBKColor(14);  Sound(880);  Delay(200);  NoSound;        

                 SetBKColor(12);  Sound(698);  Delay(200);  NoSound;       

                 SetBKColor(14);  Sound(880);  Delay(200);  NoSound;       

                 SetBKColor(12);  Sound(698);  Delay(200);  NoSound;       

                 SetBKColor(10);  Sound(934);  Delay(200);  NoSound;       

                 SetBKColor(14);  Sound(880);  Delay(200);  NoSound;       

                 SetBKColor(13);  Sound(784);  Delay(400);  NoSound;       

                 SetBKColor(1);   Sound(523);  Delay(200);  NoSound;       

                 SetBKColor(9);   Sound(523);  Delay(200);  NoSound;       

                 SetBKColor(1);   Sound(523);  Delay(200);  NoSound;       

                 SetBKColor(2);   Sound(587);  Delay(100);  NoSound;        

                 SetBKColor(5);   Sound(659);  Delay(100);  NoSound;       

                 SetBKColor(4);   Sound(699);  Delay(200);  NoSound;       

                 SetBKColor(3);   Sound(699);  Delay(200);  NoSound;       

                 SetBKColor(4);   Sound(699);  Delay(200);  NoSound;       

                 Delay(600);                                               

                 SetViewPort(5,5,635,335,true);                            

                 SetBKColor(14);                                            

                 ClearDevice;                                              

                 OKNO;                                                     

                End;                                                        

            '#':GoTo 0;                                                    

            '0':GoTo 0;                                                    

            end;                                                           

          end;                                                              

        0:readkey;                                                         

          until  A.P1='0'  ;                                               

          Close(F7);                                                        

        Assign(F72,'Jos.pas');  {связь с файлом вопросов}                  

        {SI-}                                                              

        Reset(F72);                                                         

        {SI+}                                                              

        If IOResult<>0 then Writeln('Нет файла Jos.pas');                  

         Assign(F73,'Ios.pas');                                            

         {SI-}                                                             

         Reset(F73);     {связь с файлом справок}                          

         {SI+}                                                             

         If IOResult<>0 then Writeln('Нет файла Ios.pas');                 

         OKNO1;           {"Контрольные вопросы"}                          

         readkey;                                                          

         ClearDevice;                                                       

         Randomize;        {Выбор четырех номеров вопросов}                

         For J:=0 to 3 do                                                  

          begin                                                            

         1:I:=Random(7);                                                   

           If I=0 then GOTO 1;                                             

           For K:=0 to J-1 do                                              

            begin                                                           

             If M[k]=I then GOTO 1;                                        

            end;                                                           

            M[J]:=I;                                                        

          end;                                                             

          repeat                                                           

          OKNO;                                                            

          begin                                                            

           Read(F72,At);                                                   

           R1:=StrPas(At.P2);{Преобразование ASCIIZ-строки At.P2 в         

                               строку типа string}                         

           Val(R1,Z1,Code);  {Преобразование символьного представления     

                              номера вопроса в двоичную форму}             

           Y:=20;                                                          

           If(Z1=M[0]) or (Z1=M[1]) or (Z1=M[2]) or (Z1=M[3]) then         

           begin                                                            

            repeat                                                         

            S:=StrPas(At.P3); {Преобразование ASCIIZ-строки At.P3 в        

                               строку типа string}                          

            OutTextXY(20,Y,S); {Вывод текста вопроса}                      

            case At.P1 of                                                  

            ' ':begin                                                      

                end;                                                        

            end;                                                           

            Y:=Y+10;                                                       

            Read(F72,At);                                                   

            until At.P1='*';                                               

            OutTextXY(50,320,'ВВЕДИТЕ НОМЕР ПРАВИЛЬНОГО ОТВЕТА ___');      

          2:CH:=ReadKey;                                                   

            SetColor(4);                                                   

            OutTextXY(320,310,CH);                                         

            SetColor(1);                                                   

            readkey;                                                       

            If(CH<>'1') and (CH<>'2') and (CH<>'3') and (CH<>'4') then     

            begin                                                          

             SetFillStyle(1,11);                                           

             Bar(318,290,327,320);                                          

             GoTo 2;                                                       

            end                                                            

            else                                                           

            repeat                                                          

            Read(F73,Atr);                                                 

            R2:=StrPas(Atr.P2); {Преобразование ASCIIZ-строки Atr.P2 в     

                                 строку типа string}                       

            Val(R2,Z2,Code);   {Преобразование символьного представления   

                              номера вопроса в двоичную форму}             

            If Z2=Z1 then                                                  

            begin                                                          

             repeat                                                         

             If Atr.P3=CH then                                             

              begin                                                        

               Y:=100;                                                     

               OKNO;                                                        

               repeat                                                      

               Stt:=StrPas(Atr.P4);   {Преобразование ASCIIZ-строки Atr.P4 в

                                 строку типа string}                       

               R5:=StrPas(Atr.P5); {Преобразование ASCIIZ-строки Atr.P5 в  

                                 строку типа string}                       

               Val(R5,Z5,Code); {Преобразование символьного представления  

                                 оценки в двоичную форму}                  

               REZ7:=Round((REZ7+Z5)/2);  {Формирование оценки }           

               OutTextXY(20,Y,Stt);                                        

               Y:=Y+10;                                                    

               case Atr.P1 of                                               

               ' ':begin                                                   

                   end;                                                    

               end;                                                        

               Read(F73,Atr);                                              

               until Atr.P3='*';                                           

               readkey;                                                    

               GOTO 3;                                                      

              end                                                          

              else  Read(F73,Atr);                                         

             until Atr.P1='*';                                              

            end                                                            

            until Atr.P1='0';                                              

           end                                                             

          else                                                              

       3:end;                                                              

          until At.P1='0';                                                 

         Close(F72);                                                        

         Close(F73);                                                       

         CloseGraph;                                                       

        end;                                                                

 begin                                                                     

  end.

unit MYBOOK;                                                

                                                             

 interface                                                    

                                                             

 uses Graph,Crt,Strings,Dos;                                 

                                                             

 Type  Dlina=string[10];                                     

                                                             

 var Ch:char;                                                

     Regime:byte;                                            

     c,Gd,Gm,i,x1,x2,y1,y2:integer;                          

     ArcCoords:ArcCoordsType;                                

     StAngle,dAngle,KRadius:word;                            

                                                             

 const OK:array[1..11] of PointType= ((X:0;Y:0),(X:640;Y:0), 

         (X:640;Y:350), (X:0;Y:350),(X:0;Y:8),(X:5;Y:8),     

         (X:5;Y:345),(X:635;Y:345),(X:635;Y:5),(X:0;Y:5),    

         (X:0;Y:0));                                         

                                                              

 procedure Diogramma;                                        

 procedure OKNO;                                             

 procedure OKNO1;                                            

 procedure GraphRegim;                                        

                                                             

 implementation                                              

                                                             

 procedure OKNO;                                              

 begin                                                       

  SetColor(14);                                              

  DrawPoly(11,OK);                                           

  SetFillStyle(1,14);                                         

  FloodFill(635,2,14);                                       

  SetFillStyle(1,11);                                        

  Bar(6,6,634,344);                                          

  SetColor(1);                                                

 end;                                                        

                                                             

procedure OKNO1;                                            

const OK:array[1..11] of PointType= ((X:0;Y:0),(X:640;Y:0), 

             (X:640;Y:350), (X:0;Y:350),(X:0;Y:8),(X:5;Y:8), 

             (X:5;Y:345), (X:635;Y:345),(X:635;Y:5),(X:0;Y:5),

             (X:0;Y:0));                                     

                                                             

 begin                                                       

  SetColor(14);                                              

  DrawPoly(11,OK);                                           

  SetFillStyle(1,14);                                        

  FloodFill(635,2,14);                                       

  SetFillStyle(1,11);                                        

  Bar(6,6,634,344);                                          

  SetColor(4);                                               

  SetTextStyle(0,0,6);                                       

  OutTextXY(50,100,'Контрольные');                           

  OutTextXY(140,150,'вопросы');                              

  SetTextStyle(0,0,1);                                       

  SetColor(1);                                               

  end;                                                       

                                                             

                                                             

 procedure Diogramma;                                        

 begin                                                        

  SetViewPort(0,0,GetMaxX,GetMaxY,true);                     

  SetColor(11);                                              

  SetLineStyle(0,0,3);                                       

  SetFillStyle(1,13);                                        

  PieSlice(170,210,0,359,120);                               

  SetFillStyle(9,2);                                         

  PieSlice(170,210,0,30,120);                                

  SetFillStyle(1,3);                                         

  Sector(170,210,0,359,80,120);                              

  SetFillStyle(11,5);                                        

  Sector(170,210,0,270,80,120);                              

  SetFillStyle(1,15);                                        

  Circle(480,210,120);                                       

  FloodFill(480,210,11);                                     

  StAngle:=0;                                                

  dAngle:=360 Div 16;                                         

  while(StAngle+dAngle)<360 do                               

    begin                                                    

     c:=random(14);                                          

     SetColor(c);                                             

     Arc(535,210,StAngle,StAngle+dAngle,40);                 

     GetArcCoords(ArcCoords);                                

     with ArcCoords do                                       

       begin                                                  

        KRadius:=Round(SQRT(SQR(Xend-600)+SQR(Yend-210)));   

        Circle(Xend,Yend,KRadius);                           

        setfillstyle(1,c);                                   

        floodfill(xend-kradius+5,yend,c);                    

       end;                                                  

       StAngle:=StAngle+dAngle;                              

    end;                                                     

 end;                                                         

                                                             

procedure GraphRegim;                                       

 var Gd,Gm:integer;                                          

 begin                                                        

  Gd:=Detect;                                                

  InitGraph(Gd,Gm,'');                                       

  If GraphResult<>grOK then Halt(1);                         

 end;                                                         

                                                             

                                                             

 begin                                                       

 end.

Приложение 2

База данных

Для  работы с настоящей программой Вам  необходимо знание языка

 TURBO-PASCAL 7.0, интегрированной среды, персонального компьютера

 IBM PC.

     Расширенный алгоритмический язык TURBO-PASCAL7.0 в качестве гра-

 фических средств  соддержит в  арсенале   два   стандартных  модуля:

 Grt и Graph.

      Модуль Grt содержит процедуры и функции следующего  назначения:

                     1.Процедуры задания режимов работы.

                     2.Полцедуры управления цветом.

                     3.Процедуры и функции работы с экраном.

                     4.Функции работы с клавиатурой.

                     5.Процедуры управления  звуком и др.

       Процедуры   и   функции   модуля   Graph   имеют   назначение:

                     1.Управление графическим режимом.

                     2.Управление экраном, окном, страницей.

                     3.Управление цветом и палитрой.

                     4.Работа с точками и линиями.

                     5.Построение различных фигур.

                     6.Работа с текстом.

                     7.Обмен с памятью.

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

 разделы:

                 1.Программирование графических режимов.

                 2.Управление курсором и полем рисования.

                 3.Формирование прямолинейных монохромных изображений

                 4.Управление цветом и стилем изображений.

                 5.Программирование цветных криволинейных изображений

                 6.Формирование графических текстов.

                 7.Программирование озвученных динамических  сцен.

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

 содержат   теоретическую   часть   и   контрольные    вопросы.

0

ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

      Состав, назначение и взаимное положение операторов управления

 графическими режимами в языке TURBO-PASCAL удобно рассматривать в

 контексте структуры характерной графической программы:

   ---------- program <идентификатор> - заголовок программы.

   I          uses Graph - используемые модули.

   I             {Действия в текстовом режиме}.

   I   ------ InitGraph - инициализация графических средств

   I  I          {Действия в графическом режиме " по умолчанию".

   I  I       SetGraphMode - изменение графического режима.

   I  I          {Действия в новом графическом режиме}.

   I  I   I-- RestoreCrtMode - временный переход в текстовому режиму.

   I  I   I      {Действия в текстовом режиме}.

   I  I   I-> SetGraphMode  - возврат в графический режим.

   I  I          {Действия в графическом режиме}.

   I  I-----> CloseGraph

   I             {Действия в текстовом режиме}.

   I--------> end. - завершение программы.

*     proсedure InitGraph(var GraphDriver:integer;

*                         var GraphMode:integer;

*                         DriverPath:string);

      Инициализирует графическую систему, устанавливает графический

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

 цвета и т.д..

                ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

      GraphDriver - переменная, в которую необходимо записать код

                    требуемого графического драйвера или нуль, если

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

      GraphMode - переменная, в которую процедура помещает код

                  графического режима.

      DriverPath - строка, содержащая путь к драйверу (если строка

                   пустая, считается, что драйвер находится в текущем

                   каталоге).

      В случае аварийной ситуации процедура устанавливает код ошибки:

           -2  -  нет графического адаптера;

           -3  -  нет драйвера устройства;

           -4  -  ошибка в драйвере;

           -5  -  нет памяти для загрузки драйвера;

          -10  -  недопустимый режим для выбранного драйвера.

*     procedure CloseGraph(без параметров);

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

 графической системы, и освобождает динамическую память компьютера,

 отведенную под графический драйвер.

*     procedure SetGraphMode(Mode:integer);

      Mode - графический режим.Изменяет ранее используемый графи-

 ческий режим либо возвращает систему в прежний графический режим

 после временного перехода к текстовому режиму. Условием использо-

 вания оператора является сохранение в динамической области ОЗУ ранее

 загруженного графического драйвера.

                 ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

*     procedure RestoreCrtMode(без параметров);

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

 динамической области ОЗУ програмы графического драйвера.

      Имеется ряд операторов для получения справок о текущем

 графическом режиме:

*     function GetDriverName:string; -

                                      Возвращает строковое название

                                      текущего графического адаптера.

*     function GetModeName(ModeNumber:integer):string -

                                   Возвращает строковое название

                                   требуемого графического режима.

*     function GetMaxMode:integer  -

                                     Возвращает максимальный номер

                                     графического режима для текущего

                                     адаптера.

*     procedure GetModeRange(GraphDriver:integer;

*                            var LowMode,HighMode:integer); -

       Выдает справку о диапазоне номеров графических режимов задан-

 ного графического адаптера. Возвращаемые параметры LowMode и

 HighMode означают минимальный и максимальный номера графических

 режимов, соответственно.

*     function GetGraphMode:integer;  -

                       Возвращает номер текущего графического режима.

                 ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

*     procedure GetAspectRatio(var Xasp, Yasp:word); -

                    Возвращает в своих параметрах ввеличины

                    дискретов экрана по осям X и Y ,сооответственно.

0

УПРАВЛЕНИЕ КУРСОРОМ И ПОЛЕМ РИСОВАНИЯ

   В графическом режиме  также как и  в текстовом положение выво-

 димых на экран данных в каждый момент времени определяется   курcо-

 ром. Однако,  в  этом  случае  курсор  невидим. При вхождении в гра-

 фический режим с помощью процедуры  InitGraph  курсор  автоматически

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

 (черный) цвет палитры. Для определения и изменения положения курсора

 без рисования в TURBO-PASCAL предусмотрены операторы MoveTo,MoveRel,

 GetX,GetY.

*     procedure MoveTo(x,y:integer);

 где x,y - координаты по горизонтали и вертикали соответственно

 в отсчете от левого верхнего угла экрана.

*     procedure MoveRel(Dx,Dy:integer);

      Смещает курсор без рисования относительно его текущего поло-

 жения. Dx, Dy - смещения курсора по координатам x и y.

*     function GetX: word;

      Определяет для курсора значение координаты X.

*     function GetY: word;

      Определяет для курсора значение координаты Y.

              УПРАВЛЕНИЕ КУРСОРОМ И ПОЛЕМ РИСОВАНИЯ

При управлении положением курсора полезными оказываются также

 справочные функции GetMaxX и GetMaxY, которые возвращают координаты

 самой правой и самой нижней возможных графических позиций курсора,

 соответственно, для текущего графического драйвера и режима.

*     procedure ClearDevice;

      Очищает экран от следов предшествовавшего рисования и восста-

 навливает исходные параметры графики.

*     procedure SetViewPort(X1,Y1,X2,Y2:word;Clip:boolean);

      Устанавливает прямоугольное окно рисования с перемещением

 курсора в левый верхний угол окна. Параметры процедуры имеют следу-

 ющий смысл:(X1,Y1) и (X2,Y2) определяют соответствввенно координаты

 левого верхнего и правого нижнего углов окна, а Clip принимает

 значение true при необходимости отсечения изображения за границами

 окна и false, когда этого делать не надо .

*     procedure ClearViewPort;

      Очищает текущее окно, заполняя его первым цветом текущей

 цветовой палитры, и переводит курсор в левый верхний угол окна.

*     procedure GetViewSettings(var ViewPortType);

      Возвращает параметры активного окна просмотра в переменной

 ViewPort. Тип ViewPortType  описан в модуле Graph.

0

ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ

 В данном разделе не рассматривается управление

 цветом и стилем рисования и закрепляется за

 фоном светло-серый, а за курсором синий цвет.

*   procedure LineTo(X,Y:integer);

щ

    Проводит отрезок прямой от текущего положения

 курсора к заданной точке (X,Y).

*   procedure LineRel(Dx,Dy:integer);

2

    Рисует отрезок прямой по направлению к точке,

 смещенной от текущего положения курсора на рас-

 стояние Dx и Dy по осям OX и OY .

*   procedure Line(X1,Y1,X2,Y2:integer);

3

    Проводит прямую между точками (X1,Y1) и

 (X2,Y2).

    После выполнения этой и последующих процедур

 курсор возвращается в предшествующее положение.

           ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ

*   procedure Rectangle(X1,Y1,X2,Y2:integer);

4

 Строит контуры прямоугольника с координатами

 левого верхнего (X1,Y1) и нижнего правого

 (X2,Y2) углов.

*    procedure Bar(X1,Y1,X2,Y2:integer);

5

 Строит прямоугольник, закрашенный текущим цветом

 и орнаментом заполнения. (X1,Y1), (X2,Y2) -

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

 углов соответственно.

*     procedure Bar3D(X1,Y1,X2,Y2:integer;

*                     Depth:word;Top:boolean)

6

 Рисует аксонометрию закрашенного по фасаду

 прямоугольного параллелепипеда.

 (X1,Y1),(X2,Y2) - координаты левого верхнего и

                   правого нижнего  углов

                   прямоугольного фасада.

 Depth - ширина боковой грани (отсчитывается по

         годизонтали.

 Top - признак включения верхней грани.

          ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ

*      procedure DrawPoly(NumPoints:word;

*                         var PolyPoints);

7Строит ломаную линию.

 NumPoints - число вершин многоугольника

 PolyPoints - переменная без типа, содержащая

 NumPoints+1 пар координат вершин многоугольника

 (первая и последняя вершины должны совпадать).

*      procedure FillPoly(NumPoints:word;var PolyPoints);

8

 Закрашивает многоугольник текущим цветом и

 орнаментом. Параметры NumPoints и PolyPoints

 именют тот же смысл и тип, что и одноимеынные

 параметры процедуры DrawPoly.

0

01С ПОМОЩЬЮ КАКИХ ПРОЦЕДУР МОЖНО НАИБОЛЕЕ РАЦИОНАЛЬНО ПОСТРОИТЬ

   ОТРЕЗОК , ЕСЛИ ИЗВЕСТНЫ КООРДИНАТЫ КОНЦОВ?

   1  LineTo(X,Y);

      Line(X1,Y1,X2,Y2);

   2  Line(X1,Y1,X2,Y2);

      DrawPoly(NumPoint,PolyPoints);

   3  LineTo(X,Y);

      Line(X1,Y1,X2,Y2);

      DrawPoly(NumPoint,Poly Points);

   4  Line(X1,Y1,X2,Y2);

*

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

1

   1  Bar3D(X1,Y1,X2,Y2,Depth,true);

      SetViewPort(X1,Y1,X2,Y2,false);

      ClearViewPort;

      Bar3D(X1,Y2,X2,Y3,Depth,false);

   2  Bar3D(X1,Y1,X2,Y2,Depth,true);

      SetViewPort(X1,Y1,X2,Y2,Depth,true);

      ClearViewPort;

      Bar3D(X1,Y1,X2,Y3,Depth,false);

   3  Bar3D(X1,Y1,X2,Y2,Depth,true);

      Bar3D(X1,Y2,X2,Y3,Depth,false);

   4  Bar3D(X1,Y1,X2,Y2,Depth,true);

      Bar3D(X1,Y2,X2,Y3,Depth,true);

*

 03КАК НА ПОЛНОСТЬЮ ЗАКРАШЕННОМ ЭКРАНЕ ПОЛУЧИТЬ НЕЗАКРАШЕННУЮ ПРЯМОУ-

   ГОЛЬНУЮ ОБЛАСТЬ?

    1  Bar(X1,Y1,X2,Y2);

       SetViewPort(X1,Y1,X2,Y2,true);

       ClearViewPort;

    2  Bar(X1,Y1,X2,Y2);

    3  Bar3D(X1,Y1,X2,Y2,Depth,true);

    4  Bar3D(X1,Y1,X2,Y2,false);

*

 04КАК ИСКЛЮЧИТЬ ПОЯВЛЕНИЕ НА ЭКРАНЕ ЗАТЕНЯЕМЫХ КОНТУРОВ НИЖНЕГО

2  ПАРАЛЛЕЛЕПИПЕДА В ОБЬЕМНОЙ СТОЛБЧАТОЙ ДИАГРАММЕ?

    1  Использовать процедуру Bar3D дважды. построенный верхний парал-

       лелепипед "закроет" автоматически верхнюю грань нижнего парал-

       лелепипеда.

    2  Установить параметр Top=false в процедуре Bar3D при построении

       нижнего параллелепипеда.

    3  Установить параметр Top=false в процедуре Bar3D при построении

       верхнего параллелепипеда.

    4  Построить ломаную линию соответствующую контурам верхней грани

       нижжнего параллелепипеда с помощью процедуры DrawPole и закра-

       сить его в белый цвет с помощью процедуры FillPole.

*

 05КАК НА ЭКРАНЕ ЗАКРАСИТЬ БЕЛЫМ ЦВЕТОМ ОБЛАСТЬ, ОГРАНИЧЕННУЮ ЗВЕЗДОЙ?

    1  Построить звезду с помощью процедуры DrawPole(10,zve),где zve -

       константа типа PointType, является массивом координат вершин

       фигуры и содержит 10 элементов.

    2  Использовать процедуру DrawPole(10,zvez) , где константа zvez

       содержит 11 элементов.

    3  Применить процедуру FillPole(10,zves), где константа zves содер-

       жит 11 элементов.

    4  Установить цвет рисования белый и с помощью процедуры

       FillPole(10,zves) построить звезду, закрашенную белым цветом.

*

 06С ПОМОЩЬЮ КАКОЙ ПРОЦЕДУРЫ ИЛИ ФУНКЦИИ ВОЗМОЖНО УСТАНОВИТЬ СТРОКОВОЕ

   НАЗВАНИЕ ТЕКУЩЕГО ГРАФИЧЕСКОГО АДАПТЕРА?

     1  Функция GetDriverName;

     2  Функция GetModeName(ModeNumber);

     3  Функция GetMaxMode;

     4  Процедура GetModeRange(GraphDriver;LowMode,HighMode);

*

 07СУЩЕСТВУЕТ ЛИ ВОЗМОЖНОСТЬ ОПРЕДЕЛЕНИЯ ЗНАЧЕНИЯ КООРДИНАТ КУРСОРА.

      1  Нет

      2  Да, с помощью функций GetX, GetY.

      3  Да, с помощью функций GetMaxX, GetMaxY.

      4  Да, с помощью функции MoveRel.

*

 08С ПОМОЩЬЮ КАКОГО ФРАГМЕНТА ПРОГРАММЫ МОЖНО ВЫВЕСТИ НА ЭКРАН

3  СЛЕДУЮЩУЮ КАРТИНКУ? КУРСОР НАХОДИТСЯ В ТОЧКЕ (X1,Y1).

      1  Line(X,Y,X1,Y1);

         MoveRel(X,Y+dY);

         Line(X,Y+dY,X1,Y1);

         MoveRel(0,dY);

         LineTo(X1,Y1);

      2  LineTo(X1,Y1);

         LineRel(0,dY);

         LineRel(0,2dY);

      3  LineTo(X,Y);

         MoveRel(0,dY);

         Line(X,Y+dY,X1,Y1);

         MoveRel(0,dY);

         Line(X,Y+2dY,X1,Y1);

      4  LineTo(X,Y);

         LineRel(0,dY);

         LineRel(0,2dY);

*

 09ГДЕ ПОМЕЩАЕТСЯ КУРСОР И КАКОЙ ФОН ЭКРАНА УСТАНАВЛИВАЕТСЯ ПРИ

   ВХОЖДЕНИИ В ГРАФИЧЕСКИЙ РЕЖИМ С ПОМОЩЬЮ ПРОЦЕДУРЫ InitGraph?

      1  Курсор помещается в центр экрана и устанавливается черный

         цвет фона экрана.

      2  Курсор помещается в правый верхний угол экрана и устанав-

         ливается черный цвет фона экрана.

      3  Курсор помещается в левый верхний угол экрана и устанавлива-

         ется черный цвет фона экрана.

      4  Курсор помещается в левый верхний угол экрана и устанавлива-

         ется белый цвет фона экрана.

*

 10С КАКОЙ ЧАСТОТОЙ ОБНОВЛЯЕТ ЭКРАН КОНТРОЛЛЕР ДИСПЛЕЯ ПЭВМ IBM?

      1  50-60 раз/сек

      2  20-40 раз/сек

      3  100-120 раз/сек

      4  200 раз/сек

*

0

011Процедуру LineTo(X,Y) можно использовать только в случае, когда     002

    один из концов отрезка совпадает с положением курсора.

   *

   2Ответ правильный. Однако, применение процедуры DrawPoly в данном    004

    случае не является рациональным.

   *

   3Процедуру LineTo(X,Y) можно использовать только в случае, когда один002

    из концов отрезка совпадает с положением курсора. Процедура DrowPoly

    не является в данном случае рациональной.

   *

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

   *

*

 021Отввет неверный. Верхний параллелепипед будет иметь очищенную перед-002

    нюю грань.  Это не требуется по условию задачи. При этом неверно

    указаны параметры процедуры Bar3D при построении второго параллеле-

    пипеда.

   *

   2Неправильно указаны параметры процедуры SetViewPort. Координаты окна002

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

    цедуры Bar3D от левого верхнего угла окна.

   *

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

   *

   4Ответ не точный.На экране появятся затененные контуры нижнего парал-003

    лелепипеда.

   *

*

 031Ответ не точный.Процедуры SetViewPort и ClearViewPort в данном слу- 003

    чае излишние,т.к.уже процедура Bar рисует прямоугольную область,

    которую закрашивает первым цветом палитры, если цвет не задан ранее

   *

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

   *

   3Процедура Bar3D рисует аксонометрию прямоугольного параллелепипеда,а002

    не прямоугольную область.

   *

   4Процедура Bar3D рисует аксонометрию прямоугольного параллелепипеда,а002

    не прямоугольную область.

   *

*

 041Ответ неверный. Процедура Bar3D рисует контуры аксонометрии закра-  002

    шенного по фасаду параллелепипеда. Боковая и верхняя грани не закра-

    шиваются, т.о. затемненная часть верхней грани нижнего параллелепи-

    педа не исчезнет.

   *

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

   *

   3Ответ неверный. Параметр Top процедуры Bar3D регулирует наличие или 002

    отсутствие верхней (а не нижней) левой грани аксонометрии.

   *

   4Ответ неверный. Достаточно установить параметр Top=False процедуры  002

    Bar3D. Дополниетльные меры излишне.

   *

*

 051Ответ неверный. Процедура DrawPoly построит звезду с одной невидимой002

    гранью. Цвет фигуры будет соответствовать цвету фона.

   *

   2Ответ неверный. Цвет фигуры будет соответствовать цвету фона и будет002

    белым только в случае, когда фон экрана белый.

   *

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

   *

   4Ответ правильный. Однако, закраска белым цветом возможна и          004

    по умолчанию.

   *

*

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

   *

   2Ответ неверный. Функция GetModeName возвращает строковое название   002

    требуемого графического режима для текущего адаптера.

   *

   3Ответ неверный.Функция GetMaxMode возвращает максимальный номер     002

    графического режима для текущего адаптера.

   *

   4Ответ неверный. Процедура GetModeRange выдает справку о диапазоне   002

    номеров графических режимов заданного графического адаптера.

   *

*

 071Ответ неверный. Такая возможность существует.                       002

   *

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

   *

   3Ответ неверный. Данные процедуры возвращают максимально возможные   002

    для текущего драйвера и режима графические позиции курсора.

   *

   4Ответ неверный. Процедура MoveRel смещает курсор относительно его   002

    текущей позиции.

   *

*

1081Ответ неверный. Рисунок будет иметь следующий вид:                  002

   *

2  2Ответ неверный.Рисунок будет иметь следующий вид:                   002

   *

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

   *

3  4Ответ неверный. рисунок будет иметь следующий вид:                  002

   *

*

 091Ответ неверный.                                                     002

   *

   2Ответ неверный.                                                     002

   *

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

   *

   4Ответ неверный.                                                     002

   *

*

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

   *

   2Ответ неверный.                                                     002

   *

   3Ответ неверный.                                                     002

   *

   4Ответ неверный.                                                     002

   *

*

0

УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЙ

      В данном разделе мы рассмотрим возможности управления цветовой

 палитрой и стилем рисования.

*     procedure GetPalette(var PaletteType);

      Возвращает текущую плитру и количество цветов в ней. Применя-

 ется только в графическом режиме и только с драйверами  EGA, EGA 64

 и VGA.

*     procedure SetAllPalette(var Palette);

      Меняет все цвета палитры на заданные. Переменная без типа

 Palette в первом байте содержит число N- количество цветов в палитре

 а в последующих N байах - коды задаваемых цветов. Если задана вели-

 чина -1, то исходный цвет остается без изменений.

*      procedure SetPalette(NumberColor:word;Color:byte);

       Изменяет один из цветов палитры. NumberColor - порядковый

 номер изменяемого цвета. Color -код нового цвета.

*       procedure SetColor(Color:word);

        Устанавливает текущий цвет рисования.Color - код цвета либо

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

                 УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ

_____________________________________________________________________

    Имя       Значение   Назначение

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

 Black           0       черный

 Blue            1       синий

 Green           2       зеленый

 Cyan            3       голубой

 Red             4       красный

 Magenta         5       фиолетовый

 Brown           6       коричневый

 LightGray       7       светло-серый

 DarkGray        8       темно-серый

 LightBlue       9       светло-синий

 LightGreen     10       светло-зеленый

 LightCyan      11       светло-голубой

 LightRed       12       розовый

 LightMagenta   13       светло-фиолетовый

 Yellow         14       желтый

1White          15       белый

               УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ

*      procedure SetBKColor(Color:word);

      Устанавливает цвет фона рисования. Color - код или имя цвета.

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

 фоном рисования, используются функции:

                                       function GetColor:word;

                                       function GetBKColor:word;

      Факторами, определяющими стиль рисования, являются толщина и

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

 и линий закраски замкнутых фрагментов рисунков.

*     procedure SetLineStyle(LineStyle:word; Pattern:word;

*                            Thiekness:word);

      Устанавливает стиль контурных линий и их толщину. Параметр

 LineStyle может  принимать следующие значения:

 SolidLn   = 0   ___________________________________________________

 DottedLn  = 1   ...................................................

 CenterLn  = 2   ._._._._._._._._._._._._._._._._._._._._._._._._._ .

 DashedLn  = 3   _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

 UserBitLn = 4   тип, определяемый пользователем.

      Когда LineStyle=userBitLn, задается параметр Pattern - шаблон

 линии - двухбайтовое число, каждый бит которого равен 1, если оче-

 редной пиксель следует высветить, и 0 в противном случае.

      Параметр Thickness устанавливает толщину линий и может при-

 нимать следующие значения:   NormWidth = 1  -  тонкая линия

                              ThickWidth= 3  -  толстая линия

                УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ

*     procedure GetLineSettings(var LineInfo:LineSettingsType);

      Возвращает параметры текущего стиля контурных линий. Тип

 LineSettingsType описан в модуле Graph как запись, поля которой:

 LineStyle:word;

 Pattern:word;

 Thickness:word;, имеют тот же смысл, что и одноименные параметры

 процедуры SetLineStyle.

*     procedure SetFillStyle[(Pattern:word;Color:word)];

      Устанавливает стандартные орнамент и цвет заполнения. "По умол-

 чанию" закраска белая сплошная. Параметр Color - установка цвета.

 Возможные значения параметра Pattern проиллюстрированы на следующем

 экране.

*     procedure SetFillPattern(Pattern:FillPatternType;Color:word);

      Задает произвольный орнамент и цвет заполнения фигур.

 Pattern - задаваемый пользователем орнамент.

 typeFillPatternType=array[1..8] of byte;

 Color - код цвета в палитре.

*      procedure GetFillSettings(varFillInfo:FillSettingsType)

       Возвращает код и цвет стандартного образца закраски в пере-

 менных Color и Pattern  соответственно.

              УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ

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

      Имя        Значение

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

  EmptyFill         0        Фоновым цветом

  SolidFill         1        Заданным цветом

  LineFill          2

  LtSlashFill       3

  SlashFill         4

  BkSlashFill       5

  LtBkSlashFill     6

  HatchFill         7

  XHatchFill        8

  InterLeaveFill    9

  WideDotFill      10

  CloseDotFill     11

2 UserFill         12         Заполнение определяется пользователем

0--------------------------------------------------------------------

01С ПОМОЩЬЮ КАКОЙ ПРОЦЕДУРЫ МОЖНО ВЫВЕСТИ НА ЭКРАН СПИСОК КОДОВ

   ЦВЕТОВ НЕИЗВЕСТНОЙ ВАМ ТЕКУЩЕЙ ЦВЕТОВОЙ ПАЛИТРЫ?

     1  GetPalette(Palette);

1    2  SetPalette(NumberColor,Color);

     3  SetAllPalette(Palette);

     4  SetLineStyle(LineStyle,Pattern,Thickness);

*

 02УСТАНОВИТЕ НА ЧЕРНОМ ЭКРАНЕ КВАДРАТНОЕ ОКНО И ЗАКРАСЬТЕ ЕГО

   СПЛОШНЫМ БИРЮЗОВЫМ ЦВЕТОМ(3).

     1  SetFillStyle(0,3);

        Bar(X1,Y1,X1+d,Y1+d);

     2  SetBKColor(0);

        SetColor(3);

        Bar(X1,Y1,X1+d,Y1+d);

     3  SetBKColor(0);

        SetFillStyle(0,3);

        Bar(X1,Y1,X1+d,Y1+d);

     4  SetFillStyle(0,3);

        SetBKColor(0);

        Bar(X1,Y1,X1+d,Y1+d);

*

 03С ПОМОЩЬЮ КАКОГО ФРАГМЕНТА ВОЗМОЖНО ЗАКРАСИТЬ ПРЯМОУГОЛЬНУЮ

   ОБЛАСТЬ КРАСНОГО(4) ЭКРАНА ЧАСТОЙ СЕТКОЙ(9) СИНЕГО ЦВЕТА(1)?

     1  SetBKColor(4);

        SetFillStyle(9,1,0);

        Bar(X1,Y1,X2,Y2);

     2  SetBKColor(4);

        Rectangle(X1,Y1,X2,Y2);

        SetFillStyle(9,1,0);

     3  SetBKColor(4);

        SetFillStyle(9,1);

        Bar(X1,Y1,X2,Y2);

     4  SetBKColor(4);

        Bar(X1,Y1,X2,Y2);

        SetFillStyle(9,1);

*

 04ИМЕЕТСЯ ЛИ В ЯЗЫКЕ TURBO PASCAL ВОЗМОЖНОСТЬ УСТАНАВЛИВАТЬ

   ПРОИЗВОЛЬНЫЙ (ПО ЖЕЛАНИЮ ПОЛЬЗОВАТЕЛЯ) ЦВЕТ РИСОВАНИЯ, СТИЛЬ И

   ТОЛЩИНУ ЛИНИЙ РИСОВАНИЯ?

     1  Нет

     2  Только цвет

     3  Только стиль линий

     4  Только стиль и толщину линий

*

 05НАПИШИТЕ ПРОГРАММУ РИСОВАНИЯ КОНТУРОВ ПРЯМОУГОЛЬНИКА ЛИНИЯМИ,

   СОСТОЯЩИМИ ИЗ ЧЕРЕДУЮЩИХСЯ ПАР ТОЧЕК И ТИРЕ.

      1  GetLineStyle(0,0,1);

         Rectangle(X1,Y1X2,Y2);

      2  SetLineStyle(4,$3,1);

         Rectangle(X1,Y1,X2,Y2);

      3  SetLineStyle(4,3,1);

         Rectangle(X1,Y1,X2,Y2);

      4  SetLineStyle(0,13,1);

         Rectangle(X1,Y1,X2,Y2);

*

 06КАК ОБЕСПЕЧИТЬ ЗАКРАСКУ КАКОЙ-ЛИБО ОБЛАСТИ ЭКРАНА КРАСНЫМ(4)

   ЦВЕТОМ 25% ЯРКОСТИ?

     1  SetFillPatern(1,2,4,8,1,2,4,8);

     2  SetFillPatern(1,2,4,8,1,2,4,8;4);

     3  SetFillPatern(11,22,44,88,11,22,44,88);

     4  SetFillPatern(11,22,44,88,11,22,44,88;4);

*

 07КАКАЯ ИЗ НИЖЕУКАЗАННЫХ ПРОЦЕДУР УСТАНАВЛИВАЕТ СТАНДАРТНЫЕ

   ОБРАЗЦЫ ЗАКРАСКИ И ИХ ЦВЕТА?

     1  SetFillStyle(Pattern:word;Color:word);

     2  SetFillPatern(Pattern:FillPatternType;Color:Word);

     3  GetFillSettings(var FillInfo:FillSettingsType);

     4  SetLineStyle(LineStyle:Word;Pattern:Word;Thickness:Word);

*

 08С ПОМОЩЬЮ КАКОЙ ПРОЦЕДУРЫ МОЖНО ЗАМЕНИТЬ НУЛЕВОЙ,ЧЕРНЫЙ, ЦВЕТ

   ПАЛИТРЫ НА ДЕВЯТЫЙ, СВЕТЛО-ГОЛУБОЙ?

     1  SetAllPalette;

     2  SetColor;

     3  SetPalette;

     4  GetPalette;

*

 09НАПИШИТЕ ПРОГРАММУ ЗАМЕНЫ ЦВЕТА НЕИЗВЕСТНОГО СТАНДАРТНОГО СТИЛЯ

   ЗАКРАСКИ НА ЦВЕТ X.

     1  Color:=X;

        SetFillStyle(Pattern,Color);

     2  GetFillSettings;

        Color:=X;

        SetFillStyle(Pattern;Color);

     3  GetFillSettings;

        Color:=X;

        SetFillPattern(Pattern;Color);

     4  GetFillSettings;

        Color:=X;

        SetFillStyle(Color;Pattern);

*

 10НАПИШИТЕ ПРОГРАММУ РИСОВАНИЯ НА КРАСНОМ(4) ЭКРАНЕ ГОЛУБОГО(9)

   ОКНА, ЗАКРАШЕННОГО КЛЕТКОЙ СИНЕГО ЦВЕТА(1).

     1  SetBKColor(4);

        SetFillStyle(7,1);

        Bar(X1,Y1,X2,Y2);

     2  SetBKColor(4);

        Bar(X1,Y1,X2,Y2);

        SetFillStyle(7,1);

        Bar(X1,Y1,X2,Y2);

     3  SetBKColor(4);

        SetFillStyle(1,9);

        Bar(X1,Y1,X2,Y2);

        SetFillStyle(7,1);

        Bar(X1,Y1,X2,Y2);

     4  SetFillStyle(9,1);

        Bar(X1,Y1,X2,Y2);

        SetFillStyle(7,1);

        SetBKColor(4);

*

0

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

   *

   2Ответ неверный. Процедура SetPalette изменяет один из цветов палитры002

   *

   3Ответ неверный. Процедура SetAllPalette изменяет цвета палитры.     002

   *

   4Ответ неверный. Процедура SetLineStyle устанавливает стиль          002

    контурных линик и их толщину.

   *

*

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

   *

   2Ответ неверный. Процедура SetColor задает цвет рисования. но не     002

    закрашивает  фигуры.

   *

   3Ответ неверный. Нет необходимости устанавливать черный цвет, т.к.   003

    он автоматически устанавливается при вхождении в графический режим.

   *

   4Ответ неверный.На черном экране, установленном процедурой SetBKColor002

    будет виден лишь белый контур квадрата.

   *

*

 031Ответ неверный.Ошибка в написании параметров процедуры SetFillStyle.002

   *

   2Ответ неверный. Результатом выполенния данного фрагмента будет      002

    красный экран.Ошибка в написании параметров процедуры SetFillStyle.

   *

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

   *

   4Ответ неверный. Стиль и цвет закраски необходимо установить до      002

    построения фигуры.

   *

*

 041Ответ неверный. В языке имеется возможность устанавливать           002

    произвольный (по желанию пользователя) стиль контурных линий с

    помощью процедуры SetLineStyle(LineStyle,Pattern,Thickness).

    При этом параметр LineStyle устанавливается в значение UserBitLn(4)

    а параметр Pattern представляет собой битовую строку, определяющую

    стиль изображения кнтурных линий. Возможности установить призволь-

    ный цвет рисования нет.

   *

   2Ответ неверный. В языке имеется возможность устанавливать           002

    произвольный (по желанию пользователя) стиль контурных линий с

    помощью процедуры SetLineStyle(LineStyle,Pattern,Thickness).

    При этом параметр LineStyle устанавливается в значение UserBitLn(4)

    а параметр Pattern представляет собой битовую строку, определяющую

    стиль изображения кнтурных линий. Возможности установить призволь-

    ный цвет рисования нет.

   *

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

   *

   4Ответ неверный. В языке имеется возможность устанавливать           002

    произвольный (по желанию пользователя) стиль контурных линий с

    помощью процедуры SetLineStyle(LineStyle,Pattern,Thickness).

    При этом параметр LineStyle устанавливается в значение UserBitLn(4)

    а параметр Pattern представляет собой битовую строку, определяющую

    стиль изображения кнтурных линий. Возможности установить призволь-

    ный цвет рисования нет.

   *

*

 051Ответ неверный. Процедура GetLineStyle не устанавливает стиль       002

    контурных линий, а возвращает их текущие параметры.

   *

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

   *                                                                    005

   3Ответ неверный. Параметр Pattern не может состоять из одной цифры,  002

    т.к. его значение - двухбайтовое число.

   *

   4Ответ неверный. При установке стандартного стиля контурных линий    002

    параметр Pattern не задается.

   *

*

 061Ответ неверный. Не указан параметр Color и элементы массива Pattern 002

    являются двухбайтовыми.

   *

   2Ответ неверный. Элементы массива Pattern являются двухбайтовыми.    002

   *

   3Ответ неверный. Не указан параметр Color.                           002

   *

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

   *

*

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

   *

   2Ответ неправильный. Процедура SetFillPattern позволяет программисту 003

    определить свой, нестандартный, образец закраски. Возможно смодели-

    ровать и стандартный стиль с помощью той же процедуры.

   *

   3Ответ неверный. Эта процедура возвращает код и цвет стандартного    002

    образца закраски.

   *

   4Ответ неверный. Процедура SetLineStyle устанавливает стиль контурных002

    линий.

   *

*

 081Ответ неверный. Данный способ замены одного цвета другим допустим,  004

    но не рационален.

   *

   2Ответ неверный. Процедура SetColor устанавливает текущий цвет       002

    рисования.

   *

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

   *

   4Ответ неверный. Процедура GetPalette выдает справку о текущей       002

    цветовой палитре, но не меняет цвета.

   *

*

 091Ответ неверный. Параметр Color не следует устанавливать предвари-   002

    тельно для процедуры SetFillStyle. Процедура  SetFillStyle устанав-

    ливает стандартный образец закраски и цвет.

   *

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

   *

   3Ответ неверный. Процедура SetFillPattern устанавливает нестандартный002

    стиль закраски.

   *

   4Ответ неверный. Параметры процедуры SetFillStyle следует употреблять003

    в обратном порядке.

   *

*

 101Ответ неверный.Фон прямоугольлника (X1,Y1,X2,Y2) будет красным.     002

   *

   2Ответ неверный. Прямоугольник (X1,Y1,X2,Y2) будет по умолчанию      002

    закрашен белым цветом, а не голубым.

   *

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

   *

   4Ответ неверный. Процедура SetBKColor закрасит экран красным цветом, 002

    закрасив прямоугольник.

   *

*

0

ПРОГРАММИРОВАНИЕ ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

     В данном разделе рассматриваются процедуры, позволяющие програм-

 мировать изображение криволинейных фигур из класса круговых и эллип-

 тических дуг, секторов, а также операторы формирования растровых

 изображений и часто используемые вспомогательные процедуры.

*     procedure Arc(X,Y:integer;StAngle,EndAngle,Radius:word);

1

      Рисует против часовой стрелки текущим

 стилем и цветом дугу окружности с центром (X,Y),

 радиусом Radius от начального угла StAngle до

 конечного угла AndAngle. Угловые параметры

 задаются в градусах.

*      procedure CetArcCords(var ArcCoords:ArcCoordsType);

       Возвращает в переменной ArcCoords координаты концов дуги,

 проведенной последней командой Arc.Тип ArcCoordsType  описан в

 модуле Graph как запись, значения полей которой аналогичны значению

 параметров процедуры Arc.

*      procedure Circle(X,Y:integer;Radius:word);

2

       Строит контуры окружности радиуса Radius с

 центром (X,Y), заданным ранее цветом и стилем

 рисования.

         ПРОГРАММИРОВАНИЕ ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

*       procedure Ellipse (X,Y:integer;

*                          StAngle,EndAngle,XRadius,YRadius:word);

3

        Строит текущим стилем и цветом дугу

 эллписа с центром (X,Y), начальным StAngle

 и конечным EndAngle углами, двумя полуосями

 XRadius и YRadius.

*        procedure FloodFill(X,Y,Border:word);

         Обеспечивает закраску ограниченной

 области, в которую входит точка (X,Y) , по

 образцу,  установленному предварительно

 процедурой SetFillStyle либо SetFillPattern.

 Параметр  Border определяет код цвета,

 ограничивающего закрашиваемую область.

*        procedure FillEllipse(X,Y:integer;XRadius, YRadius:word);

         Закрашивает область эллипса,используя

 предварительно установленные стиль и цвет закраски.

 Значения параметров аналогичны значениям параметров

 процедуры Ellipse.

4

5

       ПРОГРАММИРОВАНИЕ ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

*        prosedure PieSlice(X,Y:integer;

*                           StAngle,EndAngle,Radius:word);

6

         Строит и закрашивает круговой сектор

 установленным стилем и цветом. Параметры имеют

 тот же смысл и тип, что и одноименные параметры

 процедуры Arc.

*     procedure Sector(X,Y:integer;

*                      StAngle,EndAngle,XRadius,YRadius:word);

7

      Рисует и закрашивает эллиптический сектор,

 используя текущие стиль и цвет рисования и зак-

 раски. Параметры имеют тот же смысл и тип что

 и одноименные параметры процедуры Ellipse.

*     procedure Randomize;

      Инициализирует встроенный генератор случайных чисел сллучайным

 значением, получаемым от системного таймера компьютера. Описана в

 модуле System . Число, получаемое в результате работы генератора,

 хранится в предописанной переменной RandSeed. Присваивая ей конкрет-

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

 случайных чисел.

        ПРОГРАММИРОВАНИЕ ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

*      function Random(Rande:word):word;

       Возвращает случайное число. Переменная Rande должна быть выра-

 жением целого типа, а результатом будет случайное число X длиной в

 слово в диапазоне  0=<X<Rande. Если Rande=<0, Random возвращает 0.

 Если параметр функции не задан вовсе, то результатом будет

 вещественное число в диапазоне 0=<X<1.

*       procedure Delay(Time:word);

       Выполняет задержку на заданное число миллисекунд, описана в

 модуде Crt.

*      function KeyPressed:boolean;

        Возвращает значение true, если на клавиатуре нажата

 какая-либо символьная клавиша, и false - в противном случае. Описана

 в модуле Crt.

*       procedure PutPixel(X,Y:integer;Color:word);

        Рисует на экране в позиции (X,Y) точку цвета Color. Опивана в

 модуле Graph.

*       procedure GetPixel(X,Y:integer):word;

        Возвращает код цвета заданной точки растра (X,Y).

          ПРОГРАММИРОВАНИЕ ЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

         В качестве примера использования функции PutPixel продемон-

 стрируем возможность формирования "звездного неба" до нажатия любой

 символьной клавиши.

 .............

 Randomize;

 repeat

   PutPixel(Random(GetMaxX),

            Random(GetMaxY),

            Red);

   Delay(50);

 until KeyPressed;

 .............

       Приведем еще один пример использования процедур и функций,

 описанных в данном разделе.На следующем экране Вы можете наблюдать

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

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

 ностей, проходящих через общею точку опорной окружности и с центрами

 в концах равных элементов, составляющих опорную окружность. Цвета

 элементов  опорной  окружности  и  окружностей  кардиоиды назнача-

 ются случайным образом.

8

9        ПРОГРАММИРОВАНИЕ ЦВEТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

0

01НАРИСУЙТЕ ПРОГРАММУ РИСОВАНИЯ НА ЖЕЛТОМ(14) ЭКРАНЕ КРИВОЛИНЕЙНОЙ  ЦИФРЫ 8 СИНЕГО(1) ЦВЕТА.

     1  SetBKColor(14);

        SetColor(1);

        Circle(X,Y;Radius);

        Circle(X,Y+d;Radius+d);

     2  SetBKColor(1);

        SetColor(14);

        Circle(X,Y;Radius);

        Circle(X,Y;Radius+d);

     3  SetBKColor(14);

        SetColor(1);

        Arc(X,Y;0,360,Radius);

        Arc(X,Y+d;0,360,Radius);

     4  SetBKColor(1);

        SetColor(14);

        Arc(X,Y;0,360,Radius);

        Arc(X,Y+d;0,360,Radius);

*

 02НАПИШИТЕ ПРОГРАММУ ФОРМИРОВАНИЯ НА ЧЕРНОМ ЭКРАНЕ КРАСНОЙ ЦИФРЫ 5   С КРИВОЛИНЕЙНОЙ НИЖНЕЙ И ПРЯМОЛИНЕЙНОЙ ВЕРХНЕЙ ЧАСТЯМИ.

     1  SetColor(4);

        GoToXY(X,Y);

        Arc(X+d,Y+d,0,180,K+d);

        Arc(X,Y+d,0,90,d);

        Arc(X+d,Y+d+k,0,180,k);

     2  SetColor(4);

        Line(X,Y,X+d,Y);

        Line(X,Y,X,Y+d);

        Arc(X+k,Y+k,0,90,k);

        Arc(X+k,Y+k,270,360,k);

     3  SetColor(4);

        Line(X,Y,X+d,Y);

        Line(X,Y,X,Y+d);

        Arc(X+k,Y+k,0,180,k);

      4  SetColor(4);

         Line(X,Y,X-d,Y);

         Line(X-d,Y,X-d,Y+d);

         Circle(X-d,Y+d+k,k);

*

 03НАПИШИТЕ ПРОГРАММУ , ОБЕСПЕЧИВАЮЩУЮ ФОРМИРОВАНИЕ НА ЧЕРНОМ ЭКРАНЕ    ЭЛЛИПСА СО СЛУЧАЙНЫМ ЦВЕТОМ ЗАКРАСКИ.

     1  Randomize;

        SetFillStyle(0,15);

        Ellipse(X,Y,0,359,a,b);

        FloodFill(X,Y,Random(14);

     2  SetFillStyle(0,15);

        Ellipse(X,Y,0,359);

        FloodFill(X,Y,Random(14);

     3  SetFillStyle(0,15);

        Randomize(15);

        Ellipse(X,Y,0,359,a,b);

        FloodFill(X,Y,Random);

     4  SetFillStyle(0,15);

        Randomize;

        Ellipse(X,Y,a,b);

        FloodFill(X,Y);

*

 04КАК ПРАВИЛЬНО ЗАДАТЬ УГЛОВЫЕ ПАРАМЕТРЫ ПРОЦЕДУРЫ Arc?

    1 В радианах. Их значения не должны превышать 2пи.

    2 В радианах. Их значения не должны превышать пи.

    3 В градусах. Их значения не должны превышать 360 градусов.

    4 В градусах. Их значения не должны превышать 180 градусов.

*

 05В КАКОМ  МОДУЛЕ ОПИСАНА ПРОЦЕДУРА RANDOMIZE?

      1 Graph.

      2 Crt .

      3 Dos.

      4 System.

*

 06С ПОМОЩЬЮ КАКОЙ ПРОЦЕДУРЫ МОЖНО НАРИСОВАТЬ НА ЭКРАНЕ ТОЧКУ

   ОПРЕДЕЛЕННОГО ЦВЕТА?

       1 PutPixel.

       2 KeyPressed.

       3 GetPixel.

       4 Delay.

*

0

ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

     В данном разделе мы рассмотрим возможность графического изобра-

 жения текстовых символов, управление типом шрифта, направлением

 вывода, размерами и пропорциями символов, пространственной привязкой

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

 вания графических текстов.

*     procedure SetTextStyle(Font,Direction:word;

*                            CharSize:CharSizeType);

     Устанавливает стиль стандартного шрифта Font(один растровый -

 DefaultFont(0), и четыре штриховых - TriplexFont(1),SmallFont(2),

 SanSerifFont(3), GothicFont(4)), направление текстовой строки

 Direction (HorizDir(0) - слева направо, VertDir(1) - снизу вверх),

 размер символов CharSize (коэффициент  увеличения от 1 до 10).

      В случае растрового шрифта каждый текстовый символ формируется

 на основе матрицы 8*8 элементов разложения. Штриховые шрифты опреде-

 ляются серией векторов. Обычно штриховые шрифты хранятся в отдельных

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

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

       "По умолчанию", т.е. без обращения к данной процедуре

 автоматически устанавливается растровый шрифт, горизонтальный вывод

 и единичный размер символов.

       На следующем экране Вы можете наблюдать примеры стандартных

 шрифтов. После названия каждого из них через запятую указан коэффи-

 циент увеличения.

#

1                 ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

#

                  ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

*     procedure SetUserCharSize(MultX,DivX,MultY,DivY:word);

      Используется после установки штрихового шрифта с целью измене-

 ния пропорций символов. Отношение MultX/DivX -коэффициент масштаби-

 рования обычной ширины используемого архивного штрихового шрифта.

2MultY/DivY - коэффициент масштабирования высоты шрифта.

#

                   ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

*    function TextHeight(TextString:strig):word;

     Возвращает высоту заданной текстовой строки TextString в элемен-

 тах изображения(пикселах) с учетом всех установок, выполненных ранее

 процедурами SetTextStyle и SetUserCharSize .

*    function TextWidth(TextString:string):word;

     Возвращает ширину заданной текстовой  строки TextString при тех

 же условиях, что и функция TextHeight.

*     procedure SetTextJustify(Horiz,Vert:word);

      Обеспечивает привязку выводимого графического текста к теку-

 щему положению курсора. Параметры процедуры описаны в модуле Graph

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

 Horiz: LeftText  =0 - левым краем строки к курсору

        CenterText=1 - симметрично к курсору

        RightText =2 - правым краем строки к курсору

 Vert:  BottomText =0 - строка над курсором

        CenterText =1 - симметрично к курсору

        TopText    =2 - строка под курсором

       По "умолчанию" устанавливается параметр привязки выводимого

 графического текста соответствующий обращению  SetTextJustify(0,2);.

#

                  ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

*     procedure OutText(TextString:string);

      Выводит на экран последовательность символов, начиная с текущей

 позиции, которая меняется только если текст выводится горизонтально

 с левым выравниванием. Если текст не помещается в графическое окно,

 он либо вообще не высвечивается ("грубый" шрифт, принятый по умолча-

 нию), либо высвечивается частично("гладкий" шрифт).Текущий цвет

 текста задается процедурой SetColor . параметры шрифта - процедурами

 SetTextStyle SetTextJustify.Коэффициенты увеличения ширины и высоты

 штриховых шрифтов можно задать процедурой SetUserCharSize. Ширину и

 высоту строки определяют с помощью функций TextWidth  TextHeight.

*     procedure OutTextXY(X,Y:integer;TextString);

      Выводит на экран последовательность символов начиная с позиции

 (X,Y) и возвращает курсор в положение, предшествующее обращению к

 данной процедуре.

*      procedure GetTextSettings(var TextInfo:TextSettingsType);

       Возвращает текущий тип текстового шрифта,его направление, раз-

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

 ленные ранее процедурами SetTextStyle и SetTextJustify,либо по умол-

 чанию при вхождении в графический режим. Тип TextSettingsType описан

 в модуле Graph как запись, поля которой - Font,Direction:word;

 CharSize:CharSizeType; Horiz,Vert:word; - по смыслу и типу аналогич-

 ны одноименныым параметрам процедур SetTextStyle и SetTextJustify.

                  ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

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

 новые штриховые шрифты,не входящие в систему фирмы Borland Interna-

 tional, но совместимых с этой системой по файловой форме представле-

 ния. Для этого необходимо файлы новых шрифтов, которые должны иметь

 расширение .chr, предварительно загрузить в каталог, содержащий файл

 Turbo.exe интегрированной среды Turbo-Pascal, а в прикладной

 программе использовать функцию InstallUserFont.

*        function InstallUserFont(NewFont:string):integer;

         Инсталлирует новый штриховой шрифт, т.е.вводит во внутреннюю

 таблицу шрифтов имя файла нового шрифта NewFont и возвращает номер

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

 ния параметра Font  процедуры SetTextStyly.

         Внутренняя таблица может содержать до 10 имен шрифтов, из

 которых 4 стандартных в ней содержатся постоянно. В файловой системе

 лабораторных компьютеров содержатся файлы 4 нестандартных штриховых

 шрифтов с именами: Bold.chr, Goth.chr, Sans.chr,Trip.chr.

         Если внутренняя таблица штриховых шрифтов переполнена, то

 функция возвращает значение 0 и, следовательно, устанавливается

 стандартный растровый шрифт. Для сброса внутренней таблицы шрифтов в

 исходное положение можно заново перезапустить операционную систему.

         На следующем экране Вы можете наблюдать примеры четырех нес-

 тандартных штриховых шрифтов, упомянутых в данном разделе.

#

                   ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

3

0

01КАКИЕ ВОЗМОЖНОСТИ , СВЯЗАННЫЕ С НАПРАВЛЕНИЕМ ВЫВОДА ТЕКСТОВОЙ

    ИНФОРМАЦИИ, ДАЕТ ГРАФИЧЕСКИЙ РЕЖИМ?

     1  Возможен только горизонтальный вывод.

     2  Возможен как горизонтальный так и вертикальны выводы.

     3  Горизонтальный, вертикальный и вывод по горизонтали.

     4  Имеется возможность горизонтального вывода для всех шрифтов и

        для растрового - вывод по вертикали.

*

 02УСТАНАВЛИВАЮТСЯ ЛИ ТИП СТАНДРАТНОГО ШРИФТА, НАПРАВЛЕНИЕ ТЕКСТОВОЙ

   СТРОКИ И РАЗМЕР СИМВОЛОВ ОДНОЙ ПРОЦЕДУРОЙ?

     1 Нет. Эти параметры устанавливаются разными процедурами:

       InstallUserFont; - стандартный шрифт

       TextWidth; - размер символов

       OutText; - направление вывода

     2 Да. Эти параметры устанавливаются с помощью одной процедуры,

       InstalUserFont;

     3 Да. Перечисленные параметры устанавливаются с помощью процедуры

       SetTextStyle;

     4 Нет. В языке нет возможности устанавливать шрифт, направление

       строке и размер символов.

*

 03МОЖНО ЛИ ИЗМЕНИТЬ ПРОПОРЦИИ СИМВОЛОВ ЛЮБОГО ШРИФТА И ЕСЛИ МОЖНО, ТО

   С ПОМОЩЬЮ КАКОЙ ПОЦЕДУРЫ?

     1 Нет. Пропорции символов предусмотрены шрифтом и изменить их

       нельзя .

     2 Можно. С помощью процедуры SetUserCharSize .

     3 Можно изменить пропорции только штрихового шрифта с помощью

       процедуры SetUserCharSize.

     4 Можно. С помощью процедуры SetTexStyle.

*

 04ЧЕМ ОТЛИЧАЮТСЯ ПРОЦЕДУРЫ OutText и OutTextXY?

     1  Ничем. Они полностью аналогичны.

     2  Процедуры отличаются привязкой выводимого текста.

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

        курсора после выполнения процедур.

     4  Процедура OutText осуществляет вывод символьной строки с

        текущего положения курсора, а процедура OutTextXY обеспечивает

        привязку графического текста без его вывода.

*

 05СОСТАВИТЬ ПРОГРАММУ ВЫВОДА СЛОВА "ПРОГРАММА" ПО НИЖНЕЙ КРОМКЕ БЕЛОГО  ЭКРАНА РАСТРОВЫМ ШРИФТОМ ЗЕЛЕНОГО (2) ЦВЕТА РАЗМЕРА 6.

     1  SetBkColor(15);

        SetColor(2);

        SetTextStyle(1,0,6);

        OutTextXY(0,GetMaxY,'ПРОГРАММА');

     2  SetBkColor(15);

        SetColor(2);

        SetTextStyle(0,1,6);

        OutTextXY(GetMaxX,0,'ПРОГРАММА');

     3  SetBkColor(15);

        SetColor(2);

        SetTextStyle(0,6,1);

        OutTextXY(0,GetMaxY,'ПРОГРАММА');

     4  SetBkColor(15);

        SetColor(2);

        SetTextStyle(0,0,6);

        OutTextXY(0,GetMaxY,'ПРОГРАММА');

*

 06СОСТАВИТЬ ПРОГРАММУ ГОРИЗОНТАЛЬНОГО ВЫВОДА СЛОВА "КЛАСС" В ВИДЕ

   СТРОКИ ДЛИНОЙ 300 ПИКСЕЛОВ С ИСПОЛЬЗОВАНИЕМ ГОРИЗОНТАЛЬНО

   ДЕФОРМИРОВАННОГО СТАНДАРТНОГО ШТРИХОВОГО ШРИФТА SanserifFont

   КРАСНОГО (4) ЦВЕТА РАЗМЕРА 10.

     1 SetColor(4);

       SetTextStyle(SanSerifFont,HorizDir,10);

       K:=TextWidth('КЛАСС');

       SetUserCharSize(300,K,1,1);

     2 SetColor(4);

       SetTextStyle(SanSerifFont,VertDir,10);

       K:=TextWidth('КЛАСС');

       SetUserCharSize(300,K,1,1);

     3 SetColor(4);

       SetTextStyle(SanSerifFont,Horizdir,10);

       K:=TextHeight('КЛАСС');

       SetUserCharSize(1,1,300,K);

     4 SetColor(4);

       SetTextStyle(HorizDir,SanSerifFont,10);

       K:=TextWidth('КЛАСС');

       SetUserCharSize(300,K,1,1);

*

 07СОСТАВИТЬ ПРОГРАММУ ВЕРТИКАЛЬНОГО ВЫВОДА СЛОВА "ПАСКАЛЬ" В ВИДЕ

   СТОЛБЦА ШИРИНОЙ 80 ПИКСЕЛОВ, ИСПОЛЬЗУЯ ВЕРТИКАЛЬНО-ДЕФОРМИРОВАННЫЙ    СТАНДАРТНЫЙ ШТРИХОВОЙ ШРИФТ SmallFont СИНЕГО(1) ЦВЕТА РАЗМЕРА 5.

     1 SetTextStyle(SmallFont,0,5);

       SetColor(1);

       L:=TextHight('ПАСКАЛЬ');

       SetUserCharSize(1,1,80,L);

       OutTextXY(10,200,'ПАСКАЛЬ');

     2 SetTextStyle(SmallFont,1,5);

       SetColor(1);

       L:=TextHight('ПАСКАЛЬ');

       SetUserCharSize(80,L,1,1);

       OutTextXY(10,200,'ПАСКАЛЬ');

     3 SetTextStyle(SmallFont,1,5);

       SetColor(1);

       L:=TextHeight('ПАСКАЛЬ');

       SetUserCharSize(1,1,80,L);

       OutText('ПАСКАЛЬ');

     4 SetTextStyle(1,5,SmallFont);

       SetColor(1);

       L:=TextHeight('ПАСКАЛЬ');

       SetUserCharSize(1,1,80,L);

       OutText('ПАСКАЛЬ');

*

 08СКОЛЬКО НЕСТАНДАРТНЫХ ШРИФТОВ МОЖНО ИСПОЛЬЗОВАТЬ ПРИ РАБОТЕ С ГРАФИ ЧЕСКИМИ ТЕКСТАМИ?

     1  Сколько угодно.

     2  11 шрифтов.

     3  Столько, сколько файлов нестандартных шрифтов содержится в

        Вашем компьютере.

     4  В Turbo-Pascal не предусмотрена возможность использования

        шрифтов , не входящих в систему фирмы Borland International.

*

 09СКОЛЬКО ИМЕН РАЗЛИЧНЫХ ШРИФТОВ МОЖЕТ СОДЕРЖАТЬ ВНУТРЕННЯЯ ТАБЛИЦА   ШРИФТОВ И СКОЛЬКО ИЗ НИХ НЕСТАНДАРТНЫХ?

     1  Не более 6, из них нестандартных - не более 2.

     2  Не более 10, из них нестандартных - не более 6.

     3  Не более 11, из них нестандартных - не более 7.

     4  Не более 10, из них нестандартных - не более 4.

*

 10КАКАЯ ПРОЦЕДУРА ИНСТАЛЛИРУЕТ НОВЫЙ ШТРИХОВОЙ ШРИФТ?

    1  InstallUserFont;

    2  GetTextSettings.

    3  SetUserCharSize.

    4  SetTextJustify.

*

0

011Ответ неверный. В Turbo-Pascal имеется возможность не только        002

    горизонтального , но и вертикального вывода.

   *

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

   *

   3Ответ неверный. В языке нет возможности вывода графического текста  002

    в направлении по горизонтали.

   *

   4Ответ неверный. Ограничений на тип шрифта для осуществления         002

    вертикального вывода нет.

   *

*

 021Ответ неверный. Перечисленные процедуры выполняют другие функции.   002

   *

   2Ответ неверный. Процедура InstallUserFont инсталлирует новый        002

    нестандартный шрифт.

   *

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

   *

   4Ответ неверный. Такая возможность есть.                             002

   *

*

 031Ответ неверный. Пропорции символов увличить можно.                  002

   *

   2Ответ неточный.Процедура SetUserCharSize изменяет пропорции символов004

    после установки штрихового шрифта процедурой SetTextStyle.

   *

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

   *

   4Ответ неверный. Процедура SetTextStyle устанавливает тип шрифта, но 002

    не устанавливает пропорции символов.

   *

*

 041Ответ неверный. Эти процедуры отличаются привязкой выводимого текста002

    и положением курсора после их выполнения.

   *

   2Ответ неполный. Процедуры отличаются не только привязкой выводимого 004

    графического текста, но и положением курсора после их выполнения

   *

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

   *

   4Ответ неверный. Обе процедуры обеспечивают вывод символьной строки, 002

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

    курсора после их выполнения.

   *

*

 051Ответ неверный. Чтобы вывести строку растровым шрифтом следует      002

    параметры процедуры SetTextStyle выбрать иначе.

   *

   2Ответ неверный. Параметры процедуры SetTextStyle указывают на то,   002

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

    вверх. Кроме того координаты начальной точки вывода в процедуре

    OutTextXY соответствуют правому верхнему углу экрана и значит

    надпись не будет выведена.

   *

   3Ответ неверный. Неверно указаны параметры процедуры SetTextStyle    002

    Стандартного шрифта с номером 6 не существует.

   *

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

   *

*

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

   *

   2Ответ неверный. Данный фрагмент программы будет обеспечивать не     002

    горизонтальный, в вертикальный вывод текста .

   *

   3Ответ неверный. Данный фрагмент программы будет обеспечивать не     002

    горизонтальную, а вертикальную деформацию вывдимой строки.

   *

   4Ответ неверный. Ошибка в употреблении параметров процедуры          002

    SetTextStyle.

   *

*

 071Ответ неверный. Строка, выводимая с помощью данного фрагмента прог- 002

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

    бует задание.

   *

   2Ответ неверный.С помощью данного фрагмента программы будет проведена002

    горизонтальная деформация относительно первоначальной высоты

    символов.

   *

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

   *

   4Ответ неверный. Неправильно указаны значения параметров процедуры   002

    SetTextStyle.

   *

*

 081Ответ неверный. Использовать можно столько нестандартных шрифтов,   002

    сколько файлов с такими шрифтами содержится в Вашем компьютере.

   *

   2Ответ неверный. Использовать можно стольконестандартных  шрифтов,   002

    сколько файлов с такими шрифтами содержится в Вашем компьютере.

   *

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

   *

   4Ответ неверный . Такая возможность имеется .                        002

   *

*

 091Ответ неврный. Таблица может содержать до 10 шрифтов, из них 6      002

    нестандартных.

   *

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

   *

   3Ответ неверный. Таблица может содержать до 10 шрифтов, из них 6     002

    нестандартных.

   *

   4Ответ неверный. Таблица может содержать до 10 шрифтов, из них 6     002

    нестандартных.

   *

*

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

   *

   2Ответ неверный. Процедура GetTextSettings возвращает текущий тип    002

    текстового шрифта.

   *

   3Ответ неверный. Процедура SetUserCharSize используется для изменения002

    пропорций символов.

   *

   4Ответ неверный. Процедура SetTextJustify обеспечивает привязку      002

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

   *

*

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

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





Еще из раздела Информатика, программирование:


 Это интересно
 Реклама
 Поиск рефератов
 
 Афоризм
Из всех напитков я предпочитаю 60-ти процентную воду.
 Гороскоп
Гороскопы
 Счётчики
bigmir)net TOP 100