![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Readln(x,y);. write('не принадлежит')
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). Точки, лежащие на границах областей, отдельно не рассматривать. В столбцах условий укажите " да", если условие выполнится, " нет" если условие не выполнится, " —" (прочерк), если условие не будет проверяться, «не изв.», если программа ведет себя по-разному для разных значений, принадлежащих данной области. В столбце " Программа выведет" укажите, что программа выведет на экран. Если программа ничего не выводит, напишите " —" (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв». В последнем столбце укажите " да" или " нет". 2. Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы). Решение: 21) начнем заполнять таблицу, выписывая истинность каждого из трёх условий 22) условие y> =x истинно выше прямой y=x, то есть в областях A, B, E, F
23) условие y> =0 истинно выше прямой y=0, то есть в областях A, E, G, однако это условие проверяется только тогда, когда первое условие, y> =x, истинно; поэтому для всех областей, где первое условие неверно (это области C, D, G), сразу в столбце второго условия ставим прочерк (условие не будет проверяться)
24) третье условие выполняется для областей «внутри» параболы, то есть для E, F, G, D; однако оно проверяется только тогда, когда первые два истинны (для А и Е), в остальных строках ставим прочерк:
25) как следует из текста программы, она выведет что-то на экран только в том случае, когда выполняются первые два условия и программа выходит на третье: для области А будет выведено «не принадлежит», для области Е – «принадлежит», именно в этих двух случаях программа работает правильно, в остальных – нет:
26) для того, чтобы доработать программу, проще всего составить одно сложное условие, описывающее всю заштрихованную область 27) в данном случае удобно представить данную область в виде объединения областей, первая из которых включает области E+G, а вторая – области E+F 28) область E+G соответствует условию (y> =0) and (y < =2-x*x) 29) область E+F соответствует условию (y> =x) and (y < =2-x*x) 30) объединение областей выполняется с помощью операции ИЛИ (or), так что полное условие принимает вид (y> =0) and (y < =2-x*x) or (y> =x) and (y < =2-x*x) поскольку операция И (and) имеет более высокий приоритет, чем ИЛИ (or), порядок выполнения операций тут правильный; в случае сомнений можно поставить дополнительные скобки: ((y> =0) and (y < =2-x*x)) or ((y> =x) and (y < =2-x*x)) 31) поскольку в обоих условиях есть условие y < =2-x*x, запись можно немного сократить: (y < =2-x*x) and ((y> =x) or (y> =0)) 32) доработанная программа выглядит так: var x, y: real; Begin
|