Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 17.11.2009, 20:50   #1
kcю
 
Регистрация: 05.11.2009
Сообщений: 9
Репутация: 10
По умолчанию определить радиус и центр окружности, на кот. лежит наиб.число точек заданного на плоскости мн-ва точек)

помогите пожалуйста заменить функции и процедуры на языке паскаль( просто мы ещё не проходили их)

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.
kcю вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить принадлежность точек к окружности, помогите составить блок схему :) miniZadrot9000 Паскаль 14 13.07.2012 18:09
центр окружности и радиус (всё это на плоскости) Pascal tipilat Помощь студентам 4 09.07.2009 22:19
Определить радиус и центр окружности Verochka Помощь студентам 2 19.11.2008 16:47
Получение координат точек касательной к окружности Stilet Помощь студентам 2 01.08.2008 15:12
Определить радиус и центр окружности на которой лежит наибольшее число точек. Zoratul Помощь студентам 2 11.01.2008 17:00


08:22.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.