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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2017, 19:30   #61
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от staccy Посмотреть сообщение
в) построение пересечения двух прямоугольников;
Тут задание нужно уточнять, чего хотят и что подразумевают под пересечением.
Подозреваю, что это просто прямоугольник c, у которого:
Код:
c.x = min(a.x, b.x);
c.y = min(a.y, b.y);
Цитата:
Сообщение от staccy Посмотреть сообщение
д) проверка включения одного прямоугольника в другой;
Код:
if (a.x <= b.x && a.y <= b.y)
  // значит прямоугольник a включен в прямоугольник b
Цитата:
Сообщение от staccy Посмотреть сообщение
е) поворот прямоугольника относительно центра на прямой угол.
просто у прямоугольника поменять местами x и y
Цитата:
Сообщение от staccy Посмотреть сообщение
1) площадь наименьшего из прямоугольников, содержащего в себе один и более прямоугольников из заданного набора;
Формулировка дурацкая. По ней получается, что нужно найти минимальный по площади прямоугольник.
Цитата:
Сообщение от staccy Посмотреть сообщение
2) все пары прямоугольников, совпадающих с точностью до поворота напрямой угол.[/B]
Тоже как-то тупо написано. Не то просто искать прямоугольники с одинаковыми x и y или же пробовать прямоугольники вращать и сравнивать x и y после поворота одного из прямоугольников.
pu4koff вне форума Ответить с цитированием
Старый 06.06.2017, 21:13   #62
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
прямоугольники должны задаваться всё таки 2-мя точками и 4-мя независимыми координатами (соответственно).
В этом случае не соблюдается условие габаритов, где х- равен по модулю х+ и то же с у- и у+.
Цитата:
Сообщение от ura_111 Посмотреть сообщение
никакого пересечения быть не может, потому что все прямоугольники вписаны в каждый
Постройте один прямоугольник с вершинами (1,4) и (-1,-4), а другой с вершинами (2,3) и (-2,-3). Пересечение есть, однако прямоугольники не включены в друг друга, да и условия соблюдены. Даже и в вашем случае пересечением может являться внутренний прямоугольник.
staccy вне форума Ответить с цитированием
Старый 06.06.2017, 21:16   #63
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Формулировка дурацкая. По ней получается, что нужно найти минимальный по площади прямоугольник.
Тоже как-то тупо написано. Не то просто искать прямоугольники с одинаковыми x и y или же пробовать прямоугольники вращать и сравнивать x и y после поворота одного из прямоугольников.
Согласен. В задаче можно было бы обойтись без некоторых функций.
staccy вне форума Ответить с цитированием
Старый 06.06.2017, 21:44   #64
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

1) "В этом случае не соблюдается условие габаритов, где х- равен по модулю х+ и то же с у- и у+."

Почему это?
Я говорил о шаблоне для заполнения... а если пользователь введёт симметричные числа, то пусть вводит - это просто частный случай.

2) "В задаче можно было бы обойтись без некоторых функций."

Без каких?
(сейчас вычеркним)
.

Последний раз редактировалось ura_111; 06.06.2017 в 21:54.
ura_111 вне форума Ответить с цитированием
Старый 06.06.2017, 22:00   #65
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
если пользователь введёт симметричные числа, то пусть вводит - это просто частный случай.
Не может х во 2 четверти быть больше, чем х в 1 четверти, они должны быть равны.
Цитата:
Сообщение от ura_111 Посмотреть сообщение
Без каких?
Проверка принадлежности точки и поворот прямоугольника бесполезные функции, на мой взгляд.
staccy вне форума Ответить с цитированием
Старый 07.06.2017, 21:59   #66
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Все же все еще есть проблема. Что делать с Rectangle A,B? Туда ведь как-то надо помещать габариты двух прямоугольников из массива q[i], но сначала нужно объявить Rectangle A,B, однако переменные совпадают с Point A,B и появляется ошибка. Что с этим делать? И как делать сравнение для нескольких прямоугольников, если в функции используется всего 2?
Код:
#include <stdio.h> 
#include <math.h> 
#include <stdlib.h>
#include <locale.h>

typedef struct//тип, описывающий прямоугольник(габариты)
{
	float x;  
	float y; 
} Rectangle;
Rectangle A;
Rectangle B;

typedef struct//тип для точек
{
	float x;
	float y;
}Point;

