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

 

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

 

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 While … Loop:

 

Do WhileУсловие

Операторы

Loop

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

Пример.Найти сумму числового ряда 1 – x1 + x2 x3 + … (0 < x < 1) с точностью e = 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. Оператор повторений с постусловиемDo … Loop 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 Until … Loop:

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. Оператор повторений с постусловиемDo … Loop 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 происходит в начале цикла.

 

 









Дата добавления: 2016-02-11; просмотров: 832;


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

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.026 сек.