Если говорят что программа зациклилась что это значит
Зацикливание
В прошлой статье мы кратко коснулись случая, когда цикл повторялся бесконечно т.е происходило зацикливание. Теперь подробнее о зацикливании в каждом цикле.
Итак зацикливание в программировании — это ситуация, когда цикл написан таким образом, что условия выхода из него не выполняется. Рассмотрим зацикливание в операторах цикла for,while и repeat. Справедливости ради все варианты будут рассмотрены в Turbo Pascal и PascalABC. Также будет добавлен оператор write для вывода результатов.
Зацикливание в for
Вообще идея зацикливания проста: необходимо всего-то в каждом шаге цикла уменьшать оператор шага на 1 (i:=i-1;). Однако именно такая реализация возможна не везде. Рассмотрим простой пример.
Казалось бы все просто,да не тут то было.В то время как в Turbo Pascal все проходит на ура,в PascalABC такое не возможно и для зацикливания необходимо использовать оператор goto.
label m;
var i:integer;
begin
m:
for i:=1 to 5 do begin
write(i);
if i=2 then goto m;
end;
end.
Зацикливание в while
Напомню, что в операторе while шаг цикла необходимо добавлять самостоятельно. Поэтому произвести зацикливание проще всего: нужно только убрать шаг цикла
Оба компилятора адекватно реагируют на пропуск шага.
Зацикливание в repeat
Для создание бесконечного цикла в этом случае, как и предыдущем, достаточно не указывать шаг цикла
В данной статье приведены различные варианты для создание бесконечного цикла. Однако запомните, что зацикливание создает нагрузку и вообще редко используется. Гораздо чаще применяют неполное зацикливание при котором выход из цикла все же совершается.
Переменные, операторы, циклы
Тест 14. ПЕРЕМЕННЫЕ, ОПЕРАТОРЫ, ЦИКЛЫ
1. Какая строка из перечисленных описывает логическую переменную на языке Pascal:
1) var x : integer; 3) var x : real;
2) var x : boolean; 4) var x : char
2. Сколько значений принимает целочисленная переменная в языке Pascal:
1) одно значение ; 3) более 10 значений;
2) два значения; 4) бесконечное множество
3. Укажите, какие операции относятся к логическим операциям:
1) AND, OR, NOT 3) OR, MOD, AND
2) NOT, AND, THEN 4) IF, OR, AND
4. Значением логической переменной может являться:
1) любое число; 3) таблица;
2) любой текст; 4) истина или ложь.
5. Укажите логическое выражение, определяющее полуотрезок (–1, 3]:
3) (X mod 3 =0) AND (X mod 6 <>0);
4) (X mod 3 =0) OR (X mod 6 <>0).
8. Какой из операторов позволяет вычислить корень квадратный из числа на языке программирования Паскаль?
9. Назначение циклической структуры:
1) повторение идущих подряд одинаковых команд некоторое число раз;
2) повторение одной команды не более 10 раз;
3) проверка условия в тексте;
10. Тело цикла – это…
1) группа команд, не входящих в циклическую структуру;
2) произвольный текст;
3) произвольная группа команд;
4) группа команд, повторяющихся некоторое число раз.
11. Укажите, сколько раз выполнится тело цикла с заданным заголовком:
2) 0; 4) бесконечное число раз.
12. Какой из перечисленных заголовков циклов не содержит ошибок?
13. Если говорят, что программа “зациклилась”, то это значит…
1) тело цикла выполняется бесконечно долго;
2) тело цикла не выполняется;
3) тело цикла выполняется только один раз;
4) тело цикла выполняется два раза;
14. Какое значение примет переменная C в результате выполнения программы:
Как определить зацикливание программы?
Есть программы, которые требуют очень много времени для своей работы
В связи с этим возникло несколько вопросов.
1. Как вы определяете, что программа работает?
2. Как вы определяете, что программа зациклилась?
3. Ваша программа выдает какие-то данные о том что она работает?
4. Ваша программа извещает вас. сколько ей осталось работать?
5. Вы оцениваете время работы программы перед ее запуском?
6. Ваша программа может сама определить, что она зависла?
7. Ваша программа может сама остановиться?
8. Ваша программа остановилась. Объяснит она свою остановку?
полагаю, этого достаточно.
Метод Эйлера-Коши (как прервать зацикливание программы)
Подскажите, пожалуйста, как прервать зацикливание данной программы: clear; a=1; b=2; h=0,02;.
Как определить зацикливание процесса?
Собственно, сабж в названии. Как определить, что некоторая программа другого процесса зациклилась.
Как наиболее быстро определить зацикливание связанного списка? (a => b => c => d => e => a)
You have a pointer to some element in a linked list (a => b => c => d => e). What is the fastest.
Зацикливание программы
Как сделать так, чтобы программа запрашивала у пользователя, нужно ли еще раз решать то или иное.
Решение
1−3, 8 — решается логированием.
4 — если реализовать просто, то можно и сделать.
5 — в некоторых случаях могут быть ожидания относительно времени работы.
6 — в некоторых случаях возможно, смотря что понимать под зависанием.
На более конкретные вопросы будут более конкретные ответы.
Добавлено через 5 минут
Зависание
Некоторые переменные должны обязательно менять
свое значение (можно поставить элементарный счетчик)
если переменная не меняет своего значения (хотя должна)
— 100%% гарантии того, что программа зависла.
Решение
Можно на каждой итерации, можно с выбранным шагом… Как удобно, зависит от конкретной задачи.
Операторы управления циклом. Зацикливание
Пожалуйста, приостановите работу AdBlock на этом сайте.
Давайте рассмотрим их работу на следующем примере: Модифицируем программу из прошлого урока.
Программа: Игральный кубик.
Программа заменяет обычный игральный кубик.
Код такой программы будет выглядеть следующим образом:
Давайте поясню некоторые новые операторы, которые там используются.
Оператор break
Важный момент. Оператор break работает и во всех циклических конструкциях, и в операторе выбора.
В нашем примере он используется и там, и там. Возникает вопрос: а как он решает, откуда надо выйти: из switch или из цикла. Очень просто.
Оператор break всегда завершает ближайший внешний оператор, внутри которого он находится.
Оператор continue
Зацикливание
Пример: программа сложения пяти введённых чисел.
На первый взгляд всё верно, но попробуйте скомпилировать и запустить эту программу. Вы заметите, что она не спешит останавливаться после того, как мы ввели первые пять чисел.
Когда мы используем эти циклы, необходимо внимательно отслеживать, что переменные, входящие в условия цикла, в теле цикла хоть как-то изменяются.
В нашем примере допущена именно такая ошибка. Условие записано верно, переменная k (счётчик считанных чисел) объявлена и инициализирована, но внутри тела цикла мы забыли её увеличить. Поэтому нашему условию окончания цикла k не суждено стать истинным.
Не всегда подобные ошибки так очевидны, как в нашем случае. Поэтому будьте внимательны, когда используете циклы с условиями.
Давайте приведем нашу программу в рабочее состояние:
Глава 8. Циклические программы
Идею цикла я поясню на примере движения объектов по экрану. Возьмем игру в воздушный бой. Самолетик по экрану должен двигаться. Но в списках операторов большинства языков программирования, используемых профессиональными программистами для создания игр, нет команды движения. Здесь нужно задаться вопросом – а что такое движение? Рассмотрим иллюзию движения, возникающую на экране кинотеатра. Если вы держали в руках кинопленку фильма, изображающего, скажем, движение автомобиля, то должны были обратить внимание, что она состоит из множества неподвижных слайдов-кадров, на каждом следующем из которых автомобиль находится чуть-чуть в другом месте, чем на предыдущем. Показывая эти кадры один за другим с большой скоростью, мы создаем иллюзию движения автомобиля. Точно так же поступают с созданием иллюзии движения на экране компьютера. Запишем алгоритм движения самолетика по экрану слева направо:
1.Зададим в уме компьютера позицию самолетика в левой части экрана.
2.Нарисуем в задуманном месте самолетик.
4.Изменим в уме компьютера позицию самолетика на миллиметр правее.
5.Перейдем к команде 2.
Каждая из приведенных команд алгоритма легко программируется на большинстве языков. Любой компьютер, выполнив очередную команду, автоматически переходит к выполнению следующей. Так, выполнив команду 2, компьютер всегда перейдет к выполнению команды 3. Однако, если мы захотим, то можем заставить компьютер изменить этот порядок, что мы и сделали в команде 5. Из-за нее компьютер выполняет команды в таком порядке: 1-2-3-4-5-2-3-4-5-2-3-…. Напомню, что, выполнив команду 2, компьютер всегда перейдет к выполнению команды 3, независимо от того, какую команду он выполнял перед командой 2 – 1-ю или 5-ю. Таким образом, многократно выполняется последовательность команд 2-3-4-5. Такая многократно выполняемая последовательность называется циклом. Можно сказать, что цикл – это одно из средств заставить компьютер долго работать при помощи короткой программы.
В коротком промежутке времени после выполнения команды 2 самолетик будет появляться на экране и на команде 3 исчезать, но этого достаточно, чтобы человеческий глаз его заметил. Благодаря циклу самолетик будет мелькать каждый раз в новом месте, а поскольку смена «кадров» будет очень быстрой, нам будет казаться, что происходит плавное движение самолетика.
Не нужно думать, что циклы применяются лишь при движении. Они пронизывают все программирование. Ведь со 2-й по 5-ю команды мы можем писать команды любого назначения: и вычислительные, и по работе с текстом и так далее.
Оператор перехода GoTo. Цикл. Метки
Оператор GoTo является одним из самых низкоуровневых средств современных языков программирования и на практике им почти не пользуются. Но сам компьютер «думает» именно на низком уровне, и поэтому настоящий программист должен быть с GoTo «на ты».
Цикл с GoTo. Метки
Посмотрим, как осуществить цикл в VB. Предположим, мы хотим, чтобы компьютер бесконечно повторял выполнение следующего фрагмента:
в результате чего в окне Output мы бы увидели:
Если бы операторы VB можно было писать по-русски, то для достижения нашей цели было бы естественно воспользоваться такой конструкцией:
метка m1: Debug.Write( «Это «)
Debug.Write(«тело «)
Иди к оператору, помеченному меткой m1
Здесь мы видим новый для нас «оператор» ИДИ, который выполняется после оператора Debug.WriteLine(«цикла») и единственная работа которого заключается в том, чтобы заставить компьютер перескочить к выполнению оператора Debug.Write( «Это «), помеченного меткой m1.
А вот как этот фрагмент выглядит реально на VB (не запускайте его пока):
m1: Debug.Write(«Это «)
GoTo m1
Здесь GoTom1 – оператор безусловного перехода, переводится «иди к», m1:– метка. Метка— это произвольное имя или произвольное не слишком большое целое положительное число. Метка перед оператором должна заканчиваться двоеточием.
Оператор GoTo можно писать в любых местах процедуры и метку можно ставить перед любым оператором процедуры, заставляя компьютер таким образом перескакивать внутри процедуры откуда угодно куда угодно. Правда, в сложных процедурах и внутри сложных операторов эта свобода перескакивания существенно ограничивается, так что я не советую вам врываться снаружи внутрь вложенных операторов, а вот изнутри наружу – пожалуйста. Между процедурами скакать нельзя.
А теперь запустите эту программу, но только в пошаговом режиме. Посмотрите, как заполняется окно Output. Чтобы оно заполнялось быстрее, нажмите клавишу F11 и не отпускайте.
Группа операторов, выполняющихся многократно, называется телом цикла. У нас это все 4 оператора.
Зацикливание
Теперь запустите эту программу обычным образом (не в пошаговом режиме). Через некоторое время перед вами должен встать жизненно важный вопрос – когда же она остановится? А никогда! Вы видите, что окно Output лихорадочно заполняется текстом, а белка в колесе и не думает уставать.
Вы обнаружите, что кнопки и другие элементы управления на форме не отзываются на нажатие мыши, и вообще, до программы «не докричишься». Любопытно, что так «глохнет» любая нормальная программа в процессе выполнения операторов кода. И все ваши прежние программы тоже так «глохли». Но вы этого не замечали по той простой причине, что весь код их процедур выполнялся очень быстро. Не успели вы нажать на кнопку, а все уже выполнилось и снова программа реагирует на ваши действия.
В нормальной программе, написанной без ошибок, исключены ситуации, когда код выполняется бесконечно или на протяжении слишком долгого времени. Если же вы допустили ошибку и в программе выполняется бесконечный цикл, то возникает как раз такая ситуация. Вы вечно будете смотреть на экран, по которому бесконечно бегут непонятные числа или слова или рисуются бесконечные вереницы графических фигур, а возможно и ничего не происходит – все зависит от характера программы. Говорят, что программа зациклилась.
Для прерывания работы программы, в том числе и зациклившейся, вы нажимаете кнопку Stop. Можно щелкнуть и по крестику на форме, но в этом случае VB подвергнет вас небольшому допросу.
Примеры
Все нижеприведенные примеры прогоните в обычном и в пошаговом режиме.
Пример 1. Определите без компьютера, что напечатает фрагмент: