Для области, описываемые логическими выражениями данных областей составить линейную...

0 голосов
180 просмотров

Для области, описываемые логическими выражениями данных областей составить линейную программу, которая печатает true, точка с координатами (х, у)принадлежит закрашенной области, и false-в противном случае:
Нужен текст программы на Паскаль помогите очень нужно


image

Информатика (15 баллов) | 180 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Разбиваем заштрихованную область на контуры, ограниченные линиями, уравнения которых мы можем написать. Считаем, что сами линии (границы области) тоже входят в нее. Если это не так, все неравенства, указанные ниже, должны быть строгими.
В I четверти:
Контур - окружность. Уравнение окружности x² + y² = r².
Из графика видно, что r = 6, поэтому все, что лежит внутри круга и на нем, удовлетворяет уравнению x² + y² ≤ 6² или x² + y² ≤ 36
Принадлежность I четверти определяется условием (x ≥ 0) и (y ≥ 0).
Получаем логическое выражение (x² + y² ≤ 36) ∧ (x ≥ 0) ∧ (y ≥ 0)
В IV четверти:
Контур - прямоугольный треугольник. В соответствии с графиком уравнение его гипотенузы y = x - 6.
Принадлежность IV четверти определяется условием (x ≥ 0) и (y ≤ 0).
Получаем логическое выражение (y ≥ x - 6) ∧ (x ≥ 0) ∧ (y ≤ 0)

Точка, принадлежащая заштрихованной области или её контуру, может находиться в одной из рассмотренных выше четвертей, поэтому полученные логические выражения объединяем через ИЛИ:
[(x² + y² ≤ 36) ∧ (x ≥ 0) ∧ (y ≥ 0)] ∨ [(y ≥ x - 6) ∧ (x ≥ 0) ∧ (y ≤ 0)]
Сделаем упрощение:
(x ≥ 0) ∧ { [ (x² + y² ≤ 36) ∧ (y ≥ 0) ] ∨ [ (y ≥ x - 6) ∧ (y ≤ 0) ] }
С учетом старшинства логических операций можно часть скобок опустить
(x ≥ 0) ∧ [ (x² + y² ≤ 36) ∧ (y ≥ 0) ∨ (y ≥ x - 6) ∧ (y ≤ 0) ]
В языке Паскаль это выражение запишется так:
(x>=0) and ((x*x+y*y<=36) and (y>=0) or (y>=x-6) and (y<=0))<br>
Теперь несложно написать саму программу.

// PascalABC.NET 3.3, сборка 1576 от 16.11.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var (x,y):=ReadReal2('Введите через пробел x и y:');
  Writeln((x>=0) and ((x*x+y*y<=36) and (y>=0) or (y>=x-6) and (y<=0)))<br>end.

Примеры
Введите через пробел x и y: 3 2.5
True

Введите через пробел x и y: 6 0
True

Введите через пробел x и y: 5.8 3
False

Введите через пробел x и y: 3 -2
True

Введите через пробел x и y: 4 -3
False

(150k баллов)