ветвление.условный оператор.циклы
DESCRIPTION
TRANSCRIPT
План
Ветвления
Условный оператор
Циклы
Циклы с условием
Разветвляющиеся алгоритмыЗадача. Ввести два целых числа и вывести на экран
наибольшее из них.
Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого.
Особенность: действия исполнителя зависят от некоторых условий (если … иначе …).
Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются
разветвляющимися.
Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются
разветвляющимися.
Основные варианты структуры ветвления:
нет
серия команд 1
да условие
Неполная форма
да нет
серия команд 1 серия команд 2
условие
Полная форма
если - то; если – то - иначе;
Блок-схеманачало
max:= a;
ввод a,b
вывод max
a > b?
max:= b;
конец
да нет
блок "решение"блок "решение"
полная форма ветвления
полная форма ветвления
Программаprogram qq;var a, b, max: integer;begin writeln('Введите два целых числа'); read ( a, b ); if a > b then begin max:=a end else begin max:=b end; writeln ('Наибольшее число ', max);end.
полная форма условного оператора
полная форма условного оператора
Условный оператор
if <условие> then begin {что делать, если условие верно} end else begin {что делать, если условие неверно} end;
if <условие> then begin {что делать, если условие верно} end else begin {что делать, если условие неверно} end;
Особенности:• перед else НЕ ставится точка с запятой• вторая часть (else …) может отсутствовать (неполная
форма)• если в блоке один оператор, можно убрать слова begin
и end
Блок-схеманачало
max:= a;
ввод a,b
вывод max
max:= b;
конец
да нетb > a?
неполная форма ветвления
неполная форма ветвления
Программаprogram qq;var a, b, max: integer;begin writeln('Введите два целых числа'); read ( a, b ); max := a; if b > a then max := b;
writeln ('Наибольшее число ', max);end.
неполная форма условного оператора
неполная форма условного оператора
Циклы
Цикл – это многократное выполнение одинаковой последовательности действий.• цикл с известным числом шагов• цикл с неизвестным числом шагов (цикл с условием)
Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b).
Особенность: одинаковые действия выполняются 8 раз.
12
Алгоритм
начало
i, i2, i3
конецнет
да
i <= 8?
i := 1;
i := i + 1;
i2 := i * i;i3 := i2 * i;
задать начальное значение переменной цикла
задать начальное значение переменной цикла
проверить, все ли сделалипроверить, все ли сделали
вычисляем квадрат и куб вычисляем квадрат и куб
вывод результатавывод результата
перейти к следующему i
перейти к следующему i
13
Алгоритм (с блоком "цикл")
начало
i, i2, i3
конец
i2 := i * i;i3 := i2 * i;
i := 1,8
блок "цикл"блок "цикл"
тело циклатело цикла
14
Программа
program qq;var i, i2, i3: integer;begin
for i:=1 to 8 do begin i2 := i*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); end;end.
переменная циклапеременная цикла
начальное значениеначальное значение
конечное значениеконечное значение
Цикл for
Цикл for существует в двух формах
for счетчик:=значение to конечное_значение do тело_цикла;
for счетчик:=значение downto конечное_значение do тело_цикла;
Счетчик – это переменная любого из
перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.
Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.
var i, n: integer; begin write ('Количество знаков: '); readln (n); for i := 1 to n do write ('(*) '); readlnend.
Цикл whileЦикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.
Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.
var i, n: integer; begin write ('Количество знаков: '); readln (n); i := 1; while i <= n do begin write ('(*) '); i := i + 1 end; readlnend.
Цикл repeatЦикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.
В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.
var i, n: integer; begin write ('Количество знаков: '); readln (n); i := 1; repeat write ('(*) '); i := i + 1 until i > n; readlnend.
21
Замена for на while и наоборот
for i:=1 to 10 do begin {тело цикла}end;
for i:=1 to 10 do begin {тело цикла}end;
i := 1;while i <= 10 do begin {тело цикла} i := i + 1;end;
i := 1;while i <= 10 do begin {тело цикла} i := i + 1;end;
for i:=a downto b do begin {тело цикла}end;
for i:=a downto b do begin {тело цикла}end;
i := a;while i >= b do begin {тело цикла} i := i - 1;end;
i := a;while i >= b do begin {тело цикла} i := i - 1;end;
Замена while на for возможна только тогда, когда можно заранее рассчитать число шагов цикла.
Замена цикла for на while возможна всегда.