Главная страница

Ответы на задачи 24 (С1)


Скачать 1.99 Mb.
НазваниеОтветы на задачи 24 (С1)
Дата21.04.2018
Размер1.99 Mb.
Формат файлаdoc
Имя файлаansw24-C1.doc
ТипПрограмма
#41783
страница8 из 18
1   ...   4   5   6   7   8   9   10   11   ...   18

Программы выводит какой-то ответ только тогда когда истинны первые два условия; в этом случае ответ зависит от истинности третьего условия:

Обл.

x >= 0

y <= 1

(x*x+y*y<=1) and (y>=x-1)

вывод

верно?

A

да

да

да

принадлежит




B

да

да

нет

не принадлежит




C

нет










D

нет










E

да

да

нет

не принадлежит




F

да

да

нет

не принадлежит




G

нет










H

да

нет








J

да

нет








K

нет










Видим, что верно обрабатываются только областей А и E, для областей B и F выводится неверный ответ (эти области закрашены, но программа выдает ответ «не принадлежит»), а для остальных никакого ответа не выводится.

Обл.

x >= 0

y <= 1

(x*x+y*y<=1) and (y>=x-1)

вывод

верно?

A

да

да

да

принадлежит

да

B

да

да

нет

не принадлежит

нет

C

нет







нет

D

нет







нет

E

да

да

нет

не принадлежит

да

F

да

да

нет

не принадлежит

нет

G

нет







нет

H

да

нет





нет

J

да

нет





нет

K

нет







нет

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

(x >= 0) and (x*x + y*y <= 1)

и треугольника

(x >= 0) and (y <= 1) and (y >= x-1)

Получаем:

if ((x >= 0) and (x*x + y*y <= 1)) { полукруг }

or

((x >= 0) and (y <= 1) and (y >= x-1)) { треугольник }

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

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

Это условие можно немного упростить, заметив, что условие x >= 0 встречается в условиях для обеих областей:

if (x >= 0) and

((x*x + y*y <= 1) or

((y <= 1) and (y >= x-1)))

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

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

  1. Сразу замечаем, что в программе else относится к последнему оператору if, то есть в самом деле структура кода такова:

if y <= 3-x*x then

if y >= 0 then

if y >= x+1 then

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

else

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

Обратите внимание, что второе условие проверяется в приведенной программе только тогда, когда истинно первое, а третье – только тогда, когда истинны первые два. В остальных ячейках (если условие не проверяется) нужно ставить прочерк:

Обл.

y <= 3-x*x

y >= 0

y >= x+1

вывод

верно?

A

нет











B

нет











C

да

нет









D

да

нет









E

да

да

нет







F

да

да

да







G

да

да

да







H

да

да

нет







J

нет











K

нет











Программы выводит какой-то ответ только тогда когда истинны первые два условия; в этом случае ответ зависит от истинности третьего условия:

Обл.

y <= 3-x*x

y >= 0

y >= x+1

вывод

верно?

A

нет










B

нет










C

да

нет








D

да

нет








E

да

да

нет

не принадлежит




F

да

да

да

принадлежит




G

да

да

да

принадлежит




H

да

да

нет

не принадлежит




J

нет










K

нет









1   ...   4   5   6   7   8   9   10   11   ...   18


написать администратору сайта