/*функция а)вычисление площади прямоугольника*/
float Area(Rectangle q)//массив габаритов прямоугольника(x и y)
{
	float S = 0;
	S = 4 * fabs((float(q.x))*(float(q.y)));
	return S;
}
/*функция б)построение прямоугольника по паре точек,
задающих любую пару противолежащих вершин*/
Rectangle For_two_points(Point A, Point B)//структуры двух точек с координатами х и y
{
	Rectangle P;//структура габаритов х и у
	P.x = (((fabs(float(B.x)))+(fabs(float(A.x))))/2);
	P.y = (((fabs(float(B.y)))+(fabs(float(A.y))))/2);
	return P;
}
/*функция в)построение пересечения двух прямоугольников*/
Rectangle Crossing(Rectangle A, Rectangle B){
	Rectangle C;
    C.x = (A.x <= B.x) ? A.x : B.x;
    C.y = (A.y <= B.y) ? A.y : B.y;
    return C;
}
/*функция г) проверка принадлежности точки прямоугольнику*/
int Point_in_rectangle(Rectangle q){//массив габаритов прямоугольника (х и у)
    Point C;//структура точки с координатами х и у
    printf("Введите точку:\n");
    scanf("%f%f", &C.x, &C.y);
    return ((C.y <= q.y) && (C.y >= -q.y) && (C.x <= q.x) && (C.x >= -q.x));
}
/*функция д) проверка включения одного прямоугольника в другой*/
int Inside(Rectangle A, Rectangle B)
{
	
    return ((A.x <= B.x && A.y <= B.y) || (A.x >= B.x && A.y >= B.y));
}
/*функция е) поворот прямоугольника относительно центра на прямой угол*/
Rectangle Turning(Rectangle q){//массив габаритов прямоугольника (х и у)
	float tmp = q.x;
	q.x=q.y;
	q.y=tmp;
	return q;
}

void main()
{
    setlocale(LC_ALL, "Russian");
    int N = 0;
	float a;
	Rectangle *q;//массив габаритов прямоугольников
    printf("\nКоличество прямоугольников= ");
    scanf("%d", &N);
	q=(Rectangle *)malloc(N*sizeof(Rectangle));
	if(q==NULL){
		printf("Ошибка выделения памяти\n");
		return;
	}
    printf("\n");

    Point A, B;
    int i;  //счетчик
    for (i = 0; i < N; i++)
    {
		do{
			printf("%d) Введите точки A, B: ", i + 1);
			scanf("%f%f%f%f", &A.x, &A.y, &B.x, &B.y);//вводим две точки прямоугольника
		}while((fabs(A.x)!=fabs(B.x))&&(fabs(A.y)!=fabs(B.y)));//удовлетворяют ли вершины условиям задачи
        q[i] = For_two_points(A, B);//построили N прямоугольников по двум точкам и поместили габариты в массив q
		a=Area(q[i]);
    }
	
    printf("\nВы ввели:\n");
    printf("N\tx\ty\tПлощадь\tВключение\n");
    for (i = 0; i < N; ++i)
        printf("%d\t%.1f\t%.1f\t%.1f\n", i + 1, q[i].x, q[i].y, a);

	free(q);
    getchar();getchar();
}
staccy вне форума Ответить с цитированием
Старый 07.06.2017, 22:18   #67
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Была идея оставить всего одну структуру Rectangle, но в этом случае почему-то печатается наибольшая площадь из нескольких прямоугольников
staccy вне форума Ответить с цитированием
Старый 07.06.2017, 23:58   #68
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

1) Имена формальных и фактических параметров не должны совпадать.
2) В текущем коде вы считаете площадь только для последнего прямоугольника.
3) Сравнение делать в цикле, например:
Код:
for (int i = 0; i < N - 1; ++i)
    for (int j = i + 1; j < N; ++j)
        func(q[i], q[j]);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.06.2017, 08:33   #69
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
2) В текущем коде вы считаете площадь только для последнего прямоугольника.
Но ведь там есть цикл
Код:
for(i=0;i<N;i++)

Последний раз редактировалось staccy; 08.06.2017 в 08:38.
staccy вне форума Ответить с цитированием
Старый 08.06.2017, 11:54   #70
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цикл есть, но переменная "a" имеет одно и то же значение на всех итерациях. Нужно снести вычисление площади во второй цикл (это не будет решением 1 пункта, просто вывод площадей всех прямоугольников).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать тип данных в виде структуры. pocheto Помощь студентам 3 29.12.2016 21:49
Реализовать struct Группа(group), в которой содержатся struct Студент(Student) TokaChan Помощь студентам 2 07.07.2016 07:22
описать тип 'шахматная доска' vadimc Помощь студентам 0 15.12.2012 10:54
Описать тип с данными о сотрудниках Масим Помощь студентам 13 24.03.2010 14:09