Циклы с условием
Цикл с неизвестным числом шагов
Пример: требуется отпилить полено от бревна. Сколько раз надо сделать движения пилой?
Задача 1: Ввести целое число и определить число цифр в нем.
Идея решения: Отсекаем последовательно последнюю цифру, увеличиваем счетчик.
Проблема: Неизвестно, сколько шагов надо сделать.
Решение: Надо остановиться, когда n = 0, т.е. надо делать «пока n <> 0».
program qq;
var n, k: integer;
begin
writeln('Введите целое число');
read(n);
k := 0;
while n <> 0 do begin
k := k + 1;
n := n div 10;
end;
writeln('В числе ', n, ' нашли ', k, ' цифр');
end.
Цикл с предусловием
while <условие> do begin
{тело цикла}
end;
Особенности цикла while:
• можно использовать сложные условия:
while (a < b) and (b < c) do begin
{тело цикла}
end;
• если в теле цикла только один оператор, слова begin и end можно не писать:
while a < b do
a := a + 1;
• условие пересчитывается каждый раз при входе в цикл
• если условие на входе в цикл ложно, цикл не выполняется ни разу
a := 4; b := 6;
while a > b do
a := a – b;
• если условие никогда не станет ложным, программа зацикливается
a := 4; b := 6;
while a < b do
d := a + b;
Задание 1. Сколько раз выполняется цикл?
а) a := 4; b := 6;
while a < b do a := a + 1;
б) a := 4; b := 6;
while a < b do a := a + b;
в) a := 4; b := 6;
while a > b do a := a + 1;
г) a := 4; b := 6;
while a < b do b := a - b;
д) a := 4; b := 6;
while a < b do a := a - 1;
Цикл с постусловием
repeat
{тело цикла}
until <условие>;
Особенности цикла repeat:
• можно использовать сложные условия
• цикл выполняется хотя бы один раз
• условие пересчитывается каждый раз при выходе из цикла
• цикл заканчивает выполнение когда условие становится верным
• если условие на выходе цикла всегда ложно, программа зацикливается
Задание 2. Сколько раз выполняется цикл?
а) a := 4; b := 6;
repeat a := a + 1; until a > b;
б) a := 4; b := 6;
repeat a := a + b; until a > b;
в) a := 4; b := 6;
repeat a := a + b; until a < b;
г) a := 4; b := 6;
repeat b := a - b; until a < b;
д) a := 4; b := 6;
repeat a := a + 2; until a < b;
Решим задачу 1 с использованием цикла с постусловием:
program qq;
var n,k: integer;
Begin
Read(n); k:=0;
repeat
n:=n div 10;
k:=k+1;
until n = 0;
writeln(‘k=‘,k);
end.
Задача 2. Ввести натуральное число и определить, верно ли, что сумма его цифр равна 10.
program qq;
var n, a, s: integer;
Begin
Read(n); s:=0;
repeat
a:= n mod 10;
s:=s+a;
n:=n div 10;
until n = 0;
if s=10 then writeln(‘верно‘);
end.
Задание 3. Определить результат выполнения фрагмента программы:
а) | s: =0; i: =1; repeat s:= s +10 Div i; i:=i+1; until I>5; | б) | a: =1; b: =1; While a <= 4 Do begin a: =a + 1; b: = b + 5; end; |
Задача 3. Составить программу нахождения количества делителей числа n (значение n вводится с клавиатуры).
Решение: Делители числа n будут находиться в диапазоне от 1 до n. Чтобы найти количество делителей нужно проверить является ли число x делителем числа n. (x= 1, 2, 3, …, n).
Read(n);
k:=0; x:=1;
While x<=n do
Begin
If n mod x =0 then k:=k+1;
x:=x+1;
End;
Задача 4. Составить программу нахождения всех простых чисел n от 1 до 1000 (значение n вводится с клавиатуры). Число называется простым, если у него нет делителей кроме 1 и самого числа.
Решение: Нужно подсчитать делители в диапазоне от 2 до n-1 для числа n, если количество таких делителей равно 0, то число простое.
Алгоритм будет содержать вложенный цикл. Исполнение вложенных циклов происходит так: для каждого значения параметра внешнего цикла происходит полная «прокрутка» внутреннего цикла.
Program z3;
Var n, x, k:integer;
begin
For n:=1 to 1000 do begin
K:=0; x:=2;
While x<=n-1 do
Begin
If n mod x =0 then k:=k+1;
X:=x+1;
End;
If k=0 then writeln (n, ‘-простое’);
End;
End.