09.12.2015, 19:44 | #1 (permalink) |
Новичок
Регистрация: 06.12.2015
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Задано множество точек в трехмерном пространстве
Помогите пожалуйста! FreePascal или PascalABC.NET |
09.12.2015, 19:44 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Скорее всего проблема уже была решена ранее в других обсуждениях Рассчитать количество точек на плоскости C#. Координаты точек Списки точек и векторов Ноутбук не видит точек доступа к WiFi Вывод результата. Множество Тип, множество |
10.12.2015, 11:24 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Получите:
Код:
Const Mmax=12; {Maximal number of points} Type Coord=Record x,y,z:Integer; end; Ar=Array[1..Mmax] of Real; Var M,N,i,j:Byte; Pnts:Array[1..Mmax] of Coord; Dist:Array[1..Mmax] of Ar; R:Ar; Rmin:Real; Procedure Bubble(Q:Byte; var A:Ar); var g,h:byte; D:real; begin for g:=1 to Q-1 do for h:=1 to Q-g do if A[h]>A[h+1] then begin D:=A[h]; A[h]:=A[h+1]; A[h+1]:=D; end; end; Begin Randomize; M:=100; While M>Mmax do begin write('Global number of points = '); readln(M); if M>Mmax then writeln('Error: too many points!'); end; N:=M+1; While N>=M do begin write('Number of points in sphere = '); readln(N); if N>=M then writeln('Error: too many points!'); end; writeln; for i:=1 to M do begin Pnts[i].x:=-50+Random(101); Pnts[i].y:=-50+Random(101); Pnts[i].z:=-50+Random(101); writeln(i:3,' x = ',Pnts[i].x:3,' y = ',Pnts[i].y:3,' z = ',Pnts[i].z:3); end; writeln('Press "Enter" to continue'); readln; for i:=1 to M do for j:=1 to M do Dist[i][j]:=Sqrt(Sqr(Pnts[i].x-Pnts[j].x)+ Sqr(Pnts[i].y-Pnts[j].y)+ Sqr(Pnts[i].z-Pnts[j].z)); for i:=1 to M do begin for j:=1 to M do write(Dist[i][j]:6:1); writeln; end; writeln('Press "Enter" to continue'); readln; for i:=1 to M do Bubble(M,Dist[i]); for i:=1 to M do begin for j:=1 to M do write(Dist[i][j]:6:1); writeln; end; writeln('Press "Enter" to continue'); readln; for i:=1 to M do R[i]:=Dist[i][N]; Rmin:=200; for i:=1 to M do if R[i]<Rmin then Rmin:=R[i]; writeln('Result: Rmin = ',Rmin:0:3); Readln End. 1. Задается общее количество точек в пространстве (M). Их максимальное количество ограничено двенадцатью просто для удобства вывода на экран. 2. Задается количество точек внутри шаров (N). Естественно, должно выполняться условие N<M. 3. С помощью генератора случайных чисел задаются координаты x, y, z каждой из точек. Координаты выводятся на экран. 4. Создается двумерный массив расстояний (Dist) от каждой из точек до всех остальных, включая саму точку. Результат выводится на экран. 5. Линейные массивы-строки упорядочиваются по возрастанию методом пузырька. Таким образом, имеем матрицу, каждая строка которой соответствует точке, а по столбцам - расстояния от этой точки до других точек в порядке возрастания расстояний. Результат выводится на экран. 6. Легко видеть, что число N - это ни что иное, как N-й номер столбца. Считываем этот столбец в массив R. 7. Находим в массиве R минимальный элемент. Всё!!! |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|