top of page

Цикл с постусловием

      

    Реализуется цикла на языке Паскаль:

Repeat < оператор 1 >;
< оператор 2 >;
< оператор n >;
until <условие >

В этом цикле условие проверяется после выполнения тела цикла. Цикл будет повторяться до тех пор, пока проверка этого условия будет давать результат “ложь”(false), то есть пока условие не выполнено. Даже если условие сразу оказывается истинным, цикл выполнится хотя бы один раз.

– Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, поэтому служебные слова begin и end не нужны.

– Представлен цикл с постусловием на языке блок-схем:

 

– Рассмотрим задачу, в которой требуется вводить с клавиатуры числа и подсчитывать их сумму, до первого введенного отрицательного числа.

Решение.

Блок-схема алгоритма представлен ниже:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

       Программа на языке Паскаля:

Program summer; { Задаем имя программе }
uses crt;
var
sum, a: real; { sum – для накопления суммы, а – для очередного числа }
begin
sum:=0; {Обнуляем сумму}
REPEAT
sum:=sum+a; {Добавляем введенное число к сумме}
write('Введите число:');{Ввод определенного числа}
readln(a)
UNTIL a<0; {Проверяем введенное число на отрицательность}
{При выходе из цикла выполняется этот оператор:}
write('Сумма чисел=' ,sum:5:3);
readln
end.

   Вложенные циклы – это такой цикл, когда телом цикла является один или несколько новых циклов. Конструкция из вложенных циклов напоминает матрешку, в которую вложена меньшая матрешка, в меньшую ещё более меньшая и. т. д. Вложенные циклы можно образовать с помощью любых циклов.

 

Решение задач

        а) Задача: Составить программу планирования закупки товара в магазине на сумму, не превышающую заданную величину.

 

Решение:

1. Обозначим через:

с – цену товара;
k – количество товара;
р – заданную предельную величину;
s – начальное значение общей стоимости покупки;

Начальное значение (s) = 0, значение предельной суммы (р) – вводится с клавиатуры. Необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость и выводить результат на экран до тех пор, пока она не превысит предельную сумму, в этом случае на экран нужно вывести сообщение о превышении.

2. Блок-схема для задачи:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

       3. Решение на языке Паскаль:

program pokypka;
uses crt;
var c,k,p,s:integer;
begin
clrscr;
{Вводим наличие денежных средств с клавиатуры}
writeln ('Предельная сумма – ');readln(p);
s:=0; {вводим начальное значение суммы}
REPEAT;
writeln('Цена товара – ');readln(c); {вводим цену товара}
writeln('Количество товара – ');readln(k); {вводим количество товара}
s:=s+c*k; {Находим стоимость приобретенных товаров}
{Выводим на экран стоимость определенных товаров}
writeln('Стоимость покупки =',s);
UNTIL s>p; {Повторяем до превышения наличия денег}
writeln('Не хватило!');
end.

    – Самостоятельно осуществите досрочный выход из цикла при условии, что Вы приобрели вещи на сумму Р/2.

Карточки-задания по теме “Цикл с постусловием”

Задача № 1

Введите два числа (например A=5 и В=8) и найдите их произведение, используя только операцию сложения.

Задача № 2

Введите два числа (например A=45 и В=8) и найдите их частное от деления нацело(в переменной А), используя только операцию вычитания.

Задание № 3

Определить значение переменной S после выполнения следующих операторов:

S:=0; i=l;
Repeat S:=S+5 div i; i:= l – l;
Until i<= 1;

 

      Задача: составить программу и блок-схему нахождения наибольшего общего делителя (НОД) двух натуральных чисел.

Краткий разбор задания.

       Алгоритм нахождения (НОД) двух целых неотрицательных чисел, основан на следующих свойствах: пусть х и у неравные 0, целые неотрицательные числа и пусть х >=у, тогда если у=0, то НОД(х,у)=х, а если у<>0, то для чисел х, у и r, где r – остаток от деления на х на у выполняется равенство НОД(х,у)= НОД(у, r)

Выводы:

  1. Выполнение цикла с постусловием прекращается, как только логическое условие принимает значение “истина”;

  2. Цикл с постусловием будет выполнен хотя бы один раз.

  3. При использовании нескольких операторов в теле цикла repeat…until операторская скобка (begin … end) не нужна, так как пара (repeat…until) сама является операторской скобкой.

     Задача 1. Составить программу, которая вводит  и суммирует  целые числа. Если введено значение 999, то на экран выводится результат суммирования.

Program z1;

Var x, s:integer;

Begin

S:=0;

Repeat

   Write(‘Ввести число’);

   Readln(x);

   If x<>999 then s:=s+x;

Until x=999;

Writeln(‘Сумма введенных чисел’, s);    

  End.

     Задача 2. Использование цикла repeat для подсчета суммы вводимых чисел до первого отрицательного числа

Program z2;
  var
      sum, a: real;    {sum - для накопления суммы, a - для очередного числа}
begin
  sum:=0; {Обнуляем сумму}
  a:=0; 
  repeat
    sum:=sum+a; {Добавляем введенное число к сумме}
    write('Введите число'); {Ввод очередного числа}
    readln(a)
  until a < 0 {Проверяем введенное число на отрицательность}
{При выходе из цикла выполняется этот оператор:}
  writeln ('',sum:5:3);
  readln
end.

       

        Задача 3. Составить программу планирования закупки товара в магазине на сумму, не превышающую заданную величину.

{Обозначим через x, k - соответствующую цену и количество товара, через p - заданную предельную сумму, через s - общую стоимость покупки. Начальное значение общей стоимости покупки (s) равно нулю. Значение предельной суммы считывается с клавиатуры. Необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость, суммировать ее с общей стоимостью и выводить результат на экран до тех пор, пока она не превысит предельную сумму р. В этом случае на экран нужно вывести сообщение о превышении: }

 

 program z3;
  uses crt;
  var c, k, p, s: integer;
begin
  clrscr;
{Вводим наличие денежных средств.}
  writeln('Пред. сумма - ');
  readln(p);
{Начальное значение стоимости покупки равно нулю.}
  s:=0;
  repeat
{Вводим цену товара и его количество.}
    writeln('цена тов. и его кол ');
    readln (с, k);
{Находим стоимость приобретенных товаров.}
    s:=s+c*k;
{Выводим на экран стоимость приобретенных товаров.}
    writeln('Стоимость покупки = ', s);
{Повторяем до тех пор, пока стоимость товара не превысит наличия денежных средств.}
  until s>p
  writeln('Суммарная стоимость покупки превысила предельную сумму');
  readln;
end.

     Задача 4. Написать программу нахождения наибольшего общего делителя (НОД) двух натуральных чисел.

program z4;
  uses crt;
  var x, y: integer;
begin
  clrscr;
{Вводим два целых неотрицательных числа.}
  writeln('x:=,y: = ');readln(x,y);
  repeat
    if x>y then x:=x mod у else y:=y mod x;
{До тех пор, пока одно из чисел не станет равно нулю.}
  until (x=0) Or (y=0);
{Вывод НОД - без условного оператора, так как одно из чисел равно нулю.}
  writeln('HOД=',x+y));
  readln;
end.

     Задача 5. Вычислить сумму последовательности 1+1/2+1/3+1/4+…+1/100.

Решение:Var s:real; i:integer;

Begin

I:=1; s:=0;

Repeat

S:=s+1/I;

I:=i+1

Until i>100;

Writeln(‘сумма=’,s:5:3);

End.

      Задача 6. Найти сумму чисел, первое из которых R (R>1) задано с клавиатуры, а каждое следующее в 1.5 раза меньше. Последнее из этих чисел (которое не входит в сумму) – меньше 0.001.

 

program summa;

var

   s,r: real;

begin

   write(’Введите число R (> 1) ’);  readln(r);

   s:=0;

repeat

      s:=s+r ;

      r:=r/1.5 ;

   until r<0.001;

   writeln (’Сумма чисел равна ’,s:7:4);

end.

      Задача 7. Дано натуральное число N. Определить, является ли оно простым.

 

{Для решения задачи:

  • формируем тело программы и описываем переменные;

  • вводим натуральное число;

  • в интервале от 2 до N/2 порождаем натуральные числа и проверяем, являются ли они делителями числа N;

  • в зависимости от значения флага F выводим результат.

 

     program P;

        var         i, n, f : integer;

begin

        repeat

                write('Ввeдитe натуральное число n = ');

                readln(n);

        until  n > 0;

        f:= 0;

        for i := 2 to n div 2 do

                if n mod i = 0 then f := 1;

        if f = 0 then

        writeln('Число ', n : 6, ' простое')

        else writeln('Число ', n : 6, ' нe простое')

end.}

       Задача 8. Использование цикла repeat для подсчета суммы вводимых чисел до первого отрицательного числа

Program Summer1; 
var
sum, a: real; { sum - для накопления суммы. а - для очередного числа }
begin
sum:=0; { Обнуляем сумму }
а:=0; { Это тактическая хитрость (см. замечание к примеру) }
repeat
sum:=sum+a; { Добавляем введенное число к сумме } 
write('Введите число:'); { Ввод очередного числа }
readln(a)
until а<0; { Проверяем введенное число на отрицательность }
{ При выходе из цикла выполняется этот оператор: } 
writeln('Сумма чисел=', sum:5:3); 
readln 
end.

bottom of page