Задание 2. Многомерные массивы




Лабораторная работа № 5

Работа с массивами в C#

Задание 1. Объявление и инициализация одномерных массивов.

1. Создайте новое консольное приложение ArrayTest;

2. Добавьте в проект класс Arrs, для реализации базовых функций работы с массивами. В частности, в созданном классе определите:

a. Статическое закрытое поле rnd типа Random и инициализируйте его, вызвав соответствующий конструктор;

b. Создайте открытый статический метод CreateOneDimAr, получающий в качестве параметра массив целых чисел и инициализирующий его случайными значениями

Методические указания. Для инициализации можно воспользоваться методом Next(int,int) объекта rnd. Для определения количества элементов в массиве воспользуйтесь методом GetLength());

c. Создайте открытый статический метод PrintArr1, получающий два параметра: (string – название переданного массива, int[] – массив) и выводящий значения элементов массива на консоль.

3. В теле функции main выполните следующие действия:

a. Объявите три одномерных массива A, B, C состоящих из 5-ти элементов типа int:

Методические указания. int[] A = new int[5], B = new int[5], C = new int[5];

b. Для инициализации массивов A и B вызовите метод CreateOneDimAr;

c. Массив C инициализируйте значениями суммы соответствующих элементов массивов A и B;

d. Объявите массив X с явной инициализацией: int[] X = { 5,5,6,6,7,7};

e. Объявите два массива U и V с отложенной инициализацией: int[] U, V;

f. Выделите память для массива U для хранения трёх элементов и инициализируйте его значениями от 1 до 3;

g. Запишите присваивание массиву V присваивание константного массива {1,2,3}. Как Вы думаете, почему данное присвоение недопустимо? Закомментируйте строку с недопустимым присвоением.

h. Выделите память для массива V для хранения трёх элементов и присвойте значение массива U: V = U;

i. Измените значение первого элемента массива V на 9;

j. С помощью функции PrintArr1 Выведите массивы A, B, C, X, U, V.

4. Запустите полученную программу. Прокомментируйте полученные результаты.

 

Во всех вышеприведенных примерах объявлялись статические массивы, поскольку нижняя граница равна нулю по определению, а верхняя всегда задавалась в этих примерах константой. Напомню, что в C# все массивы, независимо от того, каким выражением описывается граница, рассматриваются как динамические, и память для них распределяется в "куче" (хипе). Полагаю, что это отражение разумной точки зрения: ведь статические массивы, скорее исключение, а правилом является использование динамических массивов. В действительности реальные потребности в размере массива, скорее всего, выясняются в процессе работы в диалоге с пользователем.

Чисто синтаксически нет существенной разницы в объявлении статических и динамических массивов. Выражение, задающее границу изменения индексов, в динамическом случае содержит переменные. Единственное требование - значения переменных должны быть определены в момент объявления. Это ограничение в C# выполняется автоматически, поскольку хорошо известно, сколь требовательно C# контролирует инициализацию переменных.

 

Рассмотрим пример, в котором описана работа с динамическим массивом:

5. Запросите у пользователя размерность динамического массива:

Методические указания:

Console.WriteLine("Введите размерность массива:");

int size = int.Parse(Console.ReadLine());

6. Опишите массив D и укажите для него размерность, введенную пользователем, инициализируйте массив с помощью функции CreateOneDimAr, и выведите его значения с помощью функции PrintArr1;

 

Задание 2. Многомерные массивы

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

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

 

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

 

<тип>[,...,] <объявители>;

 

Число запятых, увеличенное на единицу, и задает размерность массива. Что касается объявителей, то все, что сказано для одномерных массивов, справедливо и для многомерных. Можно лишь отметить, что, хотя явная инициализация с использованием многомерных константных массивов возможна, но применяется редко из-за громоздкости такой структуры. Проще инициализацию реализовать программно, но иногда она все же применяется.

Пример:

int[,]matrix = {{1,2},{3,4}};

 

1. Написать функцию MultMatr умножения матриц:

a. Функция получает две матрицы, произвольного размера;

b. Функция возвращает результирующую матрицу в случае, если умножение возможно, и пустую матрицу, если невозможно;

c. Для определения размерности матрицы можно воспользоваться методом GetLength(), который возвращает номер измерения (счет измерений начинается с нуля);

2. В классе Arrs напишите функцию PrintArr2 для вывода матрицы на печать;

3. В классе Arrs напишите функцию CreateAr2 заполнения двумерного массива произвольными числами (по аналогии с одномерным массивом);

4. Создайте две матрицы размерностью 3*3. Инициализируйте их. Выполните функцию умножения и значения всех трёх матриц выведите на экран.



Поделиться:




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

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


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