Структурная схема вычисления значения функции в виде блок-схемы
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ
ЗАДАНИЕ № 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.
ВЫСТРЕЛ ПО МИШЕНИ