Работа 3.6 Упр.24 ГДЗ Семакин 10 класс (Информатика)
Рассмотрим вариант решения задания из учебника Семакин, Хеннер, Шеина 10 класс, Бином: 24. На плоскости п точек заданы своими координатами, и также дана окружность радиуса R с центром в начале координат. Указать множество всех треугольников с вершинами в заданных точках, пересекающихся с окружностью; множество всех треугольников, содержащихся внутри окружности. *Цитирирование задания со ссылкой на учебник производится исключительно в учебных целях для лучшего понимания разбора решения задания. 10 semakin10 pract/3-6/24 98
Пусть для каждой точки с координатами $$\left(x_i, y_i\right)$$ вычисляется расстояние до начала координат:
$$\rho_i=\sqrt{x_i^2+y_i^2}.$$
Точка лежит внутри или на окружности радиуса $$R$$ с центром в начале координат, если $$\rho_i \le R$$.
Тогда:
- треугольник содержится внутри окружности, если все три его вершины удовлетворяют условию $$\rho \le R$$;
- треугольник пересекается с окружностью, если хотя бы одна его вершина лежит внутри или на окружности, а не все три вершины находятся вне окружности.
В приведённой программе перебираются все тройки точек $$i, j, k$$ и проверяется условие
$$\sqrt{x_i^2+y_i^2}\le R,\quad \sqrt{x_j^2+y_j^2}\le R,\quad \sqrt{x_k^2+y_k^2}\le R.$$
Если оно выполняется, то такая тройка точек образует треугольник, содержащийся внутри окружности. Номер треугольника увеличивается на 1, и его вершины выводятся.
Чтобы получить множество всех треугольников, пересекающихся с окружностью, нужно дополнительно учитывать треугольники, у которых не все вершины лежат вне окружности. То есть достаточно проверить, что хотя бы одна вершина удовлетворяет условию $$\rho \le R$$.
Итоговый алгоритм:
- считать радиус $$R$$ и координаты всех точек;
- для каждой тройки точек вычислить расстояния до начала координат;
- если все три расстояния не превосходят $$R$$, включить треугольник во множество треугольников, содержащихся внутри окружности;
- если хотя бы одно расстояние не превосходит $$R$$, включить треугольник во множество треугольников, пересекающихся с окружностью.
var f: Text;
S: string;
R: extended;
i, j, k, m, N: integer;
X, Y: array[1..1000] of extended;
begin
WriteLn(‘Введите имя файла с данными [*.pas] или Enter, если вручную’);
ReadLn(S);
if S = » then begin
WriteLn(‘Радиус окружности R:=’); ReadLn(R);
WriteLn(‘Количество точек N:=’); ReadLn(N);
for i := 1 to N do begin
WriteLn(i, ‘-я точка (X Y):=’);
ReadLn(X[i]);
ReadLn(Y[i]);
end;
end else begin
Assign(f, S + ‘.pas’);
Reset(f);
ReadLn(f);
ReadLn(f, R);
i := 0;
while not eof(f) do begin
inc(i);
ReadLn(f, X[i], Y[i]);
end;
N := i;
Close(f);
end;
WriteLn(‘N=’, N, ‘ R=’, R:0:0, ‘ точки:’);
m := 0;
for i := 1 to N — 2 do
for j := i + 1 to N — 1 do
for k := j + 1 to N do
if (SQRT(sqr(X[i]) + sqr(Y[i])) <= R) and
(SQRT(sqr(X[j]) + sqr(Y[j])) <= R) and
(SQRT(sqr(X[k]) + sqr(Y[k])) <= R) then begin
inc(m);
WriteLn(m, ‘: [(‘, X[i]:0:0, ‘;’, Y[i]:0:0, ‘), ‘,
‘(‘, X[j]:0:0, ‘;’, Y[j]:0:0, ‘), ‘,
‘(‘, X[k]:0:0, ‘;’, Y[k]:0:0, ‘)]’);
end;
WriteLn(‘< OK >’);
end.
Ответ: программа перебирает все тройки точек и выводит те треугольники, у которых все вершины лежат внутри или на окружности радиуса $$R$$; для множества пересекающихся с окружностью нужно дополнительно учитывать треугольники, у которых хотя бы одна вершина удовлетворяет условию $$\sqrt{x^2+y^2}\le R$$.