Реферат: Обучающая программа Графика программированию в графическом режиме на языке 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-PASCAL6.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». ДиалогЭВМ-пользователь (в данном случае обучаемый) ведется в удобном для последнеготемпе, что обеспечивает лучшее усваивание материала. Каждый студент имеетвозможность изучать разделы темы в удобном для него порядке. Это экономит времястудента для изучения более важных для него разделов и игнорирование разделов,которые ему уже знакомы. В то же время преподаватель имеет воз­можность уделятьвнимание студентам в индивидуальном порядке. Программа предусматривает элементыпроверки знаний в виде контрольных вопросов в конце разделов. Такая системаобучения дает возможность студенту самостоятельно оценить свои знания. Послеответа на вопрос обучаемый получает справку о его правильности и пояснения вслучае неверного ответа. После ответов на все вопросы раздела он может изучитьтему вновь и вновь ответить на контрольные вопросы. Принцип «обучение +контроль» повышает уровень получаемых знаний.

Впредыдущих разделах были описаны многочисленные средства и методы обучения спомощью компьютера. Однако, разработка насто­ящей программы для обученияявляется необходимой и целесообраз­ной в условиях данного учебного заведения.Целью создания данной программы является удовлетворение нужд учебного процессас учетом технических возможностей академии, а именно разработка методи­ческихматериалов по программированию с использованием ЭВМ типа IBMPC и языка 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. ... ...

Поле Р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);

* ... ... Таблица 4Поле Р1 Поле Р2 Поле РЗ Поле Р4 Поле Р5

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

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

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

окна.

*

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

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

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

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

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

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

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

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

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

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

2.3.1. Теория

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

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

Таблица 5Символ поля Р1 Значение Действия программы Конец файла При считывании записи с этим символом в поле Р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 Значение Действия программы Конец файла При считывании записи с этим символом программа прекращает поиск нужного номера вопроса. * Конец вопроса Прекращается вывод содержимого поля РЗ (текста вопроса) на экран. Любой другой 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 Значение Действия программы Конец файла При считывании записи с этим символом программа прекращает поиск нужного номера вопроса. * Конец вопроса Прекращается вывод содержимого поля РЗ (текста вопроса) на экран. Любой другой 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, модуль из библи­отеки языка Pascalgraph.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 ENTERto return to the Norton Commander». По этомусообщению следует нажать клавишу ENTER и выйти в Norton Commander. Работа с программой завершена.

Если в процессе выполнения программы не найден файл базыданных, к которому в данный момент обращается программа, то на экран выводитсясообщение «Runtime error 002 at 0125:04E5. Press ENTER to return to theNorton 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

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

programGRAPHIC;  {главная программа «Графика»}

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

RAZDEL4, RAZDEL5, RAZDEL6, RAZDEL7 ;

TypeDlina=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; {переменная дляпринятия символа с клавиатуры}

procedureWindol;         {введение }

TypeAnn=record

    PPl:char;

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

end;

var FF:fileof Ann;

    A: Ann;

    St:string[68];

label 1;

begin

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

{SI-}

Reset(FF);

{SI + }

IFlOResulto 0 thenWriteln ('Heт файла VEDEN1);

ClearDevice;

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

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

 begin

 Read(FF,A);

 St:=StrPas(A.PP2);

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

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

   ‘0‘: GoTo 1 ;

 end;

end;

1:readkey;

Close(FF);

end;

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

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

constsizeCursor:word=0;

var  Red:registers;

begin

 with Reddo

  begin

   if Flagthen

    begin

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

    end

  else

   begin

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

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

   Intr($10,Red);

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

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

   end;

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

 Intr($10,Red);

 end;

end;

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

begin

 TextColor(C);

 TextBackground(F)

end;

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

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

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

Label Met;

Const Kr=9;

VarM: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

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

 for l:=lto 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;

whileFl=True do begin

 Ch:=ReadKey;

   ifCh=#13 then Fl:=False;

  if(Ch=#0) and KeyPressed then

   begin

   Ch:=ReadKey;

    case Chof

    #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 Truedo 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}

UnitRAZDEL1;

interface

uses Crt,Graph, Dos, Strings, MYBOOK;

typeAn=record

 P1:Char;

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

end;

var Fl:fileof An;

    A: An;

   Gd,Gm,Y,N:integer;

   St:string[68];

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

implementation

procedureRAZDEL10;

Label 1;

begin

 GraphRegim;

 Assign(Fl,'RAZTEX1.pas');

  {SI-}

    Reset(Fl);

  {SI+}

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

  Repeat;

 ClearDevice;

  OKNO;

  Y:=10;

  For N:=0to 31 do

  begin

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

   caseA.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;

   untilA.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+}        

  {$M16384,0,655360}                                          

  Unit RAZDEL2;                                                 

 interface                                                    

                                                               

  usesCrt,Graph,Dos,Strings,MYBOOK;                           

    type An=record                                               

      P1:Char;                                                

       P2:array[0..69] ofChar;                                

 end;                                                         

    var F2:file of An;                                          

      A:An;                                                   

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

     St:string[68];                                           

                                                                

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

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

                                                               

 implementation                                                

    procedureRAZDEL20;                                          

    Label1;                                                     

   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 31do                                           

  begin                                                       

    Read(F2,A);                                                 

   St:=StrPas(A.P2);                                          

    case A.P1of                                               

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

    '*':begin                                                   

        SetColor(4);                                          

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

        SetColor(1);                                          

        end;                                                    

    '0':GoTo1;                                                

   end;                                                       

  end;                                                        

1: readkey;                                                     

   untilA.P1='0';                                             

  Close(F2);                                                  

  CloseGraph;                                                 

  end;                                                          

                                                               

 begin                                                         

 end.

UnitRAZDEL3;                                                      

                                                                      

 interface                                                          

                                                                     

  usesCrt,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] ofPointType=((X:460;Y:30),(X:590;Y:90),      

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

        Mno:array[1..5] ofPointType=((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] ofPointType=((X:390;Y:60),(X:510;Y:60),      

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

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

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

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

                                                                      

                                                                     

   procedureRAZDEL30;                                               

                                                                     

   Label0,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':GoTo0;                                                     

     end;                                                             

   end;                                                             

 0:readkey;                                                         

   ClearDevice;                                                      

   OKNO;                                                            

    untilA.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 GOTO1;                                            

      For K:=0 to J-1do                                             

      begin                                                         

        If M[k]=I then GOTO1;                                       

       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);                                                 

       untilAt.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);                                        

        GoTo2;                                                       

      end                                                           

      else                                                          

      repeat                                                        

       Read(F33,Atr);                                                 

       R2:=StrPas(Atr.P2);  {ПреобразованиеASCIIZ-строки Atr.P2 в   

                             строку типаstring }                    

       Val(R2,Z2,Code); {Преобразованиесимвольного представления    

                         номера вопроса в двоичнуюформу}            

       If Z2=Z1then                                                 

       begin                                                        

        repeat                                                      

         If Atr.P3=CHthen                                           

         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);                                            

           untilAtr.P3='*';                                          

          readkey;                                                  

           GOTO3;                                                   

        end                                                         

         else  Read(F33,Atr);                                        

         untilAtr.P1='*';                                           

       end                                                          

        untilAtr.P1='0';                                             

      end                                                           

      else                                                          

  3:end;                                                            

     until At.P1='0';                                                 

    Close(F32);                                                     

    Close(F33);                                                     

    CloseGraph;                                                     

   end;                                                              

                                                                     

 begin                                                              

  end.

UnitRAZDEL4;                                                       

                                                                    

 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 ofAn ;  {Переменные теории}                           

    A:An;                                                          

    N,Y:integer;                                                   

    St:string[68];                                                 

                                                                    

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

    At:Ant;                                                        

    R1:string[2];                                                  

    Z1:integer;                                                     

    S:string[68];                                                  

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

    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;                                                  

                                                                    

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

    Z5:integer;                                                     

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

                                                                    

                                                                    

 procedureRAZDEL40;                                                

                                                                    

 implementation                                                     

                                                                    

 procedureRAZDEL40;                                                

                                                                    

 Label0,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 31do           {Вывод текста теории}                 

  begin                                                             

   Read(F4,A);                                                     

   St:=StrPas(A.P2); {Преобразование ASCIIZ-строки A.P2 в строку   

                      типа string}                                 

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

    case A.P1of                                                    

   '*':begin                                                       

        SetColor(4);                                               

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

        SetColor(1);                                               

       end;                                                        

    '1':beginSetFillStyle(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':GoTo0                                                      

   end;                                                            

   end;                                                              

  readkey;                                                         

0:until  A.P1='0' ;                                                

 readkey;                                                           

 Close(F4);                                                        

 Assign(F32,'Joi.pas');  {связь с файлом вопросов}                 

 {SI-}                                                             

 Reset(F32);                                                        

 {SI+}                                                             

  IfIOResult<>0 then Writeln('Нет файла Joi.pas');                 

 Assign(F33,'Iodi.pas');                                           

  {SI-}                                                             

  Reset(F33);    {связь с файлом справок}                          

 {SI+}                                                             

  IfIOResult<>0 then Writeln('Нет файла Iodi.pas');                

  OKNO1;          {«Контрольные вопросы»}                          

 readkey;                                                          

 ClearDevice;                                                      

 Randomize;        {Выбор четырех номеров вопросов}                

  For J:=0 to 3do                                                  

  begin                                                            

 1:I:=Random(10);                                                  

    If I=0 thenGOTO 1;                                             

    For K:=0 toJ-1 do                                              

    begin                                                          

      If M[k]=Ithen 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.P1of                                                  

     '':begin                                                      

        end;                                                       

    end;                                                            

    Y:=Y+10;                                                       

    Read(F32,At);                                                  

     untilAt.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);                                         

      GoTo2;                                                       

     end                                                             

    else                                                           

    repeat                                                         

    Read(F33,Atr);                                                  

    R2:=StrPas(Atr.P2); {Преобразование ASCIIZ-строки Atr.P2 в     

                         строку типа string}                       

    Val(R2,Z2,Code);   {Преобразование символьного представления   

                      номера вопроса в двоичную форму}             

     If Z2=Z1then                                                  

    begin                                                          

     repeat                                                        

      If Atr.P3=CHthen                                             

      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;                                                    

        caseAtr.P1 of                                              

        '':begin                                                    

           end;                                                    

       end;                                                        

       Read(F33,Atr);                                              

        untilAtr.P3='*';                                            

       readkey;                                                    

        GOTO3;                                                     

      end                                                          

       else Read(F33,Atr);                                         

      untilAtr.P1='*';                                             

    end                                                            

     untilAtr.P1='0';                                               

   end                                                             

  else                                                             

3:end;                                                              

   untilAt.P1='0';                                                  

 Close(F32);                                                       

 Close(F33);                                                       

 CloseGraph;                                                       

 end;                                                                

                                                                    

 begin                                                              

 end.

UnitRAZDEL5;                                              

                                                              

   interface                                                 

                                                              

    usesCrt,Graph,Dos,Strings,MYBOOK;                         

                                                              

    type An =record                                          

         P1:Char;                                            

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

   end;                                                      

                                                              

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

         P1:Char;                                            

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

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

   end;                                                      

                                                              

    typeAntr=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: fileof An ;                                      

       A:An;                                                 

       N,Y:integer;                                          

       St:string[68];                                        

                                                              

    var F52:fileof Ant;  { переменные вопросов}              

       At:Ant;                                               

       R1:string[2];                                         

       Z1:integer;                                           

       S:string[68];                                         

       V:char;                                               

                                                              

    var F53:fileof 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;                                         

                                                              

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

       Z5:integer;                                           

       REZ5:Longint;                                         

                                                              

    procedureRAZDEL50;                                       

                                                              

   implementation                                            

                                                              

    procedureRAZDEL50;                                       

                                                              

    Label0,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 31do                                         

   begin                                                     

    Read(F5,A);                                              

    St:=StrPas(A.P2);                                        

     case A.P1of                                             

     '':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);                                        

           untilKeyPressed;                                  

          SetFillStyle(1,15);                                

          SetViewPort(5,5,635,345,true);                     

        end;                                                 

    '9':begin                                                

         Diogramma;                                          

        end;                                                 

     '0':GoTo0                                               

   end;                                                      

  end;                                                       

 0:readkey;                                                   

   until A.P1='0';                                           

  Close(F5);                                                 

  Assign(F52,'Join.pas');  {связь с файлом вопросов}         

  {SI-}                                                      

  Reset(F52);                                                

  {SI+}                                                      

   IfIOResult<>0 then Writeln('Нет файла Join.pas');         

  Assign(F53,'Iodin.pas');                                   

  {SI-}                                                      

   Reset(F53);    {связь с файлом справок}                   

  {SI+}                                                      

   IfIOResult<>0 then Writeln('Нет файла Iodin.pas');        

  OKNO1;           {«Контрольные вопросы»}                   

  readkey;                                                   

  ClearDevice;                                               

  Randomize;        {Выбор четырех номеров вопросов}         

   For J:=0 to 3do                                           

  begin                                                      

 1:I:=Random(6);                                             

  If I=0 then GOTO1;                                         

    For K:=0 toJ-1 do                                        

    begin                                                    

      If M[k]=Ithen 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.P1of                                            

     '2':begin                                               

         end                                                 

    end;                                                     

    Y:=Y+10;                                                 

    Read(F52,At);                                            

     untilAt.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);                                   

      GoTo2;                                                 

    end                                                      

    else                                                     

    repeat                                                   

    Read(F53,Atr);                                           

    R2:=StrPas(Atr.P2);                                      

    Val(R2,Z2,Code);                                         

     If Z2=Z1then                                            

    begin                                                    

     repeat                                                  

      If Atr.P3=CHthen                                       

     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.P1of                                         

      '1':begin                                              

          end;                                               

       '0':GoTo3;                                            

      end;                                                   

      Read(F53,Atr);                                         

       untilAtr.P3='*';                                      

      readkey;                                               

       GOTO3;                                                

     end                                                     

      else Read(F53,Atr);                                    

      untilAtr.P1='*';                                       

    end                                                      

     untilAtr.P1='0';                                        

   end                                                       

   else                                                      

 3:end;                                                      

   untilAt.P1='0';                                           

  Close(F52);                                                

  Close(F53);                                                

  CloseGraph;                                                

 end;                                                        

  begin                                                      

   end.

UnitRAZDEL6;                                                     

                                                                     

  interface                                                         

                                                                     

   usesCrt,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;                                                              

                                                                     

   typeAntr=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 ofAn ;  {Переменные теории}                         

      A:An;                                                         

       Y,N,T1,T2,T3,T4:integer;                                      

      St:string[68];                                                

                                                                     

   var  F62:fileof Ant;  { переменные вопросов}                      

       At:Ant;                                                      

       R1:string[2];                                                

       Z1:integer;                                                  

       S:string[68];                                                 

                                                                     

   var F63:file ofAntr;   {Переменные справок}                      

      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;                                                 

                                                                     

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

      Z5:integer;                                                    

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

                                                                     

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

                        графическихтекстов}                         

                                                                     

  implementation                                                    

                                                                     

   procedureRAZDEL60;                                               

                                                                     

   Label0,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 31do                                                

   begin                                                            

    Read(F6,A);                                                     

     St:=StrPas(A.P2);  {Преобразование ASCIIZ-строки A.P2 в строку 

                        типа string}                                

     case A.P1of                                                    

     '':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');                               

          IfGraphResult<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;                                                     

     '#':GoTo0;                                                     

     '0':GoTo0                                                      

                                                                      

    end;                                                            

  end;                                                              

 0:readkey;                                                          

   untilA.P1='0';                                                   

  Close(F6);                                                        

  Assign(F62,'Jois.pas');  {связь с файлом вопросов}                

  {SI-}                                                             

  Reset(F62);                                                       

  {SI+}                                                              

   IfIOResult<>0 then OutTextXY(50,100,'Нет файла Jois.pas');       

  Assign(F63,'Iodis.pas');                                          

  {SI-}                                                             

   Reset(F63);     {связьс файлом справок}                          

  {SI+}                                                             

   IfIOResult<>0 then Writeln('Нет файла Iodis.pas');               

  OKNO1;           {»Контрольные вопросы"}                           

  readkey;                                                          

  ClearDevice;                                                      

  Randomize;        {Выбор четырех номеров вопросов}                

   For J:=0 to 3do                                                   

   begin                                                            

  1:I:=Random(10);                                                  

     If I=0 thenGOTO 1;                                             

     For K:=0 toJ-1 do                                              

     begin                                                          

       If M[k]=Ithen 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.P1of                                                 

       '':begin                                                     

          end;                                                      

       end;                                                          

      Y:=Y+10;                                                      

      Read(F62,At);                                                 

       untilAt.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);                                        

        GoTo2;                                                       

      end                                                           

      else                                                          

      repeat                                                        

      Read(F63,Atr);                                                

      R2:=StrPas(Atr.P2); {Преобразование ASCIIZ-строки Atr.P2 в    

                           строку типа string}                      

      Val(R2,Z2,Code);   {Преобразование символьного представления  

                        номера вопроса в двоичную форму}            

       If Z2=Z1then                                                 

      begin                                                         

       repeat                                                       

        If Atr.P3=CHthen                                            

        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;                                                   

          caseAtr.P1 of                                             

          '':begin                                                   

             end;                                                   

         end;                                                       

         Read(F63,Atr);                                             

          untilAtr.P3='*';                                           

         readkey;                                                   

          GOTO3;                                                    

        end                                                         

         else Read(F63,Atr);                                        

        untilAtr.P1='*';                                            

      end                                                           

       untilAtr.P1='0';                                              

     end                                                            

    else                                                            

 3:end;                                                             

     until At.P1='0';                                                

   Close(F62);                                                      

   Close(F63);                                                      

   CloseGraph;                                                       

  end;                                                              

                                                                     

  begin                                                             

   end.

