
4 курс (заочка) / Лабораторные работы / ЛР9 (A) - ТП
.docxОрдена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики»
Центр заочного обучения по программам бакалавриата
Кафедра «Математической кибернетики и информационных технологий»
Дисциплина: Технологии программирования
Лабораторная работа №9
Рекурсия
Выполнил: Иванов И.И., студент группы БСТ17XX Вариант №7
Проверил: Клешнин Н.Г.
Москва, 2021
Введение
В данной лабораторной работе мы изучаем создание программы, позволяющей произвести проверку попадания точки в область на плоскости. Необходимо написать программу, которая будет удовлетворять заданным условиям, указанным в варианте задания.
Задание
Требуется определить массив целых чисел (например, размера 30), заполнить его случайными числами или ввести его элементы с клавиатуры и определить его характеристики с помощью рекурсивной функции в соответствии с вариантом задания. Проверку правильности результата провести с помощью сравнения результатов итеративной и рекурсивной функций.
Программа должна содержать следующие функции:
инициализация элементов массива случайными числами или вводимыми с клавиатуры;
вывод массива на экран;
итеративная функция, вычисляющая характеристики массива в соответствии с вариантом задания;
рекурсивная функция, вычисляющая характеристики массива в соответствии с вариантом задания.
Вариант задания
Уровень A
A7. В массиве целых чисел с помощью рекурсивной функции найти сумму таких элементов, которые состоят только из четных цифр.
Код программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace lab9
{
class Program
{
static void Main(string[] args)
{
const int A = -100;
const int B = 100;
Console.Write("Введите размер массива: ");
int size = Convert.ToInt32(Console.ReadLine());
int[] arr = new int[size];
Console.WriteLine("Введите: \t1 - для заполнения массива случайными числами \n\t\t2 - для ручного заполнения массива ");
int choice = 0;
do
{
choice = Convert.ToInt32(Console.ReadLine());
if (choice == 1)
randArray(arr, A, B);
else
{
if (choice == 2)
inputArray(arr);
else
choice = 0;
}
}
while (choice == 0);
showArray(arr);
Console.WriteLine($"Сумма элементов массива, состоящих из четных цифр: ");
iteratSumm(arr);
recursSumm(arr);
Console.ReadKey();
}
static void randArray(int[] arr, int A, int B)
{
Random r = new Random();
for (int i = 0; i < arr.Length; i++)
{
arr[i] = r.Next(A, B);
}
}
static void inputArray(int[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
Console.Write($"Введите {i}-й элемент массива: ");
arr[i] = Convert.ToInt32(Console.ReadLine());
}
}
static void showArray(int[] arr)
{
Console.WriteLine("Получившийся массив:");
for (int i = 0; i < arr.Length; i++)
Console.Write($"{arr[i]} ");
Console.WriteLine();
}
static void iteratSumm(int[] arr)
{
int summ = 0;
for (int i = 0; i < arr.Length; i++)
{
bool flag = true;
int currentElement = Math.Abs(arr[i]);
int len = currentElement.ToString().Length;
for (int j = 1; j <= len; j++)
{
if (currentElement % 2 != 0)
{
flag = false;
break;
}
currentElement = (int)(currentElement / 10);
}
if (flag)
summ += arr[i];
}
Console.WriteLine($"Итеративный метод: {summ}");
}
static int recursSumm(int[] arr, int summ = 0, int i = 0, int j = 0)
{
if (arr.Length - i <= 0)
{
Console.WriteLine($"Рекурсивный метод: {summ}");
return 0;
}
else
{
int currentElement = Math.Abs(arr[i]);
int len = currentElement.ToString().Length;
currentElement = (int)(currentElement / Math.Pow(10, j));
if (currentElement % 2 == 0)
{
if (len == j)
return recursSumm(arr, summ += arr[i], i + 1, j = 0);
else
return recursSumm(arr, summ, i, j + 1);
}
else
return recursSumm(arr, summ, i + 1, j = 0);
}
}
}
}
Результаты работы программы
Заключение
В ходе выполнения лабораторной работы была написана программа, содержащая циклический вычислительный процесс, с помощью которой мы смогли выполнить поставленную перед нами задачу.