Расстояние между точками на плоскости определяется по теореме Пифагора. Для наших задач расстояние d вычислим извлекая корень квадратный из суммы квадратов разностей соответствующих координат по осям. d:=sqrt(sqr(x2-x1)+sqr(y2-y1)); где координаты первой точки (x1,y1), а второй (x2,y2).
Рассмотрим задачи и их решения.
Задача 1. Турист должен пройти по маршруту от первой точки (старт) до десятой точки (финиш). Известны координаты всех десяти точек в порядке посещения. Определите длину пути, пройденную туристом.
Решение задачи можно выполнить без использования массива, т.к. нет необходимости запоминать все координаты. Первоначально путь (d) равен нулю. Вводим координаты первой точки (x,y) и организуем цикл повтора от 1 до 9 (для остальных девяти точек). В цикле повторяем суммировыние пути и переприсваивание координат.
Возможен алгоритм решения: 1. Первоначально пройденный путь равен 0. 2. Вводим координаты первой (начальной) точки, которая будет текущей. 3. Организовываем цикл от 1 до 9. (точек 10, а расстояний 9). На каждом шаге выполняем: - вводим координаты следующей точки; - прибавляем к пройденному пути расстояние от текущей до введенной; - делаем координаты введенной точки текущими. 4. Выводим расстояние с точностью три знака после запятой. Var x,y,d,x1,y1 : real; i : integer; Begin d:=0; read(x,y); for i:=1 to 9 do begin read(x1,y1); d:=d+sqrt(sqr(x1-x)+sqr(y1-y)); x:=x1; y:=y1; end; writeln(d:10:3); End.
Тест:
2 3 4 3 3 3 4 6 7 8 6 7 5 6 7 7 5 5 6 6
Вывод 19.075
Задача 2. На плоскости даны не более ста точек. Найдите номера самых близких друг к другу точек и расстояние между ними.
Возможен алгоритм решения: 1. Вводим количество точек. 2. Вводим координаты точек. 3. Пускай минимальное расстояние между первой и второй точками. Запоминаем их номера: 1 и 2. 4. Организовываем цикл по i от первой до предпоследней. На каждом шаге этого цикла i-тую точку считаем текущей. 5. Организовываем цикл по j от точки после текущей до последней. На каждом шаге по j выполняем: - определяем расстояние от текущей (по i) до точки по j; - проверяем: если расстояние меньше определенного минимального, то делаем его минимальным и запоминаем номера точек. 6. Выводим номера точек и минимальное раccтояние с точностью три знака после запятой.
Var x,y: array[1..100] of real; d, min : real; i,j,n1,n2,n : integer; Begin read(n); for i:=1 to n do read(x[i],y[i]); min:=sqrt(sqr(x[2]-x[1])+sqr(y[2]-y[1])); n1:=1; n2:=2; for i:=1 to n-1 do for j:=i+1 to n do begin d:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j])); if min>d then begin min:=d; n1:=i; n2:=j; end; end; writeln(n1,' ',n2); writeln(min:8:3); End.
Тест:
Ввод Вывод |