Другие языки программирования и технологии
Разработать класс описывающий множество точек на плоскости, реализовать метод который возвращает наименьшее расстояние
Разработать класс описывающий множество точек на плоскости, реализовать метод который возвращает наименьшее расстояние между 2-мя точками этого множества.
Пример программы, в которой реализован класс TMyClass с двумя методами:
Init(n) - формирование множества n точек со случайными координатами и вывод их на экран для контроля;
MinDistance() - поиск наименьшего расстояния между двумя из n точек, хранящихся в поле-массиве Point.
<*+ MAIN *>
MODULE N69898565;
IMPORT io := InOut, Random, TimeConv, RealMath, SRealIO, STextIO;
CONST n = 15;
TYPE
TPoint = RECORD
x, y: REAL
END;
TMyClass = RECORD
Size:INTEGER;
Point:POINTER TO ARRAY OF TPoint
END;
VAR Class:POINTER TO TMyClass;
c:CHAR;
PROCEDURE sqr(x:REAL):REAL;
BEGIN
RETURN x * x;
END sqr;
PROCEDURE (VAR t:TMyClass) Init(N:INTEGER);
VAR i:INTEGER;
BEGIN
t.Size := N;
NEW(t.Point, t.Size);
FOR i := 0 TO t.Size - 1 DO
t.Point^[ i ].x := Random.Uniform() * 200 - 100;
t.Point^[ i ].y := Random.Uniform() * 200 - 100;
SRealIO.WriteFixed(t.Point^[ i ].x,4,10);
io.WriteString(",");
SRealIO.WriteFixed(t.Point^[ i ].y,4,10);
io.WriteLn()
END
END Init;
PROCEDURE (VAR t:TMyClass) MinDistance():REAL;
VAR i, j:INTEGER;
min, Distance:REAL;
BEGIN
FOR i := 0 TO t.Size - 1 DO
FOR j := 0 TO t.Size - 1 DO
IF i # j THEN
Distance:=sqr(t.Point^[ i].x-t.Point^[j].x)+sqr(t.Point^[ i].y-t.Point^[j].y);
IF (i + j = 1) & (i = 0) OR (Distance < min) THEN
min := Distance
END
END
END
END;
RETURN RealMath.sqrt(min)
END MinDistance;
BEGIN
Random.InitSeed(TimeConv.millisecs());
NEW(Class);
io.WriteString("Множество точек: ");
io.WriteLn;
Class^.Init(n);
io.WriteString("Наименьшее расстояние между двумя точками: ");
SRealIO.WriteFixed(Class^.MinDistance(), 4, 1);
STextIO.ReadChar(c);
END N69898565.
Init(n) - формирование множества n точек со случайными координатами и вывод их на экран для контроля;
MinDistance() - поиск наименьшего расстояния между двумя из n точек, хранящихся в поле-массиве Point.
<*+ MAIN *>
MODULE N69898565;
IMPORT io := InOut, Random, TimeConv, RealMath, SRealIO, STextIO;
CONST n = 15;
TYPE
TPoint = RECORD
x, y: REAL
END;
TMyClass = RECORD
Size:INTEGER;
Point:POINTER TO ARRAY OF TPoint
END;
VAR Class:POINTER TO TMyClass;
c:CHAR;
PROCEDURE sqr(x:REAL):REAL;
BEGIN
RETURN x * x;
END sqr;
PROCEDURE (VAR t:TMyClass) Init(N:INTEGER);
VAR i:INTEGER;
BEGIN
t.Size := N;
NEW(t.Point, t.Size);
FOR i := 0 TO t.Size - 1 DO
t.Point^[ i ].x := Random.Uniform() * 200 - 100;
t.Point^[ i ].y := Random.Uniform() * 200 - 100;
SRealIO.WriteFixed(t.Point^[ i ].x,4,10);
io.WriteString(",");
SRealIO.WriteFixed(t.Point^[ i ].y,4,10);
io.WriteLn()
END
END Init;
PROCEDURE (VAR t:TMyClass) MinDistance():REAL;
VAR i, j:INTEGER;
min, Distance:REAL;
BEGIN
FOR i := 0 TO t.Size - 1 DO
FOR j := 0 TO t.Size - 1 DO
IF i # j THEN
Distance:=sqr(t.Point^[ i].x-t.Point^[j].x)+sqr(t.Point^[ i].y-t.Point^[j].y);
IF (i + j = 1) & (i = 0) OR (Distance < min) THEN
min := Distance
END
END
END
END;
RETURN RealMath.sqrt(min)
END MinDistance;
BEGIN
Random.InitSeed(TimeConv.millisecs());
NEW(Class);
io.WriteString("Множество точек: ");
io.WriteLn;
Class^.Init(n);
io.WriteString("Наименьшее расстояние между двумя точками: ");
SRealIO.WriteFixed(Class^.MinDistance(), 4, 1);
STextIO.ReadChar(c);
END N69898565.
Вложенный цикл, проходишь по всевозможным парам элементов
double min:=10000,d;
for (i:=0;i < m.Length-1;i++) for(j:=i+1;j < m.length;j++)
if ((d=Math.sqrt((m[j].x-m[ i].x)*(m[j].x-m.x)+(m[j].y-m[ i].y)*(m[j].y-m[ i].y)) < d) min:=d;
Вообщем формула расстояния между точками: корень ((x2-x1)^2+(y2-y1)^2)
double min:=10000,d;
for (i:=0;i < m.Length-1;i++) for(j:=i+1;j < m.length;j++)
if ((d=Math.sqrt((m[j].x-m[ i].x)*(m[j].x-m.x)+(m[j].y-m[ i].y)*(m[j].y-m[ i].y)) < d) min:=d;
Вообщем формула расстояния между точками: корень ((x2-x1)^2+(y2-y1)^2)
Похожие вопросы
- Разработать Класс Person описывающий человека C++
- Помогите разработать класс матрицу =))
- C++ Вывести сообщение о том, какая из точек ближе к началу координат, и все соответствующие расстояния.
- В чем разница между функциями, которые возвращают значения и которые не возвращают? Не вникаю в смысл слова "возвращает"
- Задача по TURBO PASCAL! Помогите решить, пожалуйста! Дано 4 точки на плоскости. Нужно разставить их по часовой стрелке.
- Необходимо сделать проект по информатике за 10-11 класс. Не могу придумать тему и сам продукт который должен быть
- Напишите функцию, которая возвращает среднее арифметическое целых чисел i, j,k,m
- что значит в программировании функция, которая возвращает значение.
- Кратчайшее расстояние от точки до отрезка на плоскости (C++)
- С++ программирование функций. а плоскости заданы своими координатами n точек...