Структурная схема вычисления значения функции в виде блок-схемы

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ

ЗАДАНИЕ № 1.

Составить алгоритм и написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика. Параметр R вводится с клавиатуры. (Теоретический материал по данной теме изложен в лекциях № 6, 15).

Номер варианта ЗАДАНИЕ
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.

ЗАДАНИЕ № 2.

Составить алгоритм и написать программу, которая определяет, попадет ли точка с заданными координатами в область, закрашенную на рисунке серым цветом. Результат работы программы вывести в виде текстового сообщения. (Теоретический материал по данной теме изложен в лекциях № 6, 15).

Номер варианта ЗАДАНИЕ   Номер варианта ЗАДАНИЕ

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.

После выполнения данного практикума студент должен знать:

v Если в одном условном операторе требуется проверить выполнение нескольких условий, они записываются после ключевого слова if и объединяются с помощью логических операций and, or, xor и not. Получившееся выражение вычисляется в соответствии с приоритетами операций.

v Если в какой-либо ветви вычислений условного оператора if требуется выполнить более одного оператора, то они объединяются в блок с помощью ключевых слов begin и end.

v Проверка вещественных величин на равенство опасна.

v В операторе варианта выражение, стоящее после ключевого слова case, и константы, помечающие ветви, должны быть одного и того же порядкового типа.

v Рекомендуется всегда описывать в операторе case ветвь else.

v Оператор case предпочтительнее оператора if в тех случаях, когда количество направлений вычисления в программе больше двух, а выражение, по значению которого производится переход на ту или иную ветвь, имеет порядковый тип. Часто это справедливо даже для двух ветвей, поскольку повышает наглядность программы.

Приложение № 1.

ВЫЧИСЛЕНИЕ ЗНАЧЕНИЯ ФУНКЦИИ

Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика на интервале [-3, 3]:

Начинать решение даже простейшей задачи необходимо с четкого описания ее исходных данных и результатов. В данном случае это очевидно: исходными данными является вещественное значение аргумента x, который определен на интервале [-3, 3], а результатом – вещественное значение функции y. Поэтому для представления этих величин в программе следует выбирать тип real.

Перед написанием программы следует составить алгоритм ее решения – сначала в общем виде, а затем постепенно детализируя каждый шаг. Такой способ, называемый нисходящей разработкой, позволяет создавать простые по структуре программы. Сначала запишем функцию в виде формул (сделаем математическую постановку задачи):

Далее приведем описание алгоритма в неформальной словесной форме:

1. Ввести значение аргумента x.

2. Проверить, принадлежит ли оно области определения функции.

3. Если не принадлежит, вывести диагностическое сообщение и завершить программу.

4. Определить, какому интервалу из области определения функции принадлежит введенное значение, и вычислить значение функции y по соответствующей формуле.

5. Вывести значение y.

Опишем четвертый пункт алгоритма более подробно:

o Если аргумент x принадлежит интервалу [-3; -2), то .

o Если аргумент x принадлежит интервалу [-2; 0), то .

o Если аргумент x принадлежит интервалу [0; 1), то .

o Если аргумент x принадлежит интервалу [1; 3], то .

Рис. 1.

Структурная схема вычисления значения функции в виде блок-схемы

По такому алгоритму можно практически «один в один» написать программу:

{***************************************************}

{Программа: FUNC. }

{Цель: вычисление значения функции. }

{Программист: Иванов И.И. }

{Дата выполнения: 10 апреля 2006 г. }

{***************************************************}

ProgramFUNC;

Var X, Y : real;

Begin

Writeln(‘Введите значение аргумента’);

Read(X);

Wriyeln(‘X=’, X);

If (x<-3) or (x>3) then begin

Writeln(‘Значение должно принадлежать интервалу [-3; 3]’);

exit

end;

If x<-2 then y:=-2*x-5;

If (x>=-2) and (x<0) then y:=-sqrt(1-sqr(x+1))-1;

If (x>=0) and (x<1) then y:=x-1;

If x>=1 then y:=sqrt(1-sqr(x-2));

Writeln(‘Для x= ’, x:6:2, ‘значение функции y= ’, y:6:2)

End.{FUNC}

Следует обратить внимание на запись условий, содержащих два сравнения. Начинающие часто записывают такие условия, просто воспроизводя математическую формулу, т.е. как a<x<b. Ошибка состоит в том, что операции отношения являются бинарными, т.е. должны иметь два операнда. И если надо проверить два условия (a<x и x<b), то и операций должно быть две. Поскольку необходимо, чтобы эти условия выполнялись одновременно, они объединены с помощью операции логического умножения И (and), т.е. выражение принимает вид (a<x) and (x<b). Заключать каждое условие в круглые скобки необходимо потому, что логические операции имеют более высокий приоритет, чем операции отношения. При отсутствии скобок сначала будет предпринята попытка выполнить операцию x and x2, что вряд ли соответствует замыслу.

Первый и последний условные операторы записаны без двойных условий, потому что проверка того, что аргумент находится в диапазоне [-3; 3], выполнена раньше. Стандартная процедура exit обеспечивает выход из программной единицы, в которой она записана. Тестовые примеры для этой программы должны включать, по крайней мере, по одному значению аргумента из каждого интервала, а для проверки граничных условий – еще и все точки перегиба.

При работе приведенной выше программы всегда выполняется один за другим все четыре условных оператора, при этом истинным оказывается только одно условное выражение и, соответственно, присваивание значения переменной y выполняется один раз. Запишем условные операторы так, чтобы уменьшить количество проверок:

If x<-2 then y:=-2*x-5

else if x<0 then y:=-sqrt(1-sqr(x+1))-1

else if x<1 then y:=x-1

else y:=sqrt(1-sqr(x-2));

Этот вариант вычисления значения функции иллюстрирует следующая блок-схема:

Рис. 2. Второй вариант вычисления значения функции.

Во втором варианте проверка на принадлежность аргумента очередному интервалу выполняется только в том случае, если x не входит в предыдущий интервал. Программа получилась более компактной, более эффективной, но, возможно, менее наглядной. В отличие от предыдущей версии, порядок следования условных операторов имеет здесь большое значение. Какой же вариант лучше? Для решения данной задачи разница между ними несущественна, но цель состоит в том, чтобы на простых примерах продемонстрировать общие принципы, следование которым позволит впоследствии создавать надежные и красивые программы. Наиболее наглядным является первый вариант программы, поскольку по нему проще проследить логику ее работы.

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

Приложение № 2.

ВЫСТРЕЛ ПО МИШЕНИ

Наши рекомендации