Страницы

Уроки 9, 10 Оператор Repeat-Until

Цикл Repeat-Until


Repeat
  оператор 1;
  оператор 2;
  ...
  оператор n;
Until логическое выражение;

Оператор Repeat (повторять)-Until (до тех пор, пока) содержит логическое выражение (после Until), которое управляет повторением выполнения последовательности операторов, записанных между Repeat и Until. Повторение продолжается до тех пор, пока логическое выражение не примет значение True!
Последовательность операторов тела цикла выполняется не менее одного раза.!!!

При использовании оператора Repeat-Until (цикла с постусловием) необходимо учитывать следующее:
·         перед первым выполнением оператора логическое выражение его окончания (или продолжения) должно быть определено;
·         О последовательность операторов должна содержать хотя бы один оператор, влияющий на значение логического выражения, иначе оператор Repeat-Until работает бесконечно долго;
·         логическое выражение в конечном итоге должно принять значение True.

Пример  бесконечной по времени работы цикла:
Repeat
writeln('цикл');
Until 10>100;

Оператор REPEAT…UNTIL имеет две части: начальную (слово REPEAT) и завершающую (слово UNTIL), которые охватывают группу операторов, составляющих тело цикла. Поэтому необходимости в использовании составного оператора для построения тела цикла из нескольких простых операторов не возникает.

Принципиальное отличие оператора REPEAT…UNTIL от оператора WHILE в том, что проверка условия производится не перед началом выполнения тела цикла, а после его выполнения, когда решается вопрос, повторить ли еще раз действия. Поэтому тело цикла всегда выполняется по крайней мере один раз.


Пример 1. Дано число N. Составить программу ввода  чисел и найти  количество чисел,  введенных  до первого нуля, если количество введенных чисел превысит N, закончить подсчет.

Program z1;
Var   N,k,i : integer;
begin
   read (N);
   k:=0;
   repeat
     readln(i);
     inc(k);
  until ((i = 0) or (n=k));
  if k=n
    then    writeln ('net 0')
    else    writeln (k-1,' chisel ');
End.


Задание 1. Вводится последовательность чисел,  0 - конец последовательности. Определить содержит ли последовательность хотя бы два равных соседних числа.

Задание 2. Дано натуральное число N. Определить К - количество делителей этого числа.


       Тесты         Посмотреть решение       

Вывести делители числа на экран.


Задание 3. Целое положительное число N называется простым, если оно имеет только два делителя, а именно 1 и N. По соглашению 1 не считают простым числом. Начало последовательности простых чисел имеет вид:
2, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
Научимся устанавливать факт: является ли число N простым?
Считаем, что делители числа находятся в интервале от 2 до n Div 2, точнее в интервале от 2 до целой части Sqrt(n) -  корня из числа N.

       Тесты         Посмотреть решение       

Экспериментальный раздел работы

1. Решите  эту задачу  с использованием оператора While.

2.  Измените программу так, чтобы осуществлялся вывод всех делителей числа n.


Основная теорема арифметики

Всякое натуральное число n разлагается на произведения простых чисел. Это разложение однозначно с точностью до порядка записи простых чисел в произведении.



Пример 2. Составить программу, которая вычисляет последовательно все действия арифметического выражения до тех пор, пока в выражении не встретится знак равенства.

Указание:
Рассмотрим математические операции умножения, сложения, деления и вычитания, которые обозначаются символами: '*', '+', '/', '-'. Будем использовать новый тип CHAR - символьный. '*', '+', '/', '-', '=' - символы. Обозначим Х - число, которое является компонентом действия, Y - значение выражения, O - арифметическая операция.

program p2;
var o:char;
x, y:real;
begin
 y:=0;
 o:='+';
 repeat
  readln(x);
  case o of
   '+': y:=y+x;
    '-' : y:=y-x;
   '*' : y:=y*x;
   '/' : y:=y/x
  end;
 readln(o);
until o= '=';
writeln;
writeln('otvet=',y:15:4);
end.


Задания
1. Билет называют "счасливым", если в его номере сумма первых трёх цифр равна сумме последних трёх. Найти количество счастливых билетов.
2. Билет называют "счасливым", если в его номере сумма первых трёх цифр равна сумме последних трёх. Подсчитать число  тех "счастливых" билетов, у которых сумма трёх цифр равна 13.

       Тесты         Посмотреть решение       


Задания для самостоятельной работы

1. Определить значение переменной S после выполнения следующих операторов:
S:=0; i=l;
Repeat
S:=S+5 div i;
i:= i– l;
Until i<= 1;


2. Составить программу вывода на экран всех простых делителей числа.

3. Составить программу запроса пароля пока не будет введен пароль верно. В программе предусмотреть счетчик неправильных вводов пароля.

4. Произведение нескольких первых нечетных чисел равно р. Сколько сомножителей взято?

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



Тест