Delphi-Help

Главная Статьи Циклы Цикл с постусловием (REPEAT-UNTIL)

Цикл с постусловием (REPEAT-UNTIL)

Оцените материал
(5 голосов)


Цикл с постусловием (REPEAT-UNTIL)

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

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

Блок-схема

do_while

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

  1. Постановка задачи:

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

  1. Блок-схема

pr_r_1

  1. Кодирование
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.
  1. Тестирование

-10 8 -6 1 7 8 -1 1 -5 -5 5 -9 -4 -5 -7 -9 -10

6 9 5

Количество отрицательных чисел больших -5 равно 2

Пример №2

  1. Постановка задачи:

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

  1. Блок-схема

pr_r_2

  1. Кодирование
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.
  1. Тестирование

n = 12345

Сумма цифр числа равна 15

Количество цифр в числе 5

Пример №3

  1. · Постановка задачи:

Вычислить сумму бесконечной последовательности
pi/4=1-1/3+1/5-1/7+...+(-1)n-1/(2n-1) с точностью до 1e-7.

  1. · Блок-схема

pr_r_3

  1. Кодирование
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:2:8, s*4:15:8);
writeln(Pi:29:8) {Для сравнения выводим встроенную
константу Pi}
end.
  1. Тестирование

S = 0.78539821 3.14159285

3.14159265

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

Прочитано 36809 раз

Авторизация



Счетчики