UnitRAZDEL7;                                                      

                                                                           

       interface                                                          

                                                                            

        usesCrt,Graph,Dos,Strings,MYBOOK;                                 

                                                                           

        type An =record {Теория}                                           

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

                     иллюстрации}                                         

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

       end;                                                               

                                                                           

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

             P1:Char;  {Переменная поля флага: конец файла, номер иллюст-  

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

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

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

       end;                                                               

                                                                           

        typeAntr=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];                                                 

                                                                           

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

           At:Ant;                                                        

           R1:string[2];                                                  

           Z1:integer;                                                     

           S:string[68];                                                  

        varF73: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;                                                  

                                                                           

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

           Z5:integer;                                                    

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

        varSize:word;                                                      

           pt:pointer;                                                    

           u,Nn,xt,yt:integer;                                            

                                                                           

                                                                           

        procedureRAZDEL70;                                                

                                                                           

       implementation                                                      

                                                                           

        procedureRAZDEL70;                                                

                                                                           

                                                                           

                                                                           

        Label0,1,2,3;                                                     

                                                                           

       begin                                                              

        REZ7:=6;                                                          

        GraphRegim;                                                        

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

        {SI-}                                                             

        Reset(F7);                                                        

        {SI+}                                                              

         IfIOResult <> 0 then Writeln ('Нет файла RAZTEX7.pas');          

        repeat                                                            

        OKNO;                                                              

         For N:=0to 32 do                                                 

         begin                                                            

           Read(F7,A);                                                     

           St:=StrPas(A.P2);   {Преобразование ASCIIZ-строки A.P2 в строку

                             типа string}                                 

            caseA.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+}                                                              

        IfIOResult<>0 then Writeln('Нет файла Jos.pas');                  

        Assign(F73,'Ios.pas');                                            

         {SI-}                                                             

        Reset(F73);     {связь с файлом справок}                          

        {SI+}                                                             

         IfIOResult<>0 then Writeln('Нет файла Ios.pas');                 

        OKNO1;           {«Контрольные вопросы»}                          

        readkey;                                                          

        ClearDevice;                                                       

        Randomize;        {Выбор четырех номеров вопросов}                

         For J:=0to 3 do                                                  

         begin                                                            

         1:I:=Random(7);                                                   

           If I=0then GOTO 1;                                             

           ForK:=0 to J-1 do                                              

           begin                                                           

             IfM[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); {Вывод текста вопроса}                      

            caseAt.P1 of                                                  

            '':begin                                                      

               end;                                                        

           end;                                                           

           Y:=Y+10;                                                       

           Read(F72,At);                                                   

            untilAt.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);                                          

             GoTo2;                                                       

           end                                                            

           else                                                           

           repeat                                                          

           Read(F73,Atr);                                                 

           R2:=StrPas(Atr.P2); {Преобразование ASCIIZ-строки Atr.P2 в     

                                строку типа string}                       

           Val(R2,Z2,Code);   {Преобразование символьного представления   

                             номера вопроса в двоичную форму}             

            IfZ2=Z1 then                                                  

           begin                                                          

            repeat                                                         

             IfAtr.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);                                         

             untilAtr.P1='*';                                              

           end                                                            

            untilAtr.P1='0';                                              

          end                                                             

         else                                                              

      3:end;                                                              

          untilAt.P1='0';                                                 

        Close(F72);                                                        

        Close(F73);                                                       

        CloseGraph;                                                       

       end;                                                                

 begin                                                                     

  end.

