ЗНАЕТЕ ЛИ ВЫ?

Электронные методические указания



Электронные методические указания

к выполнению лабораторных работ по дисциплине

«Организация ЭВМ и систем»

 

 

Санкт-Петербург

Издательство СПБГЭТУ «ЛЭТИ»

УДК 004.424:004.422.63(075.8)

Электронные методические указания к выполнению лабораторных работ по дисциплине «Организация ЭВМ и систем»/ Сост.: Андреева А.А., Грушвицкий Р.И., Кочетков А.В., Манирагена В., Мурсаев А.Х., Павлов С.М., Чугунов Л.А.. –– СПб.:Изд-во СПбГЭТУ «ЛЭТИ», 2013. –60с.: ил.

Описывается цикл лабораторных работ.

Пособие предназначено для студентов-бакалавров по направлению 230100.62 «Информатика и вычислительная техника» дневной, очно-заочной и заочной форм обучения.

Утверждено
редакционно-издательским советом университета
в качестве методических указаний

 

 

© СПбГЭТУ «ЛЭТИ», 2013


Введение

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

 

Лабораторная работа №1.

ИССЛЕДОВАНИЕ ВНУТРЕННЕГО ПРЕДСТАВЛЕНИЯ РАЗЛИЧНЫХ ФОРМАТОВ ДАННЫХ

Цель работы: знакомство с внутренним представлением различных типов данных, используемых компьютером при их обработке.

 

Общие положения

При программировании на языке С++ используются 11 стандартных типов данных. Среди них можно выделить 3 группы:

1. данные символьные и целого типа беззнаковые (с фиксированной запятой);

2. данные символьные и целого типа со знаком (с фиксированной запятой), значения которых хранятся в двоичном дополнительном коде;

3. данные вещественного типа (с плавающей запятой (точкой)).

Числовое значение данных первой группы занимает всю разрядную сетку (количество двоичных разрядов от 8 до 32), отведенных под конкретный тип. Знак числа данных второй группы занимает старший (левый) разряд, а остальную часть разрядной сетки (от 7 до 31 двоичных разрядов) занимает числовое значение данных, отведенных под конкретный тип. Формат хранения данных третьей группы описывается IEEE - стандартом в виде значения мантиссы (M) со знаком (S) и значения порядка (P). Число бит для хранения мантиссы и порядка зависит от типа данных с плавающей запятой.

float

S P M

31 30 23 22 0

double

S P M

63 62 52 51 0

long double

S P M

79 78 64 63 0

 

Вещественное число в памяти хранится с нормализованной мантиссой, значение которой в десятичном эквиваленте лежит в диапазоне от 1 до 2. Причём 2 не входит в границу диапазона. Если в процессе выполнения какой-либо операции над данными с плавающей запятой значение мантиссы выходит из указанного диапазона, то в конце операции выполняется нормализация результата путем приведения значения мантиссы к указанному диапазону с соответствующим изменением значения порядка. При этом значение старшего бита мантиссы должно оказаться равным единицы. Если значение порядка превышает допустимое значение, то вырабатывается признак переполнения разрядной сетки. Если значение мантиссы равно нулю или в процессе выполнения операции значение порядка становится меньше допустимой величины, то в результате выполнения операции сформируется так называемый «машинный ноль», то есть код, у которого значение всех бит равно нулю. Но если мантисса всегда нормализована, то старший её бит, то есть единицу, можно и не хранить в памяти. Стандартом предложено это бит не хранить в памяти и тем самым увеличить точность представления вещественных чисел в 2 раза. Эта единица присутствует неявно, то есть скрыта от глаз наблюдателя и называется неявной единицей (implicit one). Отбрасывание старшей цифры мантиссы выполняется для форматов float и double, но не выполняется для long double.

Порядок числа в соответствии с указанным форматом хранится «сдвинутым», то есть к его действительному значению добавляется в зависимости от формата такое число, чтобы порядок Р был всегда неотрицательным. Для формата float прибавляется 127, для чисел формата double прибавляется 1023, а для формата long double добавляется 16383. Всегда неотрицательный порядок упрощает выполнение операции сравнения порядков и арифметических операций над ними, а также избавляет от необходимости выделять один бит для хранения знака порядка.

Например, число 15.375 (1111.011 в двоичной системе счисления) в формате float IEEE-стандарта получается следующим образом:

1.921875 (1.111011 в двоичной системе счисления) - это значение нормализованной мантиссы;

3 (11- в двоичной системе счисления) это степень несмещённого двоичного порядка (15.375=1.921875*8);

0-это знак числа.

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

S=0;

P=3+127=130 (10000010 в двоичной системе счисления);

M=11101100000000000000000.

Таким образом, внутреннее представление числа 15.375 в формате float будет:

31 30 … 23 22 … 0

Это же число 15.375 в формате double записывается так:

S=0;

P=3+1023=1026 (10000000010 в двоичной системе счисления);

M=1110110000000000000000000000000000000000000000000000.

11101100000000000...00000000000000000000000

63 62 … 52 51 … 0

Это же число в формате long double записывается следующим образом:

S=0;

P=3+16383=16386 (100000000000010 в двоичной системе счисления);

M=11110110000000000000000…0 (единица не отбрасывается).

111101100000000000…00000000000000000000000000000000

79 78 … 64 63 … 0

Приведём ещё несколько примеров, но уже без подробных комментариев.

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

 

-16.5 float: C1 84 00 00 h

double: C0 30 80 00 00 00 00 00 h

long double: C0 03 84 00 00 00 00 00 00 00 h

 

- 0.0625 float: BD 80 00 00 h

double: BF B0 00 00 00 00 00 00 h

long double: BF FE A0 00 00 00 00 00 00 00 h

 

 

1.2. Предварительная подготовка к работе

1. Ознакомиться с внутренними форматами представления данных.

2. Вспомнить поразрядные логические операции в языке С++, указатели и операции над ними, структуры типа union и функции работы с файлами.

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

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

 

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

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

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

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

Варианты заданий приведены в таблице 1.1.

Табл.1.1

№ варианта
unsigned char *   *                 *              
Char   *                 *                
unsigned int       *                 *   *     *  
int         *         *                  
shot int           *     *         *         *
unsigned long             *                 *      
long               *                 *    
float     *       *   *       *       *    
double   *   *   *   *   *   *   *   *   *  
long double *       *           *       *       *
Вид преобраз.

 

Виды преобразований:

1. Установить в заданное пользователем состояние определённое количество бит, номера которых, как и всё остальное, вводится с клавиатуры.

2. Инвертировать значения определённого количества бит, номера которых, как и их количество, вводится с клавиатуры.

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

4. Установить в заданное пользователем состояние определённое количество рядом стоящих бит, номер младшего из которых, как и всё остальное, вводится с клавиатуры.

5. Поменять местами заданные пользователем группы рядом стоящих бит, номера старших разрядов этих групп и количество бит в группе, вводится с клавиатуры.

6. Выполнить циклический сдвиг в заданную сторону на некоторое вводимое с клавиатуры количество разрядов.

7. Поменять местами значения рядом стоящих бит в парах. Количество пар и номер старшего разряда левой пары задаётся с клавиатуры.

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

9. Инвертировать значения всех бит кроме тех, количество и номера которых задаются с клавиатуры.

10. Установить в заданные пользователем значения некоторые разряды, количество которых и номера разрядов задаются с клавиатуры.

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

12. Выполнить в пределах группы бит путём сдвига вправо все биты, значение которых равно единице и влево все биты, значение которых равно нулю.

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

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

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

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

16. Выполнить путём сдвига вправо все биты, значение которых равно нулю и влево все биты, значение которых равно единице.

17. Поменять местами заданные пользователем группы рядом стоящих бит, номера младших разрядов этих групп и количество бит в группе, вводится с клавиатуры.

18. Поменять местами значения рядом стоящих бит в парах. Количество пар и номер младшего разряда правой пары задаётся с клавиатуры.

19. Поменять местами значения бит в заданном количестве пар бит. Номера бит в парах задаются с клавиатуры.

 

Содержание отчёта

Отчет по лабораторной работе должен содержать:

- титульный лист;

- задание на лабораторную работу;

- блок-схему алгоритма с пояснениями;

- текст программы;
- примеры запуска программы;

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

 

 

