Координаты

Тема в разделе "C/C++/C#", создана пользователем The3rd, 2 ноя 2011.

  1. The3rd

    The3rd Гость

    Народ. Помогите я уже запутался в конец. 4 раза переписывал все равно бред. Удалил. :\
    Вот задачка:Даны координаты нескольких точек на плоскости. Найти точки наиболее и наименее удаленные друг от друга с использованием функции.

    Координаты X,Y. Массив загружаю из файла. Далее спрашиваю количество точек. А вот что внутри функции делать не понимаю. Конечно теорема Пифагора это все понятно, но как реализовать для N точек не знаю. Пишем в СИ. :|
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Код (C++):
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>

    #define N_POINTS    5
    #define PX( i )     points[( i << 1  )]
    #define PY( i )     points[((i << 1) + 1)]

    double dist( double x0, double y0, double x1, double y1 ) {
    double dx, dy;
    dx = x1 - x0;
    dy = y1 - y0;
    return sqrt( (dx * dx) + (dy * dy) );
    }

    void main ()
    {
    int     i, j, i_min_1, i_min_2, i_max_1, i_max_2;
    double  x, y, d, d_min, d_max, points[N_POINTS * 2];

    // ввод
    for ( i = 0; i < N_POINTS; i++ ) {
    x = (double)rand() / RAND_MAX * 100;
    y = (double)rand() / RAND_MAX * 100;
    printf( "point # %d: %lf, %lf\n", i, x, y );
    PX( i ) = x;
    PY( i ) = y;
    }

    // обработка
    d_min = 10000;
    d_max = -1000;
    for ( i = 0; i < N_POINTS - 1; i++ ) {
    for ( j = i + 1; j < N_POINTS; j++ ) {
    d = dist( PX( i ), PY( i ), PX( j ), PY( j ) );
    if ( d < d_min ) {
    d_min = d;
    i_min_1 = i;
    i_min_2 = j;
    }
    if ( d > d_max ) {
    d_max = d;
    i_max_1 = i;
    i_max_2 = j;
    }
    }
    }

    // вывод
    printf( "самые ближние друг к другу точки: %lf, %lf и %lf, %lf\n", PX( i_min_1 ), PY( i_min_1 ), PX( i_min_2 ), PY( i_min_2 ) );
    printf( "самые дальние друг от друга точки: %lf, %lf и %lf, %lf\n", PX( i_max_1 ), PY( i_max_1 ), PX( i_max_2 ), PY( i_max_2 ) );
    }
    Кстати Теорема Пифагора тут не при чем, расстояние между точками через вектора находится.
     
  3. The3rd

    The3rd Гость

    Да, извините это я попутал конечно. Из конца вычитал начало возводил в крадрат и извлекал корень. Без понятия почему написал теорема Пифагора. :( Спасибо!!!
    А как можно заменить это "PX( i ) points[( i << 1 )]" без define?
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    о_О
    Просто замени PX( i ) на points[i << 1]
     
  5. The3rd

    The3rd Гость

    :( сорри препод разогнался не на шутку в универе. никто ниче не понимает))
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Я тебе помог?! Помог! Бесплатно?! Бесплатно! Плюсуй репу!!
     
Загрузка...

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