unitMYBOOK;                                                

                                                             

 interface                                                   

                                                             

 usesGraph,Crt,Strings,Dos;                                 

                                                             

 Type Dlina=string[10];                                     

                                                             

 varCh:char;                                                

    Regime:byte;                                            

    c,Gd,Gm,i,x1,x2,y1,y2:integer;                          

    ArcCoords:ArcCoordsType;                                

    StAngle,dAngle,KRadius:word;                            

                                                             

 constOK: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));                                         

                                                             

 procedureDiogramma;                                        

 procedureOKNO;                                             

 procedureOKNO1;                                            

 procedureGraphRegim;                                        

                                                             

 implementation                                              

                                                             

 procedureOKNO;                                              

 begin                                                       

 SetColor(14);                                              

 DrawPoly(11,OK);                                           

 SetFillStyle(1,14);                                         

 FloodFill(635,2,14);                                       

 SetFillStyle(1,11);                                        

 Bar(6,6,634,344);                                          

 SetColor(1);                                                

 end;                                                        

                                                             

procedureOKNO1;                                            

constOK: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;                                                       

                                                             

                                                             

 procedureDiogramma;                                        

 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 Div16;                                         

 while(StAngle+dAngle)<360 do                               

   begin                                                    

    c:=random(14);                                          

    SetColor(c);                                             

    Arc(535,210,StAngle,StAngle+dAngle,40);                 

    GetArcCoords(ArcCoords);                                

     withArcCoords 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;                                                        

                                                             

procedureGraphRegim;                                       

 varGd,Gm:integer;                                          

 begin                                                       

 Gd:=Detect;                                                

 InitGraph(Gd,Gm,'');                                       

  IfGraphResult<>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.Программирование озвученных динамических  сцен.

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

 содержат   теоретическую  часть   и   контрольные    вопросы.

ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХРЕЖИМОВ

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

 графическими режимами вязыке 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(varGraphDriver:integer;

*                         varGraphMode:integer;

*                        DriverPath:string);

      Инициализируетграфическую систему, устанавливает графический

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

 цвета и т.д..

               ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

      GraphDriver — переменная, в которую необходимо записать код

                   требуемого графического драйвера или нуль, если

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

      GraphMode — переменная,в которую процедура помещает код

                 графического режима.

      DriverPath — строка,содержащая путь к драйверу (если строка

                   пустая,считается, что драйвер находится в текущем

                   каталоге).

      В случае аварийнойситуации процедура устанавливает код ошибки:

           -2  -  нетграфического адаптера;

           -3  -  нетдрайвера устройства;

           -4  -  ошибка вдрайвере;

           -5  -  нет памятидля загрузки драйвера;

          -10  - недопустимый режим для выбранного драйвера.

*     procedureCloseGraph(без параметров);

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

 графической системы, иосвобождает динамическую память компьютера,

 отведенную под графическийдрайвер.

*     procedureSetGraphMode(Mode:integer);

      Mode — графическийрежим.Изменяет ранее используемый графи-

 ческий режим либо возвращаетсистему в прежний графический режим

 после временного перехода ктекстовому режиму. Условием использо-

 вания оператора являетсясохранение в динамической области ОЗУ ранее

 загруженного графическогодрайвера.

                ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

*     procedureRestoreCrtMode(без параметров);

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

 динамической области ОЗУпрограмы графического драйвера.

      Имеется ряд операторовдля получения справок о текущем

 графическом режиме:

*     functionGetDriverName:string; -

                                      Возвращаетстроковое название

                                     текущего графического адаптера.

*     functionGetModeName(ModeNumber:integer):string -

                                  Возвращает строковое название

                                  требуемого графического режима.

*     functionGetMaxMode:integer  -

                                    Возвращает максимальный номер

                                    графического режима для текущего

                                     адаптера.

*     procedureGetModeRange(GraphDriver:integer;

*                           var LowMode,HighMode:integer); -

       Выдает справку одиапазоне номеров графических режимов задан-

 ного графического адаптера.Возвращаемые параметры LowMode и

 HighMode означаютминимальный и максимальный номера графических

 режимов, соответственно.

*     functionGetGraphMode:integer;  -

                      Возвращает номер текущего графического режима.

                ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ

*     procedureGetAspectRatio(var Xasp, Yasp:word); -

                   Возвращает в своих параметрах ввеличины

                    дискретовэкрана по осям X и Y, сооответственно.

УПРАВЛЕНИЕ КУРСОРОМ И ПОЛЕМРИСОВАНИЯ

   В графическом режиме также как и  в текстовом положение выво-

 димых на экран данных вкаждый момент времени определяется   курcо-

 ром. Однако,  в  этом случае  курсор  невидим. При вхождении в гра-

 фический режим с помощьюпроцедуры  InitGraph  курсор  автоматически

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

 (черный) цвет палитры. Дляопределения и изменения положения курсора

 без рисования в TURBO-PASCALпредусмотрены операторы MoveTo,MoveRel,

 GetX,GetY.

*     procedure MoveTo(x,y:integer);

 где x,y — координаты погоризонтали и вертикали соответственно

 в отсчете от левого верхнегоугла экрана.

*     procedureMoveRel(Dx,Dy:integer);

      Смещает курсор безрисования относительно его текущего поло-

 жения. Dx, Dy — смещениякурсора по координатам x и y.

*     function GetX: word;

      Определяет для курсоразначение координаты X.

*     function GetY: word;

      Определяет для курсоразначение координаты Y.

              УПРАВЛЕНИЕКУРСОРОМ И ПОЛЕМ РИСОВАНИЯ

При управлении положениемкурсора полезными оказываются также

 справочные функции GetMaxX иGetMaxY, которые возвращают координаты

 самой правой и самой нижнейвозможных графических позиций курсора,

 соответственно, для текущегографического драйвера и режима.

*     procedure ClearDevice;

      Очищает экран от следовпредшествовавшего рисования и восста-

 навливает исходные параметрыграфики.

