
Требовалось
написать программу, при выполнении которой с клавиатуры считываются
координаты точки на плоскости (x, y – действительные числа) и
определяется принадлежность этой точки заданной заштрихованной области
(включая границы).
Программист торопился и написал программу неправильно.Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неправильно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее
неправильной работы. (Это можно сделать несколькими способами,
поэтому можно указать любой правильный способ доработки исходной программы).ПРОГРАММА НА ПАСКАЛЕ | ПРОГРАММА НА БЕЙСИКЕ | ПРОГРАММА НА СИ |
var x,y: real; begin readln(x,y); if x*x+y*y<=1 then begin if x<=0 then write('принадлежит'); if y>=0 then write('принадлежит') else write('не принадлежит') end end. | INPUT x, y IF x*x+y*y<=1 THEN IF x<=0 THEN PRINT "принадлежит" ENDIF IF y>=0 THEN PRINT "принадлежит" ELSE PRINT "не принадлежит" ENDIF ENDIF END | void main(void) { float x,y; scanf("%f%f",&x,&y); if (x*x+y*y<=1) { if (x<=0) printf("принадлежит"); if (y>=0) printf("принадлежит"); else printf("не принадлежит"); } } |
Решение задачи №2
1) Пример: x = 0, y = 0 (Любая пара (x, y), для которой выполняется x*x + y*y > 1 или x≤ 0).
2) Возможная доработка (Паскаль):
if (x*x+y*y<=1) and ((x<=0) or (y>=0)) then
write('принадлежит')
else
write('не принадлежит')
Возможны и другие верные способы доработки.

1. Неправильное использование условного оператора, в результате чего при невыполнении первого условия программа не выдавала ничего (отсутствуют случаи ELSE).
2. Если точка лежит внутри круга ( x*x+y*y ≤ 1) и x ≤ 0, то программа выводит ДВА сообщения: сначала сообщение «принадлежит», а потом одно из двух сообщений в зависимости от выполнения условия y ≥ 0.
Возврат к списку задач
