Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Readln(x,y);. if (y <=2-x*x) and ((y>=x) or (y>=0)) then
if (y < =2-x*x) and ((y> =x) or (y> =0)) then write('принадлежит') Else write('не принадлежит') End. Ещё пример задания: Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости ( x, y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно. Вот она: 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) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу. 2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы). Решение: 1) сначала лучше отложить в сторону программу и попытаться написать условие, которым должны отвечать точки, попавшие в выделенную область 2) заштрихованная область ограничена по координате , она находится · справа от оси , что равносильно условию (с учетом границы здесь и далее получаем нестрогие неравенства) · слева от первого максимума функции ; из математики мы знаем, что эта функция достигает максимума при , поэтому получаем второе условие 3) заштрихованная область ограничена с двух сторон по координате : она находится · ниже линии , откуда следует третье условие · выше линии , что дает четвертое условие 4) итак, точка находится в заданной области, если все эти четыре условия выполняются одновременно; можно предположить, что в программе нужно использовать четыре вложенных условных оператора или один условный оператор, в котором четыре простых условия (отношения , , и ) связаны с помощью логической операции and («И», одновременное выполнение всех условий) 5) теперь смотрим на программу: здесь три (а не четыре!) вложенных условных оператора с простыми отношениями, поэтому явно какое-то условие не учтено; легко найти, что «забыли» условие 6) оператор write('принадлежит') помещен внутрь всех трех условных операторов, то есть, он выполнится тогда, когда три (а не четыре!) условия истинны; 7) отметим на рисунке область, где выполняются все нужные условия, кроме (красная зона); 8) для всех точек, которые находятся в «красной» зоне программа выдаст сообщение «принадлежит», хотя в самом деле эти точки не принадлежит заданной области; одна из таких точек имеет координаты 9) теперь выясним, когда программа выдает сообщение «не принадлежит» if y < = 1 then if x > = 0 then if y > = sin(x) then write('принадлежит') else write('не принадлежит') 10) судя по записи «лесенкой», else относится к самому первому оператору if, однако в самом деле это не так; перед словом else нет end, поэтому ищем ближайший if: это самый внутренний оператор, правильная запись «лесенкой» выглядит так: if y < = 1 then if x > = 0 then if y > = sin(x) then write('принадлежит') else write('не принадлежит') 11) этот фрагмент программы соответствует блок-схеме, которая показана на рисунке справа: 12) по схеме видим, что при (первое условие ложно), 13) итак, первая часть ответа такова примеры входных данных, на которых программа работает неверно: 14) остается исправить эту программу; if x < = pi/2 then if y < = 1 then if x > = 0 then if y > = sin(x) then write('принадлежит') else write('не принадлежит') else write('не принадлежит') else write('не принадлежит') else write('не принадлежит'); обратите внимание, что точка с запятой есть только после самого последнего оператора write, так как остальные стоят перед ключевым словом else, перед которым точка с запятой не ставится 15) хотя приведенный выше метод дает работоспособную программу, она получается слишком длинная и некрасивая для такой простой задачи; достаточно сказать, что оператор 16) более элегантное решение формулируется на словах так: «точка принадлежит области, если выполняются одновременно 4 приведенных выше условия, а иначе – не принадлежит»; а вот реализация на Паскале (приведем программу-ответ целиком): var x, y: real; Begin
|