*     procedureSetViewPort(X1,Y1,X2,Y2:word;Clip:boolean);

      Устанавливаетпрямоугольное окно рисования с перемещением

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

 ющий смысл:(X1,Y1) и (X2,Y2)определяют соответствввенно координаты

 левого верхнего и правогонижнего углов окна, а Clip принимает

 значение true принеобходимости отсечения изображения за границами

 окна и false, когда этогоделать не надо .

*     procedureClearViewPort;

      Очищает текущее окно,заполняя его первым цветом текущей

 цветовой палитры, ипереводит курсор в левый верхний угол окна.

*     procedure GetViewSettings(varViewPortType);

      Возвращает параметрыактивного окна просмотра в переменной

 ViewPort. Тип ViewPortType описан в модуле Graph.

ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХМОНОХРОМНЫХ ИЗОБРАЖЕНИЙ

 В данном разделе нерассматривается управление

 цветом и стилем рисования изакрепляется за

 фоном светло-серый, а закурсором синий цвет.

*   procedureLineTo(X,Y:integer);

щ

    Проводит отрезок прямойот текущего положения

 курсора к заданной точке(X,Y).

*   procedureLineRel(Dx,Dy:integer);

2

    Рисует отрезок прямой понаправлению к точке,

 смещенной от текущегоположения курсора на рас-

 стояние Dx и Dy по осям OX иOY .

*   procedureLine(X1,Y1,X2,Y2:integer);

3

    Проводит прямую междуточками (X1,Y1) и

 (X2,Y2).

    После выполнения этой ипоследующих процедур

 курсор возвращается впредшествующее положение.

           ФОРМИРОВАНИЕПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ

*   procedureRectangle(X1,Y1,X2,Y2:integer);

4

 Строит контуры прямоугольникас координатами

 левого верхнего (X1,Y1) инижнего правого

 (X2,Y2) углов.

*    procedureBar(X1,Y1,X2,Y2:integer);

5

 Строит прямоугольник,закрашенный текущим цветом

 и орнаментом заполнения.(X1,Y1), (X2,Y2) -

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

 углов соответственно.

*     procedureBar3D(X1,Y1,X2,Y2:integer;

*                    Depth:word;Top:boolean)

6

 Рисует аксонометриюзакрашенного по фасаду

 прямоугольногопараллелепипеда.

 (X1,Y1),(X2,Y2) — координатылевого верхнего и

                   правогонижнего  углов

                  прямоугольного фасада.

 Depth — ширина боковой грани(отсчитывается по

         годизонтали.

 Top — признак включенияверхней грани.

          ФОРМИРОВАНИЕПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ

*      procedureDrawPoly(NumPoints:word;

*                         varPolyPoints);

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

 NumPoints — число вершинмногоугольника

 PolyPoints — переменная безтипа, содержащая

 NumPoints+1 пар координатвершин многоугольника

 (первая и последняя вершиныдолжны совпадать).

*      procedureFillPoly(NumPoints:word;var PolyPoints);

8

 Закрашивает многоугольниктекущим цветом и

 орнаментом. ПараметрыNumPoints и PolyPoints

 именют тот же смысл и тип,что и одноимеынные

 параметры процедурыDrawPoly.

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,PolyPoints);

   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 раз/сек

*

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

   *

*

УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМИЗОБРАЖЕНИЙ

      В данном разделе мырассмотрим возможности управления цветовой

 палитрой и стилем рисования.

*     procedureGetPalette(var PaletteType);

      Возвращает текущуюплитру и количество цветов в ней. Применя-

 ется только в графическомрежиме и только с драйверами  EGA, EGA 64

 и VGA.

*     procedureSetAllPalette(var Palette);

      Меняет все цветапалитры на заданные. Переменная без типа

 Palette в первом байтесодержит число N- количество цветов в палитре

 а в последующих N байах — коды задаваемых цветов. Если задана вели-

 чина -1, то исходный цветостается без изменений.

*      procedureSetPalette(NumberColor:word;Color:byte);

       Изменяет один изцветов палитры. NumberColor — порядковый

 номер изменяемого цвета.Color -код нового цвета.