1.5. Контрольные вопросы

 

1. В каком коде хранятся целые числа со знаком?

2. Чем отличаются процессы сдвига влево и вправо для чисел со знаком и беззнаковых?

3. Как представляется корректный двоичный код числа типа float (double, long double), имеющего в десятичном виде наименьшее положительное значение, отличное от нуля?

4. Как выглядит десятичный код числа типа float (double, long double), имеющего наименьшее положительное значение, отличное от нуля?

5. В каком порядке следует выполнять действия для получения дополнительного кода двоичного целого числа из прямого кода?

6. Чем отличается циклический сдвиг двоичного кода от логического сдвига?

7. Чем отличается логический сдвиг двоичного кода от арифметического сдвига?

8. Как изменяется значение числа при арифметическом сдвиге на 1 двоичный разряд влево?

9. Как изменяется значение числа при арифметическом сдвиге на 1 двоичный разряд вправо?

10. В каком порядке следует выполнять действия для получения прямого кода двоичного целого числа из дополнительного кода?

 

 

Лабораторная работа №2.

Общие положения

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

В самом общем виде видеоадаптер состоит из двух основных частей: контроллера и видеопамяти (видеобуфера). Помимо этих обязательных узлов, наиболее совершенные видеоадаптеры имеют в своем составе ряд дополнительных узлов, например специализированные контроллеры быстрой манипуляции содержимым видеобуфера (так называемые контроллеры графики). Основное назначение видеобуфера - хранение образа информации экрана. Видеоадаптер 25 и более раз в секунду формирует изображение на экране. Так как человеческий глаз не способен уловить такое быстрое мелькание кадров, создается иллюзия неподвижного изображения на экране монитора. Изображение на экране строится из небольших точек - так называемых пикселов (pixel - Picture ELement). Число пикселов в строке и число самих строк различно для разных типов видеоадаптеров.

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

Управление параметрами видеосистемы может выполняться на двух уровнях:

на уровне портов видеоадаптера;

обращением к функциям BIOS.

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

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

Видеоадаптеры всех типов аппаратно поддерживают курсор, который в текстовых режимах отображается на экране в виде одной или нескольких линий в пределах тексела. Курсор указывает на текущую позицию экрана (строку и столбец тексела), в которую будет записываться или из которой будет читаться средствами BIOS символ. При переключении адаптера в графический режим курсор становится невидимым, но BIOS сохраняет возможность изменять его позицию. Специальные регистры видеоконтроллера хранят текущую позицию и форму курсора.

Программное прерывание 10h BIOS имеет в своем составе специальные функции для установки формы курсора, чтения и установки его координат.

Функция АН = 0lh задает высоту курсора. Регистр СН определяет номер верхней телевизионной линии, a CL - но­мер нижней линии при изображении курсора. Например, за­дав значения СН = 0, CL = 13, получим курсор, занимающий все знакоместо. Значения СН = 6, CL = 7 устанавливают форму кур­сора по умолчанию - две равномерно мерцающие строки в нижней части тексела. Если СН > CL, курсор будет состоять из двух групп линий вверху и внизу знакоместа с разрывом посередине. BIOS поддерживает оди­наковую форму курсора для всех видеостраниц текста. Биты 5 и 6 кода СН управляют мерцанием и могут выключить ото­бражение курсора (табл. 2.2).

Табл. 2.2. Биты управления отображением курсора

Биты регистра СН Действие, оказываемое на курсор    
бит 6 бит 5
Видимый, мерцающий равномерно с нормальной ско­ростью курсор
Курсор не отображается
Видимый, мерцающий равномерно с повышенной ско­ростью курсор
Видимый, неравномерно мерцающий курсор

 

BIOS записывает текущую форму курсора в слово по адресу 0040:0060h, при этом младший байт содержит номер нижней строки, а старший - номер верхней строки для отображения курсора.

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

Среди функций консольного ввода-вывода С++ текущей позицией курсора в окне управляет функция gotoxy(int x, int y);.

Устанавливает курсор в заданную строку y и столбец x в текущем активном окне экрана. Верхний левый угол окна имеет координаты (1,1). При попытке по­зиционировать курсор за границы окна он останавливается на границе окна. Особенностью функции является то, что координаты задаются относительно левого верхнего угла текущего окна.

