Бесконечный цикл

Бесконечный цикл

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

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

Среди пользователей различных поколений сверхскоростных компьютеров ходит стандартная шутка: «Крей-3 настолько быстр, что выполняет бесконечный цикл менее, чем за 2 секунды».

Содержание

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

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

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

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

Примечание: обратите внимание, что оператор GOTO (безусловный переход) не нужен, а достаточно просто выхода из цикла.

Примеры

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

Оператор цикла for

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

Оператор цикла while

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

Оператор цикла do-while

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

Python

while True:
    #код

Ruby

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

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

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

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

Bash

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

Практика

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

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

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

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

Element* el;
SomeIterator it();
for (el=it.get(); el!=NULL; el=it.get())
{
  ... 
}

Пожалуй, единственный способ реализовать такое же в Паскале (с сохранением возможности использовать оператор continue, то есть, без el:=it.Get; в конце цикла) таков.

it := SomeIterator.Create;
repeat
  el := it.Get;
  if el=nil then break;
  ...
until false;

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

//Инициализация МК, первоначальная настройка регистров
 
while(1){
//Основной цикл программы
};

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


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "Бесконечный цикл" в других словарях:

  • бесконечный цикл — — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом EN infinite loop …   Справочник технического переводчика

  • цикл — сущ., м., употр. сравн. часто Морфология: (нет) чего? цикла, чему? циклу, (вижу) что? цикл, чем? циклом, о чём? о цикле; мн. что? циклы, (нет) чего? циклов, чему? циклам, (вижу) что? циклы, чем? циклами, о чём? о циклах 1. Циклом называются… …   Толковый словарь Дмитриева

  • Основание (цикл) — У этого термина существуют и другие значения, см. Основание. «Основание» (англ. Foundation, Фонд; другие русские варианты: Академия, Основатели, Установление, Организация, Фундамент, Фундация)  цикл из семи научно фантастических романов …   Википедия

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

  • Идиома (программирование) — Для улучшения этой статьи по информационным технологиям желательно?: Дополнить статью (статья слишком короткая либо содержит лишь словарное определение). Найти и оформить в виде сносок ссылки на …   Википедия

  • Проблема зависания — В теории вычислимости проблема остановки это проблема разрешимости, которая может неформально быть поставлена в виде: Даны описание алгоритма и его начальные входные данные, требуется определить, сможет ли выполнение алгоритма с этими данными… …   Википедия

  • Проблема останова — В теории вычислимости проблема остановки это проблема разрешимости, которая может неформально быть поставлена в виде: Даны описание алгоритма и его начальные входные данные, требуется определить, сможет ли выполнение алгоритма с этими данными… …   Википедия

  • Миникс 3 — Эта статья или раздел  грубый перевод статьи на другом языке (см. Проверка переводов). Он мог быть сгенерирован программой переводчиком или сделан человеком со слабыми познаниями в языке оригинала. Вы можете помочь …   Википедия

  • Кхайне — Проект   Эта статья по вымышленной вселенной Warhammer 40 000   Портал Эльдар (англ. Eldar) в вымышленной вселенной Warhammer 40,000 раса эльфоподобных гуманоидов. Они одна из самых древних и технически развитых рас вселенной, хотя и моложе… …   Википедия

  • Эльдар (Wahrammer 40,000) — Проект   Эта статья по вымышленной вселенной Warhammer 40 000   Портал Эльдар (англ. Eldar) в вымышленной вселенной Warhammer 40,000 раса эльфоподобных гуманоидов. Они одна из самых древних и технически развитых рас вселенной, хотя и моложе… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»