Домашнее задание. Многомерные массивы - C# и .NET

Домашнее задание. Многомерные массивы

Домашняя работа по C#: дан двумерный массив целых m на n элементов. Заполнить массив случайными числами, вывести массив в консоль и определить максимальное и минимальное значение в каждой строке массива. Для получения случайного числа использовать выражение Random.Shared.Next()

Часть учебника C# для начинающих на которой основывается это домашнее задание

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

  1. Заполнить массив случайными числами
  2. Найти максимальное и минимальное значение в каждой строке
  3. Вывести массив в консоль

Создадим новое консольное приложение и, вначале, создадим необходимые переменные для инициализации массива:

Console.Write("Введите количество строк в массиве: ");
int m = int.Parse(Console.ReadLine());
Console.Write("Введите количество столбцов в массиве: ");
int n = int.Parse(Console.ReadLine());

int[,] matrix = new int[m, n];

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

for (int i = 0; i < m; i++)  //первый цикл по строкам
{
    for (int j = 0; j < n; j++) //второй цикл по столбцам
    {
        matrix[i, j] = Random.Shared.Next();
    }
}

Здесь первый цикл проходит по строкам массива, а второй – по столбцам, заполняя элементы случайными числами. Теперь нам необходимо каким-либо образом определить минимальное и максимальное значение в каждой строке. Рассмотрим следующий исходный код:

int min = 0;
int max = 0;

for (int i = 0; i < m; i++)  //первый цикл по строкам
{
    for (int j = 0; j < n; j++) //второй цикл по столбцам
    {
        matrix[i, j] = Random.Shared.Next();
    }

    min = matrix[i, 0];
    max = matrix[i, 0];

    for (int j = 0; j < n; j++) //второй цикл по столбцам
    {

        if (matrix[i, j] < min)
            min = matrix[i, j];
        if (matrix[i, j] > max)
            max = matrix[i, j];
    }
    Console.WriteLine($"Строка {i}: min = {min}; max = {max}");
}

Здесь, перед запуском цикла, мы заводим две переменные для храния минимального и максимального значения в строке:

int min = 0; 
int max = 0;

Далее, запускается цикл по строкам в котором стартует вначале заполнение очередной строки значениями:

for (int i = 0; i < m; i++)  //первый цикл по строкам
{
    for (int j = 0; j < n; j++) //второй цикл по столбцам
    {
        matrix[i, j] = Random.Shared.Next(); //устанавливаем значение в i-й строке, j-м столбце
    }
//тут прочий код

Когда строка заполнена, мы присваиваем переменным значения по умолчанию – считаем, что минимальное и максимальное значение находится в первом столбце строки:

min = matrix[i, 0];
max = matrix[i, 0];

Снова запускаем цикл по столбцам в строке, на которой мы находимся в данный момент и ищем минимум и максимум:

for (int j = 0; j < n; j++) //второй цикл по столбцам
{
    if (matrix[i, j] < min)
        min = matrix[i, j];
    if (matrix[i, j] > max)
        max = matrix[i, j];
}

Теперь нам необходимо распечатать массив – вывести его в консоль и вывести также в консоль максимальное и минимальное значение в строке. Сделать это можно следующим образом (ниже представлен полный код циклов):

for (int i = 0; i < m; i++)  //первый цикл по строкам
{
    for (int j = 0; j < n; j++) //второй цикл по столбцам
    {
        matrix[i, j] = Random.Shared.Next();
    }

    min = matrix[i, 0];
    max = matrix[i, 0];


    for (int j = 0; j < n; j++) //второй цикл по столбцам
    {

        if (matrix[i, j] < min)
            min = matrix[i, j];
        if (matrix[i, j] > max)
            max = matrix[i, j];
        Console.Write($"{matrix[i, j]}\t");
    }
    Console.WriteLine($"Строка {i}: min = {min}; max = {max}");
}

На каждой итерации второго цикла по столбцам мы выводим значение элемента и ставим табуляцию:

Console.Write($"{matrix[i, j]}\t");

Как только этот цикл заканчивается – мы уже знаем минимум и максимум в столбце, поэтому можем вывести эти значения в консоль. Так как в этот момент последний символ в текущей строке в консоли – табуляция, то мы просто выводим информацию в консоль и переводим курсор на следующую строку

Console.WriteLine($"Строка {i}: min = {min}; max = {max}");

В результате, в консоли мы будем видеть следующий вывод:

Домашняя работа по C#

Итого, весь исходный код нашего приложения будет выглядеть следующим образом:

Console.Write("Введите количество строк в массиве: ");
int m = int.Parse(Console.ReadLine());
Console.Write("Введите количество столбцов в массиве: ");
int n = int.Parse(Console.ReadLine());

int[,] matrix = new int[m, n];


int min = 0;
int max = 0;

for (int i = 0; i < m; i++)  //первый цикл по строкам
{
    for (int j = 0; j < n; j++) //второй цикл по столбцам
    {
        matrix[i, j] = Random.Shared.Next(0, 100);
    }

    min = matrix[i, 0];
    max = matrix[i, 0];


    for (int j = 0; j < n; j++) //второй цикл по столбцам
    {

        if (matrix[i, j] < min)
            min = matrix[i, j];
        if (matrix[i, j] > max)
            max = matrix[i, j];
        Console.Write($"{matrix[i, j]}\t");
    }
    Console.WriteLine($"Строка {i}: min = {min}; max = {max}");
}

Console.ReadKey();