Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОЭС лр1 текстовый режим - метода

.doc
Скачиваний:
11
Добавлен:
09.02.2015
Размер:
26.62 Кб
Скачать

ОЭС, лабораторная работа №1

Исследование текстового режима видеосистемы

Цель работы:

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

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

Основная информация:

Для написания программы понадобятся функции С++, указанные в методе. Для их использования нужно подключить библиотеки dos.h и conio.h.

Textbackground(color), textcolor(color), gotoXY(x, y) и clrscr() работают точно так же, как и в Pascal. В качестве параметра color выступает число 0-7 для фона и число 0-15 для текста, т. е. 8 и 16 разных цветов соответственно.

Функция cprintf(...) предназначена для вывода в текстовом режиме и аналогична write из Pascal. В данной работе вывод на экран будет производиться при помощи этой функции, а не стандартным для С++ образом, т. е. не через оператор << вывода в поток:

Вместо cout << “Text”; в данной работе будет использоваться cprintf(“Text”);

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

Для реализации задержки в работе программы предлагается использовать следующие функции из библиотеки dos.h:

sleep(seconds);

delay(milliseconds);

Но может быть так, что в библиотеке не будет найдена одна из этих функций. Например, у меня при подключенном dos.h программа не распознавала функцию delay. В таком случае можно использовать функцию Sleep(msec) из библиотеки windows.h. Для этого ее нужно подключить в дополнение к остальным. Также стоит обратить внимание на то, что функция Sleep(msec) из windows.h пишется с большой буквы, а sleep(sec) из dos.h — с маленькой. Но первая реализует паузу в миллисекундах, а вторая — в секундах.

Структура программы:

Итак, необходимые функции известны, теперь можно перейти к самой программе. Исходя из задания, сначала необходимо создать окно с указанными координатами из таблицы вариантов. Т. е. просто использовать функцию window(x1, y1, x2, y2).

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

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

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

for (int color1 = 0; color1 < 8; color1++)

for (int color2 = 0; color2 < 16; color2++)

{

textbackground(color1);

textcolor(color2);

...

}

Для вывода информации о цветах в большинстве вариантов понадобится две вещи: вывод номера цвета и вывод названия цвета. Начнем с того, что проще, т.е. с вывода номера.

Чтобы вывести номер цвета, например color1, недостаточно написать

cprintf(color1); // не будет работать

Нужно писать следующим образом:

cprintf(«%d», color1);

В данном случае первый параметр «%d» - флаг, указывающий на то, что будет выводиться целое число.

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

string getColorName(int color) // функция перевода номера цвета в строку

{

switch (color) // по значению переданного цвета выбираем соотв. строку

{

case 0: return "black";

case 1: return "dark blue";

case 2: return "dark green";

case 3: return "aqua";

case 4: return "dark red";

case 5: return "purple";

case 6: return "dark yellow";

case 7: return "light gray";

case 8: return "gray";

case 9: return "blue";

case 10: return "green";

case 11: return "light blue";

case 12: return "red";

case 13: return "pink";

case 14: return "yellow";

case 15: return "white";

default: return "unknown color"; // случай неправильного параметра (вне [0; 15])

}

}

Данная функция возвращает тип string, для использования которого нужно подключить библиотеку «string.h». Тип String является классом, а функция printf, которой мы пользуемся, умеет выводить только простые цепочки символов — строки в стиле С, так что для вывода строки типа String нужно преобразовать ее в строку старого стиля. Делается это следующим образом:

string a = “Hello”; // строка, являющаяся объектом

cprintf(a); // неверно, cprintf неприменимо к string

cprintf(a.c_str()); // верно, при помощи метода c_str() строка a преобразовывается в строку старого стиля

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

string color1Name = getColorName(color1); // получение названия по номеру

cprintf(color1Name.c_str()); // вывод названия

Остался один нерасмотренный момент — вывод строк в окне с определенным шагом (T секунд и S строк). В вариантах используется дробное число секунд, так что придется использовать функции, принимающие миллисекунды, т. е.:

delay(300); // 0.3 секунды задержки, вариант, предлагаемый в методе

Sleep(300); // 0.3 секунды, использовать в случае, если первый вариант не сработает. Дополнительно нужно будет подключить windows.h.

Шаг в S строк — это просто соотв. количество переводов строки после каждого шага цикла. Строка переводится следующим образом:

cprintf(“\n\r”);

где «\n» означает переход на следующую строку, а «\r» - перевод каретки в начало строки.