|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.11.2009, 19:50 | #1 |
Регистрация: 05.11.2009
Сообщений: 9
|
определить радиус и центр окружности, на кот. лежит наиб.число точек заданного на плоскости мн-ва точек)
помогите пожалуйста заменить функции и процедуры на языке паскаль( просто мы ещё не проходили их)
program Covers; type (*Тип, задающий точку.*) TDot = record X : Extended; Y : Extended; end; (*Вычисляет расстояние между двумя точками.*) function GetDistance(aDot1, aDot2 : TDot) : Extended; begin GetDistance := Sqrt(Sqr(aDot1.X - aDot2.X) + Sqr(aDot1.Y - aDot2.Y)); end; (*Возвращает точку, которая делит отрезок пополам.*) procedure GetMidDot(aDot1, aDot2 : TDot; var aMidDot : TDot); var (*Минимумы по координатам.*) XMin, YMin : Extended; begin if aDot1.X < aDot2.X then begin XMin := aDot1.X; end else begin XMin := aDot2.X; end; if aDot1.Y < aDot2.Y then begin YMin := aDot1.Y; end else begin YMin := aDot2.Y; end; aMidDot.X := XMin + Abs(aDot1.X - aDot2.X) / 2; aMidDot.Y := YMin + Abs(aDot1.Y - aDot2.Y) / 2; end; const (*Размер массива исходных точек.*) DotCount = 20; var (*Массив исходных точек.*) ArrDot : array[1..DotCount] of TDot; (*Количество точек, заданных пользователем - может быть меньше, чем DotCount.*) n : Integer; (*Счётчики для циклов.*) i, j : Integer; (*Индектсы (в массиве ArrDot) двух точек, расстояние между которыми максимальное.*) IMax, JMAx : Integer; (*Расстояние между очередными точками в цикле.*) Distance : Extended; (*Расстояние между двумя наиболее удаленными друг от друга точками.*) (*Это расстояние является диаметром искомой окружности.*) MaxDistance : Extended; (*Радиус искомой окружности.*) Radius : Extended; (*Центр искомой окружности.*) Center : TDot; (*Строка.*) StrTmp : String; begin (*Главный цикл диалога с пользователем.*) repeat (*Ввод исходных точек.*) Writeln('Программа определяет параметры окружности, которая охватывает все заданные точки.'); Writeln('Введите координаты исходных точек.'); (*Количество заданных точек.*) n := 0; (*Цикл диалога ввода исходных точек.*) repeat Inc(n); Writeln('Введите координаты очередной точки через пробел: X Y. И нажмите ENTER.'); Readln(ArrDot[n].X, ArrDot[n].Y); if n = DotCount then begin Writeln('Массив исходных точек заполнен. Ввод завершён.'); StrTmp := '1'; Continue; end; Writeln('Продолжить: ENTER. Завершить ввод исходных точек: любой символ + ENTER.'); Readln(StrTmp); until StrTmp <> ''; Writeln('Введено ', n:2, ' точек.'); (*Расчёт.*) (*Поиск двух точек, расстояние между которыми максимальное.*) MaxDistance := 0; IMax := 1; JMax := 1; for i := 1 to n - 1 do begin for j := i + 1 to n do begin Distance := GetDistance(ArrDot[i], ArrDot[j]); if Distance > MaxDistance then begin MaxDistance := Distance; IMax := i; JMax := j; end; end; end; (*Определение координат центра окружности.*) (*Это точка, лежащая посередине отрезка, концами которого являются точки,*) (*расстояние между которыми максимальное.*) GetMidDot(ArrDot[IMax], ArrDot[JMax], Center); (*Радиус искомой окружности.*) Radius := MaxDistance / 2; (*Показываем результаты вычислений.*) Writeln('Результат вычислений:'); Writeln('Координаты центра окружности: X = ', Center.X:3:4, ', Y = ', Center.Y:3:4); Writeln('Радиус окружности = ', Radius:3:4); Writeln('Повторить: ENTER. Выход: любой символ + ENTER.'); Readln(StrTmp); until StrTmp <> ''; end. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Определить принадлежность точек к окружности, помогите составить блок схему :) | miniZadrot9000 | Паскаль, Turbo Pascal, PascalABC.NET | 14 | 13.07.2012 18:09 |
центр окружности и радиус (всё это на плоскости) Pascal | tipilat | Помощь студентам | 4 | 09.07.2009 22:19 |
Определить радиус и центр окружности | Verochka | Помощь студентам | 2 | 19.11.2008 15:47 |
Получение координат точек касательной к окружности | Stilet | Помощь студентам | 2 | 01.08.2008 15:12 |
Определить радиус и центр окружности на которой лежит наибольшее число точек. | Zoratul | Помощь студентам | 2 | 11.01.2008 16:00 |