АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Итерационные процессы и циклы

Читайте также:
  1. Большие экономические циклы Кондратьева.
  2. Виды музыкальной памяти. Мнемонические процессы при запоминании нотного текста
  3. Виды экономических циклов. Циклы Н.Д. Кондратьева, циклы С. Кузнеца; циклы К. Жугляра; циклы Дж. Китчена. Факторы, влияющие на их появление. Периодичность. Влияние на экономику.
  4. Вопрос. Экономические циклы: понятие, фазы и механизм развития.
  5. Вспомогательные процессы монтажа.
  6. Геологические и инженерно-геологические процессы.
  7. Гидрогеохимические процессы
  8. Глава 1. РАЗВИТИЕ ЧЕЛОВЕКА: ПЕРСПЕКТИВЫ, ПРОЦЕССЫ И МЕТОДЫ ИССЛЕДОВАНИЯ
  9. Глава 17. Психические процессы как структурные элементы управления – 419
  10. Глава девятая: общий оборот авансированного капитала. Циклы оборотов
  11. ГНИЛОСТНЫЕ ПРОЦЕССЫ
  12. ДЕЛОВЫЕ ЦИКЛЫ: ПОНЯТИЕ, МОДЕЛИ

Вложенные циклы

Командой повторения или циклом называется такая форма организации действий, при которой одна и та же последовательность действий повторяется до тех пор, пока сохраняется значение некоторого логического выражения. При изменении значения логического выражения на противоположное повторения прекращаются (цикл завершается).

 

Для организации цикла необходимо выполнить следующие действия:

1 перед началом цикла задать начальное значение параметра;

2 внутри цикла изменять параметр цикла с помощью оператора присваивания;

3 проверять условие повторения или окончания цикла;

4 управлять циклом, т.е. переходить к его началу, если он не закончен, или выходить из цикла в противном случае.

Один цикл повторения может находиться внутри другого цикла. При использовании вложенных циклов следует соблюдать простое правило: один цикл внутри другого должен находиться так же, как одна матрешка внутри другой матрешки.

Вложенным называется цикл, находящийся внутри другого цикла.

Рассмотрим пример, в котором вложенные циклы используются для нахождения всех простых чисел, не превышающих данного значения. Простое число - это такое число, которое делится нацело только на 1 и само на себя. Первыми простыми числами будут 2, 3, 5, 7 и 11.

 

Самый легкий способ узнать, является ли число простым, состоит в делении его на все числа между 1 и им самим. Если оно делится нацело на какое-нибудь число из этого ряда, то оно - не простое. Мы воспользуемся операцией деления по модулю (%) для проверки, выполнялось ли деление нацело. (Вы не забыли еще, конечно, операцию деления по модулю? Ее результатом является остаток от деления первого операнда на второй. Если одно число делится на другое нацело, результатом операции деления по модулю будет 0.) При обнаружении какого-нибудь одного делителя числа дальнейшие проверки потеряют смысл. Поэтому в программе процесс проверки данного числа завершается после того, как найден его делитель.

Начнем с программы, проверяющей делимость одного числа. В ней имеется всего один оператор цикла.

 

/* простое число1 */

main()

{

int number, divisor;

printf(" О каком числе вы хотите знать, простое ли оно?\n");

scanf(" %d", &number); /* получение ответа */

while(number <2) /* число отвергается */

{

printf(" Извините, мы не принимаем чисел меньше 2.\n");

printf(" Пожалуйста, попробуйте еще раз.\n");

scanf(" %d", &number);

}

for(divisor = 2; number % divisor!= 0; divisor++)

; /* проверка, простое число или нет,

осуществляется внутри спецификации цикла */

if (divisor == number) /* выполняется после завершения цикла */

printf(" %d - простое число.\n", number);

else printf(" %d - не простое число.\n", number);

}

 

Мы воспользовались структурой цикла while, чтобы избежать ввода значений, которые могли бы привести к аварийному завершению программы.

