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

Тема в разделе "C/C++/C#", создана пользователем dimon131, 22 дек 2010.

  1. dimon131

    dimon131 Member

    Регистрация:
    8 дек 2010
    Сообщения:
    13
    Симпатии:
    0
    Даны числа (x,y)...(xn,yn). Узнать, если среди них вершины квадрата. Если да, вывести их.



    P.S. Не могу понять как написать алгоритм, но идеи как решить есть.
     
  2. dimon131

    dimon131 Member

    Регистрация:
    8 дек 2010
    Сообщения:
    13
    Симпатии:
    0
    Код (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;
    }
     
  3. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Алгоритм у тебя в корне не верный. Для начала тебе нужен массив структур типа point, которая состоит из двух координат (но можно и по-другому). Если меня никто не опередит, или ты не додумаешься сам о чем я говорю (в чем я конечно сомневаюсь), то я тебе готов помочь:rolleyes:
     
  4. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    Как я понимаю, в квадрате четыре вершины... так что нужно взять вершина A и искать вершину B, которая лежит на той же линии, параллельной одной из осей координат (допустим, ось x), потом для вершины B по оси Y, после чего для вершины C по оси X и проверяем находятся ли вершины D и A на одной линии, параллельной оси Y. Алгоритм совершенно неоптимален и могут быть недочеты.
     
  5. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Acorn а зачем к осям привязываться?
    что, если квадрат повернуть на 45°, он сразу перестает быть квадратом?
    dimon131 Проверки одинаковой длины сторон недостаточно, ибо не каждый ромб будет квадратом.
     
  6. ierofant

    ierofant Гость

    Ну если стороны параллельны осям, то достаточно. Вообще обычно в задачах у студентов принимают такое условие, чтобы сильно не усложнять задание.
     
  7. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Лен) Я думаю там это не предусмотрено) Алгоритм наипростейший. 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 ) ) {
    // вывод координат точки
    }
    }
    }
    Но это только по двум точкам. Для четырех будет посложнее.
     
  8. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    OKEN
    не подумал про вращение, конец рабочего дня всё-таки :(
    ..а как насчет того, что у квадрата диагонали равны? всё, решение придумано 100%, реализовывайте сами ;)
     
Загрузка...
Похожие Темы - вершины квадрата
  1. pastorixx
    Ответов:
    2
    Просмотров:
    2.194

Поделиться этой страницей