- •В.Н.Агеев
- •А23 Программирование и основы алгоритмизации. Конспект лекций – м.: мгуп, 2012.– *** с.
- •Содержание
- •Предисловие
- •1. Понятие алгоритма в информатике. Блок-схемы алгоритмов
- •2. Типовые алгоритмы и их блок-схемы.
- •3. Алгоритмические языки и их классификация
- •Языки программи- рования
- •4. Методы объектно-ориентированного программирования
- •5. Интегрированная среда разработки Visual Basic
- •6. Программирование на языке Visual Basic
- •7. Программирование разветвляющихся процессов
- •If условие Then Оператор1 [ Else Оператор2]
- •8. Программирование циклических процессов
- •9. Графические возможности языка Visual Basic
- •10. Функции даты и времени. Объект Timer
- •11. Работа с внешними файлами и устройствами
- •Input # номер, имя_переменной
- •12. Работа с дисками и папками
- •CommonDialog1.ShowOpen
- •Open CommonDialog.FileName For Input As # 1
- •13. Работа с базой данных
- •14. Типы ошибок и методы отладки программ.
- •1. Синтаксические ошибки.
- •2. Ошибки в структуре программы.
- •3. Ошибки, возникающие во время выполнения программы.
- •4. Логические ошибки или ошибки алгоритма.
- •15. Примеры проектов
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 While … Loop:
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. Оператор повторений с постусловием 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





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происходит в начале цикла.
