Подробная блок-схема цикла по переменной
⇐ ПредыдущаяСтр 2 из 2 Переменная цикла x изменяется по закону арифметической прогрессии. Для демонстрации этого приводится логическая блок-схема, показывающая последовательность выполнения цикла по переменной. Соответствие узлов блок-схемы строкам исходного кода на Фортране установлено с помощью цифр.
Внимание! Из блок-схемы видно, что в цикле по переменной не может произойти зацикливание. Запомним эту его особенность, чтобы сравнить впоследствии с другими разновидностями циклов. При использовании в программе оператора цикла по переменной следует учитывать следующие правила: - Переменная x изменяется в цикле автоматически, поэтому изменять ее в теле цикла запрещено. - Вход в тело цикла разрешается только через заголовок цикла. При несоблюдении этого правила число повторений цикла kp и переменная x не определены. - Не рекомендуется изменять в теле цикла переменные xn, xk, step, хотя это и не повлияет на число повторений уже запущенного цикла. - Существует только две возможности повлиять на работу цикла операторами тела цикла – это операторы Exit и Сycle. - Оператор Exit, встретившийся в теле цикла, прерывает цикл, – завершает его досрочно и передает управление первому исполняемому оператору, следующему за циклом (4). - Оператор Сycle в теле цикла (2) прерывает выполнение текущей итерации. При этом операторы, расположенные между Cycle и Enddo не выполняются. Происходит переход к изменению переменных x и k (3) для следующей итерации; - При нормальном завершении цикла переменная x достигает значения
Примечание. Цикл по вещественной переменной x имеет неустойчивый характер. При некоторых соотношениях параметров цикла xn, xk, step может не выполниться итерация цикла для x = xk (последняя итерация). Причины: - ошибка округления при вычислении количества повторений kp; - накопление погрешности округления при изменении переменной цикла (x=x+step), особенно если шаг step сравнительно мал по отношению к x. Чтобы избежать этого, возможны варианты: - заменить цикл по вещественной переменной циклом по целой переменной inta. Перед циклом придется добавить оператор вычисления количества повторений цикла kp, а в цикле перед каждой итерацией вычислить x через inta. Значение целой переменной inta будет точным, переменная x не будет накапливать погрешность, хотя разовая погрешность сохранится. Integer inta,kp; real x kp =...! формула количества повторений цикла Do inta = 0, kp-1! kp – число повторений цикла x = xn + inta * step ...! содержимое прежнего блока_do Enddo - «подправить» цикл по вещественной переменной, увеличив конечное значение на полшага: Do x = xn, xk + step/2, step Конечное значение изменилось и теперь равно xk + step/2. Примеры циклов по переменной. Пример 1 Вывести на экран все числа, кратные трем, от 30 до 3 (в обратном порядке)
Пример 2 (использование оператора Exit ) Подсчитать сумму квадратных корней из 30 чисел, вводимых с клавиатуры. После ввода отрицательного числа прекратить суммирование, сообщить об ошибке и вывести количество просуммированных чисел. По окончании цикла вывести полученную сумму. Integer:: k; Real:: x, summa=0 Do k=1,30 Read (*,*) x If (x<0) then Write (*,*) ‘ ошибка, k=’, k-1 Exit Endif summa = summa + sqrt (x) Enddo Write (*,*) ‘summa=’, summa Пример 3 (использование оператора Cycle) Последовательно ввести с клавиатуры 30 чисел. Подсчитать сумму и количество квадратных корней из неотрицательных чисел. Отрицательные числа игнорировать, по окончании цикла вывести сумму и количество просуммированных чисел.
Integer:: k, count=0; real:: x, summa=0 Do k=1,30 Read (*,*) x If (x<0) cycle summa = summa + sqrt(x) count = count+1 Enddo Write (*,*) ‘summa=’, summa, ‘, count=’, count Цикл Do while Цикл Do while называют также циклом по условию; условие записывается в заголовке цикла. Оператор обеспечивает повторение тела цикла до тех пор, пока условие верно. Имя здесь не обязательно, но может пригодиться для индикации вложенных циклов, операторов C ycle или E xit . Общее представление оператора: [ имя:] Do while (логическое выражение) Тело цикла End do [ имя ] Изображение цикла Do while на блок-схеме: Важные замечания: - Тело цикла может вообще не выполниться, если условие изначально ложно. Пример Do while (k==k+1)! условие никогда не выполняется Тело цикла End do - Если переменная, проверяемая в условии в заголовке цикла, не изменяется в теле цикла, или изменяется, но не обращает условие в «ложь», то это приводит к зацикливанию, т.е. цикл будет выполняться, пока вы не закроете программу. Пример k = 0 do while (k>=0) Тело цикла K = k + 1 End do При составлении программы из всего арсенала конструкций, которые предлагает нам язык программирования, приходится выбирать наиболее подходящие для решения конкретной задачи. В качестве примера реализуем подробную блок-схему цикла по переменной с помощью оператора do while: Пример 1
Пример 2 Вывести на экран значения x и sin x, если x изменяется от 1 до 3 с шагом 0,1. Выполнить это задание с использованием цикла по переменной и цикла Do while.
Сейчас мы попытаемся сравнить между собой две разновидности циклов – цикл по переменной и цикл по условию. В цикле по условию будем называть переменной цикла переменную, которая изменяется в цикле и проверяется в условии в заголовке цикла.
Бесконечный цикл
В программировании бесконечным циклом называется цикл, написанный таким образом, что условие выхода из него никогда не выполняется. Если из строки-заголовка цикла по переменной исключить переменную цикла, получится бесконечный цикл. О программе, вошедшей в бесконечный цикл, иногда говорят, что она зациклилась. Оператором бесконечного цикла называется оператор цикла, не содержащий условия выхода из него. Единственная возможность выхода из бесконечного цикла обеспечивается включением в тело цикла оператора Exit. Общее представление оператора бесконечного цикла: [ имя:] Do Тело цикла End do [ имя ] Имя здесь, как и в любой конструкции, не обязательно, но может пригодиться для индикации вложенных циклов, операторов Cycle или Exit. Изображение бесконечного цикла Do на блок-схеме: Важное замечание: Во избежание зацикливания оператор Exit не только должен присутствовать в теле цикла, но обязательно должны создаваться условия, по которым он «сработает», иначе цикл будет выполняться, пока вы не закроете программу.
Продолжая тему «перетекания» друг в друга различных видов циклов, реализуем подробную блок-схему цикла по переменной с помощью бесконечного цикла: Пример 1
Цикл по переменной и цикл Do while – так называемые циклы с предусловием. Условие выхода из них проверяется ДО выполнения тела цикла, и тело цикла может не выполниться ни разу. При помощи бесконечного цикла Do и оператора Exit можно строить циклы с предусловием и с постусловием. Условие выхода из цикла с постусловием проверяется ПОСЛЕ выполнения тела цикла, которое обязательно выполняется хотя бы один раз. Пример 2 Аналог цикла Do while (цикл с предусловием) Вывести на экран значения sin x для x из интервала [12; 16] с шагом 0.2
Пример 3 Цикл, который выполняется хотя бы один раз (цикл с постусловием) Если в предыдущем примере задать начальное значение x=18, то цикл выполнится один раз при X = 18, а затем цикл будет завершен.
Вложенные циклы Все разновидности циклов можно вкладывать друг в друга на неограниченную глубину. При вложении должно исполняться условие – вкладываемый оператор цикла должен полностью размещаться внутри тела охватывающего цикла. Пример. Вычислить сумму Блок-схема:
S=0 Outer: DO j = 1, 10 Inner: do k = 1, 5 S = S + Real(j*k) / Real(j+k) If (S > S1) Exit Outer Enddo Inner ENDDO Outer Тело внешнего цикла Outer по переменной J (на блок-схеме – пунктирная линия) полностью включает в себя внутренний цикл Inner по переменной K. Тело внутреннего цикла на блок-схеме показано штрихпунктирной линией. Внешний цикл выполняется 10 раз, при каждом его выполнении тело внутреннего цикла повторяется 5 раз (всего 50 раз). Вложенные циклы удобнее читать, если циклам дать имена. Эти имена можно использовать в операторах Exit и Cycle. В приведенном примере при достижении указанного значения суммы выход осуществляется из внешнего цикла, внутренний при этом, естественно, прекращается. Неявные циклы Еще одна разновидность цикла – неявные циклы, которые часто используются в операторах ввода и вывода. Конструкция do в неявной форме записывается в скобках: (Список выражений, переменная = начальное значение, конечное значение, шаг) В список выражений могут входить переменные, выражения, элементы массивов и вложенные неявные циклы. Элементы списка разделяются запятыми. Позже мы подробно рассмотрим их применение для ввода и вывода массивов.
Пример неявного цикла: Write (*,*) (a, sin(a), a=1., 2., 0.5) На экран будут выведены значения a и sin(a) при значениях a в диапазоне от 1 до 2 с шагом 0,5.
Воспользуйтесь поиском по сайту: ![]() ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|