- •B2. Q: число является положительным. T: число начинается с цифры 1
- •B4. Q: число не содержит цифру 0. T: первая цифра числа совпадает с последней.
- •B7. Q: число является двузначным. T: число не содержит в своем составе цифру 7.
- •B9. Q: сумма цифр числа равна 10. T: число является четным.
- •B16. Q: число является трехзначным. T: число содержит в своем составе цифру 2.
ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ
Ордена Трудового Красного Знамени федеральное государственное
бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Центр заочного обучения по программам бакалавриата
09.03.02 – Информационные системы и технологии
РЕФЕРАТ
по дисциплине «Технология программирования»
на тему «Вариант №9. Рекурсия»
Выполнил:
Костомаров Е.А.
студент группы БСТ1852
Москва, 2022
Метод «разделяй и властвуй»
Требуется определить одномерный целочисленный массив a из n
элементов (например, n=30), заполнить его случайными числами (в диапазоне от A до B, где A и B задаются в директивах #define) или ввести его
элементы с клавиатуры и определить следующие его характеристики с помощью метода «разделяй и властвуй»:
• количество элементов массива, обладающих свойством Q;
• сумму элементов массива, обладающих свойством T;
• обладает ли хотя бы один элемент массив a свойством Q;
• все ли элементы массива a обладают свойством T.
Свойства Q и T задаются в индивидуальных вариантах. Проверку правильности результата провести с помощью сравнения результатов итеративной
и рекурсивной функций.
52
Программа должна содержать следующие функции:
• инициализация элементов массива случайными числами или вводимыми с клавиатуры;
• вывод массива на экран;
• итеративная функция, вычисляющая количество элементов массива, обладающих свойством Q;
• рекурсивная функция, вычисляющая количество элементов массива, обладающих свойством Q;
• итеративная функция, вычисляющая сумму элементов массива,
обладающих свойством T;
• рекурсивная функция, вычисляющая сумму элементов массива,
обладающих свойством T;
• итеративная логическая функция, проверяющая, обладает ли хотя
бы один элемент массива свойством Q;
• рекурсивная логическая функция, проверяющая, обладает ли хотя
бы один элемент массива свойством Q;
• итеративная логическая функция, проверяющая, все ли элементы
массива a обладают свойством T;
• рекурсивная логическая функция, проверяющая, все ли элементы
массива a обладают свойством T.
Все задания выполнены на языке программирования Python.
Варианты заданий и их решения:
B1. Q: число является четным. T: число содержит в своем составе цифры 2 и 3.
from random import randint
def Qbehavior(number):
return number != 0 and number % 2 == 0
# Состояние T
def Tbehavior(number):
string_number = str(number)
number_2_exist = False
number_3_exist = False
for char in string_number:
if char == "2":
number_2_exist = True
if char == "3":
number_3_exist = True
return number_3_exist == True and number_2_exist == True
# • итеративная функция, вычисляющая количество элементов массива, обладающих свойством Q;
def iteratCountQ(array):
count = 0
for number in array :
if Qbehavior(number) == True:
count += 1
return count
# • рекурсивная функция, вычисляющая количество элементов массива, обладающих свойством Q;
def recurseCountQ(array, array_pointer=0,count=0):
if len(array) == array_pointer:
return count
else:
if Qbehavior(array[array_pointer]) == True:
count += 1
array_pointer += 1
return recurseCountQ(array, array_pointer, count)
# • итеративная функция, вычисляющая сумму элементов массива, обладающих свойством T;
def iteratSumT(array):
sum = 0
for number in array:
if Tbehavior(number) == True:
sum += number
return sum
# • рекурсивная функция, вычисляющая сумму элементов массива, обладающих свойством T;
def recurseSumT(array, array_pointer=0, sum=0):
if len(array) == array_pointer:
return sum
else:
if Tbehavior(array[array_pointer]) == True:
sum += array[array_pointer]
array_pointer += 1
return recurseSumT(array, array_pointer, sum)
# • итеративная логическая функция, проверяющая, обладает ли хотя бы один элемент массива свойством Q;
def iteratAtLeastOneQ(array):
for number in array :
if Qbehavior(number) == True:
return True
return False
# • рекурсивная логическая функция, проверяющая, обладает ли хотя бы один элемент массива свойством Q;
def recurseAtLeastOneQ(array, array_pointer=0):
if len(array) == array_pointer:
return False
else:
if Qbehavior(array[array_pointer]) == True:
return True
array_pointer += 1
return recurseAtLeastOneQ(array, array_pointer)
# • итеративная логическая функция, проверяющая, все ли элементы массива a обладают свойством T;
def iteratEveryT(array):
t_behavior_count = 0
for number in array :
if Tbehavior(number) == True:
t_behavior_count += 1
return len(array) == t_behavior_count
# • рекурсивная логическая функция, проверяющая, все ли элементы массива a обладают свойством T.
def recurseEveryT(array, array_pointer=0, t_behavior_count=0):
if len(array) == array_pointer:
return len(array) == t_behavior_count
else:
if Tbehavior(array[array_pointer]) == True:
t_behavior_count += 1
array_pointer += 1
return recurseEveryT(array, array_pointer, t_behavior_count)
# Инициализация массива
def init_array(n, a, b):
return [randint(a, b) for _ in range(n)]
n = 30
a, b = 1, 99999
# инициализация элементов массива случайными числами от а до b в количестве n
array = [randint(a, b) for _ in range(n)]
print("Вариант: B1. Q: число является четным. T: число содержит в своем составе цифры 2 и 3.")
print("Элементы массива: \n", array)
print("Итеративная функция, количество элементов массива, обладающих свойством Q: ", iteratCountQ(array))
print("Рекурсивная функция, количество элементов массива, обладающих свойством Q: ", recurseCountQ(array))
print("Итеративная функция, сумма элементов массива,обладающих свойством T: ", iteratSumT(array))
print("Рекурсивная функция, сумма элементов массива,обладающих свойством T: ", recurseSumT(array))
print("Итеративная логическая функция, обладает ли хотя бы один элемент массива свойством Q: ", iteratAtLeastOneQ(array))
print("Рекурсивная логическая функция, обладает ли хотя бы один элемент массива свойством Q: ", recurseAtLeastOneQ(array))
print("Итеративная логическая функция, все ли элементы массива a обладают свойством T: ", iteratEveryT(array))
print("Рекурсивная логическая функция, все ли элементы массива a обладают свойством T: ", recurseEveryT(array))
B2. Q: число является положительным. T: число начинается с цифры 1
from random import randint
def Qbehavior(number):
return number >= 1
# Состояние T
def Tbehavior(number):
string_number = str(number)
if string_number[0] == "1":
return True
else:
if string_number[0] == "-" and string_number[1] == "1":
return True
else:
return False
# • итеративная функция, вычисляющая количество элементов массива, обладающих свойством Q;
def iteratCountQ(array):
count = 0
for number in array :
if Qbehavior(number) == True:
count += 1
return count
# • рекурсивная функция, вычисляющая количество элементов массива, обладающих свойством Q;
def recurseCountQ(array, array_pointer=0,count=0):
if len(array) == array_pointer:
return count
else:
if Qbehavior(array[array_pointer]) == True:
count += 1
array_pointer += 1
return recurseCountQ(array, array_pointer, count)
# • итеративная функция, вычисляющая сумму элементов массива, обладающих свойством T;
def iteratSumT(array):
sum = 0
for number in array:
if Tbehavior(number) == True:
sum += number
return sum
# • рекурсивная функция, вычисляющая сумму элементов массива, обладающих свойством T;
def recurseSumT(array, array_pointer=0, sum=0):
if len(array) == array_pointer:
return sum
else:
if Tbehavior(array[array_pointer]) == True:
sum += array[array_pointer]
array_pointer += 1
return recurseSumT(array, array_pointer, sum)
# • итеративная логическая функция, проверяющая, обладает ли хотя бы один элемент массива свойством Q;
def iteratAtLeastOneQ(array):
for number in array :
if Qbehavior(number) == True:
return True
return False
# • рекурсивная логическая функция, проверяющая, обладает ли хотя бы один элемент массива свойством Q;
def recurseAtLeastOneQ(array, array_pointer=0):
if len(array) == array_pointer:
return False
else:
if Qbehavior(array[array_pointer]) == True:
return True
array_pointer += 1
return recurseAtLeastOneQ(array, array_pointer)
# • итеративная логическая функция, проверяющая, все ли элементы массива a обладают свойством T;
def iteratEveryT(array):
t_behavior_count = 0
for number in array :
if Tbehavior(number) == True:
t_behavior_count += 1
return len(array) == t_behavior_count
# • рекурсивная логическая функция, проверяющая, все ли элементы массива a обладают свойством T.
def recurseEveryT(array, array_pointer=0, t_behavior_count=0):
if len(array) == array_pointer:
return len(array) == t_behavior_count
else:
if Tbehavior(array[array_pointer]) == True:
t_behavior_count += 1
array_pointer += 1
return recurseEveryT(array, array_pointer, t_behavior_count)
# Инициализация массива
def init_array(n, a, b):
return [randint(a, b) for _ in range(n)]
n = 30
a, b = -9999, 9999
# инициализация элементов массива случайными числами от а до b в количестве n
array = [randint(a, b) for _ in range(n)]
print("B2. Q: число является положительным. T: число начинается с цифры 1.")
print("Элементы массива: \n", array)
print("Итеративная функция, количество элементов массива, обладающих свойством Q: ", iteratCountQ(array))
print("Рекурсивная функция, количество элементов массива, обладающих свойством Q: ", recurseCountQ(array))
print("Итеративная функция, сумма элементов массива,обладающих свойством T: ", iteratSumT(array))
print("Рекурсивная функция, сумма элементов массива,обладающих свойством T: ", recurseSumT(array))
print("Итеративная логическая функция, обладает ли хотя бы один элемент массива свойством Q: ", iteratAtLeastOneQ(array))
print("Рекурсивная логическая функция, обладает ли хотя бы один элемент массива свойством Q: ", recurseAtLeastOneQ(array))
print("Итеративная логическая функция, все ли элементы массива a обладают свойством T: ", iteratEveryT(array))
print("Рекурсивная логическая функция, все ли элементы массива a обладают свойством T: ", recurseEveryT(array))