Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
1

Геометрическая программа

09.06.2011, 15:02. Показов 2272. Ответов 29
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
С ООП не знаком, помогите решить.
На плоскости задано множество прямоугольников. Определить, имеется ли прямоугольник, содержащий внутри себя все оставшиеся прямоугольники.
Понятно что это можно сделать и без принципов ООП, но нужно бы был хотя бы один класс наследник.
Во вложении что то примерно такое.
Миниатюры
Геометрическая программа  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2011, 15:02
Ответы с готовыми решениями:

геометрическая программа (С++)
Добрый день ув. форумчане от студентов первого курса. Недавно преподаватель дал задание по...

Программа на Си. Геометрическая
Подсчитать количество равносторонних треугольников с различными длинами оснований и вершинами в...

Геометрическая фигура
Как , если дано уравнение двумя переменными, изобразить фигуру? Напишите код плиз, для уравнения...

Геометрическая прогрессия
Задача: Дано N десятоков целых чисел. Определить, сколько из них могут составлять геометрическую...

29
Бродяга
314 / 268 / 56
Регистрация: 27.08.2010
Сообщений: 553
15.06.2011, 13:22 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
Имею введу где сравнивать, не в FormPaint?
Да не, в формпейнт не надо. Забабахай, например, кнопку и после ввода координат прямоугольников производи расчёты по нажатию на неё.

Опять же, придумай, как будешь вводить координаты. Считывать их с клавиатуры или может быть замутить что-то типа рисования мышью)) Билдер всё-таки, думаю не так это будет сложно.
0
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
15.06.2011, 14:22  [ТС] 22
dihlofos, ох, с горем пополам.. сделал программу которая анализирует два прямоугольника - их координаты, если координаты одного больше другого то выводится форма с сообщением.
но прямоугольников то у меня больше, как мне правильно сравнить их? такое условие уже не подходит.
выложу файл проекта, вроде все норм для двух фигур.
А так же код, своего условия для двух прямоугольников:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
using namespace std;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormPaint(TObject *Sender)
{
        int x1E = 10;
        int y1E = 10;
        int x2E = 400;
        int y2E = 400;
        Form1->Canvas->Rectangle(x1E,y1E,x2E,y2E);
 
        int x1C = 35;
        int y1C = 35;
        int x2C = 55;
        int y2C = 55;
        Form1->Canvas->Rectangle(x1C,y1C,x2C,y2C);
 
        int x1D = 75;
        int y1D = 75;
        int x2D = 50;
        int y2D = 50;
        Form1->Canvas->Rectangle(x1D,y1D,x2D,y2D);
 
        int x1 = 80;
        int y1 = 80;
        int x2 = 120;
        int y2 = 120;
        Form1->Canvas->Rectangle(x1,y1,x2,y2);
}
 
//---------------------------------------------------------------------------
 
 
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
           bool a;
           int x1; int a1; int x2; int a2; int y1; int b1; int y2; int b2;
           for(int i = 0; i <= 400; i++)
          {
         if(x1 < a1 && x2 < a2 && y1 < b1 && y2 < b2)
             a = 1;
          }
         if (a == 1) Form3->Show(); else Form2->Show();
 
}
//---------------------------------------------------------------------------
Вложения
Тип файла: rar 10.rar (361.6 Кб, 7 просмотров)
0
Бродяга
314 / 268 / 56
Регистрация: 27.08.2010
Сообщений: 553
15.06.2011, 16:17 23
Чтобы много прямоугольников сравнивать, нужно создать класс или структуру, для хранения координат. Потом создать массив объектов этого класса, и сравнивать координаты прямоугольников внутри цикла.

Я вот тут набыдлокодил малость, можешь глянуть. Возможно лучше будет обратиться в раздел по билдеру, чтоб красивше получилось
Вложения
Тип файла: rar Builder.rar (4.4 Кб, 9 просмотров)
1
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
15.06.2011, 23:21  [ТС] 24
Цитата Сообщение от dihlofos Посмотреть сообщение
Чтобы много прямоугольников сравнивать, нужно создать класс или структуру, для хранения координат. Потом создать массив объектов этого класса, и сравнивать координаты прямоугольников внутри цикла.
вот с этим проблема... с этим не разобрался...

