С Новым годом! Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для kkkcю
0 / 0 / 1
Регистрация: 04.11.2009
Сообщений: 90

множество точек

11.11.2009, 15:46. Показов 940. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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.
помогите заменить выделенное для работы в линуксе
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2009, 15:46
Ответы с готовыми решениями:

Дано множество A из N точек на плоскости. Найти точку (вывести её номер и значение) среди всех точек этого множества
Дано множество A из N точек на плоскости. Найти точку (вывести её номер и значение) среди всех точек этого множества, лежащих в первой...

Множество точек
Добрый день. Нужно создать множество точек но не хватает опыта реализовать это. Нужно например что-то типо этого: type TDot = record...

Множество точек на плоскости.
Задана множина точок на площині. Знайти опуклу оболонку цієї множини, тобто опуклий многокутник з вершинами в деяких точках цієї множини,...

2
localhost
 Аватар для Wassago
58 / 58 / 9
Регистрация: 02.09.2009
Сообщений: 170
11.11.2009, 15:54
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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.
Так чтобы понятней было.
0
 Аватар для kkkcю
0 / 0 / 1
Регистрация: 04.11.2009
Сообщений: 90
11.11.2009, 20:27  [ТС]
помогите заменить программа написана на паскале, а мы вот эти процедуры и функции такие не проходили
type TDot = record;
function GetDistance(aDot1, aDot2 : TDot);
procedure GetMidDot(aDot1, aDot2 : TDot; var aMidDot : TDot);
var ArrDot : array[1..DotCount] of TDot;
StrTmp
помогите пожалуйста заменить для работы в линуксе
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2009, 20:27
Помогаю со студенческими работами здесь

Множество точек. Программа с олимпиады.
Имеется два множество точек! Выберите три точки, такие чтоб если из них построить треугольник, то внутри него окажется равное количество...

Задано множество точек m в трехмерном пространстве.
Задано множество точек m в трехмерном пространстве. Найти такую из них, что шар заданного радиуса с центром в этой точке содержит...

Построить на экране множество точек, координаты которых удовлетворяют неравенству
Построить на экране множество точек, координаты которых удовлетворяют следующему неравенству: : x2+y2=&lt;(abs(y)+ abs(x)). Добавлено...

Найдите уравнение какой-либо прямой, делящей данное множество точек на два подмножества
На плоскости заданы 2n точек своими координатами. Найдите уравнение какой-либо прямой, делящей данное множество точек на два подмножества...

Задать n точек. Найти m=3,4... точек и построить на них m-угольник такой что, количество точек , лежащих внутри и вне m-угольника , минимально различа
Задать n точек. Найти m=3,4... точек и построить на них m-угольник такой что, количество точек , лежащих внутри и вне m-угольника ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru