Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Else write('не принадлежит')



else write('не принадлежит');

обратите внимание, что точка с запятой есть только после самого последнего оператора write, так как остальные стоят перед ключевым словом else, перед которым точка с запятой не ставится

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

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

var x, y: real;

Begin

readln(x, y);

if (x > = 0) and (x < = pi/2) and

(y < = 1) and (y > = sin(x)) then

Write('принадлежит')

else write('не принадлежит');

End.

здесь использовано сложное условие, в котором 4 отношения связаны операциями and («И», требуется одновременное выполнение всех условий)

 

Возможные проблемы: · как правило, в этой задаче требуется использовать знания из курса математики (решение уравнений, графики функций, область допустимых значений, составление уравнений прямой по приведенному графику) · как показывает анализ опубликованных задач этого типа, нужно уметь, прежде всего, разбираться в серии вложенных условных операторов в полной и неполной форме · неправильная «лесенка» в записи сбивает с толку и подталкивает к неверному решению; чтобы разобраться в программе, лучше на черновике построить блок-схему алгоритма и правильную «лесенку» · чтобы не запутаться, к какому оператору относится else, используйте следующее правило: o если перед else нет слова end, нужно искать ближайший сверху условный оператор if o если перед else стоит end (конец блока), нужно искать парный ему begin (начало блока) и соответствующий условный оператор if... then begin · проверяйте, все ли необходимые условия учтены в программе, это особенно актуально для немонотонных функций типа синуса или косинуса (немонотонные функции на некоторых участках возрастают при увеличении аргумента, а на некоторых – убывают); например, в этой задаче можно пропустить необходимость выполнения условия · не перепутайте, где нужно использовать операцию and («И», одновременное выполнение условий), а где –or («ИЛИ», хотя бы одно условие) · нужно внимательно проверять, всегда ли программа выдает сообщение, если заданное условие не выполняется · часто бывает полезно нарисовать блок-схему алгоритма, которая позволяет увидеть ход выполнения программы при всех возможных вариантах · проверяйте, включает ли заданная область свои границы; если включает – в отношениях будут нестрогие неравенства (< =, > =), если не включает – строгие (<, > ) · при оценке работы можно (при абсолютно правильном решении) потерять баллы из-за синтаксических ошибок в программе (скобки, точки с запятой, неправильное написание оператора и т.п.); не забывайте, что o в сложном условии все простые условия (отношения) нужно брать в скобки, так как в Паскале отношения при вычислении логического выражения имеют самый низкий приоритет o перед else точка с запятой никогда не ставится o в конце программы после последнего end ставится точка

 

За что снимают баллы: · неправильно определены входные данные, при которых исходная программа работает неверно · исправлены не все ошибки в программе, например, легко «просмотреть», что необходимо еще условие · программа работает правильно в большем количестве случаев, чем исходная, но не для всех возможных исходных данных · перепутаны знаки < и >, логические операции or и and · неверно расставлены операторные скобки begin-end · синтаксические ошибки (знаки пунктуации – запятые, точки, точки с запятой; неверное написание ключевых слов); чтобы получить 3 балла, нужно при абсолютно правильном решении сделать не более одной синтаксической ошибки; на 2 балла – до двух ошибок, на 1 балл – до трех ошибок

Задачи для тренировки [2]:

1) Требовалось написать программу, которая решает уравнение « » относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно:

var a, b, x: real;

Begin

readln(a, b, x);

if a = 0 then

if b = 0 then

Write ('любое число')

Else write ('нет решений')

Else

if b = 0 then

write('x = 0')

else write('x =', b/a, ' или x =', -b/a);

End.

Последовательно выполните три задания: 1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу. 2) Укажите, какая часть программы является лишней. 3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).

 

2) Требовалось написать программу, которая решает уравнение « » относительно x для любых чисел a и b, введенных с клавиатуры. Все числа считаются действительными. Программист торопился и написал программу неправильно:

var a, b, x: real;

Begin

readln(a, b, x);

if b = 0 then

write('x = 0')

Else

if a = 0 then

Write('нет решений')

Else

write('x =', -b/a);

End.

Последовательно выполните три задания: 1) Приведите пример таких чисел a, b, x, при которых программа неверно решает поставленную задачу. 2) Укажите, какая часть программы является лишней. 3) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы).

 

3) Требовалось написать программу, которая определяет, лежит ли точка А(х0, у0) внутри треугольной области, ограниченной осями координат и прямой («внутри» понимается в строгом смысле, т.е. случай, когда точка А лежит на границе области, недопустим). В результате программа должна выводить соответствующее текстовое сообщение. Программист сделал в программе ошибки.

var x0, у0, у: real;

Begin

readln (x0, y0);

if (x0 < 2)then begin

if (x0 > 0)then begin

у: = 2 – х0;

if (y0 < у) then


Поделиться:



Последнее изменение этой страницы: 2016-04-10; Просмотров: 2176; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.018 с.)
Главная | Случайная страница | Обратная связь