Обратите внимание, что все вычисления выполняются внутри спецификации цикла for. Величина переменной number последовательно делится на возрастающие значения делителей до тех пор, пока не произойдет деление нацело (т. е. number % divisor станет равным 0). Если первым делителем, который приведет к такому результату окажется само это число, то значение переменной number - простое число. В противном случае данное число будет иметь меньший делитель, и это приведет к тому, что цикл завершится раньше.

 

Для нахождения всех простых чисел, меньших некоторой заданной величины, нам нужно будет заключить наш цикл for в некоторый другой цикл. На псевдокоде это будет выглядеть следующим образом:

для числа (number)=1 до верхнего предела limit проверять, является ли число простым

 

Вторая строка представляет собой нашу предыдущую программу. Переводя эту запись на язык Си, получим программу:

/* простые числа2 */

main()

{

int number, divisor, limit;

int count = 0;

 

printf(" Укажите, пожалуйста, верхний предел для поиска простых чисел.\n");

printf(" Верхний предел должен быть 2 или больше.\n");

scanf(" %d", &limit);

while(limit < 2) /* вторая попытка, если ошибка при вводе */

{

printf(" Вы были не внимательны! Попробуйте еще раз. \n");

scanf(" %d", &limit);}

printf(" Сейчас будут печататься простые числа!\n");

for(number = 2; number <= limit; number++) /* внешний цикл */

{

for(divisor =2; number % divisor!= 0; divisor++);

if(divisor == number)

{

printf(" %5d", number);

if(++count % 10 == 0)

printf(" \n"); /* новая строка начинается через каждые 10 простых чисел */

}

}

printf(" \n Вот и все!\n");

}

Во внешнем цикле каждое число, начиная с 2 и кончая величиной limit, последовательно берется для проверки. Указанная проверка осуществляется во внутреннем цикле. Мы использовали переменную count для хранения счетчика получаемых простых чисел. При печати каждое одиннадцатое простое число мы начинаем с новой строки. Ниже приводится пример результатов, получаемых с помощью такой программы:

Укажите, пожалуйста, верхний предел для поиска простых чисел. Верхний предел должен быть 2 или больше.

Сейчас будут печататься простые числа!

2 3 5 7 11 13 17 19 23 29

31 37 41 43 47 53 59 61 67 71

73 79 83 89 97 101 103 107 109 113

127 131 137 139 149 151 157 163 167 173

179 181 191 193 197 199 211 223 227 229 233 239 241

Вот и все!

Этот способ решения довольно прост, но он не является самым эффективным. Например, если вы хотите узнать, является ли число 121 простым или нет, нет необходимости проверять, существуют ли у него делители, превышающие 11. Дело в том, что если у данного числа существует делитель, больший 11, то результатом деления будет число, меньшее 11; тогда этот делитель был бы обнаружен раньше. Поэтому требуется проверять только делители, не превышающие величину квадратного корня из числа, но в данном случае программа будет несколько сложнее. Мы оставляем ее в качестве упражнения любознательному читателю. (Указание: вместо того чтобы сравнивать делитель с величиной квадратного корня из числа, сравнивайте квадрат делителя с самим числом.)

Итерационные процессы и циклы

До сих пор мы рассматривали повторяющиеся (циклические) процессы, в котором действия и результаты одного шага цикла не влияли на последующие шаги. В таких циклах параметры заголовка цикла не зависят от значений переменных, вычисляемых в теле цикла, и цикл имеет постоянное количество повторений, например:

for (i=0; i<n; i++) {...A[i]... }

Но среди циклических процессов имеются и такие, в которых поведение программы на некотором шаге цикла может зависеть от результатов выполнения тела цикла на предыдуших шагах. То же самое можно сказать и о самом числе повторений цикла. Такие процессы и циклы называются ИТЕРАЦИОННЫМИ. Наиболее широко они применяются в вычислительной математике, когда для получения численного результата используется итерационный цикл ПОСЛЕДОВАТЕЛЬНЫХ ПРИБЛИЖЕНИЙ к нему.


1 | 2 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)