Воробьева А.П., Соппа М.С. - Система программирования Турбо Паскаль 7.0 (1092189), страница 8
Текст из файла (страница 8)
writeln (‘Введите числа a, b, c’);
read (a, b, c);
y := a;
if b<y then y := b;
if c<y then y := c;
writeln (‘y =’, y:6:2);
End.
Полный условный оператор
Общий вид записи:
IF <логическое выражение> THEN P1 ELSE P2;
где P1, P2 – любые операторы.
Работа оператора
Вычисляется логическое выражение, и если оно имеет значение TRUE, то выполняется оператор P1, стоящий после служебного слова THEN. В противном случае выполняется оператор P2, стоящий после служебного слова ELSE .
Графическая интерпретация оператора
В блок-схемах полному условному оператору соответствует структура ЕСЛИ – ТО – ИНАЧЕ.
Замечание. Операторы P1 и P2 входят в конструкцию полного условного оператора как единственные. Если возникает необходимость выполнить в ветвях несколько операторов, то их заключают в операторные скобки BEGIN…..END. Вид записи условного оператора в этом случае следующий.
IF <логическое выражение> THEN
begin
<оператор 1>;
……………... P1
<оператор n>;
end
ELSE
begin
<оператор 1>;
……………... P2
<оператор m>;
end;
Пример1. Вычислить значение переменной у по одной из двух ветвей:
Блок-схема
Программа
Program P_1;
Var
x, y: real;
Begin
writeln (‘Введите число x’);
read (x);
if x>0 then y := ln(x) else y := exp(x);
writeln (‘y =’ , y:6:2);
End.
Пример 2. Вычислить корни полного квадратного уравнения ax2+bx+c=0. В программе предусмотреть проверку дискриминанта на знак. Если дискриминант окажется отрицательным, то вывести сообщение «Корни мнимые».
Программа
Program P_2;
Var
a, b, c, d, x1, x2: real;
Begin
writeln(‘Введите коэффициенты уравнения’);
read (a, b, c);
d := bb – 4ac;
if d<0 then
writeln (‘Корни мнимые’)
else
begin
x1 := (-b + sqrt(d)) / (2a);
x2 := (-b - sqrt(d)) / (2a);
writeln(‘x1=’, x1:5:2, ‘ x2=’, x2:5:2);
end;
End.
Вложенные структуры условных операторов
Структура называется вложенной, если после служебных слов THEN и ELSE используются вновь условные операторы. Число вложений может быть произвольным. При этом справедливо следующее правило: служебное слово ELSE всегда относится к ближайшему выше слову THEN. Для удобства чтения вложенных структур рекомендуется при программировании избегать по-возможности запись вложенного условного оператора после слова THEN.
Пример. Вычислить значение y по одной из трех ветвей:
При решении данной задачи возможны варианты программирования без использования вложенной структуры и с вложенной структурой.
Вариант 1. (Без использования вложенной структуры).
Блок-схема
Программа
Program P_V1;
Var
x, y: real;
Begin
writeln(‘Введите число x’);
read(x);
if x>=1 then y := sqrt(x)/2;
if (x>0) and (x<1) then y := exp(1/3*ln(x))/3;
if x<= 0 then y := exp(1/4*ln(abs(x)))/4;
writeln(‘y =’, y:6:2);
End.
Вариант 2. ( Использование вложенной структуры).
Блок-схема
Программа
Program P_V2;
Var
x, y: real;
Begin
writeln(‘Введите число x’);
read(x);
if x>=1 then
y := sqrt(x)/2
else
if x>0 then
y := exp(1/3*ln(x))/3
else
y := exp(1/4*ln(abs(x)))/4;
writeln(‘y =’, y:6:2);
End.
5.3. Оператор выбора
При многократном вложении условных операторов программа становится громоздкой и ее трудно понять. Считается, что число вложений не должно превышать двух–трех вложений. При большем числе вложений рекомендуется использовать оператор выбора CASE.
Общий вид записи:
CASE <селектор> OF
<список констант выбора 1>: <оператор 1>;
………………………………………………
<список констант выбора n>: <оператор n>;
END;
Селектор – это выражение целого или символьного типа.
Константы выбора – всевозможные значения селектора. Константы выбора в списке перечисляются через запятую.
Работа оператора CASE
По вычисленному значению селектора выбирается для исполнения оператор той строки, в списке которой содержится константа, равная значению селектора. После выполнения выбранного оператора управление передается на конец оператора CASE.
Пример 1. Написать оператор выбора для вычисления y.
case n of
1: y := x;
2, 3: y := 2 * sqrt(abs(x));
4: y := exp(x);
end;
Графическая интерпретация оператора
В блок-схемах оператору CASE соответствует структура ВЫБОР.
Д ля приведенного выше примера эта структура выглядит следующим образом:
Замечание. Если в строке выбора необходимо записать несколько операторов, то их заключают в операторные скобки BEGIN....END.
Пример 2. Вычислить значение y.
Если значение x не принадлежит рассматриваемым промежуткам, то вывести на экран соответствующее сообщение.
В задаче переменная x является вещественной и не может использоваться в качестве селектора оператора CASE. Введем новую переменную целого типа, которой присваивается целая часть значения x:
n := trunc(x);
Тогда программа решения данной задачи с использованием оператора выбора может быть составлена следующим образом.
Program P_2;
Var
x, y: real;
n: integer;
Begin
writeln(‘Введите число x’);
read (x);
if (x<1) or (x>=5) then
writeln(‘x не принадлежит ‘,
‘рассматриваемой области’)
else
begin
n := trunc(x);
case n of
1: y := sin(x);
2: y := exp(-x);
3: y := ln(x);
4: y := sin (x)/cos(x);
end;
writeln(‘y=’, y:6:2);
end;
End.
5.4. Контрольные задания
-
Записать в Турбо Паскале логические выражения.
а) а b;
б) –1 x 1 или 2 x 4;
в) переменная x находится вне интервала [a, b];
г) все точки на плоскости находятся выше оси абсцисс;
д) все точки на плоскости находятся либо в первом, либо в третьем квадрантах;
е) все точки на плоскости лежат выше прямой: y = 1 + x.
-
Записать логические выражения, принимающие значе-ние TRUE для точек, принадлежащих заштрихованной области.
а ) б)
в) г)
x
д) e)
-
Начертить на плоскости область, в которой логическое выражение имеет значение TRUE.
а) (x >= 0) and (y >= 0) and (y <= x) or (y <= -1);
б) (xx +yy <= 1) and (y >= 0) and not(y < x);
в) (y >= x) and (y >= -x);
г) (y <= 2) and (x <= 2) or (xy < 0);
д) (xy >= 0) and (y <= x) and (x < 1) and (y >-1);
е) (xx + yy <= 4) and (y >= xx).
-
Записать в Турбо Паскале логические выражения и вычислить их при: i =5; j =2; k =2; a =TRUE; b =FALSE.
а) i 1 a (b j > k);
б) (i 1a) (b j= k);
в) (i = j2 + 1) a b;
г) i> j + k a b;
д) a b (i*j > k2);
е) (a b j2 = k2) b.
Глава 6. Циклические вычислительные
процессы
Циклические вычислительные процессы характеризуются наличием многократно повторяющихся участков вычислений (циклов).
Переменная, изменяющаяся в цикле, называется управляющей переменной. Для программирования циклических задач используются операторы цикла с условием или с параметром.
6.1. Операторы цикла с условием
Различают два вида операторов с условием:
-
оператор цикла WHILE (пока);
-
оператор цикла REPEAT (повторять до тех пор пока).
Оператор цикла WHILE
Общий вид записи:
WHILE < логическое выражение > DO < тело цикла>;
Тело цикла – единичный оператор, выполняемый в цикле.
Работа оператора
Тело цикла выполняется, пока логическое выражение, определяющее условие выхода из цикла, имеет значение TRUE. В противном случае оператор цикла WHILE завершает свою работу. В состав логического выражения входит управляющая переменная, которая должна обязательно изменяться в теле цикла.
Графическая интерпретация оператора
В блок-схемах оператору цикла WHILE соответствует структура ЦИКЛ-ПОКА.
|
Пример 1. Алгоритм табулирования функции с одной переменной.
Вычислить таблицу значений функции:
при , изменяющемся в интервале [-0.5, 2.5] с шагом 0.1.
В данной задаче переменная является управляющей переменной цикла.
Блок-схема
|
Программа
Program TAB_1;
Var
a, b, x, y: real;
Begin
writeln(‘Введите исходные данные’);
read(a, b);
writeln (‘ x y(x)’);
x := -0.5;
while x <= 2.5 do
begin
y := ln(abs(x))/(a*a - b*b);
writeln(x:8:1, y:8:1)
x := x + 0.1;
end;
End.
Оператор цикла REPEAT
Общий вид записи:
REPEAT
<тело цикла>;
UNTIL <логическое выражение>;
Работа оператора
Выполняется тело цикла, после чего вычисляется логическое выражение, определяющее условие выхода из цикла. Если логическое выражение имеет значение FALSE, то повторяется выполнение тела цикла. В противном случае оператор цикла REPEAT завершает свою работу.
Управляющая переменная, как и в случае оператора цикла WHILE, должна включаться в состав логического выражения и изменяться в теле цикла.
Графическая интерпретация оператора
В блок-схемах оператору цикла REPEAT соответствует структура ЦИКЛ-ДО.
Выход из цикла |
Пример 2. Решить предыдущую задачу табулирования функции с использованием оператора цикла REPEAT.
Программа
Program TAB_2;
Var
a, b, x, y: real;
Begin
writeln(‘Введите исходные данные’);
read(a, b);
writeln(‘ x y(x)’);
x := -0.5;
repeat
y := ln(abs(x))/(a*a - b*b);
writeln(x:8:1, y:8:1)
x := x + 0.1;