Прямоугольные массивы
Массивы объявляются со следующим образом
Многомерные массивы
Листинг программы
Листинг программы 2
Листинг программы 2
Листинг программы 3
Листинг программы 3
Листинг программы 3
Листинг программы 3
Листинг программы 3
Ступенчатые (зубчатые) массивы
Пример
Пример вывода через foreach
1.43M
Category: programmingprogramming

6_2_Массивы2

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

Двумерный массив имеет два измерения
Варианты описания двумерного массива:
• тип[,] имя = new тип [ разм_1, разм_2 ];
• тип[,] имя = { список_инициализаторов };
• тип[,] имя = new тип [,] { список_инициализаторов };
• тип[,] имя = new тип [ разм_1, разм_2 ]
{ список_инициализаторов };

2. Массивы объявляются со следующим образом

int[,] a;
// элементов нет
int[,] b = new int[2, 3];
// элементы равны 0
int[,] c = {{1, 2, 3}, {4, 5, 6}};
//new подразумевается
// размерность вычисляется
int[,] c = new int[,] {{1, 2, 3}, {4, 5, 6}};
К элементу двумерного массива обращаются, указывая номера строки и
столбца, на пересечении которых он расположен, например:
a[1, 4]
b[i, j]
b[j, i]

3. Многомерные массивы

Массивы могут иметь и большее количество измерений.
Объявление трехмерного массива могло бы выглядеть так:
int[,,] nums3 = new int[3, 6, 2];
длина такого массива - это совокупное количество элементов.
Задача 1.
В матрице А [3 x 4] определить среднее арифметическое ее
элементов , а также количество положительных элементов в
каждой строке.

4. Листинг программы

{ 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( $ " {a[i, j],4}");}
Console.WriteLine();
}
double sum = 0;
int El;
for ( int i = 0; i < m; ++i )
{ El = 0;
for ( int j = 0; j < n; ++j )
{ sum += a[i, j];
if ( a[i, j] > 0 ) ++El;
}
Console.WriteLine( "В строке {0}- {1} элементов>0 ", i, El );
}
}
Console.WriteLine( $"Среднее арифметическое всех элементов: : {sum/m/n}");

5. Листинг программы 2

Задача 2. Вывести квадратную матрицу X[m,n] в виде таблицы. Найти максимальное
значение элемента и его координаты: номер строки и номер столбца.
int r=0,m=0,Rmax=0,c=0,n=0,Cmax=0,Mmax=0;
Console.WriteLine("Введите число строк и столбцов матрицы");
Console.Write("Число строк m=");
m = Convert.ToInt32(Console.ReadLine());
Console.Write("Число столбцов n=");
n = Convert.ToInt32(Console.ReadLine());
Random rnd = new Random();
int[,] M = new int[m, n];

6. Листинг программы 2

for (r = 0; r < m; r++)
{
for (c = 0; c < n; c++)
{
M[r,c] = rnd.Next(0, 100);
if (M[r,c] > Mmax)
{ Mmax = Mm;
Rmax = r;
Cmax = c;
}
}
}
Console.WriteLine("\nСоздана матрица M случайных целых чисел\n");
for (r = 0; r < m; r++)
{
for (c = 0; c < n; c++)
{
Console.Write($"{ M[r, c],5}");
}
Console.WriteLine();
}
Console.WriteLine("\n\nРезультаты\n");
Console.Write("Максимальное значение Mmax={0} \n",Mmax); Console.Write("Номер строки ={0} \n", Rmax);
Console.Write("Номер столбца ={0} ", Cmax);

7. Листинг программы 3

Задача 3. Найти произведение двух матриц размеров m х n и k х t
По правилам перемножения матриц количество столбцов
первой матрицы должно совпадать с количеством строк второй
матрицы. Поэтому сначала требуется проверить это условие.
Если размеры были введены корректно, осуществляется
перемножение.
Каждый элемент матрицы-результата вычисляется как
скалярное произведение соответствующей строки первой
матрицы на столбец второй матрицы.
Поэтому при решении задачи создается три цикла: первые два
перебирают элементы результирующей матрицы, а третий
используется для вычисления самого элемента.

8. Листинг программы 3

int m,n,k,t;
Console.Write("Введите количество строк первой матрицы m:");
int.TryParse(Console.ReadLine(),out m);
Console.Write("Введите количество столбцов первой матрицы
n:");
int.TryParse(Console.ReadLine(),out n);
Console.Write("Введите количество строк второй матрицы k:");
int.TryParse(Console.ReadLine(),out k);
Console.Write("Введите количество столбцов второй матрицы
t:");
int.TryParse(Console.ReadLine(),out t);
if(m<=0 || n<=0 || k<=0 || t<=0)
{
Console.WriteLine("Введите положительные размеры");
return;
}

9. Листинг программы 3

if(n!=k)
{
Console.WriteLine("n должно быть равно k");
return;
}
int [,] a = new int [m, n];
int [,] b = new int [k, t];
int [,] c = new int [m, t];
if(a == null || b == null || c == null)
{
Console.WriteLine("Запрошено большое количество памяти.\n
Попробуйте ввести меньший размер.");
return;
}

10. Листинг программы 3

Console.WriteLine("Введите матрицу A:");
for(int x = 0; x < m; x++)
for(int y = 0; y < n; y++)
int.TryParse(Console.ReadLine(),out a[x, y]);
Console.WriteLine("Введите матрицу B:");
for(int x = 0; x < k; x++)
for(int y = 0; y < t; y++)
int.TryParse(Console.ReadLine(),out b[x, y]);

11. Листинг программы 3

//
вычисление произведения матриц
for(int x = 0; x < m; x++)
for(int y = 0; y < t; y++)
{ int s=0;
for(int p = 0; p < n; p++)
s = s + a[x, p]*b[p, y];
c[x, y]=s;
}
Console.WriteLine("Полученная матрица:");
for (int x = 0; x < m; x++)
{ for (int y = 0; y < t; y++)
Console.Write("{0}\t", c[x, y]);
Console.WriteLine();
}

12. Ступенчатые (зубчатые) массивы

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

13. Пример

Создается массив, элементы которого сами являются массивами.
Каждый элемент массива имеет собственный размер.
// объявление массива без элементов:
int[][] arr = new int[2][];
// инициализация элементов:
arr[0] = new int[5] { 1, 3, 5, 7, 9 };
arr[1] = new int[4] { 2, 4, 6, 8 };
// вывод элементов:
{
for (int i = 0; i < arr.Length; i++)
{ Console.Write("Element({0}): ", i);
for (int j = 0; j < arr[i].Length; j++)
{
Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1) ? "" : " "); }
Console.WriteLine();
}
Результат
Element(0): 1 3 5 7 9
Element(1): 2 4 6 8

14. Пример вывода через foreach

int[][] a = new int[3][];
a[0] = new int [5] { 24, 50, 18, 3, 16 };
a[1] = new int [3] { 7, 9, -1 };
a[2] = new int [4] { 6, 15, 3, 1 };
Console.WriteLine( "Исходный массив:" );
foreach ( int [] mas1 in a )
{
foreach ( int x in mas1 )
Console.Write( "\t" + x );
Console.WriteLine();
}
English     Русский Rules