русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Организация циклов


Дата добавления: 2014-11-27; просмотров: 1051; Нарушение авторских прав


В простых примерах, рассмотренных выше, вообще говоря, не требо­валось привлечения ЭВМ и программирования. Все они достаточно быстро могли быть решены вручную или с помощью калькулятора. Сила ЭВМ заключается в возможности простыми средствами осуществлять многократное повторение заданных действий – циклов.

Итерационные циклы.В случае если количество циклов, необходимых для решения задачи, заранее неизвестно, такие циклы называются итерационными. Рассмотрим ряд примеров.


Задача 3. Пусть для некоторого множества чисел Х нужно вычислить и отпечатать функцию 2/Х. Ввод и вычисления следует прекратить после обнаружения первого Х, равного нулю (деление на ноль невозможно).

Программа Проверка
к задаче 4 1 цикл 2 цикл 3 цикл 4 цикл  
x=3 2 IF x>9 GOTO 4 y=(x–6)^2 ? x,y x=x+2 GOTO 2 4 END x=3 x=3<9 y=9 3,9 x=3+2=5 5<9 y=1 5,1 x=7 7<9 y=1 7,1 x=9 9=9 y=9 9,9 x=11 11>9 конец

Очевидна следующая (рис. 8а) блок-схема. Блоков ввода, вычисления, печати и анализа столько, сколько чисел в последовательности до первого нуля. Чисел может быть очень много и подобный подход, конечно, неприемлем, не говоря уже о том, что и количество их заранее неизвестно. Такие программы строятся по-иному. Обрабатывающая часть программы записывается только раз, но охватывается петлей возврата (рис. 8б). Тогда одни и те же операторы будут выполняться многократно до тех пор, пока Х¹0.

Задача 4. Пусть для аргумента Х, находящегося в диапазоне от 3 до 9, требуется вычислить и напечатать значение функции Y=(X–6)2, где Х изменяется с шагом 2 (рис. 9а). Блок-схема алгоритма изображена на рис. 9б.

Справа от текста программы сделаны выкладки по проверке решения. В каждой строке вручную вычисляется и указывается значение соответствующей переменной. Выкладки по проверке выполняются сверху-вниз, слева-направо по ходу исполнения программы. Стрелки показывают связи между циклами. Видим, что заданная последовательность изменения Х (3, 5, 7, ...) наблюдается и последнее значение Y вычисляется для Х=9. При следующем приращении Х оно становится равным 11 и пятый цикл не выполняется, поскольку при Х>9 программа завершается.



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

@ Задачи для самостоятельного решения.Напишите программы:

1). Решите задачу 4 для Х, изменяющегося в обратном направлении (9¸3).

2). Вычислить и напечатать значения функции Y=10–2X для последовательных значений Х: 0, 0.5, 1, 1.5, 2, 2.5, ... и т.д. до тех пор, пока Y не станет отрицательным.

3). Решите задачу 3, где вычисления Y прекращаются после того, как будут встречены три числа Х<0. Указание. Здесь понадобится переменная – счетчик таких значений. Назовем ее К. Следует прекратить вычисления при К=3.

Арифметические циклы.Если число повторений известно заранее – такие циклы называются арифметическими.

Задача 5. Пусть в условиях предыдущей задачи 4 не известно предельное значение аргумента, но зато задано количество точек аргумента – 4. Поскольку в данном случае не задано последнее значение Х, признак окончания циклов придется формировать самим. Для этого вводится переменная, которая фиксирует число уже выполненных циклов, т.е. счетчик циклов (назовем ее I). В исходном состоянии (рис. 10) берем его равным 1.

 
 


Программа Проверка
к задаче 5 1 цикл 2 цикл 3 цикл 4 цикл  
x=3: i=1 8 IF i>4 GOTO 2 y=(x–6)^2 ? x y x=x+2 i=i+1 GO TO 8 2 END x=3, i=1 i=1<4 y=9 3, 9 x=5 i=2 2<4 y=1 5, 1 x=7 3<4 y=1 7, 1 x=9 4=4 y=9 9, 9 x=11 5>4 конец

 

 

После выполнения очередного цикла счетчик получает приращение, увеличиваясь на единицу (I=I+1). В начале каждого цикла в операторе IF делается проверка на достижение счетчиком последнего разрешенного значения (у нас 4). Если I<=4 программа продолжает вычисление функции, если нет (I>4) – счет прекращается. Ниже приведена программа и выкладки по ее проверке. Как видим, результат проверки совпал с результатом, полученным ранее.

Программа Проверка для N=3 X=2,4,3
к задаче 6 1 цикл 2 цикл 3 цикл  
INPUT “N=”,n i=1: s=0 3 IF i>n GOTO 8 INPUT “X=”,x s=s+x i=i+1 GOTO 3 8 PRINT s n=3 i=1, s=0 1<3 x=2 s=2 i=2 2<3 3=3 4>3 s=9

Исходное значение счетчика циклов и его приращения могут выглядеть по-разному. Главное, чтобы было выполнено заданное число циклов. В нашем примере был использован счетчик на возрастание I=1,2,3, ... до N (N – число шагов). Можно начинать счетчик с нуля: I=0,1,2, ... до N-1. Возможен счетчик на убывание: I=N–1, ... 3,2,1 до 0 и т.д. Обычно, если нет оснований для другого, используется счетчик на возрастание с шагом единица от 1 до N.

@ Задачи для самостоятельного решения.

1). Решите задачу 5 для Х, изменяющегося в обратном направлении (Х начинается с 9).

2). Напечатайте цепочку из 10-ти чисел Х, изменяющихся по закону: 2, 6, 18, 54… .

Задачи на накопление.В практике очень распространены задачи на накопление, т.е. на нахождение сумм и произведений последовательности переменных. Такие задачи могут встречаться как в формулировке итерационных, так и арифметических циклов.

Задача 6. Пусть требуется найти сумму N произвольных чисел Х. Блок-схема алгоритма приведена на рис. 11, а программа ниже. Здесь сумма накапливается в переменной S с помощью оператора S=S+X. Начальное значение суммы берется равным нулю (S=0).

Числовые ряды.Типичной циклической задачей на накопление является вычисление числовых рядов.

Задача 7. Пусть требуется найти сумму S для N членов геометрической прогрессии вида

Программа   Проверка для N=3  
к задаче 7 1 цикл 2 цикл 3 цикл 4 цикл
INPUT n n=3      
a=3: i=1: s=0 a=3, i=1,s=0      
3 IF i>n GOTO 9 i=1<3 2<3 3=3 4>3
s=s+a s=0+3=3 3+6=9 9+12=21  
a=2*a a=2*3=6  
i=i+1 i=1+1=2  
GOTO 3        
9 ? s       s=21

A1 A2 A3 A4 N

S = 3 + 6 + 12 + 24 + ... + = åАi

 
 


S1 S2 S3 S4

Здесь каждый следующий член прогрессии Аi равен предыдущему Ai+1, умноженному на два. Если учесть введенные обозначения, можно записать так называемые рекуррентные формулы

Si= Si–1+ Ai, где Sо = 0

Ai= 2Ai–1 A1= 3

Или, как принято в программировании

S=0, S=S+A

A=3, A=2A

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

@ Задачи для самостоятельного решения.

1). Найдите произведение N элементов ряда: Y=3×6×12×24×... .

2). Найдите сумму N элементов ряда: Y=–3+6–12+24–… .

3). Найдите сумму N элементов ряда: Y=–2+4–6+12–… .

Указание. В задаче 2) каждый новый элемент может быть получен умножением предыдущего на минус два (–2) поскольку здесь наблюдается геометрическая прогрессия. Для фор­мирования изменяющегося знака в задаче 3) с арифметической прогрессией такой подход не сработает. Придется формировать знак отдельно. Здесь удобно ввести специальную переменную Z, равную то +1, то –1 на которую будет умножаться очередной элемент ряда. Первоначальное значение Z определяется знаком при первом элементе ряда. У нас будет Z=–1. Далее эта переменная должна меняться по закону Z=–Z. Таким образом, Z будет то –1 то +1, что при перемножении на элемент ряда будет каждый раз менять его знак на противоположный.

Оператор арифметического цикла.Принципы построения программ с арифметическими циклами можно проиллюстрировать обобщенной блок-схемой на рисунке 12.

Группа операторов внутри цикла называется телом цикла. Толь­ко обрабатывающая часть цикла полезна. Остальные операторы являются обслуживающими, необходимыми для организации цикла. Этот механизм в алгоритмических языках обычно реализует специальный оператор цикла, который мы сейчас рассмотрим. Его применение упрощает программирование и снижает возможность совершения ошибок.

Структура вида:

ü FOR изменяемая переменная = начальное значение TO конечное значение   STEP шаг


<== предыдущая лекция | следующая лекция ==>
INPUT g | Операторы в цикле


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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