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