Цикл с предусловием. Оператор while

Цикл с пердусловием реализуется в языке программирования Pascal с помощью оператора WHILE … DO.
Синтаксис:

while условие выполнения цикла do
begin
	{Операторы}
end;
  • Оператор while состоит из заголовка и тела цикла. Операторы, находящиеся в теле цикла, обязательно заключаются в операторные скобки begin и end.
  • «Условие выполнения цикла» — это выражение логического типа (булевское выражение) выражение отношения или логическое выражение, принимающее одно из двух значений: true или false.
  • Если проверяемое условие ложно изначально, то операторы входящие в тело цикла не выполняются, проход по телу цикла не осуществляется и выполняются инструкции, находящиеся после операторной скобки end.
  • Служебные слова while и do означают «пока» и «делай».

Блок-схема

Пример задачи на использование цикла с предусловием

Пример №1
Постановка задачи:

    Дано целое число N (> 0). Найти наименьшее целое положительное число K, квадрат которого превосходит N: K2 > N. Функцию извлечения квадратного корня не использовать.

  1. Блок-схема:
  2. Кодирование
  3. program while7;
    var
    	n,k,p:longint;
    begin
    rite('Введите число 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.
    
  4. Тестирование
  5. Дано:	|	6
    --------------------------------
    Результат	|	3
    

Пример №2
Постановка задачи:

    Дано натуральное число: верно ли утверждение, что в данном числе N нет такой цифры A (цифра A вводится с клавиатуры).

  1. Входные данные: a — искомая цифра, n — данное число, k, x — вспомогательные переменные (целочисленного типа); f — логическая переменная для проверки предположения.
  2. Выходные данные: вывод на экран сообщения о присутствии цифры в числе.
  3. Описание алгоритма
  4. Предположим, что цифра есть в числе. Тогда, используя цикл с предусловием, выполняющий последовательное целочисленное деление числа на 10 и выделяя остатки, мы проверяем условным оператором наличие цифры в числе. Если таковое найдется, мы немедленно выходим из цикла и выводим сообщение, что число найдено. Если цифра не будет обнаружена, то, по завершении цикла, выводится сообщение, что цифра в числе не обнаружена.

  5. Блок-схема
  6. Кодирование
(*  Задача: Дано натуральное число: верно ли	*)
(*  утверждение, что в данном числе 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

  1. Входные данные: a,b — два натуральных числа, переменные целочисленного типа
  2. Выходные данные: a — НОД.
  3. Описание алгоритма:
  4. Для решения поставленной задачи воспользуемся алгоритмом Евклида. Если M > N, то НОД(М,N)=НОД(M-N,N). Будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба значения не станут равными.

  5. Блок-схема
  6. Кодирование
  7. 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.
    
  8. Тестирование
  9. Дано:	|	А = 56
    	|	B = 32
    --------------------------------
    Результат	|   НОД = 8
    

Домашнее задание

  1. (While1) Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A.
  2. (While3) Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления.
  3. Дополнительное задание: (While11) Поменять порядок цифр на обратный. Например, было 1234567, стало 7654321
  4. Дополнительное задание: Дано целое число N (> 1). Вывести наименьшее из целых чисел K, для которых сумма 1 + 2 + … + K будет больше или равна N, и саму эту сумму.

Добавить комментарий