Текущую позицию x и y курсора в активном текстовом окне можно узнать при вызове соответственно функций wherex () и wherey().

Эти функции соответственно возвращают номер столбца и номер строки текущей позиции курсора. Кроме того, текущая позиция курсора в окне возвращается в полях curx и сurу структурной переменной, заполняемой при вызове функции gettextinfo( ).

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

Изменить программу, полученную на предыдущей работе таким образом, чтобы в окно с координатами (x1,у1,х2,у2) с шагами Т (секунд) и S (строк) выводилась надпись при всех возможных комбинациях цвета фона и цвета символов. Для каждой комбинации цветов в окне должны выводиться номера или символьные обозначения цветов фона и символов (варианты приведены в табл. 2.4).

Табл. 2.4. Варианты заданий

Номер варианта     Координаты окна   Обозначение цвета Шаг Направ­ление    
Xl Y1 X2 Y2 Фона Символа T S
Номер Англ 0.3 Вверх
Номер Русск 0.4 Вниз
Номер Номер 0.5 Вверх
Англ. Англ. 0.6 Вниз
Англ. Русск 0.7 Вверх
Англ. Номер 0.8 Вниз
Русск. Англ. 0.9 Вверх
Русск. Русск. 1.2 Вниз
Русск. Номер 1.3 Вверх
Номер Англ. 1.4 Вниз
Номер Русск. 1.5 Вверх
Номер Номер 0.2 Вниз
Англ. Англ. 0.3 Вверх
Англ. Русск. 0.4 Вниз
Англ. Номер 0.5 Вверх
Русск. Англ. 0.6 Вниз
Русск. Русск. 0.7 Вверх
Русск. Номер 0.8 Вниз
Номер Англ. 0.9 Вверх
Номер Русск. 1.1 Вниз

2. Организовать в окне вывод разноцветных сообщений со скроллингом окна.

3. Отлаженные программы предъявить преподавателю.

Содержание отчета

1. Краткие сведения о видеосистемах ПЭВМ, текстовом режиме их работы и функциях обслуживания текстового режима.

2. Алгоритмы и тексты отлаженных программ.

2.11. Контрольные вопросы

1. Что входит в понятие "видеосистема"?

2. Какие типы видеосистем вы знаете?

3. Назовите основные характеристики видеосистем?

4. Как влияет размер видеопамяти на характеристики системы?

5. Зачем нужен видеоадаптер?

6. Почему различают текстовый и графический режимы работы видеосистемы?

7. Назовите основные характеристики текстового режима, чем они обусловлены?

8. Что называется окном? Зачем нужны окна?

9. Можно ли на одном экране организовать несколько окон?

10. Какие функции инициализации текстового режима вы знаете?

11. Какие функции обслуживания окон вы знаете?

12. Что такое курсор и как можно им управлять?

13. Зачем нужен байт атрибутов символа?

14. Сколько цветов фона и символов можно одновременно использовать и почему?

15. Какая структура данных используется для хранения цветов?

 

 

Лабораторная работа № 3.

Общие положения

Использование графики в языке С++ - это многошаговый процесс. Прежде всего необходимо определить тип видеоадаптера. Затем устанавливается подходящий режим его работы и выполняется инициализация графической системы в выбранном режиме. После этого становятся доступными для исполь­зования функции графической библиотеки graphicx.h для построения основных графических примитивов: отрезков прямых линий, окружностей, эллипсов, прямоугольников, секторов, дуг и т.д., появляется возможность вывода текста с использованием различных шрифтов.

Использование библиотеки графики намного сокращает объем программирования для вывода основных графических примитивов. С++ "маскирует" многие технические детали управления оборудованием, о которых пользователь должен быть осведомлен при работе с видеоадаптером через порты или BIOS. Платой за эти удобства является значительное увеличение размера .ЕХЕ-файлов. Использование графической библиотеки С++ требует знакомства с моделью графической системы, применяемой компилятором для представления графической системы компьютера. Можно сказать, что сложность овладения деталями аппаратных средств видеоадаптеров сравнима со сложностью освоения графической модели. Однако достоинство графической модели заключается в ее относительной независимости от различных типов видеоадаптеров и открытости для дальнейших расширений. Появление новых типов видеоадаптеров не потребует большой переработки программ, так как все новые особенности аппаратуры будут учитываться в средствах библиотеки С++.

