Содержание
-
Решение задач С1 части С Единого государственного экзамена
Автор – Богачёва Г.В. Учитель информатики Лицей 144 Санкт-Петербурга
-
Для решения задач С1 необходимо:
Проанализировать геометрический чертёж, выделив условия, ограничивающие заштрихованную область (причём в задаче 2010 года, а также в демоверсии 2011 года условие задачи значительно усложнилось с математической точки зрения) Выяснить, как связаны между собой эти условия (если областей несколько, определить, в каких отношениях находятся фигуры – разбиение, объединение, исключение и т.д), другими словами, составить сложное условие, описывающее выделенную область.
-
Проанализировать данную в условии программу, выявив ошибки: недостаток условий и ошибку в алгоритме, связанную с использованием вложенных условных операторов. Чётко ответить на вопросы задачи: указать координаты точки, для которой программа не выводит «не принадлежит». Предложить метод доработки, лучше с использованием сложных условий, это исключит ошибки при написании вложенных условных операторов.
-
При решении задач этого типа основные методы –анализ и синтез. При подготовке к решению задач последовательно изучаются следующие темы: правила построения программы на изучаемом языке, правила работы с переменными, полная и неполная формы ветвления, использование операторных скобок begin end в операторах ветвления, составление сложных условий с помощью логических операций и, наконец, использование вложенных условных операторов. Весь материал по этой теме блестяще изложен у К.Ю. Полякова, презентациями и сайтом которого я регулярно пользуюсь.
-
Условие задачи 1:
-
Решение задачи 1:
не обращая внимание на программу, анализируем чертёж, выявив условия, которым отвечают координаты точек заштрихованной области. заштрихованная область находится справа от оси абцисс, что равносильно первому условию (с учетом границы здесь и далее получаем нестрогие неравенства) слева от линии 1,5, поэтому получаем второе условие
-
заштрихованная область ограничена с двух сторон по координате ординат: она находится ниже линии y
-
анализируем программу: здесь только три вложенных условных оператора с простыми отношениями, поэтому какое-то условие не учтено; определяем, что не учтено условие оператор write('принадлежит') помещен внутрь всех трех условных операторов, то есть, он выполнится тогда, когда только три условия истинны; отметим на рисунке область, где выполняются все нужные условия, кроме (красная зона);
-
для всех точек, которые находятся в «красной» зоне программа выдаст сообщение «принадлежит», хотя в самом деле эти точки не принадлежит заданной области; одна из таких точек имеет координаты теперь выясним, когда программа выдает сообщение «не принадлежит» if y = 0 then write('принадлежит') elsewrite('не принадлежит') x = -2, y = 1
-
можно подумать, else относится к самому первому оператору if, однако в самом деле это не так; перед словом else нет end, поэтому ищем ближайший if:это самый внутренний оператор, правильная запись «лесенкой» выглядит так: if y = 0 then write('принадлежит') else write('не принадлежит')
-
этот фрагмент программы соответствует блок-схеме, которая показана на рисунке: да нет принадлежит y>=0 да x
-
по схеме видим, что при (первое условие ложно), а также при (второе условие ложно) программа вообще не выдает никакого сообщения, то есть, работает неправильно; таким образом, координаты любой точки, для которойили , могут быть указаны в ответе как пример набора входных данных, при которых программа работает неправильно x=2, y=6 итак, первая часть ответа примеры входных данных, на которых программа работает неверно:(x= -2, y= 1) (неправильно определяет принадлежность точки области) (x=2, y=6) или (x= 5, y=0) (не выдает вообще никакого сообщения)
-
остается исправить эту программу; 1 способ: добавим в программу четвертый (вложенный) условный оператор, проверяющий условие, и еще три блока else, чтобы выводить строку «не принадлежит» в том случае, когда хотя бы один из них не сработал: if x >= 0 then if y = 0 then write('принадлежит') else write('не принадлежит') else write('не принадлежит') else write('не принадлежит') else write('не принадлежит');
-
обратите внимание, что точка с запятой есть только после самого последнего оператора write, так как остальные стоят перед ключевым словом else, перед которым точка с запятой не ставится хотя приведенный выше метод дает работоспособную программу, она нерациональна для такой задачи; видно, что оператор write('не принадлежит') повторяется в тексте 4 раза
-
более элегантное решение формулируется на словах так: «точка принадлежит области, если выполняются одновременно 4 приведенных выше условия, а иначе – не принадлежит»; а вот реализация на Паскале: var x,y: real; begin readln(x,y); if (x >= 0) and (y = 0) then write('принадлежит') else write('не принадлежит'); end. здесь использовано сложное условие, в котором 4 отношения связаны операциями and («И», требуется одновременное выполнение всех условий)
-
Условие задачи 2:
-
Решение задачи 2:
Изложим решение менее подробно, чем в первой задаче. Анализируем чертёж, определяем условия: разбиваем заштрихованную область на 2 части прямой x=0: 1 фигура: y
-
Анализируем приведённую в задании программу. Отметим на рисунке область, где выполняются все условия, проверка которых есть в программе, красным цветом. Видно, что точки частей выделенной области, закрашенных синим цветом, в проверяемую область не входят, и, следовательно, программа ошибочно даст «не принадлежит». Координаты одной из таких точек x = 0,5, y = 0,2
-
Теперь выясним, когда программа выдает сообщение «не принадлежит». Анализируя вложенные условия, видим, что ветвь else относится к внутреннему оператору, соответственно, при y
-
Первая часть ответа такова: примеры входных данных, на которых программа работает неверно:(x = 0,5, y = 0,2) (неправильно определяет принадлежность точки области) (x=1, y= -3) (не выдает вообще никакого сообщения) Приведём наиболее рациональную форму доработки программы, использование которой исключает ошибки при написании вложенных условных операторов: var x,y: real; begin readln(x,y); if (y = 0) and (x>=0) or (x= x) and (y
-
Источники:
http://kpolyakov/narod.ru (сайт К.Ю. Полякова) Условия задач взяты из экзаменационных материалов прошлых лет.
Нет комментариев для данной презентации
Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.