Студопедия

КАТЕГОРИИ:


Архитектура-(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; Просмотров: 386; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.