Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемМаргарита Наточиева
1 Ключевая тема этого задания ЕГЭ – использование вложенных условных операторов, причем в тексте задания фрагмент программы обычно записан без отступов «лесенкой» или с неправильными отступами, например, так: if a = b then begin if a = c then c:=1; end else c:=0; if a = b then if a = c then c:=1 else c:=0; К какому из условных операторов if относится часть else? Правило: «Любой else относится к ближайшему if » Фрагмент справа: в нем перед else стоит end, поэтому для нужно найти соответствующий ему begin ; поэтому else относится к первому (внешнему) условному оператору Фрагмент справа перед else нет end, поэтому он относится к ближайшему по тексту внутреннему условному оператору блок-схемы для двух фрагментов показаны ниже, желтым цветом выделен «переехавший»
2 Блок-схемы для фрагмента слева желтым цветом выделен «переехавший» оператор a = b? нетда c:=0; a = c? да c:=1; нет if a = b then begin if a = c then c:=1; end else c:=0;
3 a = b? нетда a = c? да c:=1 ; нет c:=0 ; if a = b then if a = c then c:=1 else c:=0; Блок-схемы для фрагмента справа желтым цветом выделен «переехавший» оператор
4 Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости ( x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она: var x,y: real; begin readln(x,y); if y = 0 then if y >= sin(x) then write('принадлежит') else write('не принадлежит') end. Последовательно выполните следующее: 1)Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2)Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).
5 Решение: 1) Сначала попытайтесь написать условия, которым должны отвечать точки, попавшие в выделенную область: Итак, точка находится в заданной области, если все эти четыре условия выполняются одновременно. Значит в программе нужно использовать четыре вложенных условных оператора или один условный оператор, в котором четыре простых условия (отношения,,, ) связаны с помощью логической операции and («И», одновременное выполнение всех условий)
6 Теперь смотрим на программу: здесь три (а не четыре!) вложенных условных оператора с простыми отношениями, поэтому явно какое-то условие не учтено; легко найти, что «забыли» условие Оператор write('принадлежит') помещен внутрь всех трех условных операторов, то есть, он выполнится тогда, когда три (а не четыре!) условия истинны; 4) отметим на рисунке область, где выполняются все нужные условия, кроме (красная зона); для всех точек, которые находятся в «красной» зоне программа выдаст сообщение «принадлежит», хотя в самом деле эти точки не принадлежит заданной области; одна из таких точек имеет координаты var x,y: real; begin readln(x,y); if y = 0 then if y >= sin(x) then write('принадлежит') else write('не принадлежит') end.
7 Теперь выясним, когда программа выдает сообщение «не принадлежит» if y = 0 then if y >= sin(x) then write('принадлежит') else write('не принадлежит') да нет принадлежит y >= sin(x) да x >= 0 да y
8 остается исправить эту программу; добавим в программу четвертый (вложенный) условный оператор, проверяющий условие и еще три блока else, чтобы выводить строку «не принадлежит» в том случае, когда хотя бы один из них не сработал: if x = sin(x) then write('принадлежит') else write('не принадлежит') else write('не принадлежит'); обратите внимание, что точка с запятой есть только после самого последнего оператора write, так как остальные стоят перед ключевым словом else, перед которым точка с запятой не ставится Хотя приведенный выше метод дает работоспособную программу, она получается слишком длинная и некрасивая для такой простой задачи; достаточно сказать, что оператор write('не принадлежит') повторяется в тексте 4 раза
9 Более элегантное решение формулируется на словах так: «точка принадлежит области, если выполняются одновременно 4 приведенных выше условия, а иначе – не принадлежит»; а вот реализация на Паскале (приведем программу-ответ целиком): var x,y: real; begin readln(x,y); if (x >= 0) and (x = sin(x)) then write('принадлежит') else write('не принадлежит'); end. здесь использовано сложное условие, в котором 4 отношения связаны операциями and («И», требуется одновременное выполнение всех условий)
10 как показывает анализ опубликованных задач этого типа, нужно уметь, прежде всего, разбираться в серии вложенных условных операторов в полной и неполной форме неправильная «лесенка» в записи сбивает с толку и подталкивает к неверному решению; чтобы разобраться в программе, лучше на черновике построить блок-схему алгоритма и правильную «лесенку»чтобы не запутаться, к какому оператору относится else, используйте следующее правило: если перед else нет слова end, нужно искать ближайший сверху условный оператор if если перед else стоит end (конец блока), нужно искать парный ему begin (начало блока) и соответствующий условный оператор if... then begin проверяйте, все ли необходимые условия учтены в программе, это особенно актуально для немонотонных функций типа синуса или косинуса (немонотонные функции на некоторых участках возрастают при увеличении аргумента, а на некоторых – убывают); например, в этой задаче можно пропустить необходимость выполнения условия не перепутайте, где нужно использовать операцию and («И», одновременное выполнение условий), а где – or («ИЛИ», хотя бы одно условие) нужно внимательно проверять, всегда ли программа выдает сообщение, если заданное условие не выполняется часто бывает полезно нарисовать блок-схему алгоритма, которая позволяет увидеть ход выполнения программы при всех возможных вариантах проверяйте, включает ли заданная область свои границы; если включает – в отношениях будут нестрогие неравенства ( =), если не включает строгие ( )
11 при оценке работы можно (при абсолютно правильном решении) потерять баллы из-за синтаксических ошибок в программе (скобки, точки с запятой, неправильное написание оператора и т.п.); не забывайте, что в сложном условии все простые условия (отношения) нужно брать в скобки, так как в Паскале отношения при вычислении логического выражения имеют самый низкий приоритет перед else точка с запятой никогда не ставится в конце программы после последнего end ставится точка За что снимают баллы: неправильно определены входные данные, при которых исходная программа работает неверн исправлены не все ошибки в программе, например, легко «просмотреть», что необходимо еще условие программа работает правильно в большем количестве случаев, чем исходная, но не для всех возможных исходных данных перепутаны знаки, логические операции or и and неверно расставлены операторные скобки begin-end синтаксические ошибки (знаки пунктуации – запятые, точки, точки с запятой; неверное написание ключевых слов); чтобы получить 3 балла, нужно при абсолютно правильном решении сделать не более одной синтаксической ошибки; на 2 балла – до двух ошибок, на 1 балл – до трех ошибок
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.