КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Циклы с постусловием
Basic Циклы for End while Loop Loop Basic Формат: do while <условие> <инструкции> loop Пример. Тот же. s=0: u=1: n=1 do while abs (u)>5e-6 u *= x/n s += u n += 1 Допустима другая разновидность этой инструкции: do until <условие> <инструкции> loop Она отличается тем, что цикл повторяется до тех пор, пока условие не примет значение true. Выбор разновидности определяется тем, какое условие(про-должения или прекращения цикла) легче сформулировать или короче записать. Пример. s=0: u=1: n=1 do until abs (u)<=5e-6 u *= x/n s += u n += 1 Есть еще 1 инструкция, более похожая на инструкцию языка C: while <условие> <инструкции> Работает так же, как инструкция do while... loop. Различие между ними будет рассмотрено ниже. Рекомендация. Циклы while разумно применять в тех случаях, когда: - число повторений тела цикла не определено; - неизвестна закономерность повторений или она сложна. Замечание. Заметим, что один и тот же алгоритм может быть реализован с любым видом инструкции цикла и даже, вообще, без них. В вопросе выбора вида инструкции надо руководствоваться понятностью текста программы, прежде всего, для себя, а также для других возможных читателей. C Формат: for ([<выражение 1>];[<выражение 2>];[<выражение 3>])[<инструкция>]; Эквивалентная схема <выражение 1>; while (<выражение 2>){ <инструкция> <выражение 3>; } Замечания. 1. Каждое из выражений является необязательным. Как отсутствие каждого из них влияет на выполнение инструкции, удобно проследить по эквивалентной схеме. 2. Тело цикла – одна инструкция, которая может отсутствовать. Примеры. Дано: {ai}, i=1...100. Найти сумму(ai>0) и сумму(ai<0). u=v=0; for (i=0; i<100; i++){ if (a[ i ]>0)u+=a[ i ]; if (a[ i ]<0)v+=a[ i ]; } Найти Sxn/n!,n=1,2,..., пока |un|>5e-6. s=0; u=1; for (n=1; fabs (u)>5e-6; n++){ u *= x/n; s += u; } Определить число цифр натурального числа n. for (k=0; n!=0; n/=10)k++; Найти первый отрицательный элемент массива. Если его нет, то ответ = 0. for (i=0; i<100 && a[ i ]>=0; i++); // Тело цикла отсутствует if (i==100){ y=0; } else { y=a[ i ]; } Замечания. 1. Как видно из примеров, почти все циклы используют для своей организации некоторую переменную, которую называют параметром или счетчиком цикла. См. переменные i, n, k, i в порядке следования примеров. Эту переменную не рекомендуется изменять в теле цикла, поскольку логика алгоритма становится запутанной. 2. После окончания цикла параметр сохраняет последнее присвоенное значение. В последнем примере i равно 100, если отрицательных элементов в массиве нет, или равно индексу первого по порядку следования в массиве отрицательного элемента. 3. Это наиболее универсальная форма инструкции цикла. Используется более простая форма инструкции for, которую иногда называют циклом типа арифметической прогрессии. Формат: for <счетчик>=<начало> to <конец> [ step <шаг>] <инструкции> next [<счетчик>] Эквивалентная схема: <счетчик>=<начало> do while <шаг> < 0 and <счетчик> >= <конец> or _ <шаг> >=0 and <счетчик> <= <конец> <инструкции> <счетчик> += <шаг> loop Замечания. 1. <счетчик> - переменная (без индексов!) числового типа, <начало>, <конец>, <шаг> - арифметические выражения. 2. Если опция (часть инструкции) step отсутствует, то шаг равен 1. 3. Отсутствие <счетчика> в инструкции next не влияет на работу цикла, являясь, по существу, дополнительным комментарием, особенно при вложенных циклах, о которых речь пойдет ниже. 4. Значение <счетчика> после окончания цикла равно последнему присвоенному значению (как в языке C). 5. Значения < начало >, < шаг > и <конец> вычисляются 1 раз при входе в цикл. Изменение переменных, входящих в эти выражения, в инструкциях тела цикла не влияют на число повторений, поэтому так действовать не рекомендуется. Пример. Дано: {ai}, i=1...100. Найти сумму(ai>0) и сумму(ai<0). u=0: v=0 for i=1 to 100 if a(i)>0 then u += a[i]: if a(i)<0 then v += a(i); next i Используются существенно реже, потому что основное отличие их от предыдущих инструкций заключается в том, что в них тело цикла в первый раз выполняется без проверки условия продолжения (прекращения) цикла. Единственный смысл применения такой конструкции, на наш взгляд, состоит в получении в теле цикла с помощью операций ввода-вывода информации из внешней среды, которая используется в условии. Заметим, что подобная манипуляция легко реализуется с помощью циклов с предусловием заданием условия, которое при первом проходе по циклу заведомо выполняется. Тем не менее рассмотрим инструкции, реализующие такие циклы. C Формат: do <инструкция> while <условие>; Эквивалентная схема: label: <инструкция>; if (<условие>) goto label; Пример. Дано: {ai}, i=1...100. Найти Sai и Pai. s=i=0; p=1; do { s += a[ i ]; p *= a[ i ]; i++; } while (i<100); Basic Формат:
Дата добавления: 2014-12-27; Просмотров: 408; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |