- •Некоторые стандартные математические функции
- •Лабораторная работа № 2
- •Лабораторная работа № 3
- •Лабораторная работа № 4
- •Лабораторная работа № 5
- •Лабораторная работа № 6
- •Лабораторная работа № 7
- •Лабораторная работа № 8
- •Лабораторная работа № 9
- •Лабораторная работа № 10
- •Лабораторная работа № 11
- •Лабораторная работа № 12
- •Лабораторная работа № 13
- •Лабораторная работа № 14
- •Лабораторная работа № 15
- •Литература
Ульяновский государственный университет |
Форма |
«Информатика»
Лабораторная работа № 9
Рекурсия
Уровень A
Требуется определить массив целых чисел (например, размера 30), заполнить его случайными числами или ввести его элементы с клавиатуры и определить его характеристики с помощью рекурсивной функции в соответствии с вариантом. Проверку правильности результата провести с помощью сравнения результатов итеративной и рекурсивной функций.
Программа должна содержать следующие функции.
•Инициализация элементов массива случайными числами или вводимыми с клавиатуры.
•Вывод массива на экран.
•Итеративная функция, вычисляющая характеристики массива в соответствии с вариантом.
•Рекурсивная функция, вычисляющая характеристики массива в соответствии с вариантом.
Варианты заданий
A1. В массиве целых чисел с помощью рекурсивной функции найти количество четных элементов.
A2. В массиве целых чисел с помощью рекурсивной функции найти количество элементов массива, которые делятся на 5 и не делятся на 7.
A3. В массиве целых чисел с помощью рекурсивной функции найти количество простых чисел.
A4. В массиве целых чисел с помощью рекурсивной функции найти сумму нечетных элементов.
A5. Найти максимальный элемент целочисленного массива с помощью рекурсии.
A6. Вычислить сумму только симметричных элементов массива с помощью рекурсии.
A7. В массиве целых чисел с помощью рекурсивной функции найти сумму таких элементов, которые состоят только из четных цифр.
A8. В массиве целых чисел с помощью рекурсивной функции найти количество элементов, больших заданного числа A.
39
Ульяновский государственный университет |
Форма |
«Информатика»
A9. В массиве целых чисел с помощью рекурсии найти количество минимальных элементов.
A10. В массиве целых чисел с помощью рекурсии найти сумму элементов массива, расположенных в интервале (А,В).
A11. Найти количество двузначных элементов массива с помощью рекурсии.
A12. Найти минимальный элемент целочисленного массива с помощью рекурсии.
A13. В массиве целых чисел с помощью рекурсии найти количество максимальных элементов.
A14. Вычислить сумму только двузначных элементов массива с помощью рекурсии.
A15. В массиве целых чисел с помощью рекурсивной функции найти сумму элементов, заканчивающихся на 7.
A16. В массиве целых чисел с помощью рекурсивной функции найти сумму всех элементов массива, которые одновременно делятся на 3 и на 5.
A17. В массиве целых чисел с помощью рекурсивной функции найти количество элементов, начинающихся на 3.
Уровень B
Требуется определить массив целых чисел (например, размера 30), заполнить его случайными числами (в диапазоне от A до B, где A и B задаются в директивах #define) или ввести его элементы с клавиатуры и определить его характеристики с помощью рекурсивной функции в соответствии с вариантом. Проверку правильности результата провести с помощью сравнения результатов итеративной и рекурсивной функций.
Программа должна содержать следующие функции.
•Инициализация элементов массива случайными числами или вводимыми с клавиатуры.
•Вывод массива на экран.
•Итеративная функция, вычисляющая характеристики массива в соответствии с вариантом.
•Рекурсивная функция, вычисляющая характеристики массива в соответствии с вариантом.
Варианты заданий
40
Ульяновский государственный университет |
Форма |
«Информатика»
B1. Для заданного одномерного массива A из N элементов проверить, что существует, по крайней мере, один элемент Ai, для которого выполняется условие sin Ai > 0. Рекурсивную функцию применять отдельно для каждой из половин массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=8: |
8 |
4 |
8 |
, ( – «или») |
(sin Ai > 0) |
= (sin Ai > 0) (sin Ai > 0) |
|||
|
i=1 |
i=1 |
i=5 |
|
B2. Для заданного одномерного массива B из N элементов найти сумму выражений, вычисляемых по формуле sin Bi cos Bi . Рекурсивную функцию применять
каждый раз отдельно для каждой из половин массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=8: ∑8 (sin Bi cos Bi )= ∑4 (sin Bi cos Bi )+ ∑8 (sin Bi cos Bi )
i=1 |
i=1 |
i=5 |
B3. Для заданного одномерного массива X из N элементов найти сумму выражений, вычисляемых по формуле X i2 . Рекурсивную функцию применять каждый
раз отдельно для первой трети массива и для остальной части (2/3) массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=9: ∑9 X i2 = ∑3 X i2 +∑9 X i2
i=1 |
i=1 |
i=4 |
B4. Для заданного одномерного массива D из N элементов найти количество элементов массива, для которых выполняется условие Di > i. Рекурсивную функцию применять каждый раз отдельно для первого элемента массива и для остальной его части. Рекурсивные вызовы заканчивать, когда останется только один элемент.
4 |
1 |
4 |
Например, для N=4: Count (Di > i)=Count (Di > i)+Count (Di > i) |
||
i=1 |
i=1 |
i=3 |
B5. Для заданного одномерного массива X из N элементов найти количество элементов массива, для которых выполняется условиеsin X2i < 0 . Рекурсивную
функцию применять каждый раз отдельно для каждой из половин массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
8 |
Xi |
|
4 |
Xi |
|
8 |
Xi |
|
|
Например, для N=8: Count(sin |
< 0) |
= Count(sin |
< 0) |
+Count(sin |
< 0) |
||||
2 |
2 |
2 |
|||||||
i=1 |
|
i=1 |
|
i=5 |
|
B6. Для заданного одномерного массива B из N элементов найти количество элементов массива, для которых выполняется условие(cos Bi2 > 0) (Bi < 0) . Рекур-
сивную функцию применять каждый раз отдельно для первой трети массива и
41
Ульяновский государственный университет |
Форма |
«Информатика»
для остальной части (2/3) массива. Рекурсивные вызовы заканчивать, когда останется только элемент. Например, для N=6:
6 |
|
2 |
|
|
6 |
Count ((cos Bi2 |
> 0) (Bi < 0)) |
=Count ((cos Bi2 |
> 0) |
(Bi < 0)) |
+Count ((cos Bi2 > 0) (Bi < 0)) |
i=1 |
|
i=1 |
|
|
i=3 |
B7. Для заданного одномерного массива X из N элементов найти произведение множителей, вычисляемых по формуле 1X+ii . Рекурсивную функцию применять
каждый раз отдельно для каждой из половин массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
6 |
X i |
3 |
X i |
6 |
X i |
|
Например, для N=6: ∏ |
= ∏ |
×∏ |
||||
|
|
|
||||
i=1 |
1+i |
i=1 |
1+i |
i=4 |
1+i |
B8. Для заданного одномерного массива X из N элементов найти произвед ение
множителей, вычисляемых по формуле X i −1X+i2i . Рекурсивную функцию применять каждый раз отдельно для первого элемента массива и для остальной его части. Рекурсивные вызовы заканчивать, когда останется только один элемент.
|
5 |
|
|
2 |
|
|
|
2 |
|
|
5 |
|
2 |
|
|||
Например, для N=5: |
|
X |
i |
− |
Xi |
|
= X |
1 |
− |
X1 |
|
× |
X |
i |
− |
Xi |
|
|
|
|
|
||||||||||||||
|
∏ |
|
|
|
|
2 |
|
|
∏ |
|
|
|
|||||
|
i=1 |
|
|
1 +i |
|
|
|
|
i=2 |
|
1 +i |
||||||
B9. Для заданного одномерного массива X из N элементов найти произведение |
|||||||||||||||||
множителей, вычисляемых по формуле X i4 |
−3X i2 . Рекурсивную функцию приме- |
нять каждый раз отдельно для первой трети массива и для остальной части (2/3) массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=6: ∏6 |
(X i4 −3X i2 )= ∏2 |
(X i4 −3X i2 )×∏6 (X i4 −3X i2 ) |
i=1 |
i=1 |
i=3 |
B10. Для заданного одномерного массива A из N элементов найти количество элементов массива, для которых выполняется условие i2 > |Ai|. Рекурсивную функцию применять каждый раз отдельно для первой трети массива и для остальной части (2/3) массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=12: Count12 |
(i2 > |
|
Ai |
|
)=Count4 |
(i2 > |
|
Ai |
|
)+Count12 (i2 > |
|
Ai |
|
) |
|
|
|
|
|
|
|||||||||
i=1 |
|
|
|
|
i=1 |
|
|
|
|
i=5 |
|
|
|
|
B11. Для заданного одномерного массива Z из N элементов найти сумму выражений, вычисляемых по формуле 2X i cos X i2 . Рекурсивную функцию применять
42
Ульяновский государственный университет |
Форма |
«Информатика»
каждый раз отдельно для первой трети массива и для остальной части (2/3) массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
12 |
4 |
12 |
Например, для N=12: ∑2X i cos X i2 |
= ∑2X i cos X i2 |
+∑2X i cos X i2 |
i=1 |
i=1 |
i=5 |
B12. Для заданного одномерного массива Q из N элементов проверить, что существует по крайней мере один элемент Qi, для которого выполняется условие |Qi| > i. Рекурсивную функцию применять каждый раз отдельно для первого элемента массива и для остальной его части. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=5: |
5 |
|
Qi |
|
> i) = ( |
|
Q1 |
5 |
|
Qi |
|
> i) , ( – «или») |
|
( |
|
|
|
|
>1) ( |
|
|
||||||
|
|
|
|
|
|
||||||||
|
i=1 |
|
i=2 |
B13. Для заданного одномерного массива Y из N элементов проверить, что существует по крайней мере один элемент Yi, для которого выполняется условие
Yii2 > 2 . Рекурсивную функцию применять каждый раз отдельно для первой тре-
ти массива и для остальной части (2/3) массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=9: |
9 2 |
> 2 |
|
3 2 |
> 2 |
|
9 2 |
> 2 |
|
, ( – «или») |
|||
|
|
= |
|
|
|
||||||||
|
|
Yi |
|
|
|
Yi |
|
|
|
Yi |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
i=1 i |
|
|
i=1 i |
|
|
i=4 i |
|
|
|
B14. Для заданного одномерного массива A из N элементов проверить, что существует по крайней мере один элемент Ai, для которого выполняется условие Ai ≤ i2. Рекурсивную функцию применять каждый раз отдельно для каждой из половин массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=4: |
4 |
2 |
4 |
(Ai ≤ i2 ) = (Ai ≤ i2 ) (Ai ≤ i2 ) , ( – «или») |
|||
|
i=1 |
i=1 |
i=3 |
Уровень C
Требуется определить массив целых чисел (например, размера 30), заполнить его случайными числами (в диапазоне от A до B, где A и B задаются в директивах #define) или ввести его элементы с клавиатуры и определить его характеристики с помощью рекурсивной функции в соответствии с вариантом. Проверку правильности результата провести с помощью сравнения результатов итеративной и рекурсивной функций. Упорядочить массив по возрастанию с помощью рекурсивной функции (алгоритм сортировки задается в варианте).
43
Ульяновский государственный университет |
Форма |
«Информатика»
Программа должна содержать следующие функции.
•Инициализация элементов массива случайными числами или вводимыми с клавиатуры.
•Вывод массива на экран.
•Итеративная функция, вычисляющая характеристики массива в соответствии с вариантом.
•Рекурсивная функция, вычисляющая характеристики массива в соответствии с вариантом.
•Сортировка массива с помощью рекурсивной функции.
Варианты заданий
C1. Для заданного одномерного массива X из N элементов проверить, что для всех элементов массива выполняется условие –10< X i3 <20. Рекурсивную функ-
цию применять каждый раз отдельно для каждой из половин массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=8: |
8 |
4 |
8 |
, ( – |
(−10 < Xi3 |
< 20) = (−10 < Xi3 |
< 20) (−10 < Xi3 < 20) |
||
|
i=1 |
i=1 |
i=5 |
|
|
|
«и») |
|
|
Рекурсивно упорядочить массив с помощью метода прямого выбора.
C2. Для заданного одномерного массива A из N элементов найти значение минимального элемента массива и его номер. Рекурсивную функцию применять каждый раз отдельно для каждой из половин массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
12 |
|
6 |
12 |
|
Например, для N=12: Min Ai = min Min Ai ; Min Ai |
||||
i=1 |
|
i=1 |
i=7 |
|
Рекурсивно упорядочить массив с помощью метода вставок.
C3. Для заданного одномерного массива X из N элементов проверить, что для всех элементов массива выполняется условие cos Xi > 0. Рекурсивную функцию применять каждый раз отдельно для первой трети массива и для остальной части (2/3) массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=6: |
6 |
2 |
6 |
, ( – «и») |
(cos Xi > 0) = (cos Xi > 0) (cos Xi > 0) |
||||
|
i=1 |
i=1 |
i=3 |
|
Рекурсивно упорядочить массив с помощью пузырьковой сортировки.
C4. Для заданного одномерного массива A из N элементов найти значение максимального элемента массива. Рекурсивную функцию применять каждый раз
44
Ульяновский государственный университет |
Форма |
«Информатика»
отдельно для первой трети массива и для остальной части (2/3) массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
6 |
|
2 |
6 |
|
Например, для N=6: Max Ai = max Max Ai ; Max Ai |
||||
i=1 |
|
i=1 |
i=3 |
|
Рекурсивно упорядочить массив с помощью метода прямого выбора.
C5. Для заданного одномерного массива Y из N элементов проверить, что для всех элементов массива выполняется условие Yi < 0. Рекурсивную функцию применять каждый раз отдельно для каждой из половин массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=4: |
4 |
2 |
4 |
, ( – «и») |
(Yi < 0) |
= (Yi < 0) (Yi < 0) |
|||
|
i=1 |
i=1 |
i=3 |
|
Рекурсивно упорядочить массив с помощью метода вставок.
C6. Для заданного одномерного массива B из N элементов найти значение минимального элемента массива. Рекурсивную функцию применять каждый раз отдельно для каждой из половин массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
4 |
|
2 |
4 |
|
Например, для N=4: Min Ai = min Min Ai ; Min Ai |
||||
i=1 |
|
i=1 |
i=3 |
|
Рекурсивно упорядочить массив с помощью пузырьковой сортировки.
C7. Для заданного одномерного массива Y из N элементов проверить, что для всех элементов массива выполняется условие Yi sin Yi > 5. Рекурсивную функцию применять каждый раз отдельно для первого элемента массива и для остальной его части. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=5: |
5 |
5 |
, ( – «и») |
(Yi sinYi > 5) |
= (Yi sinYi > 5) (Yi sinYi > 5) |
||
|
i=1 |
i=2 |
|
Рекурсивно упорядочить массив с помощью метода прямого выбора.
C8. Для заданного одномерного массива B из N элементов найти значение максимального элемента массива и его номер. Рекурсивную функцию применять каждый раз отдельно для первого элемента массива и для остальной его части. Рекурсивные вызовы заканчивать, когда останется только один элемент.
4 |
|
4 |
|
Например, для N=4: MaxBi = max Bi ; MaxBi |
|||
i=1 |
|
i=2 |
|
Рекурсивно упорядочить массив с помощью метода вставок.
45
Ульяновский государственный университет |
Форма |
«Информатика»
C9. Для заданного одномерного массива B из N элементов найти значение минимального значения выражения sin Bi. Рекурсивную функцию применять каждый раз отдельно для первой трети массива и для остальной части (2/3) массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
9 |
|
3 |
9 |
|
Например, для N=9: Min(sin Bi )= min Min(sin Bi ); Min(sin Bi ) |
||||
i=1 |
|
i=1 |
i=4 |
|
Рекурсивно упорядочить массив с помощью пузырьковой сортировки.
C10. Для заданного одномерного массива Z из N элементов найти значение максимального значения выражения sin Zi2 − i Z+i2 . Рекурсивную функцию применять
каждый раз отдельно для первой трети массива и для остальной части (2/3) массива. Рекурсивные вызовы заканчивать, когда останется только один элемент.
Например, для N=9:
9 |
|
|
− |
Z |
|
3 |
|
|
− |
Z |
9 |
|
|
− |
Z |
|||
Max sin Zi |
i |
|
= max Max sin Zi |
i |
; Max sin Zi |
i |
|
|||||||||||
|
|
2 |
|
|
|
|
|
2 |
|
|
|
|
2 |
|
|
|||
i=1 |
|
|
|
i + 2 |
|
|
i=1 |
|
|
|
i + 2 |
|
i=4 |
|
|
|
i + 2 |
|
Рекурсивно упорядочить массив с помощью метода вставок.
46