Главная страница Библиотека (скачать книги) Скачать софт Введение в программирование Стандарты для C++ Уроки по C# Уроки по Python HTML Веб-дизайн Ассемблер в среде Windows ActiveX Javascript Общее о Линукс Линукс - подробно Линукс - новое Delphi Паскаль для начинающих Турбопаскаль Новости Партнеры Наши предложения Архив новостей |
Операторы, изменяющие естественный ход программы Язык Паскаль задумывался как структурный язык. То есть любой алгоритм в нем можно описать в виде набора операторов условия и цикла, каждый из которых можно рассматривать как отдельный блок. В блоки «вкладываются» более мелкие блоки, и т. д. Поэтому реализация программы легко осуществляется в рамках структурного программирования. Для первых языков программирования использование безусловного перехода являлось совершенно естественным, так как сама инструкция безусловного перехода используется в каждой программе, написанной на машинном коде. Без нее нельзя реализовать такие, например, конструкции, как if...else. Первоначально языки программирования придумывались как средство более удобной записи машинных команд, поэтому в них оператор goto применялся очень широко. Тезис структурного программирования призывает вовсе не использовать в программе оператор goto. Для людей, которые, вероятно, первый раз о таком слышат, это кажется вполне естественным. А вот для программистов, которые привыкли мыслить «в терминах goto», отказ от его использования был очень странен и вызывал много возражений. Поэтому для облегчения перехода на Паскаль программистов старой школы и для тех редких случаев, когда использование goto оказывается более удобным, оператор был оставлен в языке. В этой теме мы рассмотрим три оператора, изменяющие обычный ход течения программы, без использования которых вполне можно обойтись. Рассказываем мы о них для полноты изложения и из-за удобства их применения в ряде случаев.
Использование оператора безусловного перехода goto Споры между противниками и сторонниками goto не утихают до сих пор. Мы прийедем один из основных примеров оправданного использования goto. Проанализируем задание и методы его решения. А как это проверить? Задачу проще решать от противного: постараемся найти в массиве два одинаковых элемента. Если таких не найдется, значит, все элементы различны. Так как одинаковые элементы могут быть как угодно разбросаны по массиву, необходимо сравнить каждый элемент с каждым. То есть нужно сравнить первый элемент со всеми остальными (это цикл), затем второй элемент со всеми остальными (и это цикл), и так перебрать все элементы. Это означает, что мы должны использовать вложенные циклы. Всего при этом у нас получится около N2 сравнений (точнее, (N2-N)/2). Заметим, что если мы в какой-то момент найдем совпадающую пару элементов, перебирать все оставшиеся будет уже не обязательно. Значит, нужно выйти из обоих циклов. Вот для этого нам и понадобится оператор goto.
Пример 14.1. Итак, использование goto считается оправданным, если таким способом происходит выход из нескольких вложенных циклов вперед. Пример 14.2. Программа стала чуть сложнее из-за применения while вместо for, зато мы обошлись без goto. Операторы, изменяющие ход выполнения цикла В Паскале имеются еще два оператора, действие которых напоминает действие оператора безусловного перехода. Оба они применяются для изменения хода выполнения цикла (напоминаем, что в Паскале есть три вида циклов — for, while и repeat). Оператор break Оператор break прерывает действие текущего цикла и передает управление тому оператору программы, который должен выполниться после окончания цикла. Пример 14.3. Вместо применения оператора break можно использовать переменную-флажок, по значению которой определять, нужно ли выполнять цикл далее. Пример 14.4.
Оператор continue Оператор continue заканчивает выполнение текущего шага цикла. То есть после оператора continue сразу выполнится проверка условия окончания цикла. Если цикл еще должен продолжаться, начнет снова выполняться тело цикла. Пример 14.5. Как и в случае с break, использование оператора continue не является обязательным. Выводы
Контрольные вопросы
|
||
Библиотека программиста. 2009. |
|