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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2017, 14:31   #31
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от staccy Посмотреть сообщение
По рисункам очень даже связаны. Минимальные координаты двух вершин прямоугольников дадут одну новую - вот и пересечение.
Координаты по x связаны и координаты по y связаны, а x и y не связаны.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 31.05.2017, 14:54   #32
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Координаты по x связаны и координаты по y связаны, а x и y не связаны.
Да, просто я немного сложно описал алгоритм
staccy вне форума Ответить с цитированием
Старый 31.05.2017, 16:08   #33
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от staccy Посмотреть сообщение
Да, просто я немного сложно описал алгоритм
Хорошо. Просто ввели в заблуждение чуть-чуть меня
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 31.05.2017, 20:14   #34
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Вот что пока что получилось.
Не знаю как в функции работать с двумя прямоугольниками сразу, если структура на них всего одна.
Ругается на проверку принадлежности точки: error C2664: Point_in_rectangle: невозможно преобразовать параметр 1 из 'Rectangle [100]' в 'Rectangle'
Код:
#include <stdio.h> 
#include <math.h> 
#include <locale.h>

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

typedef struct
{
	int x;
	int y;
}Point;

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

/*функция е) поворот прямоугольника относительно центра на прямой угол*/
Rectangle Turning(Point A, Point B){
	int tmp,cmp;
	tmp = A.x;
	A.x = A.y;
	A.y = tmp;
	cmp=B.x;
	B.x=B.y;
	B.y=cmp;
}

void main()
{		
	setlocale(LC_ALL, "Russian");
	Rectangle q[100];
	int N = 0,p;	

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

	getchar();getchar();
}
staccy вне форума Ответить с цитированием
Старый 03.06.2017, 01:57   #35
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Немного исправил:
Код:
#include <stdio.h>
#include <math.h>
#include <locale.h>

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

typedef struct
{
    int x;
    int y;
}Point;

/*функция а)вычисление площади прямоугольника*/
float Area(Rectangle r)
{
    return (4 * r.x * r.y);
}
/*функция б)построение прямоугольника по паре точек,
задающих любую пару противолежащих вершин*/
Rectangle For_two_points(Point A, Point B)
{
    Rectangle P;
    P.x = fabs((B.x - A.x) / 2);
    P.y = fabs((B.y - 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("%d%d", &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 r)
{
    int tmp = r.x;
    r.x = r.y;
    r.y = tmp;
    return r;
}

void main()
{
    setlocale(LC_ALL, "Russian");
    int N = 0, p;
    printf("\nКоличество прямоугольников= ");
    scanf("%d", &N);
    Rectangle q[N];
    printf("\n");

    Point A, B;
    int i;  //счетчик
    for (i = 0; i < N; ++i)
    {
        printf("%d) Точки A, B: ", i + 1);
        scanf("%d%d%d%d", &A.x, &A.y, &B.x, &B.y);
        q[i] = For_two_points(A, B);
        p = Point_in_rectangle(q[i]);
    }

    printf("\nВы ввели:\n");
    printf("N\tx\ty\tПлощадь\n");
    for (i = 0; i < N; ++i)
        printf("%d\t%d\t%d\t%.1f\t%d\n", i + 1, q[i].x, q[i].y, Area(q[i]), p);

    getchar();
    getchar();
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 04.06.2017, 20:04   #36
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

При попытках тестирования функций появляются ошибки типа error C2660: Crossing: функция не принимает 1 аргументов
Для одной из функций уже решил такую проблему, но не понимаю как, т.к. вроде ничего не изменил
Код:
#include <stdio.h> 
#include <math.h> 
#include <locale.h>

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

typedef struct
{
	int x;
	int y;
}Point;

/*функция а)вычисление площади прямоугольника*/
float Area(Rectangle q)
{
	float S = 0;
	S = 4 * fabs((float(q.x))*(float(q.y)));
	return S;
}
/*функция б)построение прямоугольника по паре точек,
задающих любую пару противолежащих вершин*/
Rectangle For_two_points(Point A, Point B)
{
	Rectangle P;
	P.x = fabs((float(B.x) - float(A.x))/2);
	P.y = fabs((float(B.y) - 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("%d%d", &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){
	int tmp = q.x;
	q.x=q.y;
	q.y=tmp;
	return q;
}

void main()
{
    setlocale(LC_ALL, "Russian");
    int N = 0,p;
    printf("\nКоличество прямоугольников= ");
    scanf("%d", &N);
    Rectangle q[100];
	Rectangle c;
    printf("\n");

    Point A, B;
    int i;  //счетчик
    for (i = 0; i < N; ++i)
    {
        printf("%d) Точки A, B: ", i + 1);
        scanf("%d%d%d%d", &A.x, &A.y, &B.x, &B.y);
        q[i] = For_two_points(A, B);
        p = Point_in_rectangle(q[i]);
		c = Crossing(q[i]);
    }

    printf("\nВы ввели:\n");
    printf("N\tx\ty\tПлощадь\tТочка\tПересечение\n");
    for (i = 0; i < N; ++i)
        printf("%d\t%d\t%d\t%.1f\t%d\t%d\t%d\n", i + 1, q[i].x, q[i].y, Area(q[i]),p,c.x,c.y);

    getchar();getchar();
}
staccy вне форума Ответить с цитированием
Старый 04.06.2017, 21:01   #37
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Смотрим описание функции
Код:
Rectangle Crossing(Rectangle A, Rectangle B){
сколько параметров?
Смотрим вызов
Код:
c = Crossing(q[i]);
сколько аргументов?
p51x вне форума Ответить с цитированием
Старый 05.06.2017, 17:02   #38
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Может тогда так?
Код:
Point Crossing(Point A, Point B){
	Point C;
    C.x = (A.x < B.x) ? A.x : B.x;
    C.y = (A.y < B.y) ? A.y : B.y;
    return C;
.
.
.
for(i=0;i<N;i++){
		printf("Введите координаты вершин прямоугольников:\n");
		scanf("%d%d%d%d",&A.x,&A.y,&B.x,&B.y);	
	}
	c[i] = Crossing(A,B);
staccy вне форума Ответить с цитированием
Старый 05.06.2017, 17:32   #39
staccy
Пользователь
 
Регистрация: 14.03.2017
Сообщений: 36
По умолчанию

Вообще по сути в Rectangle A и Rectangle B содержатся не координаты вершин, а габариты прямоугольников, но так пересечение не построить, т.к. вершины габариты пересечения могут быть не равны габаритам исходных прямоугольников
staccy вне форума Ответить с цитированием
Старый 05.06.2017, 18:17   #40
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от staccy Посмотреть сообщение
Вообще по сути в Rectangle A и Rectangle B содержатся не координаты вершин, а габариты прямоугольников, но так пересечение не построить, т.к. вершины габариты пересечения могут быть не равны габаритам исходных прямоугольников
непонятно, что Вы творите, когда в условии задачи ясно сказано:
Цитата:
Сообщение от staccy Посмотреть сообщение
Описать тип struct Rectangle, задающий на плоскости замкнутый прямоугольник со сторонами, параллельными координатным осям и габаритами (x–, x+) и (y–, y+) по осям абсцисс и ординат соответственно.
соответственно, у Вас прямоугольник должен быть описан структурой из 4-х (четырёх) чисел: две абциссы и две ординаты.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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