Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
9 Вариант / Курсовой ТП Костомаров ЕА ЗБСТ 1852.docx
Скачиваний:
8
Добавлен:
09.02.2022
Размер:
52.75 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ

Ордена Трудового Красного Знамени федеральное государственное

бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

Центр заочного обучения по программам бакалавриата

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))