202.53K
Category: programmingprogramming

Цикл с предусловием

1.

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

2.

ЦИКЛЫ С УСЛОВИЕМ
Цикл со счетчиком отлично выполняет свою
работу, когда число повторений известно
Такая радужная картина в программировании
встречается далеко не всегда
Часто приходится решать задачи, в которых
число повторений неизвестно и определяется
лишь постепенно, после некоторого количества
повторений тела цикла
В этом случае применяют цикл с условием
В Паскале, как и в Кумире, циклов с условием
два: условие может проверяться перед телом
цикла или после него

3.

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

4.

ЦИКЛ С ПРЕДУСЛОВИЕМ
Если условие сразу окажется ложным, цикл не
будет выполнен ни разу!
Синтаксис:
while
условие
оператор;
do
Условие
да
Тело цикла
После служебного слова do можно записывать
только один оператор, если надо выполнить
несколько операторов, они должны быть
заключены в операторные скобки begin…end
нет

5.

ОСОБЕННОСТИ ЦИКЛА WHILE
Всем переменным, входящим в условие цикла
while, должны быть присвоены начальные
значения до входа в цикл
В теле цикла обязательно должен быть оператор,
который в какой-то момент изменит значение
условия, сделает его ложным. Если этого не
случится, цикл будет бесконечным (программа
«зацикливается»)
Чтобы выйти из зацикливания, надо нажать
кнопку STOP

6.

РАССМОТРИМ ПРОГРАММУ
var x,y: integer;
begin
x:=1; y:=1;
while x<5 do
begin
y:=y*2;
x:=x+1
end;
Задание начальных значений
Шаг
x
y
X<5
0
1
1
Да
1
2
2
Да
2
3
4
Да
3
4
8
Да
4
5
16
нет
Какой оператор здесь меняет условие?
Сколько раз выполнится тело цикла?

7.

ЗАДАЧА 1.
На вход программе поступают целые числа.
Количество их неизвестно, но последовательность
заканчивается числом 0. 0 не входит в
последовательность, а является признаком
окончания ввода. Введенные числа по модулю не
превышают 30000. Найти сумму отрицательных
чисел.
30000 в этой задаче указывает на то, что мы
должны использовать для наших переменных тип
integer

8.

Начало
Обнуляем переменную для суммы
Вводим первое число последовательности
s:=0
Проверяем, не введен ли 0. Если введенное
число не равно 0, входим в цикл
a
нет
a< >0
да
a< 0
да
s:=s+a
a
ss
Конец
нет
Проверяем введенное число на отрицательность.
Если оно отрицательное, добавляем его к сумме
Вводим следующее число и возвращаемся на
проверку окончания последовательности
program sum;
var a, s :integer;
begin
s:=0;
writeln (' введите число');
readln (a);
while a<>0 do
begin
if a<0 then s:=s+a;
Печатаем
writeln(введите следующее число');
результат
readln(a)
end;
writeln (s)
end.

9.

ЗАДАЧА 2. ПОДСЧИТАТЬ КОЛИЧЕСТВО
ЦИФР В ЧИСЛЕ
Искать, какие это цифры, нам не надо, надо
найти только их количество
Идея: будем укорачивать число на одну цифру
и считать, сколько раз мы это сделали
Как можно число укоротить на одну цифру?
До каких пор нам надо выполнять эту
операцию?
А что делать, если сразу ввели число 0? Ведь в
нем все равно есть одна цифра!
Сколько переменных нам потребуется?

10.

РЕШЕНИЕ
program kolvo;
var a, k :integer;
{объявляем переменные}
begin
writeln (‘введите число');
readln (a);
{вводим число}
k:=0;
{обнуляем переменную для количества}
while a<>0 do
{начинаем цикл}
begin
a:=a div 10;
{укорачиваем число на одну цифру}
k:=k+1
{считаем ее}
end;
{не забываем про операторные скобки}
if k=0 then k:=k+1;
{у числа 0 тоже есть одна цифра}
writeln (k)
{выводим результат}
end.

11.

ЗАДАЧА 3.
Дано целое положительное число n. Найти
наименьшее целое положительное число k, квадрат
которого превосходит n, т.е. k2>n. Операцию sqrt не
использовать
Будем сначала считать, что k=1
Затем на каждом проходе цикла будем сравнивать
квадрат этого числа с n. И, пока k2 не будет
превосходить n, будем увеличивать k на 1
Когда надо прекратить выполнение цикла?
Когда k2 станет > n

12.

РЕШЕНИЕ
Пусть n=18
program min;
var n, k :integer;
begin
writeln (‘введите число');
readln (n);
k:=1;
while sqr(k)<=n do
k:=k+1;
writeln (k)
end.
k2 ≤ n
k
k2
1
1
Да
2
4
Да
3
9
Да
4
16
Да
5
25
Нет

13.

ЗАДАЧА 4.
Дана последовательность 5, 9, 13, 17. Определить
число слагаемых, сумма которых равна 324
Сколько должно быть переменных?
Какие начальные значения им нужно присвоить?
Что будем делать в цикле?
При каком условии цикл будет продолжаться?

14.

РЕШЕНИЕ
program sum;
var a, k, s :integer;
begin
a:=5; s:=0; k:=0;
while s<> 324 do
begin
s:=s+a;
k:=k+1;
a:=a+4
end;
writeln (k)
end.

15.

ДОМАШНЕЕ ЗАДАНИЕ
Найти наибольшее целое число k, квадрат
которого не превосходит n
Найти сумму цифр введенного целого
положительного числа
Ввести число n, большее единицы. Вывести
наименьшее из целых чисел k, для которых
сумма 1+2+…+k ≥ n и саму эту сумму

16.

ВСПОМНИМ, ПРИГОДИТСЯ ПРИ
ВЫПОЛНЕНИИ ДОМАШНЕГО ЗАДАНИЯ
Как определить, что число четное?
Как определить, что число нечетное?
Кратное трем?
Оканчивается на 3?
Как оформляется сложное условие?
(a<b) and (a mod 2=0)
a mod 2=0
a mod 2<>0
a mod 3=0
a mod 10=3
English     Русский Rules