Весь код библиотеки графики разбивается на две части: немобильную, которая зависит от типа видеоадаптера и мобильную.

Немобильная часть представляет собой так называемый .BGI-драйвер (BGI - Borland Graphics Interface). Драйвер является обработчиком прерывания 10h, который должен дополнить системный обработчик до того, как будут использоваться мобильные функции. Перед завершением программы таблица векторов прерывания восстанавливается.

Основные функции, выполняемые .BGI-драйвером, сводятся к установке и обновлению ряда внешних переменных, которые могут изменяться как функциями системного обработчика прерывания 10h (например, при переключении видеорежима, изменении регистров палитры и т.п.), так и мобильными функциями библиотеки графики. С++ включает целую коллекцию драйверов для каждого из типов адаптеров, хранимых обычно в отдельном поддиректории. Система графики является открытой для расширений, так как позволяет использовать и собственные .BGI-драйверы. Сложность состоит в том, что фирма Borland International не раскрывает пока внутреннюю структуру драйвера.

Совокупность внешних переменных библиотеки графики и особенностей поведения мобильных функций образует модель графики С++. Подробно эти элементы модели рассматриваются в следующих подразделах.

Задание окна экрана. Определение и установка графических координат

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

Для описания окна используется функция setviewport(). Текущие характеристики окна доступны программе через обра­щение к функции getviewsettings().

void far getviewsettings( struct viewporttype *viewport)

 

Заполняет поля структурной переменной по шаблону viewporttype инфор­мацией о графическом окне. Описание структурной переменной выполняет вызывающая сторона. Функции передается указатель на описанную переменную. Шаблон viewporttype описан в <graphics.h>:

 

struct viewporttype

{

int left, top; /* координаты ( столбец, строка) левого верхнего угла* /

int right, bottom; /* координаты (столбец, строка) правого нижнего угла */

int clip; /* Флаг усечения при выводе (1 - усечение, 0 - нет )*/

}

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

void setviewport (int left, int top, int right, int bottom, int clip)

 

Описывает новое графическое окно с координатами (столбец, строка) левого верхнего угла left, top, координатами правого нижнего угла right, bottom и значением флага усечения clip. В качестве начала текущих координат для функций графического вывода устанавливается левый верхний угол.

Помимо явного задания окна функцией setviewport(), оно специфицируется и неявно при выполнении функций initgraph(), setgraphmode() и graphdefaults(). При каждом их выполнении в качестве графического окна устанавливается весь экран.

Графические координаты X и Y измеряются в пикселах экрана относительно координат левого верхнего угла текуще­го окна. Функции графического вывода изменяют эти координаты в соответствии с объемом выведенной на экран инфор­мации. Текущие координаты в окне доступны через функции getx() и gety(). Установку нужных значений координат текущей позиции выполняют функции moveto() и moverel(). Кроме того, некоторые функции графического вывода позволяют задать текущую позицию (см., например, outtextxy()).

 

int getx (void)

int gety (void)

 

Возвращают текущие координаты X и Y, измеряемые относительно коор­динат левого верхнего угла текущего графического окна.

 

void moveto (int x, int y)

 

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

 

void moverel(int dx, int dy)

 

Устанавливает новое значение координат текущей позиции. Аргументы dx, dy задают новые значения координат относительно текущих координат графического окна. Другими словами, новая текущая позиция устанавливается в точку, отстоящую от текущей позиции на dx столбцов пикселов по горизонтали и dy строк пикселов по вертикали. Чтобы переместить текущую позицию влево, нужно задать для dx отрицательное значение. Для перемещения текущей позиции по вертикали вверх задается отрицательное значение для dy.

 

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

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

Выводимые отрезки прямых линий не пересекают границ текущего окна, если при описании окна включен режим "усечения" (clipping).

 

void line( int x1, int y1, int x2, int y2)

 

