В предыдущих уроках мы рассмотрели наиболее простой, линейный тип алгоритмов. Напомню, что всего существует три типа: линейные, разветвляющиеся и циклические (алгоритмы с повторениями). В этом уроке я расскажу вам о втором типе алгоритмов — об алгоритмах с ветвлениями.
Ветвления
Ветвление – это команда алгоритма, в которой делается выбор, выполнять или не выполнять какую-нибудь группу команд в зависимости от условий.
Ветвление используется в двух случаях:
- Когда требуется пропустить определенную команду или группу команд.
- Когда нужно записать выбор тех или иных действий в зависимости от условия.
В блок-схеме условие ветвления изображается в ромбе, из которого обязательно выходят ДВЕ стрелки – первая (стрелка «Да») указывает на команды, которые будут выполняться в случае, если условие соблюдено; вторая (стрелка «Нет») – на команды, которые будут выполнены, если условие не соблюдено. Даже если команда, на которую указывает одна из стрелок (Чаще всего «Нет») отсутствует, стрелка все равно имеет место быть.
В словесной формулировке запись ветвления выглядит так:
ЕСЛИ <условие выбора > ТО <команды, выполняемые при соблюдении условия> ИНАЧЕ <команды, выполняемые при несоблюдении условия>
Реализация ветвления в Паскаль.
Как же реализовать ветвление в Паскаль? Проще, чем вы думаете:
if <условие выбора > then <команды, выполняемые при соблюдении условия> else <команды, выполняемые при несоблюдении условия>
Запомните! Перед else никогда не ставят точку с запятой!
Давайте поговорим об условии выбора. Понятно, что этологическое выражение. Если оно является правдой, то выполняется главная ветвь, если ложь, то боковая ветвь.
Рассмотрим несколько задач из сборника М.Э.Абрамяна «1000 задач по программированию».
If1. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае не изменять его. Вывести полученное число.
В данной программе даже не надо реализовывать боковую ветвь.
program if1; var a: integer; begin read(a); if a > 0 then Inc(a); write(a); end.
If2. Дано целое число. Если оно является положительным, то прибавить к нему 1; в противном случае вычесть из него 2. Вывести полученное число.
program if2; var a: integer; begin read(a); if a > 0 then Inc(a) else a -= 2; write(a); end.
If3. Дано целое число. Если оно является положительным, то прибавить к нему 1; если отрицательным, то вычесть из него 2; если нулевым, то заменить его на 10. Вывести полученное число.
Для того чтобы решить эту задачу мы должны использовать вложенный if.
program if3; var a: integer; begin read(a); if a >= 0 then if a = 0 then a := 10 else Inc(a) {перед else нет точки с запятой.} else a -= 2; write(a); end.
If5. Даны три целых числа. Найти количество положительных и количество отрицательных чисел в исходном наборе.
program if5; var a, b, c, plus, minus: integer; begin write('Введите три целых числа: '); read(a, b, c); plus := 0; minus := 0; if a > 0 then Inc(plus) else Inc(minus); if b > 0 then Inc(plus) else Inc(minus); if c > 0 then Inc(plus) else Inc(minus); writeln('Количество положительных чисел - ', plus); writeln('Количество отрицательных чисел - ', minus); end.
If30. Дано целое число, лежащее в диапазоне 1–999. Вывести его строку-описание вида «четное двузначное число», «нечетное трехзначное число» и т. д.
program if30; var a: integer; begin write('Введите число: '); read(a); if Odd(a) then write('Нечетное ') else write('Четное '); if a >= 100 then write('трехзначное число') else if a < 10 then write('однозначное число') else write('двухзначное число'); end.
Вот и все! Не забывайте кликать по кнопочкам и добавлять наш сайт в закладки!
Структура ветвления. Условный оператор
- 1. Какая целесообразность применения структуры ветвления в программах?
- 2. Какой вид имеет полная форма оператора условного перехода if в языке Паскаль?
- 3. Какой вид имеет сокращенная форма оператора условного перехода?
- 4. Примеры использования оператора условного перехода, который имеет полную форму представления.
- 5. Примеры использования оператора условного перехода, который имеет сокращенную форму представления.
- 6. Примеры использования вложенных операторов условного перехода.
1. Какая целесообразность применения структуры ветвления в программах?
Бывает, что в программах возникает необходимость организовать ветвление. В этом случае процесс решения задачи происходит на основе выполнения или не выполнения некоторого условия.
В языке Паскаль выбор действия, в зависимости от некоторого условия, может быть реализован с помощью конструкции
if ... then ... else ...
или
if ... then ...
⇑
2. Какой вид имеет полная форма оператора условного перехода if в языке Паскаль?
Полная форма оператора условного перехода if:
if условие then оператор1 else оператор2;
Действие оператора состоит в следующем: сначала вычисляется значение выражения условие. Если оно истинное (равное TRUE), то выполняется оператор, который следует за словом then (оператор1). Если значение ложное (FALSE), то выполняется оператор, который следует за словом else (оператор2).
Операторы оператор1 и оператор2 могут быть составными, то есть содержать несколько строк кода. Такие операторы берутся в операторные скобки begin … end. Такая необходимость возникает, если после зарезервированных слов then или else нужно указать несколько операторов.
В этом случае общий вид оператора условного перехода может иметь, например, следующий вид:
if условие then begin // несколько операторов ... end else begin // несколько операторов ... end;
⇑
3. Какой вид имеет сокращенная форма оператора условного перехода?
Сокращенная форма оператора условного перехода не содержит блока else и имеет вид:
if условие then оператор;
В этом случае оператор работает следующим образом. Сначала вычисляется значение логического (булевого) выражения условие. Если результат логического выражения условие истинный (равный TRUE), то выполняется оператор, который следует за словом then. Если результат равный FALSE, то выполняется оператор, который следует за оператором if (в операторе if…then ничего не выполняется).
Если при выполнении условия нужно выполнить несколько операторов, то общий вид оператора условного перехода может быть таким:
if условие then begin // два или больше оператора ... end;
⇑
4. Примеры использования оператора условного перехода, который имеет полную форму представления.
Пример 1. Фрагмент программы нахождения максимального значения между двумя вещественными числами.
var a,b:real; // a, b - переменные, для которых ищется максимум max:real; // максимум ... begin ... // a, b - задаются if a>b then max:=a else max:=b; ... end;
Пример 2. Вычисление значения функции согласно условию. Пусть необходимо найти значение функции:
Фрагмент программного кода, решающего эту задачу:
... var x,f:real; begin ... // x - задается if -5<x then f := x*x+8 else f := -x*x*x+2; // в переменной f - результат ... end;
⇑
5. Примеры использования оператора условного перехода, который имеет сокращенную форму представления.
Пример 1. Фрагмент кода, который находит минимальное значение между двумя вещественными числами x и y.
... var min:real; ... begin ... // x, y - заданы min := x; if min<y then min := y; ... end;
Пример 2. Вычисление значения функции согласно условию. Пусть необходимо найти значение функции:
var x, f:real; begin ... // x - задано if x<-6 then f:=3*x*x-x; if (-6<=x) and (x<=5) then f:=sqrt(7-x); if x>5 then f:=8*x-3; ... end;
⇑
6. Примеры использования вложенных операторов условного перехода.
Операторы условного перехода могут быть вложенными. Степень их вложенности неограничена.
Пример. Поиск максимального значения среди трех заданных чисел, которые сохраняются в переменных a, b, c. Максимальное значение записывается в переменную max.
... var a, b, c:integer; max:integer; // максимальное значение, которое нужно вычислить ... begin ... // a,b,c - задается if a<b then begin if b<c then max:=c else max:=b; end else begin if a<c then max:=c else max:=a; end; ... end;
⇑
Условный оператор.
В общем виде оператор условия в Паскаль имеет вид:
If УСЛОВИЕ then
Begin
БЛОК_ОПЕРАТОРОВ_1;
End
Else
Begin
БЛОК_ОПЕРАТОРОВ_2;
End;
Где УСЛОВИЕ – это проверяемое логическое условие,
которое должно быть либо истинным, либо ложным; БЛОК_ОПЕРАТОРОВ_1 – код,
который должен быть выполнен, в случае, если УСЛОВИЕ истинно; БЛОК_ОПЕРАТОРОВ_2
– код, который должен быть выполнен, в случае, если УСЛОВИЕ ложно.
Напишем программу, которая делит одно число на другое.
Но сначала составим блок-схему для данной программы.
var
a,
b, c : real;
Begin
WriteLn(‘Введите
делимое и делитель ‘);
ReadLn(a, b);
If b<>0 then
Begin
c:=a/b;
WriteLn(‘Результат деления = ‘, c);
End
Else
Begin
WriteLn(‘Делить
на ноль нельзя!’);
End;
End.
Перед ключевым словом условного
оператора точка с запятой не ставится никогда!
Участок кода, который должен выполняться в случае,
если УСЛОВИЕ неверно, не является обязательным.
Условные операторы в Pascal можно вкладывать друг в
друга. Для этого используется вложенный оператор IF. Рассмотрим это на примере
программы, которая будет считать количество корней квадратного уравнения.
var
A, B, C, D:real;
begin
write (‘Введите коэффициенты A,B,C: ‘);
readln (A,B,C);
D:=((B*B)-4*A*C);
if
D=0 then
begin
writeln (‘Один
вещественный корень’);
end
else
begin
if D>0 then
begin
writeln (‘Два
вещественных корня’);
end
else
begin
writeln (‘Нет вещественных корней‘);
end;
end;
end.
Значения для проверки:
Оператор множественного выбора.
В случае, если ветвление более сложное и зависит,
например, от значения одного выражения (или переменной), то использование оператора
If приведет к довольно громоздким конструкциям в исходном тексте
программы.
Как раз для таких случаев был введен оператор
множественного выбора – case. В общем виде его структура выглядит
следующим образом:
Case ВЫРАЖЕНИЕ
Of
value 1 : Begin
БЛОК_ОПЕРАТОРОВ_1;
End;
value1 : Begin
БЛОК_ОПЕРАТОРОВ_1;
End;
…
valueN : Begin
БЛОК_ОПЕРАТОРОВ_N;
End;
Else
Begin
БЛОК_ОПЕРАТОРОВ;
End;
End;
Здесь, в качестве ВЫРАЖЕНИЯ
может быть использовано любое выражение, которое приводит либо к
целочисленному результату, либо к символьному (т.е. результат – один символ).
Недопустимо использовать выражения или переменные, которые, например, возвращают
целую строку или вещественное число.
value1, value2, …,
valueN – это значения, которые может принимать ВЫРАЖЕНИЕ;
БЛОК_ОПЕРАТОРОВ_1,
БЛОК_ОПЕРАТОРОВ_2, …, БЛОК_ОПЕРАТОРОВ_N – это операторы,
которые необходимо выполнять в зависимости от значения ВЫРАЖЕНИЯ.
Блок Else здесь
используется в том же самом смысле, что и в условном операторе. Он предваряет
блок операторов, который необходимо выполнить, если среди перечисленных значений
value1, …, valueN не нашлось такого, которому бы
равнялось ВЫРАЖЕНИЕ.
Case operation Of
1: Begin
{выполняется сложение}
End;
2: Begin
{выполняется вычитание}
End;
3: Begin
{выполняется умножение}
End;
4: Begin
{выполняется деление}
End;
End;
Еще одно преимущество
оператора множественного выбора заключается в том, что вместо одиночного
значения ВЫРАЖЕНИЯ можно использовать несколько, а также
целые диапазоны.
Пример 1
В этом примере мы
покажем, как можно указывать несколько значений ВЫРАЖЕНИЯ.
Как видно, каждое из значений, для которого должен выполняться один и тот же
блок операторов, записываются через запятую.
Case
number Of
1,3,5,7,11,13,17,19:
WriteLn(‘Число ‘, number,’ – простое‘);
2,4,6,8,10,12,14,16,18,20:
WriteLn(‘Число ‘, number,’ – четное‘);
Else
WriteLn(‘Число
‘, number,’ –
нечетное и не является простым’);
End;
Пример 2
В этом примере мы
рассмотрим способ указания целого диапазона, в который может попадать значение ВЫРАЖЕНИЯ
оператора множественного выбора. Диапазон значений указывается
начальным и конечным значениями, разделенными двумя точками (без всяких
пробелов):
Case
age Of
0..6:
WriteLn(‘Учащийся детского сада’);
7..16:
WriteLn(‘Учащийся школы’);
17..22:
WriteLn(‘Учащийся МГТУ им. Н. Э. Баумана’);
Else
WriteLn(‘Уже не учащийся’);
End;
Напишем программу, реализующую функции калькулятора.
Program
kalkulator;
Var a,c,d: real;
b:
char;
Begin
Write(‘Введите
первое число:’);
readln (a);
Write (‘Введите
знак’);
readln (b);
Write (‘Введите
второе число:’);
readln (c);
case b of
‘+’:
d:=a+c;
‘-‘:
d:=a-c;
‘*’:
d:=a*c;
‘/’:
d:=a/c;
end;
Write
(‘Результат ‘,a,b,c,’ равен ‘,d);
End.
Контрольная работа:
№1. Напишите программу, в которой значение переменной
вычисляется по формуле: a + b, если a – нечетное и a*b, если a – четное.
№2. Составить программу, после выполнения которой
меньшее из двух неравных чисел будет увеличено вдвое, а большее оставлено без
изменения. Выводить большее число, меньшее число и результаты.
№3. Если целое число M делится нацело на целое число
N, то вывести на экран частное от деления, в противном случае – сообщение ”M на
N нацело не делится”.
№4. Написать программу, которая выводит на экран
большее из двух данных чисел.
Программирование ветвлений на Паскале Оператор ветвления на Паскале
В
языке Паскаль имеется оператор
ветвления.
Другое его название — условный оператор.
Формат полного оператора ветвления
следующий:
if
<логическое выражение> then
<оператор1>
else
<оператор2>
Здесь
if
— «если», then
— «то», else
— «иначе».
Программирование полного и неполного ветвления
Сравните
запись алгоритма БИД1 из предыдущего
параграфа с соответствующей программой.
алг вещ нач если то иначе кв вывод кон |
Program var begin if then else writeln(С) end. |
Очень
похоже на перевод с русского языка на
английский. Обратите внимание на
следующее отличие: в программе нет
специального служебного слова,
обозначающего конец ветвления. Здесь
признаком конца оператора ветвления
является точка с запятой. (Разумеется,
оставлять в программе пустую строку
совсем не обязательно. Здесь это сделано
только ради наглядности.)
Простой
формой логического выражения является
операция
отношения.
Как и в АЯ, в Паскале допускаются все
виды отношений (ниже указаны их знаки):
< > (больше); < = (меньше |
<= = (равно); <> |
А
теперь запрограммируем на Паскале
алгоритм БИД2, в котором использовано
неполное ветвление.
алг вещ нач С:=А если то кв вывод кон |
Program varА, begin С:=А; if then write(С) end. |
Опять
все очень похоже. Ветвь else в операторе
ветвления может отсутствовать.
Программирование вложенных ветвлений
Запишем
на Паскале программу определения
большего из трех чисел, блок-схема
которой показана на рис. 3.10. Структура
этого алгоритма — вложенные ветвления.
Алгоритм на АЯ (БИТ2) приведен в предыдущем
параграфе.
|
Рис. |
Program
BIT2;
var
А,
В,
С,
D: real;
begin
readln(А,
В,
С);
if
A>B
then
if
A>C then
D:=A else
D:=B
else
if
B>C then
D:=B else
D:=C;
writeln(D)
end.
Обратите
внимание на то, что перед else
точка с запятой не ставится. Вся ветвящаяся
часть структуры алгоритма заканчивается
на точке с запятой после оператора D:=C.
Составим
программу упорядочения значений двух
переменных.
алг вещ нач если то X:=Y Y:=C кв вывод кон |
Program var begin if then X:=Y; Y:=C end; write(X,Y) end. |
Этот
пример иллюстрирует следующее правило
Паскаля: если на какой-то из ветвей
оператора ветвления находится несколько
последовательных операторов, то их
нужно записывать между служебными
словами begin
и end.
Конструкция такого вида:
begin
<Последовательность операторов> end
называется
составным
оператором.
Следовательно, в описанной выше общей
форме ветвления <оператор1> и
<опера-тор2> могут быть простыми
(один) и составными операторами.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #