Задачи по работе с одномерными массивами на языке C#

Категория:

В данной статье будет рассмотрено решение некоторых простых задач по работе с одномерными массивами на языке программирования C# для лабораторных работ. Хотя вполне будет применимо и к другим языкам программирования. К примеру: Delphi или C++ Builder. Будут отличаться только конкретные конструкции языка, а так сам принцип решения остается таким же.

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

Подготовительный этап

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

Если Вы не знаете как создавать новый проект в C#, тогда предварительно можете прочитать статью на тему "Создание классического приложения Windows Forms в Visual Studio C#", ссылка на которую, размещена в конце этой статьи.

В итоге вышла следующая форма:

Форма для работы с одномерными массивами в C#

Задача 1. Найти сумму элементов массива, кратных какому-либо заданному числу

Добавляем новую кнопку в область "Задачи для выполнения", даем ей название btnTask1 и пишем следующий обработчик для этой кнопки:

private void btnTask1_Click(object sender, EventArgs e)
{
            int number = Convert.ToInt32(editNumber.Text);
            int[] source = getSourceNumbers();
            int[] results = new int[gridArray.ColumnCount];
            int index_result = 0;
            int summ = 0;

            for (int i = 0; i < source.Length; i++)
            {
                if (source[i] % number == 0)
                {
                    summ += source[i];
                    results[index_result++] = source[i];
                }
            }

            results = copyArrayToLengh(results, index_result);
            showResult(results, summ);
}

В данном коде сначала производится инициализация локальных переменных, которые не обходимы для выполнения задачи. Здесь следует обратить внимание на функцию getSourceNumbers, которая из размещенного на форме компонента DataGridView, возвращает нам целочисленный массив чисел. Далее в цикле проверяется текущее значение из исходного массива на заданное число путем получения остатка от деления. Если результат выполнения этой операции равен нулю, то это означает, что число кратно заданному, то есть оно делится на него без остатка. В итоговый массив results помещаем найденное кратное число из исходного массива source и суммируем значения в переменной summ.

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

Дополнительные функции сделаны, чтобы не загромождать код обработчика, а также, чтобы избежать лишнего дублирования кода.

Задача 2. Сумма модулей элементов массива, расположенных после первого элемента, равного нулю

Добавляем еще одну новую кнопку в область "Задачи для выполнения" и даем ей название btnTask2. Далее создаем двойным кликом обработчик и пишем там следующий код:

private void btnTask2_Click(object sender, EventArgs e)
{
    int[] source = getSourceNumbers();
    int[] results = new int[gridArray.ColumnCount];
    int index_result = 0;
    int summ = 0;
    bool isNullNumber = false;

    for (int i = 0; i < source.Length; i++)
    {
        // Фиксация первого нулевого элемента массива
        if (isNullNumber == false && source[i] == 0)
        {
            isNullNumber = true;
            continue;
        }

        // Работа с последующими числами
        summ += Math.Abs(source[i]);
        results[index_result++] = Math.Abs(source[i]);
    }

    results = copyArrayToLengh(results, index_result);
    showResult(results, summ);

}

В коде для данной задачи многое похоже на задачу №1. Здесь отличается тело цикла и используется переменная isNullNumber для установки флага найденного первого нуля в массиве. После того как найдет нулевой элемент, устанавливается флаг с состояние true и цикл переходит к следующей итерации с помощью команды continue. В последующих итерациях производится суммирование по модулю и сохранение чисел по модулю в итоговый массив. Далее все выводится, как и в первой задаче. 

Еще как вариант можно задействовать поле editNumber (число), и сделать на проверку любого числа, которое задаст пользователь через программу. И уже потом в условии, вместо нуля, использовать заданное число.

Задача 3. Произведение элементов массива, расположенных между первым и последним отрицательными элементами

Добавляем еще одну новую кнопку в область "Задачи для выполнения" и даем ей название btnTask3. Далее создаем двойным кликом обработчик и пишем там следующий код:

private void btnTask3_Click(object sender, EventArgs e)
{
    clearResults();

    int[] source = getSourceNumbers();
    int[] results = new int[gridArray.ColumnCount];
    int index_result = 0;
    int multiple = 1;

    int startPos = getStartPosition(source);
    int endPos = getEndPosition(source);

    // Во первых должны быть найдены позиции и между ними
    if (startPos >= 0 && endPos >= 0)
    {
        for (int i = startPos + 1; i < endPos; i++)
        {
            if (source[i] > 0)
            {
                multiple *= source[i];
                results[index_result++] = source[i];
            }
        }

        results = copyArrayToLengh(results, index_result);
        showResult(results, multiple);
    }
}

В данном коде, как и в предыдущих примерах, объявляются необходимые переменные для работы. Здесь внимание стоит обратить на несколько функций: getStartPosition и getEndPosition. Первая из функций находит позицию первого отрицательного числа, а вторая позицию последнего отрицательного числа в массиве. Если в какой-либо функции не найдена такая позиция, то будет возвращено значение -1. Найдя необходимые позиции, по условиям задачи, в теле цикла производится умножения чисел расположенных между найденными позициями. Далее ниже в коде выводятся результаты на форму.

Заключение

Во всех примерах, по решению задач связанных с одномерными массивами, не стал публиковать созданные вспомогательные функции, чтобы не загромождать страницу. Они достаточно простые. Один из них просто выводят результаты, а другие возвращают те или иные данные необходимые для решения этих задач. Все примеры выполнены в Visual Studio 2017 по языку программирования C#. Все эти примеры, решения лабораторных задач, полностью доступны со всеми функциями в приложенном в конце статьи архиве. После загрузки можно детально ознакомиться с проектом.

Файлы к статье: 
Возможно заинтересует: 

Создание классического приложения Windows Forms в Visual Studio C#

Категория:

В данной статье будет рассмотрено как создать новый проект в виде классического приложения для работы в Windows. При выполнении примера создания проекта будет использована Visual Studio 2017.

Основные операции с матрицами в C#: сложение и вычитание

Категория:

В данной статье будут рассмотрено сложение и вычитание матриц с использованием целых чисел. Реализация будет производиться на языке сишарп (C#, CSharp).

Программа для работы с матрицами в Visual C# .NET 2017

Код продукта: 
463

Готовый проект для лабораторной работы по практикуму объектно-ориентированного программирования на языке C# реализующий базовую работу с матрицами: сложение, вычитание и умножение.