Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2011, 21:00   #1
Fobo5
 
Регистрация: 02.02.2011
Сообщений: 9
По умолчанию [Си] Упражнения

Помогите пожалуйста срочно выполнить упражнения!
Заранее благодарен.

Оригинал задания.

Упражнение №1

Ниже приведен пример программы, которая выполняет очистку экрана и вывод текстовых символов путем непосредственного обращения к видеопамяти:

Цитата:
#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();
}
Функция OutChar имеет следующие параметры:
x и y – координаты символа;
CharCode – код символа;
Color – цвет символа и фона.

Требуется выполнить следующую последовательность действий:
1) Ввести, откомпилировать и запустить программу.
2) Изменить программу таким образом, чтобы вместо очистки экрана выполнялась раскраска фона в виде шахматной доски с коричневыми и желтыми клетками (использовать по два знакоместа на каждую клетку, чтобы клетки были квадратными).
3) Вывести «бегущий ноль». При запуске в левом верхнем углу экрана выводится символ ‘0’. Далее при каждом нажатии на клавишу Enter символ должен перемещаться в следующую колонку, а при достижении конца строки – в следующую строку. Работа программы должна прекращаться по достижении конца третьей строки.


Упражнение №2

Ниже приведен пример программы, которая работает в графическом режиме с разрешением 320x200 точек. В программе используются следующие функции: SetMode – установка видеорежима; ClearScreen – очистка экрана; Pixel – вывод точки заданного цвета в указанную позицию экрана.
Функция установки видеорежима SetMode имеет один параметр – код режима. Для установки 256-цветного режима с разрешением 320x200 точек используется код 0x13, для возврата в текстовый режим – код 0x03.
Функция вывода точки Pixel имеет следующие параметры:
x и y – координаты точки;
Color – цвет точки.

Цитата:
#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, &regs, &regs);
}

// Очистка экрана
void ClearScreen()
{
unsigned i;
for(i=0; i<64000l; i++) screen[i] = 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); // восстановить текстовый режим
}

Требуется выполнить следующую последовательность действий:
1) Ввести, откомпилировать и запустить программу.
2) Добавить в программу функцию, рисующую горизонтальные отрезки заданного цвета с заданной координатой Y от левого до правого края экрана.
3) Добавить в программу функцию, рисующую вертикальные отрезки заданного цвета с заданной координатой X от верхнего края экрана до нижнего..
4) С помощью добавленных функций разлиновать экран линиями светло-серого цвета таким образом, чтобы получились клетки 8x8 точек
5) Создать маску изображения в виде массива 8x8 типа unsigned char.
6) Организовать цикл вывода изображения таким образом, чтобы оно перемещалось от левого края экрана до правого с шагом в одну точку при каждом нажатии клавиши Enter.
7) Добавить массив 8x8 типа unsigned char для хранения фона и усовершенствовать цикл вывода изображения, чтобы фон восстанавливался после перемещения изображения.
8) Добавить в программу функцию синхронизации вывода изображения с частотой кадров WaitSync.Изменить цикл вывода изображения так, чтобы изображение перемещалось не по нажатию Enter, а по началу обратного хода луча.
9) Изменить программу таким образом, чтобы слева направо перемещался не один, а несколько одинаковых объектов – строем (цепью).
Fobo5 вне форума Ответить с цитированием
Старый 02.02.2011, 21:22   #2
St.Jimmy
Пользователь
 
Аватар для St.Jimmy
 
Регистрация: 28.12.2010
Сообщений: 14
По умолчанию

Я так понял это математическое програмирование?!?
St.Jimmy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти книгу Стивена Праты "Язык программирования C. Лекции и упражнения". Может есть у кого? Catharsis Общие вопросы C/C++ 0 10.06.2010 12:46
Пожалуйста, помогите мне решить упражнения annya77 Паскаль, Turbo Pascal, PascalABC.NET 0 04.04.2009 20:32
Упражнения делфи MAKEDON Свободное общение 1 26.08.2008 02:31