Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба «ИССЛЕДОВАНИЕ ВИДЕОСИСТЕМЫ (ТЕКСТОВЫЙРЕЖИМ)» ЭВМ.docx
Скачиваний:
2
Добавлен:
08.07.2025
Размер:
4 Мб
Скачать
☆
  1. Задание на лабораторную работу

Вариант 15. Написать программу, в которой в окно с координатами (20, 12, 60, 23) с шагами T = 0,5 (секунд) и S = 3 (строк) выводится строка при всех возможных комбинациях цвета фонов и цвета символов. Строка содержит обозначение цвета фона и символа. Для каждой комбинации цветов в окне должны выводиться номера или символьные обозначения цветов фона и символов. Цвет окна должен соответствовать цвету фона.

Дополнить программу скроллингом окна с направлением в соответствии с вариантом, используя функции прерывания 10hBIOS.

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

В функции Scroll() (Рис. 1) выбирается направление сдвига строки – вверх или вниз, после чего из переданных в функцию данных задаются границы будущей рамки. Далее осуществляется сам сдвиг.

Рисунок 1 - Функция Scroll

Функция Print() (Рис. 2) отвечает за вывод слов и цифр на экран. При ее вызове курсор устанавливается на позицию с переданными координатами, после чего выводятся нужные данные.

Рисунок 2 – Функция Print()

Функция Clear() (Рис. 3) отвечает за очистку экрана на заданном диапазоне. В конце выполняется закрашивание фона.

Рисунок 3 – Функция Clear()

В функция main() (Рис. 4) происходит объявление переменных для циклов и задаются параметры окна с помощью функции window(). С помощью функций textcolor() и textbackground() задаются цвета текста и фона. Далее следуют два вложенных цикла for, в которых перебираются все возможные сочетания цветов фона и символов текста. Для вывода текста, очистки экрана и сдвига используются функции, описанные выше.

Рисунок 4 – Функция main()

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

#include <conio.h>

#include <stdio.h>

#include <dos.h>

#define x1 20

#define y1 12

#define x2 60

#define y2 23

enum { ENTIRE, UP, DOWN };

char* Colors[] = { "BLACK ", "BLUE ", "GREEN ", "CYAN ", "RED ","MAGENTA ", "BROWN", "LIGHTGRAY ", "DARKGRAY ", "LIGHTBLUE ","LIGHTGREEN ", "LIGHTCYAN ", "LIGHTRED ", "LIGHTMAGENTA ", "YELLOW ",

"WHITE "};

void Scroll(int direction, char l_row, char l_col, char r_row, char r_col, char attr) {

union REGS r;

if (direction == DOWN)

r.h.ah = 7;

else

r.h.ah = 6;

r.h.al = 3;

r.h.ch = l_row;

r.h.cl = l_col;

r.h.dh = r_row;

r.h.dl = r_col;

r.h.bh = attr;

int86(0x10, &r, &r);

}

void Print(int i, int X1, int Y2, int X2, int j)

{

gotoxy(X1, Y2);

printf(Colors[j]);

printf("%d", i);

gotoxy(X2, Y2);

}

void Clear(int Y2, int X1, int X2, int j)

{

gotoxy(X1, Y2);

for (int p = X1; p <= X2; p++) {

putch(' ');

}

textbackground(j);

}

void main() {

int i = 0, j = 0;

window(x1, y2, x2, y1);

textcolor(i);

textbackground(j);

clrscr();

for (j; j < 8; j++)

{

for (i = 0; i < 16; i++)

{

textcolor(i);

textbackground(j);

Clear(y2, x1, x2, j);

Clear(y2 - 1, x1, x2, j);

Clear(y2 - 2, x1, x2, j);

Print(i, x1, y2, x2, j);

delay(500);

if (i < 15)

Scroll(UP, y1 - 1, x1 - 1, y2, x2, 1);

}

}

getch();

}