Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2009, 21:32   #1
kcю
 
Регистрация: 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.

помогите заменить программа написана на паскале, а мы вот эти процедуры и функции такие не проходили
type TDot = record;
function GetDistance(aDot1, aDot2 : TDot);
procedure GetMidDot(aDot1, aDot2 : TDot; var aMidDot : TDot);
var ArrDot : array[1..DotCount] of TDot;
StrTmp

помогите пожалуйста заменить для работы в линуксе
kcю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Множество точек пространства. Тетраэдр. Adya Общие вопросы C/C++ 2 29.09.2009 22:02
Множество Archangelos Паскаль, Turbo Pascal, PascalABC.NET 5 15.06.2009 17:49
множество. Юлька:) Помощь студентам 1 30.03.2009 21:27
задача на множество точек MariyaVo Паскаль, Turbo Pascal, PascalABC.NET 2 14.01.2009 21:59
Множество xxxPascalxxx Помощь студентам 11 24.02.2008 19:07