137.62K
Категория: ПрограммированиеПрограммирование

Цикл с постусловием

1.

ЦИКЛ С ПОСТУСЛОВИЕМ
Учитель: Н.В. Фоменко

2.

ПОВТОРЕНИЕ
Какие виды циклов вы знаете?
Как работает цикл for? Какие 2 вида этого
цикла существуют?
Что нельзя делать в цикле for?
В чем особенность цикла while?
Что общего у циклов for и while?

3.

ЦИКЛ С ПОСТУСЛОВИЕМ
Условие проверяется после выполнения тела цикла.
Тело цикла будет повторяться,
Тело цикла
пока проверка условия дает
результат «ложь», т.е. пока условие
Условие
не выполняется.
нет
Как только условие окажется
истинным, цикл прекращает свою работу
В этом случае условие называется условием
окончания цикла
да

4.

ЦИКЛ С ПОСТУСЛОВИЕМ
Синтаксис:
repeat
тело цикла
until условие;
Тело цикла
да
Условие
нет
В отличие от цикла while, даже если условие сразу
окажется истинным, цикл repeat выполнится хотя
бы один раз
Если тело цикла repeat состоит из нескольких
операторов, операторные скобки не ставят

5.

ИТАК,
Если цикл по условию задачи может не
выполниться ни разу, используется while,
если, хотя бы один раз - repeat
нет
Условие
Тело цикла
да
да
Тело цикла
Условие
нет
while
repeat

6.

ЗАДАЧА
Спортсмен приступает к тренировкам по
следующему графику: в первый день он
должен пробежать 10 км; каждый
следующий день нужно увеличивать
дистанцию на 10% от нормы предыдущего
дня.
Как только дневная норма достигнет или
превысит 25 км, необходимо прекратить ее
увеличивать и далее пробегать ровно 25 км.
Начиная с какого дня спортсмен будет
пробегать 25 км?

7.

РЕШЕНИЕ
Начало
program sport;
var i: integer; x: real;
begin
i := 1
x := 10
i := i +1
x := x +0.1*x
x>= 25
нет
да
i:=1;
x:=10;
repeat
i:=i+1;
x:=x+0.1*x;
until x>=25;
writeln ('Начиная с ', i, '-го дня
спортсмен будет пробегать 25 км')
end.
i
Конец

8.

ЗАДАЧА 2
С клавиатуры вводятся числа
и подсчитывается их сумма.
Сумму необходимо
подсчитывать до первого
введенного отрицательного
числа
Что неправильно в этой блоксхеме?
Такой цикл не является ни
циклом с предусловием, ни
циклом с постусловием –
условие здесь стоит
посередине
Начало
S:=0
a
да
a< 0
нет
S:=s+a
да
ss
Конец

9.

Начало
S:=0
a
нет
a>= 0
да
S:=s+a
a
ss
Конец
Мы умеем решать такие задачи
с помощью цикла while.
В этом случае нам приходится
использовать оператор ввода
переменной а дважды – до цикла
и внутри цикла

10.

РЕШИМ ЭТУ ЗАДАЧУ С ПОМОЩЬЮ ЦИКЛА REPEAT
Начало
Начало
s :=
:= 00
a := 0
a
s := s +a
s := s +a
a
нет
нет
a< 0
да
да
s
Конец
Конец
Надо перенести проверку условия в
конец блок-схемы
Что плохо при таком решении?
Если сразу ввели отрицательное
число, оно тоже прибавится к сумме
Значит, надо поменять местами ввод
числа и прибавление его к сумме
Что опять неправильно?
Что же будет прибавлено к сумме во
время первого прохода цикла, ведь
значение переменной а еще не
определено!
Выход состоит в том, что переменной а
до входа в цикл присваивается
нулевое значение. Это такая
тактическая хитрость!

11.

ПРАВИЛЬНАЯ ПРОГРАММА
program sum;
var s, a :real;
begin
s:=0; a:=0;
repeat
s:=s+a;
write (‘введите очередное число');
readln (a)
until a<0;
writeln('s=', s:5:2)
end.

12.

ЗАДАЧА 3
Даны 2 положительных числа а и b, такие что а>b. На
отрезке длины а размещается максимально возможное
количество отрезков длины b (без наложения). Найти
длину незанятой части отрезка а. Умножение и
деление не использовать.
b
a
?
Надо вычитать из а значение
b, пока а не станет меньше b
program otrezok;
var a,b :integer;
begin
readln (a,b);
repeat
a:=a-b
until a<b;
writeln(a)
end.

13.

ДОМАШНЕЕ ЗАДАНИЕ
Даны 2 положительных числа а и b, такие что а>b.
На отрезке длины а размещается максимально
возможное количество отрезков длины b (без
наложения). Найти количество отрезков b,
размещенных на отрезке а с помощью цикла repeat.
Умножение и деление не использовать
Написать программу, в которой осуществляется ввод
целых положительных чисел до тех пор, пока не
будет введено число 0. Найти максимальное из
введенных чисел, используя цикл repeat
Ввести с клавиатуры два числа и найти их
произведение с помощью цикла repeat, используя
только операции сложения и вычитания
English     Русский Правила