Прямоугольные массивы

Прямоугольный массив имеет более одного измерения. Чаще всего в программах используются двумерные массивы. Варианты описания двумерного массива:

тип[,] имя;

тип[,] имя - new тип [ разм_1, разм_2 ];

тип[,] имя = { список_инициализаторов };

тип[,] имя = new тип [,] { список_инициализаторов };

тип[,] имя = new тип [ разм_1, разм_2 ] { список_инициализаторов };

Примеры описаний (один пример для каждого варианта описания):

int[,] a; // 1 элементов нет

int[,] b = new int[2, 3]; // 2 элементы равны О

int[,] с = {{1, 2, 3}, {4, 5, 6}}; // 3 new подразумевается

int[,] с = new int[,] {{1, 2, 3}, {4, 5, 6}}; // 4 размерность вычисляется

int[,] d = new int[2,3] {{1, 2, 3}, {4, 5, 6}};// 5 избыточное описание

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

а[1, 4] b[i, j] b[j, i]

ВНИМАНИЕ

Необходимо помнить, что компилятор воспринимает как номер строки первый ин­декс, как бы он ни был обозначен в программе.

В качестве примера рассмотрим программу, которая для целочисленной матри­цы размером 3x4 определяет среднее арифметическое ее элементов и количест­во положительных элементов в каждой строке (рис. 6.3).

Рис. 6.3. Матрица из т строк и n столбцов

Для нахождения среднего арифметического элементов массива требуется найти их общую сумму, после чего разделить ее на количество элементов. Порядок пере­бора элементов массива (по строкам или по столбцам) роли не играет. Нахождение количества положительных элементов каждой строки требует просмотра матрицы по строкам. Схема алгоритма приведена на рис. 6.4, программа — в листинге 6.2.

Листинг 6.2. Работа с двумерным массивом

using System;

namespace ConsoleApplication1

{

class Class1

{

static void Main()

{

const int m = 3, n = 4; int[,] a = new int[m, n] { { 2,-2, 8, 9 },

{-4,-5, 6,-2 }, { 7, 0, 1, 1 }};

Console.WriteLine("Исходный массив:");

for (int i = 0; i < m; ++i)

{

for (int j = 0; j < n; ++j)

Console.Write("\t" + a[i, j]);

Console.WriteLine();

}

double sum = 0;

int nPosEl;

for (int i = 0; i < m; ++i)

{

nPosEl = 0;

for (int j = 0; j < n; ++j)

{

sum += a[i, j];

if (a[i, j] > 0)

++nPosEl;

}

Console.WriteLine("В строке {0} {1} положит-х элементов",

i, nPosEl);

}

Console.WriteLine("Среднее арифметическое всех элементов: " +

sum / m / n);

}

}

}

ПРИМЕЧАНИЕ

Для суммирования элементов описана переменная sum вещественного типа. Если описать ее как целую, при делении на количество элементов будет отброшена дроб­ная часть.

Обратите внимание на то, что переменная sum обнуляется перед циклом про­смотра всей матрицы, а количество положительных элементов — перед циклом просмотра очередной строки, поскольку для каждой строки его вычисление на­чинается заново.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: