Массивы с числом размерностей больше двух




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

В С# разрешено использование массивов, имеющих более двух размерностей. Общая форма объявления многомерного массива:

тип[,…,] имя = new тип [ разм1,… размN];

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

int [,,] b = new int[5,4,3];

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

b [2,1,2]

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

Для иллюстрации сказанного ниже приведена программа (лист. 6) поиска наибольшего элемента в трехмерном массиве.

Листинг 6 - Поиск наибольшего элемента в трехмерном массиве

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

const int m = 3, n = 4, c=2;

int[,,] y = new int[c,m, n] {{

{ 2, 2, 8, 9 },

{ 4, 5, 6, 2 },

{ 7, 0, 1, 1 }},

{

{ 1, 1, 0, 1 },

{ 4, 5, 6, 2 },

{ 7, 0, 1, 1 }}};

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

for (int k = 0; k < c; ++k)

{

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

{

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

Console.Write(" " + y[k, i, j]);

Console.WriteLine();

}

}

int max = y[0, 0, 0];

for (int k = 0; k < c; ++k)

{

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

{

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

if (y[k, i, j] > max) max = y[k, i, j];

}

}

Console.WriteLine("Наибольший элемент в матрице " + max);

}

}

}

В инициализирующей части объявления трехмерного массива у представлены первая и вторая его страницы (размерность к), каждая из которых содержит m строк и n столбцов.

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

Результаты работы программы:

Контрольные вопросы

1. Дайте определение понятию прямоугольного массива.

2. Сколько индексов определяют позицию любого элемента в двумерном массиве?

3. Какая конструкция используется для того, чтобы получить доступ к элементу двумерного массива?

4. Приведите различные варианты объявления двумерного массива.

5. Приведите формат инициализации двумерного массива.

6. В каком случае присутствует избыточное описание массива?

7. Приведите пример инициализации целочисленного двумерного массива.

8. Приведите пример ввода двумерного массива и вывода его в матричной форме.

9. Приведите пример алгоритма и программы обработки двумерного массива.

10. Дайте понятие ступенчатого массива. Приведите пример объявления ступенчатого массива.

11. Приведите формат инициализации ступенчатого массива.

12. Приведите пример алгоритма и программы обработки ступенчатого массива.

13. Когда целесообразно использовать цикл перебора foreach? Приведите пример.

14. Приведите пример объявления и инициализации трехмерного массива.

15. Приведите пример алгоритма и программы обработки трехмерного массива.

Варианты заданий для самостоятельной работы

1. Дана (построчно) вещественная матрица размером 7x4. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (один из них) оказался в верхнем левом углу.

2. Найти S - сумму элементов квадратной матрицы A из заштрихованной области:

 
 

 


3. Дана вещественная матрица размером 7×7, все элементы которой различны. Найти скалярное произведение строки, в которой находится наибольший элемент матрицы, и столбца с наименьшим элементом.

4. Заполнить целочисленный массив А, не вводя значения его элементов с клавиатуры, следующим образом:

5. Заполнить целочисленный массив А, не вводя значения его элементов с клавиатуры, следующим образом:

6. По двумерному массиву А получить одномерный массив В, присвоив его k -му элементу значение true, если выполнено указанное ниже условие, и значение false - иначе: k- я строка массива А симметрична.

7. Дана вещественная матрица размером 5×6. Упорядочить ее строки по неубыванию их первых элементов.

8. Дана вещественная матрица размером 5×6. Упорядочить ее строки по неубыванию суммы их элементов.

9. Дана вещественная матрица размером 5×6. Упорядочить ее строки по неубыванию их наибольших элементов.

10. Заполнить целочисленный массив А, не вводя значения его элементов с клавиатуры, следующим образом:

11. Найти S - сумму элементов из заштрихованной области двумерного массива A.

 
 

 


12. Определить, является ли заданная целая квадратная матрица 10 -го порядка симметричной (относительно главной диагонали).

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

14. Дана целочисленная матрица размера n×n. В каждой строке выбрать минимальный элемент. И среди этих минимальных значений выбрать максимальное.

15. Дана действительная матрица размера m×n. Определить число отрицательных элементов в каждой строке.

16. Получить целочисленную матрицу размером m×n, в которой элементы в четных строках и столбцах положительные, а остальные - отрицательные.

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

18. Получить вещественную матрицу a размером n×n, если первая и вторая строка задается формулой a[i,j]=2j+3/(2+j). А каждая следующая строка есть сумма двух предыдущих.

19. В действительной матрице размером 6×9 поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением.

20. Дана целочисленная матрица размером m×n. Получить сумму наибольшего значения элементов матрицы и наименьшего в этой же строке.

21. В действительной матрице размером m×n найти сумму элементов столбца, содержащего наименьший элемент матрицы.

22. Дана вещественная матрица размером n×m. Найти сумму наибольших значений элементов ее строк.

23. Дана вещественная матрица размером m×n. Найти среднее арифметическое наибольшего и наименьшего значений ее элементов.

24. Все максимальные элементы в столбцах вещественной матрицы размером m×n заменить нулями.

25. Дана целочисленная матрица порядка m×n. Заменить нулями элементы, расположенные выше главной диагонали и квадратами - значения элементов ниже главной диагонали.

26. Дана целочисленная матрица размером m×n и целые числа k и l. Определить минимум в столбцах матрицы, имеющих номера k и l.

27. Дана целочисленная матрица размером n×n. Определить, на каком месте располагаются одинаковые элементы, симметричные главной диагонали.

28. Дана целочисленная матрица размером m×n. Найти среднее арифметическое каждого из столбцов с четными номерами.

29. Дана вещественная матрица размером m×n. Найти новую матрицу, полученную путем деления всех элементов исходной матрицы на ее максимальный элемент.

30. Дана вещественная матрица размером m×n. Указать все строки, которые не содержат отрицательных элементов.

31. Дана вещественная матрица размером m×n. Все отрицательные числа заменить на -1, положительные на +1, а нулевые оставить без изменения.

32. Дана вещественная матрица размером m×n. Напечатать номер строки, которая содержит первый из отрицательных элементов.

33. Дана целочисленная матрица размером m×n. Найти сумму всех элементов, расположенных левее столбца, содержащего первый отрицательный элемент.

34. Даны целые числа k, l и целочисленная матрица размером m×n. Поменять местами столбцы с номерами k и l.

35. Дана целочисленная матрица размером m×n. Удалить из этой матрицы строку с номером k(k<m).

36. Дана вещественная матрица размером m×n. В строках, содержащих отрицательный элемент, определить максимальный элемент.

37. Дана целочисленная матрица размером m×n. В каждой строке сменить знак максимального по модулю элемента на противоположный.

38. Дана целочисленная матрица размером m×n. Последний отрицательный элемент каждого столбца заменить нулем.

39. Дана целочисленная матрица размером m×n. Заменить все элементы строки с номером k и столбца с номером 1 на противоположные по знаку (элемент, стоящий на пересечении, не изменять).

40. Дана целочисленная матрица размером m×n. К элементам столбца k1 прибавить элементы столбца k2.

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

42. Даны два двумерных массива А и В одинаковой размерности. Создать массив С, где каждый элемент равен true, если соответствующие элементы А и В имеют одинаковый знак, иначе элемент равен false.

43. Дан двумерный массив размером n×m, заполненный случайными числами. Определить, есть ли в данном массиве столбец, в котором имеются одинаковые элементы.

44. Дан двумерный массив размерностью 5×6, заполненный целыми числами с клавиатуры. Сформировать одномерный массив, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца.

45. Дан двумерный массив размером n×m, заполненный случайными числами. Определить, есть ли в данном массиве строка, в которой имеется два максимальных элемента всего массива.

46. Дан двумерный массив размером n×m, заполненный случайными числами. Определить, есть ли в данном массиве столбец, в котором равное количество положительных и отрицательных элементов.

47. Дан двумерный массив размером n×m, заполненный случайными числами. Определить, есть ли в данном массиве строка, содержащая больше положительных элементов, чем отрицательных.

48. Дан двумерный массив размером n×m. Вставить после столбцов с максимальными элементами столбец из нулей.

49. Дан двумерный массив размером n×m. Вставить между средними строками первую строку.

50. Дан двумерный массив размером n×m. Удалить все столбцы, в которых первый элемент больше последнего.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-05-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: