Задание на лабораторную работу
Вариант 15. Написать программу, в которой в окно с координатами (20, 12, 60, 23) с шагами T = 0,5 (секунд) и S = 3 (строк) выводится строка при всех возможных комбинациях цвета фонов и цвета символов. Строка содержит обозначение цвета фона и символа. Для каждой комбинации цветов в окне должны выводиться номера или символьные обозначения цветов фона и символов. Цвет окна должен соответствовать цвету фона.
Дополнить программу скроллингом окна с направлением в соответствии с вариантом, используя функции прерывания 10hBIOS.
Алгоритмы и тексты отлаженных программ
В функции 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();
}
