Возможно использование усеченного условного оператора
if условие then оператор;
При этом, если условие не выполняется, то ветвь then игнорируется и управление передается оператору, следующему за условным оператором.
Кроме того, в программе иногда удобно использовать оператор exit, чтобы досрочно прекратить ее выполнение.
Часто можно пользоваться метками, которые отмечают некоторые нужные программисту операторы программы. Метки – это набор цифр или букв, отделяемые от помечаемых операторов двоеточием (см. программу ниже). В языке Паскаль принято перед использованием метки описывать, т.е. перечислять в блоке описания label через запятую. Можно организовать переход к метке с помощью оператора goto m, где m - метка. Рассматриваемую выше задачу теперь можно запрограммировать по-другому.
Program vetv2;
label 1; { описание меток}
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. Рассмотрим еще один пример.
Задача 3.2.2: Написать программу, которая рассчитывает работу 1 моля газа в течение одного из изопроцессов. Начальные температура, объем и давление известны. Программа запрашивает наименование процесса и недостающие параметры.
Решение.
Обычно рассматриваются три вида изопроцессов:
·
Изобарический (p-const). Работа газа
;
·
Изотермический (Т-const). Работа газа
· Изохорический (V-const). Работа газа А = 0.
Приведенная ниже программа написана так, что пользователь сначала вводит с клавиатуры номер изопроцесса. Если процесс изохорический, то расчет производить не надо, программа сообщает результат (А=0) и заканчивает работу (по оператору exit). Если процесс не изохорический, то вводятся с клавиатуры начальный и конечный объемы газа, а затем, в зависимости от номера изопроцесса, запрашиваются дополнительные данные и производится расчет по соответствующей формуле. Использование логических операторов позволяет запрашивать только необходимые данные.
Program vetv3;
const R=8.31;
var
i:integer;
p,V1,V2,T, A: real;
begin
write(‘Выберите изопроцесс: 1.p-const; 2.Т-const; 3.V-const ’);
read(i);
if i=3 then
begin
writeln(‘Изохорический процесс А=0’);
exit; {оператор прекращает работу программы}
end;
write(‘Введите начальный и конечный объем ');
read(V1,V2);
if i=1 then
begin
writeln(‘Изобарический процесс ’);
write(‘Введите давление ');
read(p);
A:=p*(V2-V1);
end
else
begin
writeln(‘Изотермический процесс ’);
write(‘Введите температуру ');
read(T);
A:=R*T*ln(V2/V1);
end;
writeln (‘Работа газа А=’,А:6:1,’ Дж’);
end.
В отдельных случаях можно использовать вложенные условные операторы.
if условие1 then
if условие2 then оператор1
else оператор2
else оператор3;
if условие1 then оператор1
else if условие2 then оператор2
else оператор3;
Альтернатива else считается принадлежащей ближайшему оператору if , не имеющему else. Допускается также в таком случае, что каждый помещенный вовнутрь условный оператор может обрамляться в операторные скобки begin-end. Это может помочь избежать ошибок. Например, так:
if условие1 then
begin if условие2 then оператор1
else оператор2
end
else оператор3;
Задача 3.2.3: Найти действительные корни квадратного уравнения ax2+bx+c=0.
Решение. Воспользуемся известной формулой. Переменные a,b,c, дискриминант и корни x1, x2 - вещественные.
program vetv4;
var a,b,c, d, x1,x2: real;
begin
writeln(‘Введите коэффициенты через пробел’);
readln(a,b,c);
D := b*b - 4*a*c;
if D<0 then writeln('Корней нет')
else if D=0 then
begin
x1 := -b/2/a;
writeln('Корни совпадают: x1=x2=',x1:0:3);
end
else
begin
x1 := (-b-sqrt(D))/2/a;
x2 := (-b+sqrt(D))/2/a;
writeln('Корней два: x1=',x1:0:3,' x2=',x2:0:3);
end;
end.