F
Fobos
Пожалуйста, помогите кто чем может!
Заранее благодарен.
Упражнение №1
Ниже приведен пример программы, которая выполняет очистку экрана и вывод текстовых символов путем непосредственного обращения к видеопамяти:
<!--shcode--><pre><code class='c'>#include <conio.h>
#include <dos.h>
// Создание указателя на видеопамять
unsigned char far *screen = (unsigned char *) MK_FP(0xB800, 0);
// Очистка экрана
void ClearScreen()
{
int i;
for(i=0; i<80*25; i++)
{
screen[2*i] = ' '; // заполнить экран пробелами
screen[2*i+1] = 0x0F; // символы белые, фон черный
}
}
// Вывод символа
void OutChar(int x, int y, char CharCode, unsigned char Color)
{
screen[(80*y+x)*2] = CharCode;
screen[(80*y+x)*2+1] = Color;
}
// Главный модуль
void main()
{
ClearScreen();
OutChar(0,0,'A',0x1E);
OutChar(1,2,'B',0x2D);
getch();
}[/CODE]
Функция OutChar имеет следующие параметры:
x и y – координаты символа;
CharCode – код символа;
Color – цвет символа и фона.
Требуется выполнить следующую последовательность действий:
1) Ввести, откомпилировать и запустить программу.
2) Изменить программу таким образом, чтобы вместо очистки экрана выполнялась раскраска фона в виде шахматной доски с коричневыми и желтыми клетками (использовать по два знакоместа на каждую клетку, чтобы клетки были квадратными).
3) Вывести «бегущий ноль». При запуске в левом верхнем углу экрана выводится символ ‘0’. Далее при каждом нажатии на клавишу Enter символ должен перемещаться в следующую колонку, а при достижении конца строки – в следующую строку. Работа программы должна прекращаться по достижении конца третьей строки.
Упражнение №2
Ниже приведен пример программы, которая работает в графическом режиме с разрешением 320x200 точек. В программе используются следующие функции: SetMode – установка видеорежима; ClearScreen – очистка экрана; Pixel – вывод точки заданного цвета в указанную позицию экрана.
Функция установки видеорежима SetMode имеет один параметр – код режима. Для установки 256-цветного режима с разрешением 320x200 точек используется код 0x13, для возврата в текстовый режим – код 0x03.
Функция вывода точки Pixel имеет следующие параметры:
x и y – координаты точки;
Color – цвет точки.
<!--shcode--><pre><code class='c'>#include <conio.h>
#include <dos.h>
// Создание указателя на видеопамять
unsigned char far *screen = (unsigned char *) MK_FP(0xA000, 0);
// Установка видеорежима
void SetMode(int Mode)
{
union REGS regs;
regs.h.ah = 0;
regs.h.al = Mode;
int86(0x10, ®s, ®s);
}
// Очистка экрана
void ClearScreen()
{
unsigned i;
for(i=0; i<64000l; i++) screen = 0;
}
// Вывод точки заданного цвета в заданную позицию экрана
void Pixel(unsigned x, unsigned y, unsigned char Color)
{
screen[320*y+x] = Color;
}
// Главный модуль
void main()
{
unsigned x, y;
SetMode(0x13); // установить графический режим с разрешением 320x200
ClearScreen(); // очистить экран
// Отобразить всю палитру цветов в виде вертикальных линий
for(y=0; y<100; y++) for(x=0; x<256; x++) Pixel(x,y,x);
getch(); // ожидать нажатия любой клавиши
SetMode(3); // восстановить текстовый режим
}[/CODE]
Требуется выполнить следующую последовательность действий:
1) Ввести, откомпилировать и запустить программу.
2) Добавить в программу функцию, рисующую горизонтальные отрезки заданного цвета с заданной координатой Y от левого до правого края экрана.
3) Добавить в программу функцию, рисующую вертикальные отрезки заданного цвета с заданной координатой X от верхнего края экрана до нижнего..
4) С помощью добавленных функций разлиновать экран линиями светло-серого цвета таким образом, чтобы получились клетки 8x8 точек
5) Создать маску изображения в виде массива 8x8 типа unsigned char.
6) Организовать цикл вывода изображения таким образом, чтобы оно перемещалось от левого края экрана до правого с шагом в одну точку при каждом нажатии клавиши Enter.
7) Добавить массив 8x8 типа unsigned char для хранения фона и усовершенствовать цикл вывода изображения, чтобы фон восстанавливался после перемещения изображения.
8) Добавить в программу функцию синхронизации вывода изображения с частотой кадров WaitSync.Изменить цикл вывода изображения так, чтобы изображение перемещалось не по нажатию Enter, а по началу обратного хода луча.
9) Изменить программу таким образом, чтобы слева направо перемещался не один, а несколько одинаковых объектов – строем (цепью).
Упражнение №3.
Ниже приведен пример программы, которая работает в режиме TrueColor32 1024768.
<!--shcode--><pre><code class='c'>#include <stdio.h>
#include <conio.h>
#include <dos.h>
// Создание указателя на видеопамять
unsigned char far *screen = (unsigned char *) MK_FP(0xA000, 0);
// Установка режима TrueColor32 с разрешением 1024x768
void SetTrueColorMode(void)
{
union REGS regs;
regs.x.ax = 0x4F02;
regs.x.bx = 0x118;
int86(0x10, ®s, ®s);
}
// Восстановление текстового режима
void SetTextMode(void)
{
union REGS regs;
regs.h.ah = 0;
regs.h.al = 3;
int86(0x10, ®s, ®s);
}
// Переключение окон
void SetPage(unsigned Page)
{
union REGS regs;
regs.x.ax = 0x4F05;
regs.x.bx = 0;
regs.x.dx = Page;
int86(0x10, ®s, ®s);
}
// Заливка экрана заданным цветом
void FillScreen(unsigned char B, unsigned char G, unsigned char R)
{
unsigned i,j;
for(i=0; i<48; i++)
{
SetPage(i);
for(j=0; j<0x4000; j++)
{screen[j*4] = B; screen[j*4+1] = G; screen[j*4+2] = R;}
}
}
// Главный модуль
void main()
{
SetTrueColorMode(); // установить графический режим
FillScreen(255,0,0); // окрасить экран в синий цвет
getch();
SetTextMode(); // восстановить текстовый режим
}[/CODE]
В программе используются следующие функции: SetTrueColorMode – установка графического режима, SetTextMode – восстановление текстового режима, SetPage – установка заданного окна видеопамяти, FillScreen – заливка экрана заданным цветом.
Параметры обозначены следующим образом:
• Page – номер окна видеопамяти;
• B – яркость по синей цветовой компоненте;
• G – яркость по зеленой компоненте;
• R – яркость по красной компоненте.
Требуется выполнить следующую последовательность действий:
1) Ввести, откомпилировать и запустить программу.
2) Добавить в программу функцию, рисующую горизонтальные отрезки заданного цвета с заданной координатой Y от левого до правого края экрана, а также функцию, рисующую вертикальные отрезки заданного цвета с заданной координатой X от верхнего края экрана до нижнего. С помощью добавленных функций разлиновать экран линиями белого цвета, чтобы получить клетки 3232.
3) Добавить описатель структуры заголовка файла BMP. В главном модуле отрыть для чтения двоичный файл rgb1.bmp. Прочитать из файла заголовок.
4) Добавить в программу массив из 4096 элементов типа unsigned char для промежуточного хранения строки изображения. Используя информацию о ширине и высоте изображения, построчно читать и выводить на экран данные из файла.
5) Добавить указатель для работы с видеопамятью как c массивом типа unsigned long, чтобы можно было передавать точку изображения за одну операцию.
6) Добавить функцию, переворачивающую изображение слева направо. Перевернуть изображение, ожидать нажатия любой клавиши, вернуть изображение в исходное состояние, ожидать нажатия клавиши.
7) Добавить функцию, переворачивающую изображение сверху вниз. Перевернуть изображение, ожидать нажатия клавиши, вернуть в исходное состояние, ожидать нажатия клавиши.
8) Добавить функцию, преобразующую изображение в черно-белое (с 256 градациями яркости).
9) Изменить программу таким образом, чтобы имя файла передавалось из командной строки через параметры функции main().
Заранее благодарен.
Ссылка скрыта от гостей
Упражнение №1
Ниже приведен пример программы, которая выполняет очистку экрана и вывод текстовых символов путем непосредственного обращения к видеопамяти:
<!--shcode--><pre><code class='c'>#include <conio.h>
#include <dos.h>
// Создание указателя на видеопамять
unsigned char far *screen = (unsigned char *) MK_FP(0xB800, 0);
// Очистка экрана
void ClearScreen()
{
int i;
for(i=0; i<80*25; i++)
{
screen[2*i] = ' '; // заполнить экран пробелами
screen[2*i+1] = 0x0F; // символы белые, фон черный
}
}
// Вывод символа
void OutChar(int x, int y, char CharCode, unsigned char Color)
{
screen[(80*y+x)*2] = CharCode;
screen[(80*y+x)*2+1] = Color;
}
// Главный модуль
void main()
{
ClearScreen();
OutChar(0,0,'A',0x1E);
OutChar(1,2,'B',0x2D);
getch();
}[/CODE]
Функция OutChar имеет следующие параметры:
x и y – координаты символа;
CharCode – код символа;
Color – цвет символа и фона.
Требуется выполнить следующую последовательность действий:
1) Ввести, откомпилировать и запустить программу.
2) Изменить программу таким образом, чтобы вместо очистки экрана выполнялась раскраска фона в виде шахматной доски с коричневыми и желтыми клетками (использовать по два знакоместа на каждую клетку, чтобы клетки были квадратными).
3) Вывести «бегущий ноль». При запуске в левом верхнем углу экрана выводится символ ‘0’. Далее при каждом нажатии на клавишу Enter символ должен перемещаться в следующую колонку, а при достижении конца строки – в следующую строку. Работа программы должна прекращаться по достижении конца третьей строки.
Упражнение №2
Ниже приведен пример программы, которая работает в графическом режиме с разрешением 320x200 точек. В программе используются следующие функции: SetMode – установка видеорежима; ClearScreen – очистка экрана; Pixel – вывод точки заданного цвета в указанную позицию экрана.
Функция установки видеорежима SetMode имеет один параметр – код режима. Для установки 256-цветного режима с разрешением 320x200 точек используется код 0x13, для возврата в текстовый режим – код 0x03.
Функция вывода точки Pixel имеет следующие параметры:
x и y – координаты точки;
Color – цвет точки.
<!--shcode--><pre><code class='c'>#include <conio.h>
#include <dos.h>
// Создание указателя на видеопамять
unsigned char far *screen = (unsigned char *) MK_FP(0xA000, 0);
// Установка видеорежима
void SetMode(int Mode)
{
union REGS regs;
regs.h.ah = 0;
regs.h.al = Mode;
int86(0x10, ®s, ®s);
}
// Очистка экрана
void ClearScreen()
{
unsigned i;
for(i=0; i<64000l; i++) screen = 0;
}
// Вывод точки заданного цвета в заданную позицию экрана
void Pixel(unsigned x, unsigned y, unsigned char Color)
{
screen[320*y+x] = Color;
}
// Главный модуль
void main()
{
unsigned x, y;
SetMode(0x13); // установить графический режим с разрешением 320x200
ClearScreen(); // очистить экран
// Отобразить всю палитру цветов в виде вертикальных линий
for(y=0; y<100; y++) for(x=0; x<256; x++) Pixel(x,y,x);
getch(); // ожидать нажатия любой клавиши
SetMode(3); // восстановить текстовый режим
}[/CODE]
Требуется выполнить следующую последовательность действий:
1) Ввести, откомпилировать и запустить программу.
2) Добавить в программу функцию, рисующую горизонтальные отрезки заданного цвета с заданной координатой Y от левого до правого края экрана.
3) Добавить в программу функцию, рисующую вертикальные отрезки заданного цвета с заданной координатой X от верхнего края экрана до нижнего..
4) С помощью добавленных функций разлиновать экран линиями светло-серого цвета таким образом, чтобы получились клетки 8x8 точек
5) Создать маску изображения в виде массива 8x8 типа unsigned char.
6) Организовать цикл вывода изображения таким образом, чтобы оно перемещалось от левого края экрана до правого с шагом в одну точку при каждом нажатии клавиши Enter.
7) Добавить массив 8x8 типа unsigned char для хранения фона и усовершенствовать цикл вывода изображения, чтобы фон восстанавливался после перемещения изображения.
8) Добавить в программу функцию синхронизации вывода изображения с частотой кадров WaitSync.Изменить цикл вывода изображения так, чтобы изображение перемещалось не по нажатию Enter, а по началу обратного хода луча.
9) Изменить программу таким образом, чтобы слева направо перемещался не один, а несколько одинаковых объектов – строем (цепью).
Упражнение №3.
Ниже приведен пример программы, которая работает в режиме TrueColor32 1024768.
<!--shcode--><pre><code class='c'>#include <stdio.h>
#include <conio.h>
#include <dos.h>
// Создание указателя на видеопамять
unsigned char far *screen = (unsigned char *) MK_FP(0xA000, 0);
// Установка режима TrueColor32 с разрешением 1024x768
void SetTrueColorMode(void)
{
union REGS regs;
regs.x.ax = 0x4F02;
regs.x.bx = 0x118;
int86(0x10, ®s, ®s);
}
// Восстановление текстового режима
void SetTextMode(void)
{
union REGS regs;
regs.h.ah = 0;
regs.h.al = 3;
int86(0x10, ®s, ®s);
}
// Переключение окон
void SetPage(unsigned Page)
{
union REGS regs;
regs.x.ax = 0x4F05;
regs.x.bx = 0;
regs.x.dx = Page;
int86(0x10, ®s, ®s);
}
// Заливка экрана заданным цветом
void FillScreen(unsigned char B, unsigned char G, unsigned char R)
{
unsigned i,j;
for(i=0; i<48; i++)
{
SetPage(i);
for(j=0; j<0x4000; j++)
{screen[j*4] = B; screen[j*4+1] = G; screen[j*4+2] = R;}
}
}
// Главный модуль
void main()
{
SetTrueColorMode(); // установить графический режим
FillScreen(255,0,0); // окрасить экран в синий цвет
getch();
SetTextMode(); // восстановить текстовый режим
}[/CODE]
В программе используются следующие функции: SetTrueColorMode – установка графического режима, SetTextMode – восстановление текстового режима, SetPage – установка заданного окна видеопамяти, FillScreen – заливка экрана заданным цветом.
Параметры обозначены следующим образом:
• Page – номер окна видеопамяти;
• B – яркость по синей цветовой компоненте;
• G – яркость по зеленой компоненте;
• R – яркость по красной компоненте.
Требуется выполнить следующую последовательность действий:
1) Ввести, откомпилировать и запустить программу.
2) Добавить в программу функцию, рисующую горизонтальные отрезки заданного цвета с заданной координатой Y от левого до правого края экрана, а также функцию, рисующую вертикальные отрезки заданного цвета с заданной координатой X от верхнего края экрана до нижнего. С помощью добавленных функций разлиновать экран линиями белого цвета, чтобы получить клетки 3232.
3) Добавить описатель структуры заголовка файла BMP. В главном модуле отрыть для чтения двоичный файл rgb1.bmp. Прочитать из файла заголовок.
4) Добавить в программу массив из 4096 элементов типа unsigned char для промежуточного хранения строки изображения. Используя информацию о ширине и высоте изображения, построчно читать и выводить на экран данные из файла.
5) Добавить указатель для работы с видеопамятью как c массивом типа unsigned long, чтобы можно было передавать точку изображения за одну операцию.
6) Добавить функцию, переворачивающую изображение слева направо. Перевернуть изображение, ожидать нажатия любой клавиши, вернуть изображение в исходное состояние, ожидать нажатия клавиши.
7) Добавить функцию, переворачивающую изображение сверху вниз. Перевернуть изображение, ожидать нажатия клавиши, вернуть в исходное состояние, ожидать нажатия клавиши.
8) Добавить функцию, преобразующую изображение в черно-белое (с 256 градациями яркости).
9) Изменить программу таким образом, чтобы имя файла передавалось из командной строки через параметры функции main().