Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры C#.doc
Скачиваний:
16
Добавлен:
22.09.2019
Размер:
472.58 Кб
Скачать

7. Массивы в c# (одномерные и двумерные). Класс System.Random, применение его методов для создания массива случайных чисел. Класс System.Array, использование его методов и свойства Length.

В С# массивы реализованы как объекты. Тип массив определён в системном типе System. Array. Массив – это набор эл-тов данных одного типа, сохранённых в непрер-й об-сти памяти. Массив сод. список ссылок на ячейки памяти, в кот. сохранены эл-ты массива. Массив может быть объявлен с указанием любого типа данных.

Индексация с объявлением одномерного массива:

тип [ ] (обозн., что определятся одном. массив) имя_массива = new тип [размер]; т.к. массивы определяются как объекты, их создание представл. собой двухступенчатый пр-с. Сначала объявляется ссылочная переменная на массив, а затем для него выдел. память, и переменной массива присваивается ссылка (адрес) на эту область памяти.

В С# размер массива не нужно указывать при его объявлении. Этим достигается большая гибкость, размер опред. в тот момент, когда массив будет использоваться.

Создание массива: int [ ] mas = new int [15]; (читаем с хвоста, сколько памяти объекту массива). Т.к. массивы предст. собой ссылки, для созд-я объекта массива типа int обязат. Ключ. слово new. Такая строка позволяет инициализировать и заполнить его значениями по умолчанию (0, у нас).Инициализация массива выполняется с помощью ключевого слова new.

string mas_str; // образован массив.Можно инициализировать массив при объявлении сокращённым методом:

int [ ] mas = {10, 50, -40, 80}; // В таком случае new не указывается.

Типы массивов. В зависимости от числа данных измерений массивы делятся на: - одномерные; - многомерные; - ступенчатые.

Пример: class Usearray

{ static void Main() { int i,n; Console. WriteLine(“Сколько данных хотите ввести?”)

n = Int32. Parse(Console.ReadLine()); int [ ] mas = new int [n];for (i = 0; i < n; i ++)

{Console.WriteLine(“Enter mas[”+i+“]”); mas[i]= Int32.Parsе(Console.ReadLine());}

Console. WriteLine(“Создан массив:”);for (i = 0; i < n; i + +) { Console. Write(“ {0}”,mas[i]); } } }

Выход за границы массива проверяется, при этом генерируется исключение IndexOut of Range Exception.

Многомерные массивы. Массивы в С# могут быть объявлены с любым кол-вом измерений. Рассм. простейший многом. массив – двумерный или прямоугольный. При объявлении в [ ] через запятую указывается размер массива для каждого измерения. Объявим, например, матрицу 1020 целых чисел:

int [,] Matrix = new int[10,20]; // Создаётся ссылочная переменная двухмерного массива Пример: заполняем матрицу 34 числами от 1 до 12

using System; Class Dwumas{ public static void Main() { int i, j; int [,] Matr = new int [3,4];for (i = 0; i < 3; i + +) { for (j = 0; j < 4; j ++) { Matr [i,j] = (i*4) + j + 1; Console. Write(Matr [i,j] + “ ”); } Console. WriteLine(); }

Инициализация двухмерного массива при его создании.

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

int [3,4] Matr2 = { {10, 20, 30, 40}, {-10, -20, -30, -40}, {50, 60, 70, 80} };

Альтернативный способ доступа к элементам массива – цикл foreach.

Пример использования foreach для вывода элементов массива:

using System; class use mas { static void Main() {Console. WriteLine(“Сколько чисел вы хотите ввести”); int n = int32. Parse(Console. ReadLine()); int [ ] Mas = new int [n]; for (int k = 0; k < n; k + +) { Console. WriteLine(“Введите число”); Mas [k] = int32.Parse(Console. ReadLine()); }foreach(int z in Mas) Console. WriteLine(“Это число {0}”, z); } }

Массивом наз. упорядоченную совок-сть эл-тов одного типа. Каждый эл-т массива имеет индексы, определяющие порядок эл-тов. Число индексов хар-ет размерность массива. Каждый индекс измен. в некот. диапазоне [a,b]. Диапазон [a,b] наз. граничной парой, a - нижней границей, b - верхней границей индекса. При объявлении массива границы задаются выражениями. Если все границы заданы константными выражениями, то число эл-тов массива известно в момент его объявления и ему может быть выделена память еще на этапе трансляции. Такие массивы наз. статическими. Если же выражения, задающие границы, зависят от переменных, то такие массивы наз. Динамическими. Массиву выделяется непрерывная обл. памяти. Объявление одномерных массивов

Общая стр-ра объявления: [<атрибуты>] [<модификаторы>] <тип> <объявители>; Объявление одном. массива: <тип>[] <объявители>; Квадр. скобки приписаны не к имени перем., а к типу. Запись T[] следует понимать как класс одномерный массив с эл-ми типа T. Пример объявления трех массивов с отложенной инициализацией: int[] a, b, c; Инициализация явл. явной и задается константным массивом: double[] x= {5.5, 6.6, 7.7}; Эл-ты константного массива следует закл. в фигурные скобки. Создание и инициализация массива вып. в объектном стиле с вызовом конструктора массива: int[] d= new int[5];

Класс Random и его ф-ции Умение генерировать случайные числа требуется во многих приложениях. Класс Random содержит все необход. для этого средства. Класс Random имеет конструктор класса: для того, чтобы вызывать методы класса, нужно вначале создавать экземпляр класса. Класс Random явл. наследником класса Object. Рассм. только оригинальные методы класса Random со статусом public, необходимые для генерирования последоват-стей случ. чисел. Класс имеет защищенные методы. Перегруженный метод public int Next() при каждом вызове возвращает положит. целое, равном. распределенное в некот. диапазоне. Диапазон задается параметрами метода. Три реализации метода: public int Next () - метод без параметров выдает целые положит. числа во всем положительном диапазоне типа int; public int Next (int max) - выдает целые положит. числа в диапазоне [0,max]; public int Next (int min, int max) - выдает целые положит. числа в диапазоне [min,max].

Метод public double NextDouble () имеет одну реализацию. При каждом вызове этого метода выдается новое случайное число, равномерно распределенное в интервале [0,1). Метод,кот.позволяет при одном обращении получать целую серию случ. чисел. Метод описан как public void NextBytes (byte[] buffer). Т.к. параметр buffer представляет массив байтов, то, естественно, генерированные случайные числа находятся в диапазоне [0, 255].

Нельзя понять многие детали работы с массивами в C#, если не знать устройство класса Array из библиотеки FCL, потомками которого являются все классы-массивы. Рассмотрим следующие объявления://Класс Array int[] ar1 = new int[5]; double[] ar2 ={5.5, 6.6, 7.7}; int[,] ar3 = new Int32[3,4]; У всех классов, явл-ся массивами, много общего, поскольку все они явл. потомками класса System.Array. Класс System.Array наследует ряд интерфейсов: ICloneable, IList, ICollection, IEnumerable, а, следовательно, обязан реализовать все их методы и св-ва. Класс Array имеет большое число собств. методов и св-в. свойство Length на самом деле возвращает число всех элементов по всем измерениям массива. Так, в случае двумерного массива 5 на 4 свойство Length вернет 20. свойство Length при рассмотрении примера одномерного массива, возвращает суммарное число элементов массива.