Структура для геометрической фигуры...
Как пример реализации задачи по теме "Структуры". Включает также перечисление со "строковой" интерпретацией для него, указатель на функцию objFilter
, позволяющий в перспективе "подключать" к массиву записей разные фильтры ("тесты"). Пример чисто учебный и для консоли, Visual Studio 2015.
Описать структурный тип "геометрическая фигура" с полями данных "тип фигуры" (например, отрезок, прямоугольник, эллипс), "координаты" (точки на плоскости с координатами (x1,y1) и (x2,y2)).
Тест: найти все фигуры, располагающиеся в первой координатной четверти.
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using namespace std; enum objType { LINE, RECTANGLE, ELLIPSE }; struct point { double x, y; }; struct obj { objType type; string name; struct point p1, p2; }; void getObjectPoints(obj& o) { cout << "Type x and y coordinates for point 1" << (o.name.size() ? "" : " of " + o.name) << ":"; cin >> o.p1.x >> o.p1.y; cout << "Type x and y coordinates for point 2" << (o.name.size() ? "" : " of " + o.name) << ":"; cin >> o.p2.x >> o.p2.y; } void putObject(obj& o) { cout << endl << "Type=" << o.type << ", Name=" << o.name << ", Point1=(" << o.p1.x << "," << o.p1.y << "), Point2=(" << o.p2.x << "," << o.p2.y << ")"; } typedef bool(*objFilter)(obj*); //Указатель на функции типа bool имя (obj *) bool filter1(obj* o) { //Конкретная функция фильтрации записей return o->p1.x > 0 && o->p1.y > 0 && o->p2.x > 0 && o->p2.y > 0; } int main() { const int cnt = 2; obj figures[cnt] = { { LINE, "", { 0, 0 }, {2, 2} }, { (objType)-1, "", { 0, 0 }, {0, 0} } }; obj* rect = &figures[1]; rect->type = RECTANGLE; rect->name = "A"; getObjectPoints(*rect); objFilter filter; //указатель на функцию filter = &filter1; //поставил на нужный в данный момент фильтр for (int i = 0; i < cnt; i++) //выполняем тест из задания if (filter(&figures[i])) putObject(figures[i]); return 0; } /* Проблема - компилятор выводит 0,1,2, а не LINE, RECTANGLE, ELLIPSE Но ёё можно решить написанием отдельной функции */
16.11.2016, 21:19 [3540 просмотров]