Студопедия — Readln(x,y);
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

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)
да
нет
 
принадлежит  
 
y >= sin(x)  
да
 
x >= 0  
да
 
y <= 1  
 
не принадлежит  
нет
нет
этот фрагмент программы соответствует блок-схеме, которая показана на рисунке справа:

12) по схеме видим, что при (первое условие ложно), а также при (второе условие ложно) программа
вообще не выдает никакого сообщения, то есть, работает неправильно; таким образом, координаты любой точки, для которой или , могут быть указаны в ответе как пример набора входных данных, при которых программа работает
неправильно

13) итак, первая часть ответа такова

примеры входных данных, на которых программа работает неверно:
(x=3.14, y=0.5) (неправильно определяет принадлежность точки области)
(x=0, y=2) или (x=-1, y=0) (не выдает вообще никакого сообщения)

14) остается исправить эту программу;
начнем с самого «лобового способа»: добавим в программу четвертый (вложенный) условный оператор, проверяющий условие , и еще три блока else, чтобы выводить строку «не принадлежит» в том случае, когда хотя бы один из них не сработал:

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) хотя приведенный выше метод дает работоспособную программу, она получается слишком длинная и некрасивая для такой простой задачи; достаточно сказать, что оператор
write('не принадлежит') повторяется в тексте 4 раза

16) более элегантное решение формулируется на словах так: «точка принадлежит области, если выполняются одновременно 4 приведенных выше условия, а иначе – не принадлежит»; а вот реализация на Паскале (приведем программу-ответ целиком):

var x,y: real;

Begin







Дата добавления: 2015-08-29; просмотров: 403. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Ситуация 26. ПРОВЕРЕНО МИНЗДРАВОМ   Станислав Свердлов закончил российско-американский факультет менеджмента Томского государственного университета...

Различия в философии античности, средневековья и Возрождения ♦Венцом античной философии было: Единое Благо, Мировой Ум, Мировая Душа, Космос...

Характерные черты немецкой классической философии 1. Особое понимание роли философии в истории человечества, в развитии мировой культуры. Классические немецкие философы полагали, что философия призвана быть критической совестью культуры, «душой» культуры. 2. Исследовались не только человеческая...

Стресс-лимитирующие факторы Поскольку в каждом реализующем факторе общего адаптацион­ного синдрома при бесконтрольном его развитии заложена потенци­альная опасность появления патогенных преобразований...

ТЕОРИЯ ЗАЩИТНЫХ МЕХАНИЗМОВ ЛИЧНОСТИ В современной психологической литературе встречаются различные термины, касающиеся феноменов защиты...

Этические проблемы проведения экспериментов на человеке и животных В настоящее время четко определены новые подходы и требования к биомедицинским исследованиям...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия