1-11 класс
  • 1-11 класс
  • 1 класс
  • 2 класс
  • 3 класс
  • 4 класс
  • 5 класс
  • 6 класс
  • 7 класс
  • 8 класс
  • 9 класс
  • 10 класс
  • 11 класс
Выберите класс
Предметы
Семакин
Работа 3.6 Упр.24 ГДЗ Семакин 10 класс (Информатика)
Семакин, Хеннер, Шеина
10 класс
Автор
Семакин, Хеннер, Шеина

Работа 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$$.

Итоговый алгоритм:

  1. считать радиус $$R$$ и координаты всех точек;
  2. для каждой тройки точек вычислить расстояния до начала координат;
  3. если все три расстояния не превосходят $$R$$, включить треугольник во множество треугольников, содержащихся внутри окружности;
  4. если хотя бы одно расстояние не превосходит $$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$$.



Общая оценка
4.8 / 5
Другие учебники
Другие предметы