РАБОТА С ДВУМЕРНЫМИ МАССИВАМИ
При решении математических, экономических, статистических задач информация располагается в таблицах, образующих двумерные массивы. Если в одномерных массивах каждый элемент содержит только один индекс, то в двумерных массивах каждый элемент имеет координаты, состоящие из номера строки и номера столбца. В математике квадратные или прямоугольные таблицы называются матрицами.
На рис. 133 представлен общий вид квадратной матрицы 5x5. Каждый элемент матрицы имеет имя А. Первый индекс — это номер строки, второй индекс — номер столбца. Диагональ матрицы А0о — А44 называется главной, а диагональ Ао4_А40 — побочной. N — количество столбцов, М — количество строк.
о
10 1N—1
О о |
ао |
а02 |
аоз |
а04 |
*и> |
а |
а2 |
*13 |
а4 |
о ГД |
а2 |
а22 |
а2Ъ |
а 24 |
азо |
аз |
аЪ2 |
азз |
а34 |
а40 |
а4 |
а42 |
а43 |
а44 |
М— 1
Рис. 133. Общий вид квадратной матрицы
Все операции по обработке, вводу-выводу элементов двумерного массива осуществляются поэлементно, с использованием сложного циклического процесса.
Двумерные массивы инициализируются в объявлениях с использованием того же процесса и тех же форм записи, которые используются для одномерных массивов. Например, двумерный массив а с 5 строками и 5 столбцами можно объявить следующим образом:
Например:
int[;] а;
а = new int[5, 5];
Если элементы массива заранее известны, то, используя фигурные скобки (список инициализаторов), можно объявить двумерный массив следующим образом:
int[,] а = new int[/] [1];
Возможно объявление массива и другими способами:
int[,] Ь = [1];
int[,] а = new int[4,5] [1];
Задача. В двумерном массиве произвольных целых чисел найдите сумму всех элементов. Ввод элементов осуществите вручную.
Разработка алгоритма решения задачи представлена на рис. 134.

Рис. 134. Алгоритм решения задачи
В листинге 107 приведен код процедуры, написанной как консольное приложение, отвечающий за решение задачи, а на рис. 135 показан результат ее выполнения.
Листинг 107
namespace ConsoleApplicationl
{
class Program
{
static void Main(string[] args)
{
int[,] a;
a = new int[4, 4];
int sum = 0;
string[,] con;
con = new string[4,4];
Console.WriteLine("Введите элемент массива"); for (int i — 0; i < 4; i++)
for (int j = 0; j < 4; j++)
{
con[i,j] = Console.ReadLine(); a[i,j] = Convert.ToIntl6(con[i,j]); sum += a[i,j];
}
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
Console.Write(a[i, j] + " ");
Console.WriteLine();
}
Console.WriteLine("Сумма элементов массива^ " + sum); Console.ReadLine();
}
}

Рис. 135. Результат выполненной программы
В листинге 108 приведен код процедуры, в которой элементы массива заранее известны и находятся в списке инициализаторов.
Листинг 108
namespace ConsoleApplicationl
{
class Program
{
static void Main(string[] args)
{
int[,] a; a = new int[4, 4]
[4];
int sum = 0;
string[,] con;
con = new string[4,4];
Console.WriteLine("Исходный массив"); for (int i — 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
Console.Write(a[i, j] + " ");
Console.WriteLine();
}
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++) sum += a[i, j];
Console.WriteLine("Сумма элементов массива^ " + sum); Console.ReadLine();
}
}
Результат выполнения программы представлен на рис. 136.

Рис. 136. Результат выполненной программы
В листинге 109 приведен код программы «Найдите сумму всех элементов матрицы», написанной как Windows-приложение. В программе используется генератор случайных чисел.
Листинг 109
namespace WindowsApplicationl
{
public partial class Forml : Form
{
public Forml()
{
InitializeComponent();
}
private void buttonl_Click(object sender, EventArgs e)
{
Random a = new Random(); int[,] b;
b = new int[ 4, 4];
int sum = 0;
textBoxl.Clear();
for (int і = 0; і < 4; i++)
{
textBoxl.AppendText(" " + " "); for (int j = 0; j < 4; j++)
{
b[і, j] = a.Next(1, 5);
textBoxl.AppendText(b[і , j] + " ");
sum += b[i, j] ;
}
}
MessageBox.Show("Сумма элементов массива^ " + sum.ToString("n"), "Заголовок окна", MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.Exit();
}
}