- •Глава 5
- •5.1. Простые операторы
- •5.1.1. Оператор присваивания
- •5.1.2. Оператор процедуры
- •5.1.3. Оператор перехода
- •5.1.4. Пустой оператор
- •5.2. Структурные операторы
- •5.2.1. Структурограммы (схемы Насси - Шнейдермана)
- •5.2.2. Составной оператор
- •5.2.3. Форматирование Паскаль-программ
- •5.2.5. Оператор варианта
- •5.2.6. Оператор цикла с параметром
- •5.2.7. Оператор цикла с постусловием
- •5.2.8. Оператор цикла с предусловием
5.2.2. Составной оператор
Составной оператор - это последовательность операторов (лю-бых), заключенных в операторные скобки BEGIN-END. Составной оператор используется в тех случаях, когда по правилам языка Паскаль должен быть записан один оператор, а необходимые действия могут быть выполнены нес-колькими операторами. С этой точки зрения раздел операторов программы - это один составной оператор.
5.2.3. Форматирование Паскаль-программ
В соответствии с принципами структурного программирования программы на языке Паскаль принято форматировать. Есть два очень простых правила форматирования:
1) парные составные символы языка пишутся один под другим:
BEGIN THEN CASE REPEAT RECORD END ELSE END UNTIL END ;
2) следование операторов изображается их записью один под другим, а вложенность - сдвигом вправо.
Редкое исключение: пара операторов, логически жестко связанных друг с другом, иногда записывается в одну строку, например: Write('Ввести число '); ReadLn(a) . Впрочем, злоупотреблять этим не следует.
5.2.4. Условный оператор
Существует две формы этого оператора:
1) IF B THEN S1 ;
2) IF B THEN S1
ELSE S2 .
Здесь B - выражение булевского типа, S1,S2 - операторы (любые, но один). Если значение B истинно (TRUE), то выполняется оператор S1. Если B лож-но (FALSE), то в первой форме оператор IF никакого действия не произво-дит, а во второй форме выполнится оператор S2.
Обратим внимание: во второй форме после оператора S1 нельзя ста-вить точку с запятой, поскольку этот символ служит для разделения опера-торов.
Пример 5.2.1. Определить x - наибольшее из двух чисел: a,b.
IF a < b THEN x:=b
ELSE x:=a .
Mожно и так:
x:=a;
IF b>a THEN x:=b .
Пример 5.2.2. Определить, выполняется ли условие
при разных значениях a,b,x .
PROGRAM Usl ;
VAR z,a,b,x : real ;
ud : Boolean ;
BEGIN
Write('Значения a,b,x = ? '); ReadLn(a,b,x) ;
z:= Sin(x)*Exp(x)/(2.3*Sqr(x)) ;
ud:=(z >=a) AND (z<=b) ;
IF ud THEN WriteLn ('Условие выполняется')
ELSE WriteLn ('Условие не выполняется')
END.
Конечно, вместо двух последних операторов можно записать один: IF (z>=a) AND (z<=b)
THEN WriteLn('Условие выполняется') ELSE WriteLn('Условие не выполняется') .
Пример 5.2.3. Ввести 3 числа. Определить наименьшее.
VAR a,b,c,x : real ;
BEGIN
Write('3 числа: '); ReadLn(a,b,c);
IF a<=b THEN x:=a
ELSE x:=b ;
IF c<x THEN x:=c ;
WriteLn('Наименьшее = ', x)
END.
Пример 5.2.4. Вычислить
Ввод
(x)
0
< x £
5
да
нет
x < 1
печать
да нет
"недопустимое x"
печать (y)
Рис.5.4.
Схема к примеру 5.2.4.
VAR x,y : real;
BEGIN
Write('x= '); ReadLn(x);
IF (x>0) AND (x<=5) THEN BEGIN IF x<1 THEN y:=Ln(x) ELSE y:=Sqrt(-(x-1)*(x-5)); WriteLn('y = ', y) END ELSE
WriteLn('Недопустимое x') END.
Обратим внимание на три момента:
1) производится проверка на принадлежность функции области существо-вания: 0<x£5;
2) имеет место вложенность структур (операторов IF);
3) после первого THEN следует составной оператор, состоящий из опера-тора IF и процедуры WriteLn.
Задачи
5.2.1. Ввести целое число, не превышающее 999. Определить коли-чество цифр, из которых оно состоит.
5.2.2. Ввести 4 числа. Вычислить сумму положительных.
5.2.3. Ввести 2 целых числа. Подсчитать:
- количество отрицательных;
- количество нечетных;
- количество чисел, у которых вторая цифра справа равна 7;
- сумму четных;
- сумму отрицательных.