Цикл с предусловием (WHILE-DO)
Цикл с предусловием реализуется в языке программирования Pascal с помощью оператора while.
Синтаксис:
while условие выполнения цикла do begin {Операторы}
end; |
- Оператор while состоит из заголовка и тела цикла. Операторы, находящиеся в теле цикла, обязательно заключаются в операторные скобки begin и end.
- "Условие выполнения цикла" - это выражение логического типа (булевское выражение) выражение отношения или логическое выражение, принимающее одно из двух значений: true или false.
- Если проверяемое условие ложно изначально, то операторы входящие в тело цикла не выполняются, проход по телу цикла не осуществляется и выполняются инструкции, находящиеся после операторной скобки end.
- Служебные слова while и do означают "пока" и "делай".
Блок-схема
Пример задачи на использование цикла с предусловием
Пример №1
- Постановка задачи:
Дано целое число N (> 0). Найти наименьшее целое положительное
число K, квадрат которого превосходит N: K2 > N. Функцию извлечения
квадратного корня не использовать.
- Блок-схема:
- Кодирование
program while7; var
n,k,p:longint;
begin
write('Введите число N > 0, N = '); readln(n); k:=0;
while p < n do begin
p := k * k; k := k + 1;
end; writeln('наименьшее целое положительное число K, квадрат которого превосходит ', n, ' равен K = ',k)
end. |
- Тестирование
Дано: | 6
--------------------------------
Результат | 3
Пример №2
- Постановка задачи:
Дано натуральное число: верно ли утверждение, что в данном числе N нет такой цифры A (цифра A вводится с клавиатуры).
- Входные данные: a - искомая цифра, n - данное число, k, x - вспомогательные переменные (целочисленного типа); f - логическая переменная для проверки предположения.
- Выходные данные
Вывод на экран сообщения о присутствии цифры в числе.
- Описание алгоритма
Предположим, что цифра есть в числе. Тогда, используя цикл с предусловием, выполняющий последовательное целочисленное деление числа на 10 и выделяя остатки, мы проверяем условным оператором наличие цифры в числе. Если таковое найдется, мы немедленно выходим из цикла и выводим сообщение, что число найдено. Если цифра не будет обнаружена, то, по завершении цикла, выводится сообщение, что цифра в числе не обнаружена.
- Блок-схема
- Кодирование
(* Задача: Дано натуральное число: верно ли *) (* утверждение, что в данном числе N нет *) (* данной цифры A (цифра A вводится с *) (* клавиатуры). *) (* Выполнил ученик 10 класса Иванов Иван *) (* 15.02.10 г. *) program chislo; var
a:byte;
n,k,x:longint;
b:boolean;
begin
write('Введите число N = '); readln(n); write('Введите цифру A = '); readln(a); f := true; {Предположим, что цифра A есть в числе N} x := n; {Сохраним значение N} while x > 0 do begin
k := x mod 10;
if k = a then
begin
f := false;
break {если цифра обнаружена - нет необходимости просматривать
число полностью, выходим из цикла}
end; x := x div 10
end; if f then writeln('Цифры ', а, ' в числе ', n, ' нет') else
writeln('Такая цифра есть в числе!')
end. |
- Тестирование
Дано: | N = 1234567
| A = 9
--------------------------------
Результат | Цифры 9 в числе 1234567 нет
Пример №3
- Постановка задачи:
Найти наибольший общий делитель (НОД) двух натуральных чисел A и B
- Входные данные:
a,b - два натуральных числа, переменные целочисленного типа
- Выходные данные:
a - НОД.
- Описание алгоритма
Для решения поставленной задачи воспользуемся алгоритмом Евклида. Если M > N, то НОД(М,N)=НОД(M-N,N). Будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба значения не станут равными.
- Блок-схема
- Кодирование
program evklid; var
a,b:integer;
begin
write('Введите число A = '); readln(a); write('Введите число B = '); readln(b); while a<>b do begin
if a>b then
a:=a-b
else
b:=b-a
end; write('НОД = ',a) end.
|
- Тестирование
Дано: | А = 56
| B = 32
--------------------------------
Результат | НОД = 8