WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

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

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

Роль бесконечных циклов в Тьюринг-полноте языков

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

Любая программа может быть написана при помощи:

  • бесконечных циклов;
  • команд выхода из цикла;
  • операторов ветвления (if-then);
  • последовательностью команд, исполняемых одна после другой;

Примеры

Pascal

//Вариант 1
while true do
   begin
      {что-нибудь делаем}
      if {условие выхода из бесконечного цикла} then break
   end;

//Вариант 2
repeat
{что-нибудь делаем}
until false;

Для Си-подобных языков

//вариант 1
for (;;) {
   /* что-нибудь делаем */
}

// вариант 2.1 
while(true) {
   /* что-нибудь делаем */
}

// вариант 2.2
while(1) 
   /* что-нибудь делаем */
}

// вариант 3.1 
do {
   /* что-нибудь делаем */
} while(true);

// вариант 3.2
do {
   /* что-нибудь делаем */
} while(1);

// вариант 4
loop:
   /* что-нибудь делаем */
goto loop;

Python

while True:
    # что-нибудь делаем

Пакетный файл MS-DOS

:loop
 rem что-нибудь делаем
goto loop

Bash

while true
do
# что-нибудь делаем
done

Ruby

Язык содержит специальную конструкцию бесконечного цикла:

 loop {
    #  что-нибудь делаем
 }

Ада

Ада также имеет специальную конструкцию, описывающую бесконечный цикл:

loop
   -- что-нибудь делаем
end loop;

Кроме того, стоит отметить, что Ада позволяет осуществить выход сразу из нескольких вложенных циклов, а также имеет условную форму оператора выхода, позволяющую избежать использования оператора ветвления.

Out_Cycle:
loop
   ...
   loop
      ...
      exit Out_Cycle when Logic_Exp;
      -- равносильно 
      if Logic_Exp then 
         exit Out_Cycle; 
      end if;
      ...
   end loop;
   ...
end loop Out_Cycle;
--отсюда продолжится выполнение программы
--после выполнения инструкции exit Out_Cycle;

Lua

while true do
  -- что-нибудь делаем
end

Практика

Программы, из которых нет выхода (например, операционные системы, прошивки микроконтроллеров), обычно представляют собой бесконечный цикл.

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

Так, например, при решении задач на олимпиадах по информатике (программированию) различных уровней основная задача участника — за отведённое время написать программы, решающие предложенные алгоритмические задачи. Как правило, такие задачи решаются с использованием циклов. Очевидно, что времени на обдумывание условия выхода из цикла (которое должно указываться в так называемом while-цикле) у участника недостаточно. Поэтому очень полезным приёмом является использование модифицированных бесконечных циклов.

Приём этот основан на том факте, что каждый современный язык программирования предлагает ряд операторов, позволяющих прервать выполнение тела цикла не после очередной итерации, а во время очередного выполнения (например, Break в Delphi, EXIT FOR в Бейсике и т. д.). Для экономии времени участник олимпиады пишет бесконечный цикл while с условием выполнения True (while True do ...), а затем по мере необходимости в теле цикла записывает операторы проверки условий, которые в случае необходимости прерывают выполнение цикла Break-подобными операторами.

Иногда (например, в скриптах управления персонажами компьютерных игр) выход из программы — это остановка интерпретатора. Так что разработчик не должен явно записывать условие выхода — а значит, программа превращается в бесконечный цикл. Такой принцип принят, например, в Game Maker, в некоторых играх для программистов.

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии