Требовалось написать программу, при выполнении которой с клавиатуры считываются координаты точки на плоскости (\(x,\) \(y\) — действительные числа) и определяется принадлежность этой точки заданной заштрихованной области (включая границы). Программист торопился и написал программу неправильно.
\[\begin{array}{|l|l|l|} \hline \text{Python} & \text{C++}&\text{Pascal}\\ \hline \text{x = float(input())}&\text{\#include <iostream>}&\text{var x,y: real;}\\ \text{y = float(input())}&\text{using namespace std;}&\text{begin}\\ \text{if x*x+y*y>=9:}&\text{}&\text{readln(x,y);}\\ \quad\text{if x>=-3:}&\text{int main(void)\{}&\text{if x*x+y*y>=9 then}\\ \quad\quad\text{if y<=-x:}&\text{float x,y;}&\quad\text{if x>=-3 then}\\ \quad\quad\quad\text{print("принадлежит")}&\text{cin}>>\text{x}>>\text{y;}&\quad\quad\text{if y<=-x then}\\ \quad\quad\text{else:}&\text{if (x*x+y*y>=9)}&\quad\quad\quad\text{write('принадлежит')}\\ \quad\quad\quad\text{print("не принадлежит")}&\quad\text{if (x>=-3)}&\quad\quad\text{else}\\ \text{}&\quad\quad\text{if (y<=-x)}&\quad\quad\quad\text{write('не принадлежит')}\\ \text{}&\quad\quad\quad\text{cout}<<\text{"принадлежит";}&\text{end.}\\ \text{}&\quad\quad\text{else}&\text{}\\ \text{}&\quad\quad\quad\text{cout}<<\text{"не принадлежит";}&\text{}\\ \text{}&\text{\}}&\text{}\\ \hline \end{array}\]
Последовательно выполните следующее:
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D).
Точки, лежащие на границах областей, отдельно не рассматривать. В столбцах условий укажите “да”, если условие выполнится, “нет”, если условие не выполнится, “—” (прочерк), если условие не будет проверяться, “не изв.”, если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце “Программа выведет” укажите, что программа выведет на экран. Если программа ничего не выводит, напишите “—” (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите “не изв”. В последнем столбце укажите “да” или “нет”.
\[\begin{array}{|l|l|l|l|l|l|} \hline \text{Область} & \text{Условие 1}&\text{Условие 2}&\text{Условие 3}&\text{Программа выведет}&\text{Область обрабатывается верно}\\ &\text(x*x+y*y>=9)&\text(x>=-3)&\text(y<=-x)&&\\ \hline \text{A}&&&&&\\ \hline \text{B}&&&&&\\ \hline \text{C}&&&&&\\ \hline \text{D}&&&&&\\ \hline \end{array}\]
2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
1)
\[\begin{array}{|l|l|l|l|l|l|} \hline
\text{Область} & \text{Условие 1}&\text{Условие 2}&\text{Условие 3}&\text{Программа выведет}&\text{Область обрабатывается верно}\\
&\text(x*x+y*y>=9)&\text(x>=-3)&\text(y<=-x)&&\\
\hline
\text{A}&\text{да}&\text{да}&\text{да}&\text{принадлежит}&\text{да}\\
\hline
\text{B}&\text{нет}&\text{—-}&\text{—-}&\text{—-}&\text{нет}\\
\hline
\text{C}&\text{да}&\text{да}&\text{да}&\text{принадлежит}&\text{нет}\\
\hline
\text{D}&\text{да}&\text{да}&\text{нет}&\text{не принадлежит}&\text{да}\\
\hline
\end{array}\]
2)Возможная доработка:
\[\begin{array}{|l|l|l|} \hline
\text{Python} & \text{C++}&\text{Pascal}\\
\hline
\text{x = float(input())}&\text{\#include <iostream>}&\text{var x,y: real;}\\
\text{y = float(input())}&\text{using namespace std;}&\text{begin}\\
\text{if x*x+y*y>=9 and x>=-3 and y<=-x and y>=0:}&\text{}&\text{readln(x,y);}\\
\quad\text{print("принадлежит")}&\text{int main(void)\{}&\text{if (x*x+y*y>=9) and (x>=-3) and (y<=-x) and (y>=0) then}\\
\text{else:}&\text{float x,y;}&\quad\text{write('принадлежит')}\\
\quad\text{print("не принадлежит")}&\text{cin}>>\text{x}>>\text{y;}&\text{else}\\
\text{}&\text{if (x*x+y*y>=9 \&\& x>=-3 \&\& y<=-x \&\& y>=0)}&\quad\text{write('не принадлежит')}\\
\text{}&\quad\text{cout}<<\text{"принадлежит";}&\text{end.}\\
\text{}&\text{else}&\quad\quad\quad\text{}\\
\text{}&\quad\text{cout}<<\text{"не принадлежит";}&\text{}\\
\text{}&\text{\}}&\text{}\\
\hline
\end{array}\]
Обратите внимание, что вариантов доработки может быть достаточно много, но обычно правильное описание заштрихованных областей в них представляет собой или объединение двух (или более) возможно пересекающихся областей, или исключение одной области из другой.
Ответ: см. решение