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

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


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

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

  1. область M: (y <= 1-x) and (y >= x*x-5) and (y >= 2-2*x*x)

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

Два условия, выделенные синим цветом, можно записать в виде (x*y<=0). Поэтому условие для областей 2 и 3 переписываем в виде

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

Получаем:

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

(y <= 1-x) and (y >= 2-2*x*x) and (y >= x*x-5)

and (x*y <= 0)

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

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

  1. Рассмотрим таблицу, в которую добавлена нумерация строк:




Область

Условие 1

(y >= x+1)

Условие 2
(y <= 2-2*x*x)


Условие 3 (y >= x*x-5)

Вывод

Верно

1


















2













принадлежит

нет

3













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

да

4















да

Напомним программу:

if y >= x+1 then begin

if y <= 2-2*x*x then

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

end

else

if y >= x*x-5 then

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

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

В строке 1 ничего не выводится, значит ответ неверный. Такой вариант (отсутствие вывода) говорит о том, что первое условие выполнено, а второе – нет. То есть, эта область расположена выше прямой и выше параболы y = 2 - 2x2; это могут быть область A, B, C, H, K:




Область

Условие 1

(y >= x+1)

Условие 2
(y <= 2-2*x*x)


Условие 3 (y >= x*x-5)

Вывод

Верно

1

A, B, C, H, K

да

нет





нет

2













принадлежит

нет

3













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

да

4















да

Теперь рассмотрим строку 2. Программа выдает ответ «принадлежит», что может быть

  1. при выполнении первых двух условий (точки выше прямой и ниже параболы y = 2 - 2x2) или

  2. если первое условие на выполняется (точки ниже прямой), а третье – выполняется (точки выше параболы y = x2 - 5).

При этом ответ «принадлежит» неверный. Поскольку ВСЕ точки, для которых выполняются первые два условия, принадлежат заштрихованной области D, первый вариант исключается. Поэтому для второй строки первое условие ложно (точки ниже прямой), второе не проверяется, а третье – истинно (точки выше параболы y = x2 - 5); эти области не заштрихованы, поэтому это могут быть только области M и N:




Область

Условие 1

(y >= x+1)

Условие 2
(y <= 2-2*x*x)


Условие 3 (y >= x*x-5)

Вывод

Верно

1

A, B, C, H, K

да

нет





нет

2

M. N

нет



да

принадлежит

нет

3













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

да

4















да

Третья строка. Сообщение «не принадлежит» выводится для точек, которые ниже прямой и ниже параболы y = x2 - 5, эти точки не принадлежат выделенной области; это могут быть области G, P, Q, R.




Область

Условие 1

(y >= x+1)

Условие 2
(y <= 2-2*x*x)


Условие 3 (y >= x*x-5)

Вывод

Верно

1

A, B, C, H, K

да

нет





нет

2

M. N

нет



да

принадлежит

нет

3

G, P, Q, R

нет



нет

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

да

4















да

Наконец, для четвертой строки третье условие не проверяется, значит, первое истинно. Второе проверяется, и результат верный. Это значит, что второе условие истинно и выведено сообщение «принадлежит». Это точки, расположенные выше прямой и ниже параболы y = 2 - 2x2, то есть область D.




Область

Условие 1

(y >= x+1)

Условие 2
(y <= 2-2*x*x)


Условие 3 (y >= x*x-5)

Вывод

Верно

1

A, B, C, H, K

да

нет





нет

2

M. N

нет



да

принадлежит

нет

3

G, P, Q, R

нет



нет

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

да

4

D

да

да



принадлежит

да

Для того, чтобы написать правильную программу, составим одно сложное условие. Проще всего сложить полную область из трех:

  1. область D: (y >= x+1) and (y < 2-2*x*x)

  2. области E и F: (y <= x+1) and (y >= 0) and (y >= x*x-5)

  3. область L: (y <= x+1) and (y >= 2-2*x*x) and (y >= x*x-5)

and (x <= 0)

Остается объединить эти области с помощью операции ИЛИ:

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

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

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

and (x <= 0)

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

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

Более хитрый способ:

  1. области D и E: (y >= 0) and (y <= 2-2*x*x)

  2. область F и часть области E:

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

and (x>=0) and (y>=0)

  1. область L: (y <= x+1) and (y >= 2-2*x*x) and (y >= x*x-5)

and (x<=0) and (y<=0)

Два условия, выделенные синим цветом, можно записать в виде (x*y>=0). Поэтому условие для областей 2 и 3 переписываем в виде

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

Получаем:

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

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

and (x*y <= 0)

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

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

  1. Сначала выполним первое задание, подставив значения n = 5, a = 3, b = 6 в программу:

if a + b < n then writeln(0)

else

if a < b then

if a < n then writeln(a+1)

else

if b < n then writeln(b+1)

else writeln(n+1);

Выделив структуру заданой программы получаем 4 вложенных условия. Для заданных исходных данных первое условие a + b < n = 3 + 6 < 5 ложно, второе a < b = 3 < 6 истинно, третье
a < n = 3 < 5 истинно, поэтому программа выведет значение a + 1 = 3 + 1 = 4.

Для того, чтобы ответить на второй вопрос, заметим, что программа ничего не выводит, если первое условие ложно, и второе тоже ложно. Например, это может быть при n = 5, a = 6, b = 3.

Теперь нужно разобраться, какое решение является правильным. Представим модель задачи в виде трёх лент длиной a, b и n. Ленты длиной a, b соеднены вместе, а лента длиной n двигается относительно границы между первыми двумя, но так, чтобы не выйти за границы соединённой полосы «a+b». Варианты, которые нам нужно подсчитать, отличаются только положением границы, обозначенной красной линией.



Очевидно, что при a+b число вариантов равно 0, то есть, первое условие исходной программы верно.

Если a n, то все вынутые шары могут быть красными (1 вариант), кроме того, ленту длиной n можно сдвинуть вправо на min(b,n) вправо, поэтому для этого случая
1   ...   10   11   12   13   14   15   16   17   18


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