Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
30.10.2024
Размер:
50.53 Кб
Скачать

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «Московский технический университет связи и информатики»

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

Кафедра «Математической кибернетики и информационных технологий»

Дисциплина: Технологии программирования

Лабораторная работа №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);

}

}

}

}

Результаты работы программы

Заключение

В ходе выполнения лабораторной работы была написана программа, содержащая циклический вычислительный процесс, с помощью которой мы смогли выполнить поставленную перед нами задачу.

Соседние файлы в папке Лабораторные работы