![](/user_photo/2706_HbeT2.jpg)
- •Глава 1
- •Свойства алгоритма
- •Словесный способ записи алгоритма.
- •Структурно-стилизованный способ записи алгоритма.
- •Программный способ записи алгоритма.
- •Графический способ записи алгоритма.
- •Циклическая структура с постусловием
- •Циклическая структура с предусловием
- •Циклическая структура с параметром
- •Глава 2
- •Символы разделители:
- •Зарезервированные слова
- •Стандартные идентификаторы
- •Стандартные константы
- •Операции div и mod
- •Стандартные функции
- •Правила написания арифметических выражений
- •Возведение в степень
- •Раздел описания меток
- •Раздел описания констант
- •Раздел описания переменных
- •Раздел определения типов данных
- •Перечисляемый тип
- •Интервальный тип
- •Раздел описания процедур и функций
- •Раздел var ?
- •Глава 3
- •Оператор присваивания
- •Оператор безусловного перехода goto
- •Оператор вызова процедуры
- •Пустой оператор
- •Составной оператор
- •Условные операторы
- •Операторы повтора
- •Глава 4
- •Линейная сортировка
- •Метод сортировки Шелла
- •Метод прямого обмена (пузырьковый метод)
- •Глава 5
- •Глава 6
- •Цветовая шкала
- •Стандартные стили заполнения
- •Стиль линии
- •Толщина линии
- •Построение прямоугольников
- •Построение дуг и окружностей
- •Глава 1 3
- •Глава 2 36
- •Глава 3 78
- •Глава 4 130
- •Глава 5 157
- •Глава 6 167
Условные операторы
Условный оператор позволяет проверить некоторое условие и в зависимости от результата выполнить тот или иной оператор или группу операторов.
С помощью условных операторов программируются алгоритмы разветвляющейся структуры. Язык Паскаль допускает использование двух условных операторов: if и case.
Условный оператор if
Формат:
if <условие> then < оператор1> else < оператор2>;
где if, then, else – зарезервированные слова (обозначают если, то, иначе соответственно);
<условие> - произвольное выражение логического типа;
<оператор1>, <оператор2> - любые операторы языка Паскаль.
Условный оператор работает по следующему алгоритму: вначале вычисляется выражение <условие>. Если результат - true (истина), то выполняется <оператор1>, а <оператор2> пропускается. Если результат - false (ложь), наоборот <оператор1> пропускается, а выполняется <оператор2>. На рисунке 3.1 приведена блок-схема условного оператора.
|
Рис. 3.1
Например, для нахождения наибольшего из двух чисел условный оператор запишется следующим образом:
If a>b then max:= a else max:= b;
Если требуется выполнить после then или else несколько операторов, они обрамляются операторными скобками begin и end, образуя тем самым составной оператор.
Например,
If a>=0 then begin а:=sqrt(a); Write(‘а=’,a:4:2); end
else Write(‘Нет решения’);
Часть оператора, стоящая после служебного слова else, может отсутствовать. Тогда при значении true условного выражения выполняется <оператор1>, в противном случае этот оператор пропускается.
Формат:
If < условие > then < оператор>;
Один оператор if может входить в состав другого оператора if. В этом случае говорят о вложенности операторов. Рассмотрим следующие возможные варианты.
Вариант 1.
If Условие1 then if Условие2 then Оператор1 else Оператор2
else ОператорЗ;
Например,
If a>b then if a>=0 then write(sqrt(a)) else write(sqr(a))
else write(‘Первое число не наибольшее’);
Вариант 2.
if Условие1 then Оператор1
else if Условие2 then Оператор2 else ОператорЗ;
Например,
If х<2 then y:= x
else if x<3 then y:=2 else y:=-x+5;
Вариант 3.
If Условие1 then if Условие2 then Оператор1 else Оператор2
else if Условие3 then Оператор3 else Оператор4;
Например,
if a > b then if a > 100 then a:=a+10 else a:=2*a
else if b > 100 then b:=b+10 else b:=2*b;
Вариант 4.
if Условие1 then if Условие2 then Оператор1 else Оператор2;
Например,
If А <20 then if А>=15 then write(‘А в диапазоне 15 - 20’)
else write(‘А вне диапазона 15 - 20’);
В условном операторе логические выражения могут содержать несколько отношений и/или логических переменных, связанных операциями and, or, not. Каждое простое условие в логическом выражении обязательно заключается в скобки.
Например,
if (a+b>c) and (a+c>b) and (b+c>a)
then write('Треугольник с такими сторонами существует')
else write('Треугольник с такими сторонами не существует');
Следует знать:
в условных операторах точка с запятой не ставится после then и перед else;
при вложенности операторов каждое else соответствует тому then, которое непосредственно ему предшествует;
конструкций со степенью вложенности более 2—3 необходимо избегать из-за сложности их анализа при отладке программы;
в условных операторах часто используют составной оператор begin … end.
Пример. Составить алгоритм нахождения корней квадратного уравнения ax2+bx+c=0 в зависимости от коэффициентов а, b и с.
Данный пример рассмотрен в Главе 1. Он реализован с помощью разветвляющейся структуры. Рядом с блок-схемой приводится текст программы.
В разделе описания переменных описаны переменные a, b, c (исходные данные), D (промежуточная величина), x1, x2 (результат) вещественного типа. Если условие D0 выполняется, необходимо выполнить несколько операторов, поэтому они заключены в операторные скобки, если условие не выполняется, выводится сообщение об отсутствии корней.
|
Program Prim1; uses crt; Var a, b, c, D, x1, x2 :real; BEGIN СlrScr; Write('Введите числа a, b, c'); Readln(a, b, c); D:= sqr(b)-4*a*c; If D>=0 then begin x1:=(-b+sqrt(D))/(2*a); x2:=(-b-sqrt(D))/(2*a); Write('x1=', x1:5:2, 'x2=', x2:5:2,); end else Write('Корней нет'); END. |
Пример. Даны три числа. Найти наибольшее из них.
Данный пример реализован с помощью двух разветвляющихся структур, поэтому используем два условных оператора, следующих друг за другом.
Три вводимых числа обозначены переменными a, b и c, переменная max служит для хранения максимального значения этих чисел. После выполнения первого условного оператора переменная max принимает одно из двух значений – значение переменной а или b, в зависимости от выполнения условия a>b.
Не следует записывать a:=max или b:=max, т.к. в данном случае переменные а или b получат значения равные нулю (по умолчанию переменная max =0).
Так как необходимо найти максимальное значение из трех чисел, используется второй условный оператор.
|
Program Prim2; uses crt; Var a, b, c, max : integer; BEGIN СlrScr; Write('Введите числа а, b и с'); Readln(a, b, с); If a>b then max:=a else max:=b; If c>max then max:=c; Write('Наибольшее число', max); END.
|
Пример. Пусть значение y зависит от значения х.
Рассчитать
|
В программе каждому логическому блоку соответствует условный оператор.
Program Prim3;
uses crt;
Var x, y : real;
BEGIN
СlrScr;
Write('Введите число x');
Readln(x);
If x<0 then y:=sqr(x)
else
If x>0 then y:=sqrt(x) else y:=0 ;
Write('Значение y=', y:3:1);
END.
Оператор выбора Case
Обычно при написании программы не рекомендуется использовать многократно вложенные друг в друга условные операторы if — программа становится громоздкой и ее трудно понимать (число уровней вложения не должно превышать двух-трех).
Оператор выбора case позволяет сделать выбор из произвольного числа имеющихся вариантов. Он состоит из выражения, называемого селектором (selection – выбор альтернативы), и списка параметров, каждому из которых предшествует список констант выбора (список может состоять и из одной константы).
Формат:
Case <выражение-селектор> of
<список1>: <оператор1>;
<список2>: <оператор2>;
…
<списокN>: <операторN>
else <оператор>
end;
где case, of, else – зарезервированные слова (обозначают случай, из, иначе соответственно);
<выражение-селектор> - выражение порядкового типа (кроме типов Real и String);
<список1>, < список2> - константы того же типа, что и <выражение-селектор>;
<оператор1>, <оператор2> - любые операторы языка Паскаль.
Выполнение оператора case начинается с вычисления выражения-селектора. Операторы между begin и end выполняются в том случае, если значение выражения после слова case совпадает с константой из соответствующего списка. Если это не так, то выполняется оператор, идущий после else. Если else отсутствует, выполняется оператор программы, следующий за case.
Например,
селектор целочисленного типа:
case k of
1: z:=k+10;
2: z:=k+100;
3: z:=k+1000;
end;
селектор интервального типа;
case k of
1..15: Writeln(‘Число’, k, ‘в диапазоне 1 - 15 ‘);
16..36: Writeln(‘Число’, k, ‘в диапазоне 16 - 36 ‘);
37..55: Writeln(‘Число’, k, ‘в диапазоне 37 - 55 ‘)
else Writeln(‘Число’, k, ‘вне заданных диапазонов ‘);
end;
Следует знать:
оператор case является обобщением оператора if;
выражение-селектор должно иметь порядковый тип: чаще всего — integer, реже — char, boolean или один из пользовательских типов;
список констант выбора может состоять из произвольного количества значений, отделенных друг от друга запятыми, или диапазонов, границы которых записываются двумя константами через разграничитель "..";
диапазоны не должны пересекаться и не должны содержать констант, указанных в данной или других альтернативах;
константы выбора внутри одного оператора выбора должны быть различны, в противном случае выполняется первая "подходящая" ветвь (одинаковые константы выбора разрешается использовать в разных операторах выбора);
после последнего элемента списка выбора (перед else) точка с запятой не ставится.
Пример. По введенному номеру месяца вывести название времени года.
Program God;
uses crt;
var m : integer;
begin Write(‘Введите номер месяца ‘); Readln(m);
case m of
12, 1, 2 : Writeln(‘Зима ‘);
3..5 : Writeln(‘Весна ‘);
6..8 : Writeln(‘Лето‘);
9..11 :Writeln(‘Осень ‘)
else Writeln(‘Введите номер месяца ‘)
end;
end.
Сообщение о названии времени года будет выведено на экран лишь в том случае, если пользователем введен номер месяца, входящий в список констант. В противном случае, запрашивается ввод нового значения месяца.