Предмет: Информатика, автор: hlopa96


1) Требовалось написать программу, которая вводит с
Клавиатуры координаты точки на плоскости (x, y -
действительные числа) и определяет принадлежность точки
заштрихованной области, включая ее границы. Программист
торопился и написал программу неправильно. Вот она:
var x, y: real;
begin
readln(x, y);
if y >=0 then
if y <= 1 then
if x >=0 then
if x <= pi then
ify = sin(x) then write('принадлежит')
else write('не принадлежит');
end.
Последовательно выполните следующее: 1) Приведите пример таких чисел x, y, при которых
программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу.
чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами,
поэтому можно указать любой способ доработки исходной программы).

Приложения:

Ответы

Автор ответа: Ziorar
6

Ответ:

Примеры чисел x, y, при которых  программа неверно работает:

1, 0  (пишет не принадлежит, а должна писать принадлежит)

3, 1  (пишет не принадлежит, а должна писать принадлежит)

2, 2  (ничего не пишет, а должна писать не принадлежит)

Пример доработки программы:

var

x, y: real;

c: string;

begin

readln(x, y);

c := 'не принадлежит';

if y >= 0 then

if y <= 1 then

if x >= 0 then

if x <= pi then

if (x > pi / 2) or (y <= sin(x)) then c := 'принадлежит';

write(c);

end.

Ещё пример доработки программы:

var

x, y: real;

begin

readln(x, y);

if y >= 0 then

if y <= 1 then

if x >= 0 then

if x <= pi then

if (x > pi / 2) or (y <= sin(x)) then write('принадлежит')

else write('не принадлежит')

else write('не принадлежит')

else write('не принадлежит')

else write('не принадлежит')

else write('не принадлежит');

end.

Объяснение:

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

А для точек вне прямоугольника она не писала никакого ответа, т.к. сообщение "не принадлежит" выводится после else, которое принадлежит к последнему if, а до него дело даже и не доходит, ведь срабатывает одно из четырёх условий, идущих перед ним.

Если исходный алгоритм встроить в цикл для отрисовки графика (что я и сделал для проверки, заменив лишь вывод текстовых сообщений на установку переменной в единицу или ноль и добавив округления в условие последнего if), то можно получить отрисовку лишних линий на всю область графика из за того, что последнее значение было 1, а для точек выше- алгоритм его уже не меняет, пока координаты вновь не попадут в прямоугольник.

Похожие вопросы
Предмет: Математика, автор: rifat152001