КАТЕГОРИИ: Архитектура-(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) |
Организация циклов
В простых примерах, рассмотренных выше, вообще говоря, не требовалось привлечения ЭВМ и программирования. Все они достаточно быстро могли быть решены вручную или с помощью калькулятора. Сила ЭВМ заключается в возможности простыми средствами осуществлять многократное повторение заданных действий – циклов. Итерационные циклы. В случае если количество циклов, необходимых для решения задачи, заранее неизвестно, такие циклы называются итерационными. Рассмотрим ряд примеров. Задача 4.1. Пусть для некоторого множества чисел X нужно вычислить функцию 2/X. Ввод и вычисления следует прекратить после обнаружения первого X, равного нулю (деление на ноль невозможно). Очевидна следующая (рис. 4.1а) блок-схема. Блоков ввода, вычисления и анализа столько, сколько чисел в последовательности до первого нуля. На рисунке показаны только два первых блока. Чисел может быть очень много и подобный подход, конечно, неприемлем, не говоря уже о том, что и количество их заранее неизвестно. Такие программы строятся по-иному. Обрабатывающая часть программы записывается только раз, но охватывается петлей возврата (рис. 4.1б). Тогда одни и те же операторы будут выполняться многократно до тех пор, пока X¹0. Задача 4.2. Пусть для аргумента X, находящегося в диапазоне от 3 до 9, требуется вычислить и напечатать значение функции Y=(X–6)2, где X изменяется с шагом 2 (рис. 4.2а). Блок-схема алгоритма показана на рис. 4.2б. Справа от текста программы сделаны выкладки по проверке решения. В каждой строке вручную вычисляется и указывается значение соответствующей переменной. Выкладки по проверке выполняются сверху-вниз, слева-направо по ходу исполнения программы. Стрелки показывают связи между циклами. Видим, что заданная последовательность изменения X (3, 5, 7,...) наблюдается и последнее значение Y вычисляется для X=9. При следующем приращении X оно становится равным 11 и пятый цикл не выполняется, поскольку при X>9 программа завершается.
Здесь следует отметить, что нет никакого технически простого способа проверки правильности написанных программ. Для этой цели программисту приходится вручную по тексту программы рассчитывать значения всех переменных и сличать их с желаемыми (известными из условия). Конечно, проверка выполняется не для всей задачи, а только для небольшого числа (например, трех) начальных циклов и при этом тщательно анализируется значение условия выхода из цикла (оператор IF). @ Задачи для самостоятельного решения. Напишите программы: 1). Решите задачу 4.2 для X, изменяющегося в обратном направлении (9¸3). 2). Вычислить и напечатать значения функции Y=10–2X для последовательных значений X: 0, 0.5, 1, 1.5, 2, 2.5,... и т.д. до тех пор, пока Y не станет отрицательным. 3). Решите задачу 4.1, где вычисления Y прекращаются после того, как будут встречены три числа X<0. Указание. Здесь понадобится переменная – счетчик таких значений. Назовем ее К. В каждом цикле следует увеличивать ее значение на единицу и прекратить вычисления при К>=3. Арифметические циклы. Если число повторений известно заранее – такие циклы называются арифметическими. Задача 4.3. Пусть в условиях предыдущей задачи 4.2 не известно предельное значение аргумента, но зато задано количество точек аргумента – 4. Поскольку не известно последнее X, признак окончания циклов придется формировать самим. Для этого вводится переменная, которая фиксирует число уже выполненных циклов, т.е. счетчик циклов (назовем ее I). В исходном состоянии (рис. 4.3) берем его равным 1. После выполнения очередного цикла счетчик получает приращение, увеличиваясь на единицу (I=I+1). В начале каждого цикла в операторе IF делается проверка на достижение счетчиком последнего разрешенного значения (у нас 4). Если I<=4 программа продолжает вычисление функции, если нет (I>4) – счет прекращается. Ниже приведена программа и выкладки по ее проверке. Как видим, результат проверки совпал с результатом, полученным ранее. Исходное значение счетчика циклов и его приращения могут выглядеть по-разному. Главное, чтобы было выполнено заданное число циклов. В нашем примере был использован счетчик на возрастание I=1,2,3,... до N (N – число шагов). Можно начинать счетчик с нуля: I=0,1,2,... до N-1. Возможен счетчик на убывание: I=N–1,... 3,2,1 до 0 и т.д. Обычно, если нет оснований для другого, используется счетчик на возрастание с шагом единица от 1 до N. @ Задачи для самостоятельного решения. 1). Решите задачу 5 для X, изменяющегося в обратном направлении (X начинается с 9). 2). Напечатайте цепочку из 10-ти чисел X, изменяющихся по закону 2, 6, 18, …. Задачи на накопление. В практике очень распространены задачи на накопление, т.е. на нахождение сумм и произведений последовательности переменных. Такие задачи могут встречаться как в формулировке итерационных, так и арифметических циклов. Задача 4.4. Пусть требуется найти сумму N произвольных чисел X. Блок-схема алгоритма на рис. 4.4. В программе сумма накапливается в переменной S оператором S=S+X. Начальное значение суммы берется равным нулю (S=0). Числовые ряды. Типичной циклической задачей на накопление является вычисление числовых рядов. Задача 4.5. Пусть требуется найти сумму S для N членов бесконечной геометрической прогрессии вида A1 A2 A3 A4 N S = 3 + 6 + 12 + 24 +... + = åAi S1 S2 S3 S4 Здесь каждый следующий член прогрессии Aiравен предыдущему Ai+1, умноженному на два. Если учесть введенные обозначения, можно записать так называемые рекуррентные формулы Si= Si–1+ Ai, где Sо = 0 Или, как принято в программировании S=0, S=S+A Ai= 2Ai–1 A1= 3 A=3, A=2A Aналогично строятся программы для циклического произведения, однако исходное значение искомого произведения берется равным единице. Если действовать по аналогии с суммой и сделать его равным нулю, результат всегда будет также нулем, поскольку умножение на нуль дает только нуль. @ Задачи для самостоятельного решения. 1). Найдите произведение N элементов ряда: Y=3×6×12×24×.... 2). Найдите сумму N элементов ряда: Y=–3+6–12+24–…. Указание. Поскольку члены ряда образуют геометрическую прогрессию, для вычисления очередного его члена нужно умножить предыдущий на –2. 3). Найдите сумму N элементов ряда: Y=–2+4–6+12–…. Указание. Здесь прогрессия арифметическая и подход, примененный в предыдущем случае (умножение на отрицательное число), не применим. Для формирования изменяющегося знака в задаче 3 можно ввести специальную переменную Z, равную то +1, то –1 на которую будет умножаться очередной элемент ряда. Первоначальное значение Z определяется знаком при первом элементе ряда. У нас будет Z=–1. Далее эта переменная должна меняться по закону Z=–Z. Таким образом, Z будет то –1 то +1, что при перемножении на элемент ряда будет каждый раз менять его знак на противоположный.
Дата добавления: 2014-12-08; Просмотров: 441; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |