оригинальный файл 154.3 Кб

advertisement
Методика решения задач части С1
ЕГЭ по информатике
Автор: Белова Татьяна Владимировна,
учитель информатики 1 категории,
МБОУ «Лицей» г. Арзамаса Нижегородской
области
1
Задания части С1 это задания на исправление ошибки в простой программе c
условным оператором. До ЕГЭ 2012 года задания части С1 включали в себя во-первых,
ответ на вопрос: «Приведите примеры таких чисел x и y, чтобы программа выдавала
неверный результат» и, во-вторых, требовалось доработать программу.
Например:
Задача 1. Требовалось написать программу, которая вводит с клавиатуры
координаты точки на плоскости (x, y – действительные числа) и определяет
принадлежность
точки
заштрихованной
области,
включая
ее
границы.
Программист торопился и написал программу неправильно. Вот она (слайд 1):
var x,y: real;
begin
readln(x,y);
if y <= 1 then
if x >= 0 then
if y >= sin(x) then
write('принадлежит')
else write('не принадлежит')
end.
рис. 1
Чтобы дать ответ на первый вопрос задания, необходимо определить, какую область
мы получим, выполнив условия программы, которую написал программист. Для более
точного определения этой области необходимо построить блок-схему условия программы
(слайд 2):
Нет
y>=sin(x)
Д
а
Нет
Д
y<=1
а
Нет
Д
x>=0
а
2
не
принадлежи
принадлежит
т
рис. 2
По блок-схеме видно, что при невыполнении условий 𝑦 ≥ sin 𝑥, 𝑦 ≤ 1 ,программа
не выдает никакого сообщения, что в принципе говорит о неправильности решения
задания, так как по условию задачи, при задании координат точек программа должна
выдать сообщение на экран о ее принадлежности или не принадлежности замкнутой
области, а в этом случае программа не выдает никакого сообщения.
Построим замкнутую область по условию, записанному в программе. Это, вопервых, поможет нам установить ошибку в программе, во-вторых, поможет точнее
определить, какие числа надо задать для программы, чтобы она выдала неверное
сообщение (например, мы зададим координаты точки, не принадлежащей области, а
программа нам сообщит, что точка принадлежит замкнутой области) (слайд 3).
По заданному условию в программе мы получаем область:
1
2
Рис.3
Видим, что необходимая нам область только (1), вторая область нам не нужна для
учитывания, но если мы будем вводить координаты точки из этой области, программа нам
выдает сообщения, что точка принадлежит исходной замкнутой области, что неверно.
Поэтому для ответа на первый вопрос задания мы можем привести следующие варианты:
1) Взять точки, которые не удовлетворяют условиям 𝑦 ≥ sin 𝑥,
𝑦 ≤ 1, тогда
программа выдает пустое сообщение.
2) Взять точки, координаты которых лежат во второй области (рис. 3), тогда
программа выдает сообщение «Принадлежит», что неверно, так как точки,
принадлежащие замкнутой области, должны лежать в первой области.
3
Второй вопрос задания С1 предполагает исправление ошибок в программе, таким
образом, чтобы для любых введенных чисел (координат точек) программа выдавала
верное решение. Причем указывается, что способ исправления может быть любой.
Мы приведем пример исправления программы путем составления сложного условия.
Это, во-первых, сокращает запись в программе, во-вторых, меньше путаницы в
расстановке условий и выдачи верных сообщений. Но сначала надо добавить условие,
чтобы получилась необходимая нам замкнутая область (слайд 4). Как видно по рисунку 3,
мы должны «отсечь» часть замкнутой области №2, проведем через точку касания
графиков функций 𝑦 = sin 𝑥 и 𝑦 = 1 прямую, параллельную оси OY – 𝑥 =
𝜋
2
. Она
𝜋
ограничит нашу область условием 𝑥 ≤ .
2
Таким образом, замкнутая область получается пересечением множеств точек,
удовлетворяющих
условиям
𝑦 ≥ sin 𝑥,
𝑦 ≤ 1,
𝑥 ≥ 0,
𝜋
𝑥 ≤ , то есть точка,
2
принадлежащая данному множеству, должна одновременно удовлетворять всем четырем
условиям, значит, эти условия целесообразно объединить логической связкой «and».
В итоге получаем следующее сложное условие, которое нам даст верное решение
задачи, какую бы мы точку координатной плоскости не взяли (слайд 5):
𝜋
If (𝑦 ≥ 𝑠𝑖𝑛 𝑥) and ( 𝑦 ≤ 1) and (𝑥 ≥ 0) and (𝑥 ≤ 2 ) then writeln (‘точка принадлежит’)
else writeln (‘точка не принадлежит’);
Примечание: очень важно помнить, что большинство ошибок возникает в том, что
учащиеся забывают о периодичности тригонометрических функций и вместе с тем
графиков этих функций, что наталкивает их на неверный ответ – «вроде бы все верно».
Рассмотрим еще ряд примеров с применением составления сложного условия, но
уже с использованием логических связок «or» и «and».
Задача 2. Требовалось написать программу,
которая вводит с клавиатуры координаты
y 1
y
точки на плоскости (x, y – действительные
y  x 1
числа) и определяет принадлежность точки
заштрихованной области, включая ее границы.
0
Программист торопился и написал программу
неправильно. Вот она (слайд 6):
4
x2  y 2  1
рис. 4
x
var x, y: real;
begin
readln(x, y);
if x >= 0 then
if y <= 1 then
if (x*x + y*y <= 1) and (y >= x-1) then
write('принадлежит')
else
write('не принадлежит');
end.
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неверно решает
поставленную задачу. Объясните, почему для указанных чисел программа неверно
решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее
неправильной работы. (Это можно сделать несколькими способами, поэтому
можно указать любой способ доработки исходной программы).
Отвечаем на первый вопрос задания аналогично предыдущей задаче, построив
замкнутую область по условиям программы, которую написал программист. Для начала
построим блок схему (слайд 7):
Нет
x>=0
Нет
Д
а
Д
y<=1
а
Нет
x*x+y*y>
=1
Нет
Д
а
Д
y>=x-1
а
не
принадлежи
принадлежит
т
рис. 5
В итоге видим, что по условиям задачи получается замкнутая область под номером
2 на рисунке 6. То есть программист не учел, что по условию задачи замкнутая область
5
кроме №2 включает в себя еще и области №1 и №3. Поэтому для ответа на первый вопрос
можно привести следующие координаты точек, которые не удовлетворяют условиям 𝑥 ≥
0, 𝑦 ≤ 1, 𝑥 2 + 𝑦 2 ≥ 1, при этом программа будет выдавать пустое сообщение.
1
2
3
рис. 6
Чтобы ответить на второй вопрос задачи нужно определить условия принадлежности
любой точки из замкнутой области. Для определения условий принадлежности точки
замкнутой области необходимо сначала разбить замкнутую область на несколько
областей, таких, чтобы они получались ограничением не более трех графиков функций,
например, таким образом, как показано на рисунке 6,
на две области: №2+№3 –
ограниченная слева осью ординат (𝑥 ≥ 0) и окружностью (𝑥 2 + 𝑦 2 ≤ 1), область,
закрашенная розовым цветом, №1+№2 – ограниченная также осью ординат(𝑥 ≥ 0), сверху
графиком функции 𝑦 = 1 (𝑦 ≤ 1), снизу графиком функции 𝑦 = 𝑥 − 1 (𝑦 ≥ 𝑥 − 1),
область, закрашенная синим цветом (слайд 8).
Принадлежность точки будет определяться ее нахождением либо в области №2+№3,
либо в №1+№2. Условие принадлежности точки первой области: (𝑥 ≥ 0) and (𝑥 2 + 𝑦 2 ≤
1). Условие принадлежности точки второй области (𝑥 ≥ 0) and (𝑦 ≤ 1) and (𝑦 ≥ 𝑥 − 1).
Общее условие можно записать следующим образом:
If ((𝑥 ≥ 0) and (𝑥 2 + 𝑦 2 ≤ 1)) or ((𝑥 ≥ 0) and (𝑦 ≤ 1) and (𝑦 ≥ 𝑥 − 1))
then writeln (‘точка принадлежит’)
else writeln (‘точка не принадлежит’);
Или же упростив данное условие:
If (𝑥 ≥ 0) and ((𝑥 2 + 𝑦 2 ≤ 1) or ((𝑦 ≤ 1) and (𝑦 ≥ 𝑥 − 1)))
then writeln (‘точка принадлежит’)
else writeln (‘точка не принадлежит’);
6
В демо-версии ЕГЭ информатика-2012 было предложено задание следующего
уровня:
Требовалось написать программу, которая вводит с клавиатуры координаты
точки на плоскости (x, y – действительные числа) и определяет принадлежность
точки заштрихованной области, включая ее границы.
𝑦=𝑥
𝑦 = 2 − 𝑥2
рис. 7
Программист торопился и написал программу неправильно. Вот она:
var x,y: real;
begin
readln(x,y);
if y>=x then
if y>=0 then
if y<=2-x*x then
write('принадлежит')
else
write('не принадлежит')
end.
Последовательно выполните следующее:
1.
Перерисуйте и заполните таблицу, которая показывает, как работает
программа при аргументах, принадлежащих различным областям (A, B, C,
D, E, F и G). Точки, лежащие на границах областей, отдельно не
рассматривать.
7
A
A
E
𝑦=𝑥
E
G
F
B
D
D
C
𝑦 = 2 − 𝑥2
C
рис. 8
Область
Условие 1
(y>=x)
Условие 2
(y>=0)
Условие 3
(y<=2-x*x)
Программа
выведет
Область
обрабатывается
верно?
A
B
C
D
E
F
G
В столбцах условий укажите "да", если условие выполнится, "нет" если условие
не выполнится, "—" (прочерк), если условие не будет проверяться, «не изв.», если
программа ведет себя по-разному для разных значений, принадлежащих данной
области. В столбце "Программа выведет" укажите, что программа выведет на
экран. Если программа ничего не выводит, напишите "—" (прочерк). Если для
разных значений, принадлежащих области, будут выведены разные тексты,
напишите «не изв». В последнем столбце укажите "да" или "нет".
2. Укажите, как нужно доработать программу, чтобы не было случаев ее
неправильной работы. (Это можно сделать несколькими способами, поэтому
можно указать любой способ доработки исходной программы)
Опять же, чтобы правильно ответить на первый вопрос задания целесообразно
построить блок-схему программы, которую написал программист, она нам поможет
правильно и без особых затруднений заполнить все столбцы таблицы, а также быстрее
ответить и оформить ответ на второй вопрос задания.
Учитывая все условия программы, блок-схема получаем следующего вида:
8
Нет
Д
y>=x
а
Нет
Д
y>=0
а
Нет
y<=2-
Д
x*x
а
не
принадлежи
принадлежит
т
рис. 9
Чтобы заполнить таблицу, берем точки из различных областей и, двигаясь по блоксхеме, проверяем каждое условие программы, и в соответствии заполняя таблицу:
Область
Условие 1
(y>=x)
Условие 2
(y>=0)
Условие 3
(y<=2-x*x)
Программа
выведет
Область
обрабатывается
верно?
A
да
да
нет
не
принадлежит
да
B
да
нет
-
-
нет
C
нет
-
-
-
нет
D
нет
-
-
-
нет
E
да
да
да
принадлежит
да
F
да
нет
-
-
нет
G
нет
-
-
-
нет
При заполнении столбца со вторым условием сразу можно поставить прочерки в тех
строках, где предыдущее условие не верно («нет»). Аналогично с заполнением столбцов
следующих условий.
По таблице видно, что программа работает неверно в тех случаях, где в столбце
«Программа выведет» стоят прочерки, так как при введении координат точек из любых
областей координатной плоскости программа должна выводит сообщения либо
«Принадлежит», либо «Не принадлежит», а в при запуске программы, которую написал
9
программист, мы получаем вывод такого рода сообщений только для точек, которые
принадлежат областям А и Е.
Для ответа на второй вопрос задания нам необходимо разбить замкнутую область,
образующуюся на координатной плоскости графиками функций, на несколько областей,
которые будут ограничиваться не более чем тремя графиками функций. Например,
возможное разбиение замкнутой области может быть следующим: область, ограниченная
сверху графиком функции 𝑦 = 2 − 𝑥 2 и снизу осью абсцисс (область, закрашенная
розовым цветом) и область, ограниченная сверху также графиком функции 𝑦 = 2 − 𝑥 2 и
снизу прямой 𝑦 = 𝑥 (область, заштрихованная синими линиями):
𝑦=𝑥
𝑦 = 2 − 𝑥2
рис. 10
Таким образом, все точки, которые мы должны учитывать, то есть те, которые
принадлежат исходной замкнутой области – это точки, принадлежащие либо области,
закрашенной розовым цветом, либо точки, принадлежащие области, заштрихованной
синими линиями.
Условие принадлежности точки, которая находиться в области, закрашенной
розовым цветом: (𝑦 ≤ 2 − 𝑥 2 ) and (𝑦 ≥ 0). Условие принадлежности точки, которая
находиться в области, заштрихованной синими линиями: (𝑦 ≤ 2 − 𝑥 2 ) and (𝑦 ≥ 𝑥)
Объединив эти два условия, мы получаем общее сложное условие принадлежности
точки исходной замкнутой области:
If ((𝑦 ≤ 2 − 𝑥 2 ) and (𝑦 ≥ 0)) or ((𝑦 ≤ 2 − 𝑥 2 ) and (𝑦 ≥ 𝑥)
then writeln (‘точка принадлежит’)
else writeln (‘точка не принадлежит’);
10
Либо преобразовав и упростив можно получить еще один вид условия:
If (𝑦 ≤ 2 − 𝑥 2 ) and ((𝑦 ≥ 0)) or (𝑦 ≥ 𝑥)) then writeln (‘точка принадлежит’)
else writeln (‘точка не принадлежит’);
Таким образом, при решении задач С1 вариантов ЕГЭ о принадлежности точки
замкнутой области прежде всего нужно:
1. Построить блок-схему по программе, которую неверное написал программист и
по ней определить, в чем ошибка (как правило, при невыполнении некоторых
условий программа выводит пустые сообщения);
2. Обратить внимание, графики каких функций образовывают замкнутую область
(особое внимание уделить тригонометрическим функциям – учесть их
𝑘
периодичность, а также функциям вида 𝑦 = );
𝑥
3. По блок-схеме построить ту замкнутую область, которая строиться по условиям
задачи, написанной программистом, посмотреть, каких областей не хватает или
наоборот лишние;
4. При лишних областях – добавить условие, которое «отсечет» эти лишние
области; при недостающих – постараться разбить исходную замкнутую область
на несколько областей, которые будут образовывать исходную область, а сами
ограничены не более чем тремя графиками функций.
11
Источники:
1. http://kpolyakov.narod.ru/school/ege.htm
2. Диагностические и тренировочные работы СтатГрад МИОО 2011, 2012 годов
12
Download