4.4. Операторы повторения
Для создания циклов с заданным числом повторений используется счетный оператор цикла For, который имеет следующую структуру:
For <Нач. Знач.> → <Парам. Цик.> To <Кон. Знач.>
{R} <оператор {R}> Next
Здесь:
- For, To, Next - встроенные операторы (для, до, выполнить);
- <Парам. Цик.> - параметр цикла - переменная любого порядкового типа;
- <Нач. Знач.> - начальное значение - выражение того же типа;
- <Кон. Знач.> - конечное значение - выражение того же типа;
- <оператор {R}> - любой оператор графического калькулятора.
Блок-схема счетного оператора циклов For
Оператор For работает следующим образом. Сначала вычисляется выражение <Нач. Знач.> и осуществляется присваивание параметру цикла начального значения. После этого циклически повторяется:
- проверка условия <Парам. Цик.> ≤ <Кон. Знач.>;
- если условие выполнено, оператор For завершает свою работу.
Пример 10.
Программа, которая выводит на экран последовательность целых чисел от 1 до 10.
For 1→I To 10 ↵
I
Next
Следует отметить, что оператор For может выполнять циклически несколько операторов:
- выполнение оператора <оператор {R}>;
- наращивание переменной <Парам. Цик.> на единицу.
Пример 11.
Программа, которая вычисляет сумму десяти чисел, последовательно введенных с клавиатуры.
0 → S ↵
For 1 → I To 10 ↵
"Введите число" : ? → X ↵
S + X → S ↵
Next ↵
S
"END" : Stop
Следует отметить, что условие, управляющее работой оператора For, проверяется перед выполнением оператора. Если условие не выполняется в самом начале работы оператора, то он не выполняется ни разу. Следующее обстоятельство - шаг наращивания параметра строго постоянен и равен "+1".
Если необходимо, чтобы изменения происходили с произвольным шагом, то надо применить более общую конструкцию цикла:
For <Нач. Знач.> → <Парам. Цик.> To <Кон. Знач.>
Step <Разм. шага> {R} <оператор {R}> Next
Здесь <Разм. шага> - изменение переменной - может быть как целым, так и дробным числом.
В данном случае возможен цикл с обратным порядком, уменьшением значения переменной.
Пример 12.
Программа, которая выводит на экран последовательность целых чисел от 10 до 1.
For 10→I To 1 Step -1 ↵
I
Next ↵
"END" : Stop
Пример 13.
Программа, которая выводит на экран числовую последовательность от 1 до 5 с шагом 0,01.
For 1→I To 5 Step 0.01 ↵
I
Next ↵
"END" : Stop
Пример 14.
Программа, которая находит факториал.
"N=" : ? →N ↵
1 → F ↵
For 1→I To N ↵
F × I → F ↵
Next ↵
"N!=" : F
"END" : Stop
Оператор цикла While с предпроверкой условия:
While <условие> {R} <оператор {R} > WhileEnd
Здесь:
- While, WhileEnd - встроенные операторы (пока [выполняется условие], конец);
- <условие> - выражение логического типа;
- <оператор {R}> - произвольный оператор калькулятора.
Блок-схема оператора цикла While
Оператор начинает свою работу с вычисления и проверки условия. Если условие выполняется, то выполняется <оператор>, после чего вычисление выражения <условие> и его проверка повторяются. Если условие не выполняется, то оператор цикла While прекращает свою работу.
Рассмотрим пример 13, реализованный с помощью оператора цикла While.
1 → I ↵
While I < 5 ↵
I + 0.01 → I ↵
I
WhileEnd ↵
"END" : Stop
Пример 15.
Рассмотрим следующую задачу. Даны целые числа n и m. Найти наибольший делитель этих чисел. Для решения данной задачи удобно использовать алгоритм Евклида. Идея этого алгоритма основана на том свойстве, что если m > n, то НОД(m, n) = НОД(|m-n|, n). Иначе говоря, НОД двух натуральных чисел равен НОД модуля их разности и меньшего числа. Тогда, если m = n, то НОД(m, m) = m.
Например: НОД(15, 6) = НОД(9, 6) = НОД(3, 6) = НОД(3, 3) = 3
"Введите М" : ? →М↵
"Введите N" : ? →N↵
While M≠N↵
If M>N↵
Then M-N→М↵
Else N-M→N↵
IfEnd↵
WhileEnd↵
М
"END" : Stop
Задачи
37. Ввести 10 целых чисел. Найти их среднее арифметическое.
38. Ввести 10 целых чисел. Найти их среднее геометрическое.
39. Ввести n чисел. Подсчитать сумму положительных и сумму отрицательных чисел. Найти общую сумму.
40. Ввести n чисел. Подсчитать число положительных и отрицательных чисел.
41. Ввести n чисел. Определить минимальное и максимальное число.
42. Ввести n чисел. Определить четные и нечетные числа.
43. Ввести n чисел. Определить числа, одновременно кратные 3 и 5.
44. Ввести n чисел. Определить числа, которые при делении на 5 дают остаток 2.
45. Вывести на экран ряд чисел от 10 до 30 с шагом 0, 01.
46. Дано целое число n. Вычислить:
а) 2n;
б) n!;
в) ;
г) ;
д) .
47. Дано целое число а, целое число n. Вычислить:
48. Дано вещественное число а. Найти:
а) среди чисел первое, большее а;
б) такое наименьшее n, что первое, большее а;
в) такое наименьшее n, что.
49. Дано вещественное число n.
а) Сколько цифр в числе n?
б) Чему равна сумма его цифр?
в) Найти первую цифру числа n.
50. Даны вещественные числа m и n. Получить сумму m последних цифр числа n.
а) Выяснить, входит ли цифра 3 в запись числа n2.
б) Поменять порядок цифр числа n на обратный.
в) Переставить первую и последнюю цифру числа.
г) Приписать по единице в начало и в конец записи числа n.
51. Пусть x1 = y1 = 1, xi = 0,3xi-1, yi = xi-1 + yi-1, i = 2, 3, ... Дано целое n. Найти.
52. Дано целое число n. Получить наименьшее число вида 2r, превосходящее n.
53. Дано целое число n. Вычислить 1⋅2 + 2⋅3 + 3⋅4 + ... + n(n+1).
54. Вычислить
.
55. Дано целое число x ≠ 0. Вычислить
.
56. Даны целые числа n, k (n ≥ k ≥ 0). Вычислить
57. Вычислить
а)
б)
в)
г)
д)
е)
ж)
з)
(Выражение - это краткая запись произведения
.)
58. Дано целое число n. Вычислить:
а)
б)
в)
г)
д)
е)
ж)
59. Дано целое число n. Вычислить произведение первых n сомножителей:
а)
б)
В программах достаточно часто используют конструкции, в которых в теле циклических операторов могут находиться другие циклические операторы. Такие внутренние циклы называют вложенными.
For 1→I To N ↵
For 1→J To N ↵
…
Next ↵
...
Next ↵
Здесь J - внутренний цикл, I - внешний цикл, сначала закрывается внутренний цикл, затем - внешний.
Подобные конструкции работают следующим образом. В начальной момент переменной I присваивается значение 1, переменной J - значение 1. Затем выполняется тело цикла. После выполнения тела цикла переменная J увеличивает значение на 1, а переменная I остается равной 1. Затем опять выполняется тело цикла. Это повторяется до тех пор, пока значение переменной J не превысит конечного значения. После этого значение I увеличится на 1, а J станет равным 1. ... Таким образом, чтобы внешний цикл увеличил свое значение на 1,необходимо, чтобы выполнился весь внутренний цикл.
Чаще всего в программировании вложенные циклы применяются в задачах для возведения в произвольную степень. ЯПК является более совершенным языком, нежели BASIC и PASCAL, и позволяет возводить и извлекать корень любой степени, находить факториал и т.п. Поэтому целесообразно рассмотреть данные задачи с применением двойного цикла, а затем с применением стандартных функций калькулятора.
Пример 16.
Ввести целое число N. Вычислить сумму.
Программа с применением вложенных циклов:
0 → S ↵
"Введите число членов последовательности" : ? →N ↵
For 1→I To N ↵
1÷I→ A ↵
A→ P ↵
For 2→ J To N ↵
P× A→ P ↵
Next ↵
S+Р→ S ↵
Next ↵
"Сумма степеней =" : S
"END" : Stop
Программа с применением функции возведения в произвольную степень:
0 → S ↵
"Введите число членов последовательности" : ? →N ↵
For 1→I To N ↵
(1÷I)^N→ A ↵
S+A→ S ↵
Next ↵
"Сумма степеней =" : S
"END" : Stop
Задачи
60. Ввести числа а1, …, а10. Вычислить
.
61. Ввести числа а1, ..., а10. Получить последовательность b1, ..., b10,
в которой
62. Ввести целое число n. Вычислить последовательность:
а) ;
б) ;
в) ;
г) ;
д) .
63. Ввести целое число n. Вычислить последовательность:
а) ;
б) ;
в) ;
г) ;
д) .
64. Ввести целое число n, вещественные числа а1, ... , аn. Вычислить:
а) ;
б) ;
в) ;
г) .
65. Ввести числа m и n. Получить все меньшие n числа, квадрат суммы цифр которых равен m.
66. Ввести целое число n. Определить, можно ли n представить в виде суммы квадратов трех чисел. Если можно, то:
а) указать тройку х, y, z таких целых чисел, что х2 + y2 + z2 = n;
б) указать все тройки х, y, z таких целых чисел, что х2 + y2 + z2 = n.