Добавлено через 6 часов 48 минут
ребят подскажите как сделать для всех фигур, хотя бы для 4-5 прямоугольников..
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.06.2011, 23:49 25
Цитата Сообщение от IIIa66uMEM6eP Посмотреть сообщение
вот с этим проблема... с этим не разобрался...
что ж тут непонятного, создаете класс/структуру в котой храните координаты
создаете массив объектов созданой структуры/класса и тупенько проверяете координаты
0
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
15.06.2011, 23:57  [ТС] 26
Maxwe11, вы не поняли, я не знаю как это на этих формах делать...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
16.06.2011, 01:43 27
Цитата Сообщение от dihlofos Посмотреть сообщение
Если сравнивать в цикле поочерёдно координаты всех прямоугольников, можно найти тот, который включает в себя все остальные.
Можно найти крайнюю левую, правую, верхнюю и нижнюю координаты. Если они все принадлежат одному прямоугольнику, и только ему - значит все остальные внутри него.
0
Бродяга
314 / 268 / 56
Регистрация: 27.08.2010
Сообщений: 553
16.06.2011, 06:05 28
Цитата Сообщение от easybudda Посмотреть сообщение
Можно найти крайнюю левую, правую, верхнюю и нижнюю координаты. Если они все принадлежат одному прямоугольнику, и только ему - значит все остальные внутри него.
Согласен, так будет конечно, лучше. Вот только с кодом у меня почему-то напряг вышел - получился вот такой слабочитабельный кусок:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
   int maxx; // крайняя левая координата x
   int minx; // крайняя правая координата x
   int maxy; // крайняя нижняя координата y
   int miny; // крайняя верхняя координата y
   int i_maxx=0, i_minx=0, i_maxy=0, i_miny=0; // индексы прям-ков, которым они принадлежат
 
   maxx = minx = vec[0]->x1;
   maxy = miny = vec[0]->y1;
 
   for(int i = 0; i < vec.size(); ++i)
   {
        if(vec[i]->x1 > maxx) {maxx = vec[i]->x1; i_maxx = i;}
        else if(vec[i]->x1 < minx) {minx = vec[i]->x1; i_minx = i;}
 
        if(vec[i]->x2 > maxx) {maxx = vec[i]->x2; i_maxx = i;}
        else if(vec[i]->x2 < minx) {minx = vec[i]->x2; i_minx = i;}
 
        if(vec[i]->y1 > maxy) {maxy = vec[i]->y1; i_maxy = i;}
        else if(vec[i]->y1 < miny) {miny = vec[i]->y1; i_miny = i;}
 
        if(vec[i]->y2 > maxy) {maxy = vec[i]->y2; i_maxy = i;}
        else if(vec[i]->y2 < miny) {miny = vec[i]->y2; i_miny = i;}
   }
   // если все индексы совпали, то точки принадлежат одному прям-ку
   if(i_maxx == i_minx && i_maxx == i_maxy && i_maxx == i_miny)
        return i_maxx;
 
   return -1;
Может изначальная проблема в том, как я храню координаты (т.е. координаты двух противолежащих вершин - x1, y1 и x2, y2)? Может стоит хранить все 4 точки? Или создать структуру типа точка(x,y)?
1
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
16.06.2011, 09:10  [ТС] 29
dihlofos, в какой кусок мне то это вставлять? o-0.. и я так понял что это надо сделать функцией, и из какой то формы писать координаты и передавать в эту функцию.. мне немного проще надо - предположим мы знаем уже все координаты прямоугольников какие у них есть, мы их так сказать уже нарисовали - и теперь только осталось определить, есть ли тот в котором лежат все остальные
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
16.06.2011, 11:18 30
Цитата Сообщение от dihlofos Посмотреть сообщение
Может изначальная проблема в том, как я храню координаты (т.е. координаты двух противолежащих вершин - x1, y1 и x2, y2)? Может стоит хранить все 4 точки? Или создать структуру типа точка(x,y)?
Двух точек вполне достаточно. Если x1y1 - левый верхний угол, а x2y2 - правый нижний, то левый нижний это x1y2. А структура, а то и класс point действительно был бы кстати...
0
16.06.2011, 11:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2011, 11:18
Помогаю со студенческими работами здесь

Геометрическая фигура
Постановка задачи. Разработать программу, которая выводит на экран геометрическую фигуру, заполняя...

Геометрическая прогрессия
Геометрическая прогрессия У вас есть действительное число и натуральное число n. Вычислить 1 +a +...

геометрическая прогрессия
Составить программу, которая считает члены геометрической прогрессии (N), начальный элемент 2 а...

Геометрическая прогрессия
Помогите написать программу, которая вычисляет сумму элементов геометрической прогрессии, используя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru