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

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

repeat
	{Операторы}
until условие выхода из цикла;
  • Условие — это логическое выражение булевского типа (операция отношения или логическая операция)
  • Тело цикла выполняется в любом случае, затем проверяется условие.
  • Инструкции тела цикла (операторы) выполняются в том случае, если значение логического выражения равно false, в противном случае осуществляется выход из цикла
  • Оператор repeat может быть использован для проверки правильности ввода исходных данных
  • Нижняя граница тела цикла определена служебным словом until, поэтому операторные скобки begin и end могут быть опущены (однако если операторы тела цикла заключены в операторные скобки — это не является ошибкой).
  • Операторы repeat и while взаимозаменяемы. То есть, практически любую задачу можно решить как с помощью цикла с постусловием, так и с помощью цикла с предусловием. Использование того или иного цикла зависит от предпочтения программиста.

Блок-схема

Примеры задач на использование цикла с постусловием
Пример №1
Постановка задачи:

    Выводится на экран последовательность 20 случайных чисел из промежутка [-10,10]. Определить количество отрицательных чисел больших -5 в данной последовательности.

  1. Блок-схема
  2. Кодирование
  3. program< psldv;
    var
    	i,j:integer;
    	x:real;
    begin
    randomize; {процедура инициализации 
    генератора случайных чисел}
    i:=20; j:=0;
    repeat
    	x:=random(20)-10; {генерируем случайное число}
    	write(x:4:0); {выводим это число на экран}
    	if (x > -5) and (x < 0) then
    		inc(j); {процедурой inc увеличиваем
    			аргумент на единицу, 
    			считаем найденные числа}
    	dec(i); {процедурой dec уменьшаем аргумент
    	на единицу, определяем условие
    	выхода из цикла}
    until i=0;
    writeln;
    write('Количество отрицательных чисел 
    больших -5 равно ', j);
    end.
    
  4. Тестирование
  5. -10   8  -6   1   7   8  -1   1  -5  -5   5  -9  -4  -5  -7  -9 -10
       6   9   5
    Количество отрицательных чисел больших -5 равно 2
    

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

    Определить сумму и количество цифр числа.

  1. Блок-схема
  2. Кодирование
  3. program sum;
    var
    	s,a:byte;
    	n:longint;
    begin
    write('n = '); readln(n);
    s := 0; a := 0;
    repeat
    	s := s + n mod 10; {Суммируем цифры}
    	a := a + 1; {определяем количество цифр}
    	n := n div 10; {Уменьшаем разрядность, 
    	определяем условие выхода из цикла}
    until n = 0;
    writeln('Сумма цифр числа равна ', s);
    writeln('Количество цифр в числе ', a);
    end.
    
  4. Тестирование
  5. n = 12345
    Сумма цифр числа равна 15
    Количество цифр в числе 5
    

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

Вычислить сумму бесконечной последовательности

 \frac{\pi}{4}=1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\ldots+\frac{(-1)^{n-1}}{2n-1}

с точностью до 1E-7.

  • Блок-схема
  • Кодирование
  • program sum;
    const
    	eps = 1e-7; {Точность вычислений}
    var
    	s,q,u:real;
    	n:longint;
    	k:shortint;
    begin
    s := 0; n := 1; k := 1;
    repeat
    	q := s; {Сохраняем начальное значение суммы}
    	s := s + k/(2*n - 1); {Получаем очередное слагаемое}
    	k := k * (-1); {Определение знака следующего слагаемого}
    	n := n + 1;
    	u := s - q; {Текущая погрешность}
    until abs(u) < eps; {Выходим из цикла, если погрешность станет меньше eps}
    writeln('S = ', s:14:8, 'pi = ',s*4:30:8);
    writeln('Точное значение pi = ',Pi:30:8) {Для сравнения выводим константу Pi}
    end.
    
  • Тестирование
  • S = 0.78539821     3.14159285
                       3.14159265
    
    

    (Для демонстрации точности вычисления в данной задаче полученная сумма умножается на 4, что дает приблизительное значение числа «пи». Полученное значение числа «пи» сравнивается с выводом встроенной константы Pi.
    Примечание: ряд сходится медленно.
    )

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

    1. (while10) Дано целое число N (> 1). Найти наибольшее целое число K, при котором выполняется неравенство 3K < N.
    2. Определить максимальную цифру в числе и ее позицию
    3. Дополнительное задание. Генератором случайных чисел генерируется последовательность 50-ти случайных чисел из диапазона [-10,20]. Вычислить сумму положительных элементов последовательности, порядковые номера которых нечетны
    4. Дополнительное задание. Найти НОД трех чисел. (НОД(a,b,c)=НОД(НОД(a,b),c).)

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