Содержание занятия: Использование операторов IF и CASE для программирования ветвящихся алгоритмов.
Задача. Найти значение функции:
1.Теория.
Найти значение функции можно, подставляя значение x в формулу для f(x), если она определена. Расчет значения функции возможен, если A=х2 - 3x - 15 > 0, при A £ 0 то функция не определена.
2) План:
а) описание переменных x, f, A
б) ввод x
в) расчет A= x2 - 3x – 15
г) если A > 0
да : нет :
печать ” при x = … ф-ция не определена”
печатать значения x, f
конец
3. Условный и составной операторы
Для реализации ветвления можно использовать условный оператор:
if условие then оператор1
else оператор2;
где условие – это выражение логического типа (например, а>0, (d<0) and (c=5) и другие). Если условие выполняется, то выполняется ветвь then, т.е. оператор1; если условие не выполняется – то оператор2.
Если в какой-либо ветви нужно выполнить не один, а несколько операторов, необходимо поместить эти операторы внутри составного оператора begin ... end, как в приведенной ниже программе. В этом случае последовательность операторов, объединенная в группу внутри begin ... end рассматривается как один оператор или блок. Составной оператор используется в тех случаях, когда по правилам языка допускается использовать только один оператор, а требуется выполнить несколько действий. Такой случай часто возникает при написании условных операторов, операторов выбора и цикла.
3) Программа:
program vetv;
varx, f, A: real;
Begin
write(‘Введите x ’);
read(x);
A:=sqr(x) – 3*x – 15;
if A>0 then
Begin
f:=1/sqrt(A);
writeln(‘f(‘,x:2:1,’)=’,f:5:3);
End
else writeln (‘при x=’,x:3:1,’ функция не определена’);
End.
Обратите внимание на то, что так как составной оператор стоит в ветви then, и после него условный оператор не заканчивается, то точка с запятой (знак конца оператора) не поставлен.
4. Усеченный условный оператор и оператор безусловного перехода.
Возможно использование усеченного условного оператора
if условие then оператор;
При этом, если условие не выполняется, то ветвь then игнорируется и управление передается следующему за if оператору. При этом часто необходимо пользоваться метками, которые отмечают некоторые нужные программисту операторы программы. Метки –это набор цифр или букв, отделяются от помечаемых операторов двоеточием (см. программу ниже). В языке Паскаль принято перед использованием метки описывать, т.е. перечислять в блоке описания label через запятую. Можно организовать переход к метке с помощью оператора goto m, где m-метка. Рассматриваемую задачу можно запрограммировать по-другому.
Другая программа:
program vetv1;
label1;
Var
x, f, A: real;
Begin
write(‘Введите x ’);
read(x);
A:=sqr(x) – 3*x – 15;
if A>0 then goto 1;
writeln (‘при x=’,x:2:1,’ функция не определена’);
exit;
1: f:=1/sqrt(A);
writeln(‘x=’,x:3:1,’ f=’,f:6:3);
end.
Однако, такая программа считается хуже предыдущей, так как использует оператор goto. В настоящее время считается возможным программировать вообще без goto.
5. Оператор выбора.
Если для решения задачи нужно организовать более двух ветвей, удобно использовать оператор выбора CASE. Общий вид оператора;
case селектор of
значение 1: оператор 1;
значение 2: оператор 2;
………
значение N: оператор N;
else оператор
end;
где селектор это переменная или выражение целого, символьного (char) типов, допустимы и некоторые другие типы. Набор значений - это конкретные значения сектора, при которых будет выполнен соответственно нужный оператор.
Работа оператора: сначала вычисляется значение селектора, если он является выражением. Затем выполняется тот оператор, который соответствует значению, совпадающему со значением селектора. Если значение сектора не совпало ни с одним из указанных значений, то выполняется ветвь else.
Рассмотренную задачу можно написать с помощью этого оператора:
program vetv2;
Var
x, f, A: real;
n: integer;
Begin
write(‘Введите x ’);
read(x);
A:=sqr(x) – 3*x – 15;
n:=ord(A>0); { функция ord( ) равна 1, если выражение в скобках
верно и 0 , если неверно}
case n of
0: writeln(‘ функция не определена’);
1: begin
f:=1/sqrt(A);
writeln(‘x=’,x:4:1,’ f=’,f:6:3);
end;
else writeln(‘ Такого случая нет’);
end;
end.
6.Самостоятельная работа
Каждый студент получает задачу из раздела 2 пособия «Программирование физических задач».
Требования при защите задачи.
1.Должна быть написана и отлажена программа, содержащая операторы присваивания, ввода с клавиатуры(если нужно), вывода с форматированием, оператора IF (или CASE) .
2.Студент должен придумать и отладить «контрольный пример», демонстрирующий правильную работу всех ветвей программы.
3.Студент должен легко ориентироваться в программе, по требованию преподавателя вносить в нее небольшие изменения.