Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Топ:
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Интересное:
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Средства для ингаляционного наркоза: Наркоз наступает в результате вдыхания (ингаляции) средств, которое осуществляют или с помощью маски...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Программа иллюстрирует применение разработанных выше структур и функций, моделирующих точки и прямоугольники на математической плоскости. Требуется отображать точки и прямоугольники на физической плоскости экрана, где система координат отличается от принимаемой, обычно, в математике, рис.36.
На экране при его работе в текстовом режиме начало системы координат находится в левом верхнем углу, ось xs направлена вправо, ось ys вниз, то есть координата ys отсчитывается от верхнего края экрана. Левый верхний угол экрана имеет координаты (1, 1). Высота экрана составляет обычно 25 строк, ширина – 80 столбцов. Кроме того, если на экране создано окно, то в нем действует своя локальная система координат, с началом в левом верхнем углу окна.
Будем считать, что первый квадрант математической плоскости совпадает с физической плоскостью экрана, то есть ось x совпадает с нижним краем экрана, ось y – с левым, единица длины на математической плоскости численно равна единице длины на экране. Отсюда следует связь математических координат x, y и экранных координат xs, ys:
xs = x, ys = 25 − y.
Данные соображения учитываются в функции
void show_rect(rect* pr, int color);
которая изображает на экране прямоугольник и переводит курсор в его центр. В программе использованы такие же обозначения, как на рис. 36.

Рис.36. Отображение математической плоскости на плоскость экрана
В текст программы следует вставить сделанные выше объявления структур point и rect и определения функций.
// Файл PointRct.cpp
struct point{ // Cтруктура точка
int x, y;
};
// make_point: создание точки
point make_point(int x, int y)
{
point tmp;
tmp.x = x; tmp.y =y;
return tmp;
}
struct rect{ // Структура прямоугольник
point pt1, pt2;
};
// make_rect: создание прямоугольника
rect make_rect(point p, point q)
{
rect tmp;
tmp.pt1 = p; tmp.pt2 = q;
return tmp;
}
#include <conio.h>
// cetner_rect: возвращает точку - центр прямоугольника
point center_rect(rect* pr)
{
point tmp =
make_point((pr->pt1.x + pr->pt2.x) / 2, (pr->pt1.y + pr->pt2.y) / 2);
return tmp;
}
#define max(a, b) (a)>(b)?(a):(b)
#define min(a, b) (a)<(b)?(a):(b)
// canon_rect: канонизация координат прямоугольника
rect canon_rect(rect r)
{
rect tmp;
tmp.pt1.x = min(r.pt1.x, r.pt2.x);
tmp.pt1.y = min(r.pt1.y, r.pt2.y);
tmp.pt2.x = max(r.pt1.x, r.pt2.x);
tmp.pt2.y = max(r.pt1.y, r.pt2.y);
return tmp;
}
// show_rect: изображает прямоугольник на экране и
// помещает курсор в его центр
const int HIGHT = 25; // Высота экрана в строках
void show_rect(rect* pr, int color)
{ // color - цвет прямоугольника
point LU = make_point(pr->pt1.x, HIGHT - pr->pt2.y);
// LU – Левый верхний угол прямоугольника на экране
point RD = make_point(pr->pt2.x, HIGHT - pr->pt1.y);
// RD – Правый нижний угол прямоугольника на экране
window(LU.x, LU.y, RD.x, RD.y); // Создание окна,
// соответствующего прямоугольнику
textbackground(color); // Выделение прямоугольника
clrscr(); // цветом
point M = center_rect(pr); // Центр прямоугольника в
// математической системе координат
int xM = M.x, yM = M.y; // Координаты центра в
// математической системе координат
int xsM = xM, ysM = HIGHT - yM; // Координаты центра
// прямоугольника на экране
int xwM = xsM - LU.x, ywM = ysM - LU.y; // xwM, ywM – координаты
// центра прямоугольника в окне
M = make_point(xwM, ywM); // Преобразование координат центра
// прямоугольника в оконные
gotoxy(M.x, M.y); // Перевод курсора в центр прямоугольника
}
# include <iostream.h>
void main()
{
point a, b; // Две точки
rect ab; // Прямоугольник
int x, y;
textbackground(BLACK);
clrscr(); // Очистка экрана
cout << "Введите координаты первой точки\n";
cin >> x >> y;
a = make_point(x, y); // Первая вершина прямоугольника
cout << "Введите координаты второй точки \n";
cin >> x >> y;
b = make_point(x, y); // Вторая вершина прямоугольника
ab = make_rect(a, b); // Создание прямоугольника
ab = canon_rect(ab); // Приведение к каноническому виду
show_rect(&ab, RED); // Изображение на экране
getch();
}
На рис. 37 приведено изображение экрана при работе с программой.

Рис.37. Прямоугольник на экране, созданный программой
Массивы структур
Структуры, как и любые другие переменные, можно объединять в массивы. Работу с массивами структур разберем на примере.
Напишем программу, которая читает входной поток и определяет число вхождений каждого ключевого слова языка Си в читаемый текст. Для хранения ключевых слов и счетчиков можно было бы создать два параллельных массива:
char *keyword[NKEYS];
int keycount[NKEYS];
Однако для более удобной работы лучше создать массив структур.
|
|
|
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!