Алгоритмы циклической структуры
Наиболее сложным типом вычислительного процесса является циклический. Циклы возникают тогда, когда необходимо многократно повторять какие-либо действия. Число повторений в любом цикле должно быть конечным. Существуют циклы, в которых число повторений заранее известно (счетные циклы). В итерационных циклах количество повторений заранее неизвестно, выход из них осуществляется по достижению заданных условий. Рассмотрим несколько примеров циклических процессов. Задача 5. Найти конечную сумму S=1+1/2+1/3+….+1/n. Введем следующие обозначения. Переменная i – номер слагаемого данной суммы. Само слагаемое имеет вид 1/i. Необходимо просмотреть все номера, начиная с первого и заканчивая последним номером n, и каждое слагаемое прибавить к S. Предлагается следующая схема алгоритма нахождения S. Рис.5. Схема алгоритма решения задачи 5. Поясним схему. Блоки 3,4,5 служат для организации цикла. С их помощью задается количество повторений цикла. Переменная i называется переменной цикла или счетчиком цикла. В блоке 3 задается начальное значение счетчика цикла, а в блоке 6 – шаг изменения счетчика цикла. В блоке 4 осуществляется проверка на конец циклических вычислений. Обнуление суммы S в блоке 2 необходимо для того, чтобы при первом вхождении в блок 5 действие S+1/i было однозначно определено.
Программа на Паскале: Program Prim_5; {заголовок программы} Var I, N: Integer; {блок описания данных} S: Real; Begin {начало операторов программы} Read(N); {ввод значения N с клавиатуры} S:=0; {обнуление суммы} For I:=1 To N Do {оператор цикла} S:=S+1/I; {циклическое действие} Writeln('S=',S:6:2) {вывод результата} End. {конец программы}
Алгоритм на Бэйсике: 10 Input N% 20 S=0 30 For I%=1 To N% 40 S=S+1/I% 50 Next I% 60 Print ("S=";S) 70 End
Можно записать и так: 10 Input N 20 S=0 30 For I=1 To N 40 S=S+1/I 50 Next I 60 Print ("S=";S) 70 End Результаты будут одинаковы при одном и том же значении N. В этой задаче можно не указывать тип переменных, так как счетчик цикла I может принимать только целые значения. Задача 6. Дан массив чисел D=(d1,d2,..,dn). Найти dср по формуле dср= (d1+d2+..+dn)/n. Решение этого примера похоже на решение примера 5. Сначала введем исходные данные d1,d2,..,dn и найдем их сумму S. Разделив S на n, получим dср. и выведем результат и исходные данные. Схема алгоритма решения задачи 6: Рис.6. Схема алгоритма решения задачи 6 Программа на Паскале:
Program Prim_6; {заголовок программы} Const M=100; Var I,N: Integer; {блок описания данных} S,DSR: Real; D: Array[1..M] of Real; Begin {начало операторов программы} Read(N); {ввод значения N ≤100 с клавиатуры} For I:=1 To N Do {оператор цикла} Read(D[I]); {Ввод значений Di} S:=0; {обнуление суммы} For I:=1 To N Do {оператор цикла} S:=S+D[I]; {нахождение суммы Di} DSR:=S/N; {нахождение среднего диаметра DSR} Writeln('DSR=',DSR:6:2) {вывод результата} End. {конец программы}
Программа на Бейсике: 10 Input N 20 Dim D(N) 30 For I=1 to N 40 Input D(I) 50 Next I 60 S=0 70 For I=1 To N 80 S=S+D(I) 90 Next I 100 DSR=S/N 110 Print ("DSR=";DSR) 120 End Задача 7. Даны массив целых чисел X=(x1,x2,..,xn) и целое число Z. Найти количество чисел xi, которые равны Z. Схема алгоритма решения задачи 7: Рис.7. Схема алгоритма решения задачи 7 Искомое количество элементов массива Х, равных числу Z, обозначим K. До начала просмотра элементов K=0. Просматривая по порядку все элементы массива, будем сравнивать их с числом Z. Как только будет обнаружен очередной элемент, который равен Z, значение переменной K увеличивается на 1. Программы записываются так:
Program Prim_7; {заголовок программы} Const M=100; Var I,N,K,Z: Integer; {блок описания данных} X: Array[1..M] of Integer; Begin {начало операторов программы} Read(N); {ввод значения N ≤100 с клавиатуры} For I:=1 To N Do {оператор цикла} Read(X[I]); {Ввод значений Xi} Read(Z); {Ввод значения Z} K:=0; {обнуление K} For I:=1 To N Do {оператор цикла} If X[I]=Z Then {проверка условия} K:=K+1; {нахождение количества К} Writeln('K=',K:6) {вывод результата} End. {конец программы}
10 Input N,Z 20 Dim X(N) 30 For I=1 To N 40 Input X(I) 50 Next I 60 K=0 70 For I=1 To N 80 If X(I)=Z Then K=K+1 90 Next I 100 Print ("K=";K) 110 End
|