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

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Координаты

  • Автор темы The3rd
  • Дата начала
T

The3rd

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

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

lazybiz

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 ) );
}

Кстати Теорема Пифагора тут не при чем, расстояние между точками через вектора находится.
 
T

The3rd

Кстати Теорема Пифагора тут не при чем, расстояние между точками через вектора находится.

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

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