*       procedureSetColor(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      белый

               УПРАВЛЕНИЕЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ

*      procedureSetBKColor(Color:word);

      Устанавливает цвет фонарисования. Color — код или имя цвета.

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

 фоном рисования,используются функции:

                                      function GetColor:word;

                                      function GetBKColor:word;

      Факторами,определяющими стиль рисования, являются толщина и

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

 и линий закраски замкнутыхфрагментов рисунков.

*     procedureSetLineStyle(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  -  толстая линия

                УПРАВЛЕНИЕЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ

*     procedureGetLineSettings(var LineInfo:LineSettingsType);

      Возвращает параметрытекущего стиля контурных линий. Тип

 LineSettingsType описан вмодуле Graph как запись, поля которой:

 LineStyle:word;

 Pattern:word;

 Thickness:word;, имеют тотже смысл, что и одноименные параметры

 процедуры SetLineStyle.

*     procedureSetFillStyle[(Pattern:word;Color:word)];

      Устанавливаетстандартные орнамент и цвет заполнения. «По умол-

 чанию» закраска белаясплошная. Параметр Color — установка цвета.

 Возможные значения параметраPattern проиллюстрированы на следующем

 экране.

*     procedureSetFillPattern(Pattern:FillPatternType;Color:word);

      Задает произвольныйорнамент и цвет заполнения фигур.

 Pattern — задаваемыйпользователем орнамент.

 typeFillPatternType=array[1..8]of byte;

 Color — код цвета в палитре.

*      procedureGetFillSettings(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ИМЕЕТСЯ ЛИ В ЯЗЫКЕ TURBOPASCAL ВОЗМОЖНОСТЬ УСТАНАВЛИВАТЬ

   ПРОИЗВОЛЬНЫЙ (ПО ЖЕЛАНИЮПОЛЬЗОВАТЕЛЯ) ЦВЕТ РИСОВАНИЯ, СТИЛЬ И

   ТОЛЩИНУ ЛИНИЙ РИСОВАНИЯ?

     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(varFillInfo: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);

*

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

    закрасив прямоугольник.

   *

*

ПРОГРАММИРОВАНИЕ ЦВЕТНЫХКРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

     В данном разделерассматриваются процедуры, позволяющие програм-

 мировать изображениекриволинейных фигур из класса круговых и эллип-

 тических дуг, секторов, атакже операторы формирования растровых

 изображений и частоиспользуемые вспомогательные процедуры.

*     procedureArc(X,Y:integer;StAngle,EndAngle,Radius:word);

1

      Рисует против часовойстрелки текущим

 стилем и цветом дугуокружности с центром (X,Y),

 радиусом Radius отначального угла StAngle до

 конечного угла AndAngle.Угловые параметры

 задаются в градусах.

*      procedureCetArcCords(var ArcCoords:ArcCoordsType);

       Возвращает впеременной ArcCoords координаты концов дуги,

 проведенной последнейкомандой Arc.Тип ArcCoordsType  описан в

 модуле Graph как запись,значения полей которой аналогичны значению

 параметров процедуры Arc.

*      procedureCircle(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.

*        procedureFloodFill(X,Y,Border:word);

         Обеспечиваетзакраску ограниченной

 области, в которую входитточка (X,Y), по

 образцу,  установленномупредварительно

 процедурой SetFillStyle либоSetFillPattern.

 Параметр  Border определяеткод цвета,

 ограничивающегозакрашиваемую область.

*        procedureFillEllipse(X,Y:integer;XRadius, YRadius:word);

         Закрашивает областьэллипса, используя

 предварительно установленныестиль и цвет закраски.

 Значения параметрованалогичны значениям параметров

 процедуры Ellipse.

4

5

       ПРОГРАММИРОВАНИЕЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

*        prosedurePieSlice(X,Y:integer;

*                          StAngle,EndAngle,Radius:word);

6

         Строит и закрашиваеткруговой сектор

 установленным стилем ицветом. Параметры имеют

 тот же смысл и тип, что иодноименные параметры

 процедуры Arc.

*     procedureSector(X,Y:integer;

*                     StAngle,EndAngle,XRadius,YRadius:word);

7

      Рисует и закрашиваетэллиптический сектор,

 используя текущие стиль ицвет рисования и зак-

 раски. Параметры имеют тотже смысл и тип что

 и одноименные параметрыпроцедуры Ellipse.

*     procedure Randomize;

      Инициализируетвстроенный генератор случайных чисел сллучайным

 значением, получаемым отсистемного таймера компьютера. Описана в

 модуле System. Число,получаемое в результате работы генератора,

 хранится в предописаннойпеременной RandSeed. Присваивая ей конкрет-

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

 случайных чисел.

        ПРОГРАММИРОВАНИЕЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

*      functionRandom(Rande:word):word;

       Возвращает случайноечисло. Переменная Rande должна быть выра-

 жением целого типа, арезультатом будет случайное число X длиной в

 слово в диапазоне 0=<X<Rande. Если Rande=<0, Random возвращает 0.

 Если параметр функции незадан вовсе, то результатом будет

 вещественное число вдиапазоне 0=<X<1.

*       procedureDelay(Time:word);

       Выполняет задержку назаданное число миллисекунд, описана в

 модуде Crt.

*      functionKeyPressed:boolean;

        Возвращает значениеtrue, если на клавиатуре нажата

 какая-либо символьнаяклавиша, и false — в противном случае. Описана

 в модуле Crt.

*       procedurePutPixel(X,Y:integer;Color:word);

        Рисует на экране впозиции (X,Y) точку цвета Color. Опивана в

 модуле Graph.

*       procedureGetPixel(X,Y:integer):word;

        Возвращает код цветазаданной точки растра (X,Y).

          ПРОГРАММИРОВАНИЕЦВЕТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

         В качестве примераиспользования функции PutPixel продемон-

 стрируем возможностьформирования «звездного неба» до нажатия любой

 символьной клавиши.

 .............

 Randomize;

 repeat

   PutPixel(Random(GetMaxX),

            Random(GetMaxY),

            Red);

   Delay(50);

 until KeyPressed;

 .............

       Приведем еще одинпример использования процедур и функций,

 описанных в данномразделе.На следующем экране Вы можете наблюдать

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

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

 ностей, проходящих черезобщею точку опорной окружности и с центрами

 в концах равных элементов,составляющих опорную окружность. Цвета

 элементов  опорной окружности  и  окружностей  кардиоиды назнача-

 ются случайным образом.

8

9        ПРОГРАММИРОВАНИЕЦВEТНЫХ КРИВОЛИНЕЙНЫХ ИЗОБРАЖЕНИЙ

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.

*

ФОРМИРОВАНИЕ ГРАФИЧЕСКИХТЕКСТОВ

     В данном разделе мырассмотрим возможность графического изобра-

 жения текстовых символов,управление типом шрифта, направлением

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

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

 вания графических текстов.

*     procedureSetTextStyle(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                ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

#

                 ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

*     procedureSetUserCharSize(MultX,DivX,MultY,DivY:word);

      Используется послеустановки штрихового шрифта с целью измене-

 ния пропорций символов.Отношение MultX/DivX -коэффициент масштаби-

 рования обычной шириныиспользуемого архивного штрихового шрифта.

2MultY/DivY — коэффициентмасштабирования высоты шрифта.

#

                  ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

*    functionTextHeight(TextString:strig):word;

     Возвращает высотузаданной текстовой строки TextString в элемен-

 тах изображения(пикселах) сучетом всех установок, выполненных ранее

 процедурами SetTextStyle иSetUserCharSize .

*    functionTextWidth(TextString:string):word;

     Возвращает ширинузаданной текстовой  строки TextString при тех

 же условиях, что и функцияTextHeight.

*     procedureSetTextJustify(Horiz,Vert:word);

      Обеспечивает привязкувыводимого графического текста к теку-

 щему положению курсора.Параметры процедуры описаны в модуле Graph

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

 Horiz: LeftText  =0 — левымкраем строки к курсору

        CenterText=1 — симметрично к курсору

        RightText =2 — правымкраем строки к курсору

 Vert:  BottomText =0 — строка над курсором

        CenterText =1 — симметрично к курсору

        TopText    =2 — строка под курсором

       По«умолчанию» устанавливается параметр привязки выводимого

 графического текстасоответствующий обращению  SetTextJustify(0,2);.

#

                  ФОРМИРОВАНИЕГРАФИЧЕСКИХ ТЕКСТОВ

*     procedureOutText(TextString:string);

      Выводит на экранпоследовательность символов, начиная с текущей

 позиции, которая меняетсятолько если текст выводится горизонтально

 с левым выравниванием. Еслитекст не помещается в графическое окно,

 он либо вообще невысвечивается («грубый» шрифт, принятый по умолча-

 нию), либо высвечиваетсячастично(«гладкий» шрифт).Текущий цвет

 текста задается процедуройSetColor. параметры шрифта — процедурами

 SetTextStyle SetTextJustify.Коэффициентыувеличения ширины и высоты

 штриховых шрифтов можнозадать процедурой SetUserCharSize. Ширину и

 высоту строки определяют спомощью функций TextWidth  TextHeight.

*     procedureOutTextXY(X,Y:integer;TextString);

      Выводит на экран последовательностьсимволов начиная с позиции

 (X,Y) и возвращает курсор вположение, предшествующее обращению к

 данной процедуре.

*      procedureGetTextSettings(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.

*        functionInstallUserFont(NewFont:string):integer;

         Инсталлирует новыйштриховой шрифт, т.е.вводит во внутреннюю

 таблицу шрифтов имя файланового шрифта NewFont и возвращает номер

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

 ния параметра Font процедуры SetTextStyly.

         Внутренняя таблицаможет содержать до 10 имен шрифтов, из

 которых 4 стандартных в нейсодержатся постоянно. В файловой системе

 лабораторных компьютеровсодержатся файлы 4 нестандартных штриховых

 шрифтов с именами: Bold.chr,Goth.chr, Sans.chr,Trip.chr.

         Если внутренняятаблица штриховых шрифтов переполнена, то

 функция возвращает значение0 и, следовательно, устанавливается

 стандартный растровый шрифт.Для сброса внутренней таблицы шрифтов в

 исходное положение можнозаново перезапустить операционную систему.

         На следующем экранеВы можете наблюдать примеры четырех нес-

 тандартных штриховыхшрифтов, упомянутых в данном разделе.

#

                  ФОРМИРОВАНИЕ ГРАФИЧЕСКИХ ТЕКСТОВ

3

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.

     1SetTextStyle(SmallFont,0,5);

       SetColor(1);

      L:=TextHight('ПАСКАЛЬ');

      SetUserCharSize(1,1,80,L);

      OutTextXY(10,200,'ПАСКАЛЬ');

     2SetTextStyle(SmallFont,1,5);

       SetColor(1);

      L:=TextHight('ПАСКАЛЬ');

       SetUserCharSize(80,L,1,1);

      OutTextXY(10,200,'ПАСКАЛЬ');

     3SetTextStyle(SmallFont,1,5);

       SetColor(1);

      L:=TextHeight('ПАСКАЛЬ');

      SetUserCharSize(1,1,80,L);

       OutText('ПАСКАЛЬ');

     4SetTextStyle(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.

*

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

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

   *

*

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#

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

*     functionImageSize(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(varp:pointer; Size:word);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

*     functionMaxAvail:longint;

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

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

 момент.

*     procedureGetImage(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);

            IfMaxAvail<Size then begin RestoreCrtMode;

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

                  Halt(1) end

                else beginGetMem(p,Size);

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

                     end;

        ........

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

#

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

*     procedurePutImage(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.

#

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

*     procedureDispos(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        {перемещение обьекта}

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

                                                        состоянии}

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

    end;                                 состояние

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

 ......

 end.

#

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

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

#

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

*    procedureSetActivePage(Page:word);

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

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

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

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

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

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

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

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

*     procedureSetVisualPage(Page:word);

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

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

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

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

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

#

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

 ......

   var:integer;

 ......

   begin

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

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

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

       beginBar(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.

#

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

*     procedureSound(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<> # thenFuncKey:=False

     else

       begin

         FuncKey:=true;

         Ch:=ReadKey

       end;

 ......

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

*     procedureSetWriteMode(WriteMode:integer);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 при вычерчивании линий с помощью процедур формированияпрямоугольных изображений.

   *

*

Приложение 3

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

/>

/>

/>

еще рефераты
Еще работы по информатике, программированию