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

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


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

Простейший способ исправить ошибку – построить условия для каждой из закрашенных областей, и затем объединить их с помощью операции ИЛИ. Записываем условия для обеих интересующих нас областей (B и D)

B: (y >= 2-x) и (y <= x*x) и (x <= 0)

D: (y <= 2-x) и (x >= 0) и (y >= 0) и (y <= x*x)

Обратите внимание: легко забыть условие x<=0 для области B и условие x>=0 для области D!

В этой задаче обе области находятся под прямой y=2-x, поэтому это условие будет общим. Получаем:

C или D: (y >= 2-x) и (y <= x*x) и (x <= 0) или

(y <= 2-x) и (x >= 0) и (y >= 0) и (y <= x*x)

Переводим на язык программирования:

if (y >= 2-x) and (y <= x*x) and (x <= 0) or

(y <= 2-x) and (x >= 0) and (y >= 0) and (y <= x*x) then

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

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

Условие можно записать и в другом виде:

if (y <= x*x) and (y >= 0) and

((x>=0) and (y<=2-x) or (y>=2-x) and (x<=0)) then

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

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


  1. Это та же самая задача, что и 24, только переформулированная в соответствии с демо-вариантом ЕГЭ-2012. Сразу замечаем, что в программе else относится к последнему оператору if, то есть в самом деле структура кода такова:

if x <= 1 then

if y <= 1 then

if x*x + y*y <= 1 then

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

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

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

Обл.

x<=1

y<=1

x*x+y*y<=1

вывод

верно?

A

да

да

да







B

да

да

нет







C

да

нет

-







D

нет

-

-







E

да

да

нет







F

нет

-

-







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

Обл.

x<=1

y<=1

x*x+y*y<=1

вывод

верно?

A

да

да

да

принадлежит




B

да

да

нет

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




C

да

нет

-

-




D

нет

-

-

-




E

да

да

нет

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




F

нет

-

-

-




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

Обл.

x<=1

y<=1

x*x+y*y<=1

вывод

верно?

A

да

да

да

принадлежит

да

B

да

да

нет

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

да

C

да

нет

-

-

нет

D

нет

-

-

-

нет

E

да

да

нет

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

нет

F

нет

-

-

-

нет

Для исправления программы лучше всего составить новое сложное условие. Выделенная область может быть получена как объединение двух областей: круга x*x + y*y <= 1 и квадрата с единичной стороной, левый нижний угол которого находится в начале координат:

if (x*x + y*y <= 1) { круг }

or

((x >= 0) and (x <= 1) and { квадрат}

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

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

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

  1. Это та же самая задача, что и 25, только переформулированная в соответствии с демо-вариантом ЕГЭ-2012. Сразу замечаем, что в программе else относится к последнему оператору if, то есть в самом деле структура кода такова:

if y >= 0 then

if x <= 1 then

if y >= x*x then

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

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

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

Обл.

y >= 0

x <= 1

y >= x*x

вывод

верно?

A

да

да

да







B

да

нет









C

да

нет









D

да

да

нет







E

да

да

нет







F

нет











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

Обл.

y >= 0

x <= 1

y >= x*x

вывод

верно?

A

да

да

да

принадлежит




B

да

нет








C

да

нет








D

да

да

нет

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




E

да

да

нет

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




F

нет










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

Обл.

y >= 0

x <= 1

y >= x*x

вывод

верно?

A

да

да

да

принадлежит

да

B

да

нет





нет

C

да

нет





нет

D

да

да

нет

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

да

E

да

да

нет

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

нет

F

нет







нет

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

if ((y >= x*x) and (x <= 1)) { над параболой }
1   2   3   4   5   6   7   8   9   ...   18


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