• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

вершины квадрата

  • Автор темы Автор темы dimon131
  • Дата начала Дата начала
D

dimon131

Даны числа (x,y)...(xn,yn). Узнать, если среди них вершины квадрата. Если да, вывести их.



P.S. Не могу понять как написать алгоритм, но идеи как решить есть.
 
C++:
#include<conio.h>
#include<stdio.h>
#define N 2
int main()
{
int x,y;

printf("Введите x и y\n");
for(i=0; i<N; i++)
scanf("%d%d",&x,&y); //Вводим вершины
for(i=0; i<N; i++)
{
if(fabs(i,i-1)==fabs(i-1,i-2))		/*Отнимаем между собой две координаты и сравниваем
их модули. Если они равны, выводим вершины квадрата*/
printf("Вершины квадрата есть");
printf("%d%d",x,y);
else
printf("Вершин нет");
}
getch();
return 0;
}
 
Алгоритм у тебя в корне не верный. Для начала тебе нужен массив структур типа point, которая состоит из двух координат (но можно и по-другому). Если меня никто не опередит, или ты не додумаешься сам о чем я говорю (в чем я конечно сомневаюсь), то я тебе готов помочь:rolleyes:
 
Как я понимаю, в квадрате четыре вершины... так что нужно взять вершина A и искать вершину B, которая лежит на той же линии, параллельной одной из осей координат (допустим, ось x), потом для вершины B по оси Y, после чего для вершины C по оси X и проверяем находятся ли вершины D и A на одной линии, параллельной оси Y. Алгоритм совершенно неоптимален и могут быть недочеты.
 
Acorn а зачем к осям привязываться?
что, если квадрат повернуть на 45°, он сразу перестает быть квадратом?
dimon131 Проверки одинаковой длины сторон недостаточно, ибо не каждый ромб будет квадратом.
 
Проверки одинаковой длины сторон недостаточно, ибо не каждый ромб будет квадратом.
Ну если стороны параллельны осям, то достаточно. Вообще обычно в задачах у студентов принимают такое условие, чтобы сильно не усложнять задание.
 
Acorn а зачем к осям привязываться?
что, если квадрат повернуть на 45°, он сразу перестает быть квадратом?
Лен) Я думаю там это не предусмотрено) Алгоритм наипростейший. Acorn, кстати, двигался в правильном направлении. Нужно сравнивать по осям, горизонтальным и вертикальным.
К примеру:
C++:
point  a, b;
for ( i = 0; i < n_points; i++ ) {
a = pts[i];
for ( j = 0; j < n_points; j++ ) {
b = pts[j];
if ( abs( a.x - b.x ) == abs( a.y - b.y ) ) {
// вывод координат точки
}
}
}
Но это только по двум точкам. Для четырех будет посложнее.
 
OKEN
не подумал про вращение, конец рабочего дня всё-таки :(
..а как насчет того, что у квадрата диагонали равны? всё, решение придумано 100%, реализовывайте сами ;)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!