Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект лекций по программированию.doc
Скачиваний:
191
Добавлен:
22.03.2016
Размер:
1.09 Mб
Скачать

8. Программирование циклических процессов

Для многократного выполнения одного или нескольких операторов применяются операторы цикла. Имеется несколько типов оператора цикла.

1. Оператор цикла типа пересчета:

For Счетчик = Начальное_значение To Конечное_значение [ Step Шаг ]

Операторы

Next [Счетчик]

Здесь Счетчик– параметр цикла, переменная целого или вещественного типа,Начальное_значение иКонечное_значение – числа, задающие границы интервала изменения параметра цикла,Шаг– шаг изменения параметра цикла, если он не указан, то по умолчанию он принимается равным 1.Операторы– один или несколько операторов, которые повторяются до тех пор, покаСчетчикне достигнет конечного значения.

Пример.

Задан целочисленный массив AизNэлементов. Нужно подсчитать количество четных элементов в этом массиве.

Решение. Пусть S– переменная для результата, которой перед началом цикла присвоено нулевое значение. Поскольку длина массива известна, используем цикл типа пересчета.

S = 0

For i = 1 to N

If A(i) mod 2 = 0 then S = S + 1

Next i

Print S

S : = 0

i := 1,2, …, N

нет

A(i) mod 2 = 0

да

S : = S +1

Вывод S

Рис.11. Пример цикла типа пересчета. Справа – фрагмент программы.

2. Оператор повторений с предусловием Do WhileLoop:

Do While Условие

Операторы

Loop

Указанные Операторы повторяются до тех пор, покаУсловиеостается истинным.

Пример. Найти сумму числового ряда 1 –x1+x2 x3 + … (0 <x< 1) с точностью= 0,001. Из курса математики известно, что погрешность суммы знакочередующегося ряда не превышает абсолютной величины первого отброшенного члена.

Поскольку в данном случае количество слагаемых заранее неизвестно, используем оператор цикла типа Do While. ПустьS– переменная для результата,EPS– заданная точность, А – очередное слагаемое

На рис.12 показана блок-схема алгоритма и фрагмент программы.

A = X

S = 1

Do While abs(A) > EPS

S = S – A

A = – A * X

Loop

Print S

S := 1

A := X

A> EPS

да

S := S – A

A := –A*X

Вывод S

Рис.12. Пример цикла типаDo Whileс предусловием

Справа – фрагмент программы.

Комментарий. После первого шага величинаSбудет равна 1–X, а значениеA, которое вначале было равноXизменится на –X2. После второго шагаSиAокажутся равными соответственно 1–X+X2 иX3. Таким образом вSбудет накапливаться сумма числового ряда до тех пор, пока очередное слагаемое по модулю остается больше заданного значенияEPS. Если при первой проверке условие не будет выполнено, то цикл выполнятся не будет, следующим будет выполнен оператор вывода.

3. Оператор повторений с постусловием DoLoop While:

Do

Операторы

Loop While Условие

Операторы повторяются до тех пор, покаУсловиеостается истинным. Отличие от предыдущего случая в том, что еслиУсловиек моменту начала цикла ложно (имеет значениеFalse), указанные операторы будут хотя бы один раз выполнены.

Для предыдущего примера вариант решения показан на рис.13.

S := 1

A = X

S = 1

Do

S = S – A

A = – A * X

Loop While abs(A) > EPS

Print S

A := X

S := S – A

A := –A*X

A> EPS

да

Вывод S

Рис.13. Пример цикла типа Do Whileс постусловием.

Справа – фрагмент программы.

4. Оператор повторений с предусловием Do UntilLoop:

Do Until Условие

Операторы

Loop

Операторы повторяются до тех пор, покаУсловиене станет истинным.

Пример. В текстовом файлеA.TXTсодержится список фамилий. Нужно прочитать этот файл и вывести список фамилий на экранную форму. Поскольку неизвестно, сколько фамилий в списке, используем для чтения их из файла оператор цикла типаDo Until.

Open “A.TXT” For Input As #1

Do Until EOF(1)

Input #1, S

Print S

Loop

Close #1

Рис.14. Пример цикла типа Do Untilс предусловием. Справа – фрагмент программы.

S := 1

A := X

конец файла?

да

нет

чтение S

вывод S

Комментарий. Здесь используется функцияEOF, аргументом которой является номер канала, присвоенный открытому для чтения файлу (в данном случае 1). Эта функция возвращает логическое значениеTrue(«истина») в случае, когда из открытого файла будут считаны все записи. До тех пор, пока все записи не считаны, значение функцииEOFравноFalse(«ложь»). В приведенном фрагменте записи будут считываться в переменнуюSдо тех пор, пока не будет достигнут конец файла.

5. Оператор повторений с постусловием DoLoop Until:

Do

Операторы

Loop Until Условие

Здесь Операторы повторяются до тех пор, покаУсловиене станет истинным. Отличие от предыдущего случая в том, что еслиУсловиек моменту начала цикла уже является истинным (имеет значениеTrue), указанные операторы будут хотя бы один раз выполнены.

На рис.15 показан фрагмент программы, в котором решается задача предыдущего примера, но с использованием оператора повторений с постусловием .

Open “A.TXT” For Input As #1

Do

Input #1, S

Print S

Loop Until EOF(1)

Close #1

S := 1

A := X

чтение S

вывод S

конец файла?

нет

да

Рис.15. Пример цикла типа Do Untilс постусловием.

Справа – фрагмент программы.

Комментарий. Фрагменты программ, представленные на рис.14 и 15 выполняют одни и те же действия и практически равносильны, за одним исключением. Если файлA.TXTокажется пустым, то есть в нем не будет записей, при выполнении второй программы будет выведено сообщение об ошибке, поскольку команда чтения из файла выполняется до того, как проверяется достигнут ли конец файла. В программе на рис.14 такая ошибка исключается, поскольку проверка значения функцииEOFпроисходит в начале цикла.