Pascal. Циклы. Операторы завершения цикла

Циклы. Операторы цикла for, while-do, repeat-until. Операторы завершения цикла break, continue






1. Какие преимущества дает использование операторов цикла в программе?

Иногда алгоритм решения задачи может быть реализован таким образом, что нужно выполнять одни и те же операции несколько раз. Алгоритм, в котором определенная последовательность команд повторяется несколько раз называется циклическим.

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


2. Какие есть виды операторов цикла в языке Паскаль?

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

  • цикл с параметром (for-to-do);
  • цикл с предусловием (while-do);
  • цикл с послеусловием (repeat-until).


3. Какой общий вид оператора цикла с параметром for?

Цикл с параметром имеет два варианта реализации.

Вариант 1. Общий вид цикла с параметром:

for Счетчик := НачальноеЗначение to КонечноеЗначение do
begin
  // Инструкции, операторы

end;

где Счетчик – переменная перечислительного типа, которая в цикле имеет шаг прироста равный 1; НачальноеЗначение – начальное значение параметра Счетчик; КонечноеЗначение – конечное значение параметра Счетчик.

Если НачальноеЗначение больше за КонечноеЗначение, то инструкции между begin и end не выполняются. Если между begin и end есть лишь одна инструкция (оператор), то ключевые слова begin и end можно опустить.

Вариант 2. Общий вид цикла с параметром:

for Счетчик := НачальноеЗначение downto КонечноеЗначение do
begin
  // Инструкции, операторы

end;

В этом случае значение параметра Счетчик не возрастает на 1, а уменьшается на 1 (шаг изменения равен -1).

Пример применения оператора цикла с параметром.

Составить программу для вычисления факториала. Факториал вычисляется по следующей формуле:

n! = 1 * 2 * 3 * … * n.

...

var 
  i,n:integer;
  f:real;

...

begin

  // n - задается

  f:=1;
  for i:=1 to n do
   f:=f*i;

  // f - результат факториала

end.


4. Какой вид имеет оператор цикла с предусловием while-do?

Общий вид оператора цикла с предусловием:

while условие do
begin
  // некоторые инструкции

end;

Пример применения оператора цикла с предусловием. Фрагмент кода, в котором осуществляется вычисление суммы:

S = 2 + 4 + 6 + … + 200

s := 0;
i := 0;
while i<200 do
begin
  i:=i+2;
  s:=s+i;
end;


5. Какой вид имеет оператор цикла с постусловием repeat-until?

Общий вид оператора цикла с постусловием:

repeat
  // некоторые инструкции

until условие;

Операторы, размещенные между ключевыми словами repeat и until будут выполняться до тех пор, пока логическое выражение, указанное после until, не примет значение true.




6. Пример вычисления суммы с помощью различных операторов цикла.

Задача.

С помощью оператора цикла вычислить сумму:

S = 1 + 2 + … + 100

Решение 1. Использование оператора цикла с параметром for.

// описание переменных
var
  s, i : integer;
begin

...

s:=0;
for i := 1 to 100 do
  s := s + i;

...

end.

Решение 2. Использование оператора цикла с предусловием while.

// описание переменных
var
  s, i : integer;
begin

  ...

  s := 0;
  i := 0;
  while i<100 do
  begin
    i := i + 1;
    s := s + i;
  end;

  ...

end.

Решение 3. С помощью оператора цикла с постусловием repeat.

// описание переменных
var
  s, i : integer;
begin

  ...

  s := 0;
  i := 0;

  repeat
    i := i + 1;
    s := s + i;
  until i>=100;

  ...
end.


7. Какие есть операторы завершения цикла?

Для всех операторов цикла выход из цикла осуществляется как вследствие естественного завершения оператора цикла, так и с помощью операторов перехода и выхода.

В стандартном Паскале определены стандартные операторы Break и Continue.

Оператор Break выполняет безусловный выход из цикла. Оператор Continue обеспечивает переход к началу новой итерации цикла.


8. Пример использования оператора break.

Иногда бывает удобно выйти из цикла не по результату проверки, которая осуществляется в начале или в конце цикла, а каким-то другим способом. Такую возможность представляет инструкция break.

Фрагмент программного кода, который определяет наличие заданного элемента в массиве m1. Значение элемента описывается в переменной x. Если элемент есть, то нецелесообразно осуществлять поиск в массиве дальше. В этом случае используется есть операция break.

 

...

f_is := false; // переменная, определяющая есть ли элемент x в массиве m1
for i := 1 to 100 do
begin
  if m1[i]=x then
  begin
    f_is := true; // элемент x есть в массиве чисел
    break; // выход из цикла, нецелесообразно проводить поиск дальше,
           // поскольку элемент уже найден
  end;
end;

...


9. Пример использования оператора continue.

Инструкция continue используется, если нужно остановить текущую итерацию и перейти к следующей итерации.

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

...

for i := 1 to 100 do
begin
  if m1[i]<0 then // пропустить отрицательный элемент
   continue;     // и перейти к следующей итерации
  m1[i] := m1[i]*2;
end;

...