Выводит отрезок прямой линии между двумя явно специфицированными точками (x1, y1) и (х2, у2), используя текущие цвет, стиль, толщину и режим вывода линии. Координаты (x1, y1) и (х2, у2) задаются относительно левого верхнего угла текущего графического окна. Функция не изменяет текущую позицию.

 

void linerel(int dx, int dy)

 

Выводит отрезок прямой линии между текущей позицией (начало отрезка) и точкой, заданной горизонтальным смещением dx и вертикальным смещением dy от текущей позиции (конец отрезка). При выводе отрезка прямой используются текущие цвет, стиль, толщина и режим вывода линии. После вывода линии функция устанавливает новую текущую позицию, равную координатам конца отрезка.

 

Установка необходимой текущей позиции может быть выполнена функциями moveto() и movrel().

 

void lineto( int x, int y)

 

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

 

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

1. Разработать программу для вывода на экран графика заданной функции.

 

Номер Функция Диапазон аргумента
Начало Конец
Sin2(x/2)+Sqrt(x) 3π/2 15π
Sin3(x/2)+Sqrt(x) 3π/2 16π
Sin2(x/4)+Sqrt(x) 3π/2 17π
Cos2(x/2 ) +Sqrt (x ) 3π/2 18π
Cos3(x/2)+Sqrt(x) 3π/2 15π
Cos2(x/4)+Sqrt(x) 3π/2 16π
Sin2(x)- Cos2(x) 3π/2
Sin3(x)+ Cos2(x) 3π/2
Sin2(x)+ Cos3(x) π/2
Sin3(x)+ Cos3(x) π/2
Sin2(x)- Cos2(x) π/2
Sin3(x)- Cos2(x) π/2
Sin2(x)- Cos3(x) π/2
Sin3(x)- Cos3(x) π/2
Sin2(x/2)-Sqrt(x) π/2 13π
Sin3(x/2)-Sqrt(x) π/2 12π
Sin2(x/4)-Sqrt(x) π 11π
Cos2(x/2)-Sqrt(x) π 10π
Cos3(x/2)-Sqrt(x) π
Cos2(x/4)-Sqrt(x) π

 

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

3. Найти максимальное значение функции на заданном интервале и вывести в отдельное окно на экране.

Содержание отчета

1. Краткие сведения о видеосистемах ПЭВМ, графическом режиме их работы и функциях обслуживания графического режима.

2. Алгоритмы и тексты отлаженных программ.

3. Выводы.

 

3.12. Контрольные вопросы

1. Зачем нужен графический режим?

2. Почему в видеосистеме используют и текстовый, и графический режимы?

3. Можно ли обойтись только графическим режимом? Если да, то какие характеристики должна при этом иметь ПЗВМ?

4. Как влияет размер видеопамяти на характеристики графического режима?

5. Зачем нужен видеоадаптер в графическом режиме?

6. Назовите основные характеристики графического режима, чем они обусловлены?

7. Существуют ли окна в графическом режиме? Зачем они нужны?

8. Какие функции инициализации графического режима Вы знаете?

9. Какие функции обслуживания графических окон Вы знаете?

10. Есть ли курсор в графическом режиме? Если да, то как можно им управлять?

11. Что такое пиксел? Зачем нужен атрибут пикселя?

12. Какие функции работы с пикселями Вы знаете?

13. Сколько цветов фона и символов можно одновременно ис­пользовать в графическом режиме и почему?

14. Какие функции установки цветов Вы знаете?

15. Что называется графическим примитивом и какие функции обслуживания графических примитивов Вы знаете?

 

Лабораторная работа № 4.

Общие положения

Подавляющее большинство программ выполняют ввод информации с клавиатуры. Ввод информации в компьютер может быть выполнен на трех уровнях: обращением к функциям MS-DOS; обращением к функциям BIOS; физическим доступом к аппаратным средствам.

Ввод информации на уровне MS-DOS позволяет "пропустить" клавиатурный ввод через инсталлируемые драйверы, обеспечивает отслеживание нажатия комбинации клавиш Ctrl-C (Ctrl-Break), стандартную для MS-DOS обработку ошибок.





Последнее изменение этой страницы: 2016-06-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 35.153.39.7 (0.057 с.)