Слайд 1Массивы
Массивом называют упорядоченную совокупность элементов одного типа.
Каждый элемент массива
имеет один или несколько индексов, определяющих порядок элементов.
Количество индексов
характеризует размерность массива. Каждый индекс изменяется в диапазоне от нуля до некоторого числа N>0. Индексы задаются только целочисленным типом.
Слайд 2Массивы относятся к ссылочным типам, а следовательно, память им отводится
в "куче".
В языке C# имеются одномерные массивы и многомерные
массивы.
Кроме них, в языке C# также имеется новый тип массивов – ступенчатый.
Слайд 3Одномерные массивы
Массивы соответствуют типу System.Array
Объявление массива
[ ] ;
тип элемента массива
[] признак того,
что объявляется массив
<имя_массива> идентификатор массива
Пример
int k; переменная k, представляющая целое число,
значение не задано, переменная создаётся в стеке.
int[] m; массив m, состоящий из целых чисел,
число и значения элементов не заданы,
в стеке создаётся пустая ссылка.
double f; переменная f, представляющая вещественное число,
значение не задано, переменная создаётся в стеке.
double[] x; массив X, состоящий из вещественных чисел,
число и значения элементов не заданы,
в стеке создаётся пустая ссылка.
Слайд 4
Создание массива имя_массива = new type[n];
имя_массива = new type[n] {x1, x2,
…, xn};
Если уже выполнено
int[] m;
double[] x;
то можно создать массив
в куче:
m=new int[5]; создаётся в куче набор из 5 пустых элементов целого
типа m[0], m[1], m[2], m[3], m[4]
x=new double[10]; создаётся в куче набор из 10 пустых элементов.
веществ. типа x[0], x[1], x[2], ..., x[9]
m=new int[5] {1, 2, 0, 5, -7};
создаётся в куче набор из 5 элементов целого типа
равных указанным числам m[0]=1, ..., m[4]=-7
Слайд 5Массив - Array
int [ ] a = new int [5];
// можно одним оператором
a[ ] =0; // нельзя использовать массив
без индекса
a[3] = 9;
a[0] = 1
1
3
7
9
11
10256
10260
10264
10268
10272
0
1
2
3
4
Слайд 6Инициализация массивов
По умолчанию записывается нуль или null.
Для работы с массивом
необходимо заполнить его значения:
int[] a = new int [5] {1,2,3,4,5};
int[]
b = {5,7,9};
char[] s = new char [7] {'s','t','u','d','e','n','t'};
char[] s = {'s','t','u','d','e','n','t'};
Слайд 7Пример разных способов объявления массивов
//объявляется одномерный массив A
int[] A =
new int[5] {1,2,3,4,5};
//объявление массива x с явной инициализацией
int[] x ={5,5,6,6,7,7};
//объявление
массивов с отложенной инициализацией
int[] u,v;
u = new int[3];
Слайд 8Пример работы с массивами
int[] u,v;
u = new int[3];
for (int i=0;
i
присваивания v = u является правильным ссылочным присваиванием: хотя u и v имеют разное число элементов, но они являются объектами одного класса.
Теперь обе ссылки u и v будут теперь указывать на один и тот же массив, так что изменение элемента одного массива немедленно отразится на другом массиве.
На массив v теперь никто ссылаться не будет, и он будет считаться мусором, который автоматически удаляется с помощью сборщика мусора.
Слайд 9Методы и свойства массивов
Свойства массива
Rank – количество размерностей
Length –
количество элементов массива (32 битное значение)
Статические методы класса System.Array
BinarySearch() –
индекс заданного элемента в сортированном массиве
IndexOf() – индекс заданного элемента в массиве
Clear() – обнуление группы элементов в массиве
Clone( ) – неполное копирование (если элементы массива ссылки, то
копируются ссылки)
Copy() – копирует все (или часть) элементов одного массива в другой
Resize() – изменение длины массива
Reverse() – изменение порядка всех (или части) элементов на обратный
Sort() – сортировка элементов массива по возрастанию
Методы массива
CopyTo( ) – копирует часть элементов одного массива в другой
GetLength (n) – количество элементов в размерности n
Слайд 10Пример
int[] m = new int [5] { 1, 2,
3, 4, 5 };
Слайд 11Использование цикла foreach с массивами
Традиционный способ обработки массивов:
Найти сумму элементов
массива
int[] ar = { 1, 2, 3, 4, 5 };
int
s=0;
for (int i = 0; i
Слайд 12Оператор foreach
foreach( in ) оператор
переменной должен соответствовать
типу элементов массива.
на каждом шаге переменная цикла получает значение
очередного элемента в соответствии с порядком, установленным на элементах массива.
с этим текущим элементом и выполняется тело цикла - выполняется столько раз, сколько элементов находится в массиве.
цикл заканчивается, когда полностью перебраны все элементы массива.
Слайд 13Пример использования foreach
Найти сумму элементов массива
int[] arr = new int[5]
{1,2,3,4,5}
int s =0;
foreach(int c in arr)
{
s += c;
}
Слайд 14Примеры работы с одномерными массивами
Выполнить циклический сдвиг элементов влево на
один
int[] m = new int[5] { 1, 2, 3, 4,
5 };
int x = m[0];
for (int i = 0; i < m.Length-1; i++)
m[i]=m[i+1];
m[m.Length - 1] = x;
Слайд 15Выполнить сортировку элементов массива.
(простейший алгоритм)
Слайд 16Заменить каждый элемент массива суммой данного и предшествующих элементов
1 2
3 4 5 -> 1 3 6 10 15
int[] m
= new int[5] { 1, 2, 3, 4, 5 };
for (int i = 0; i < m.Length; i++) {
int s=0;
for (int j = 0; j <= i; j++) s+=m[j];
m[i]=s;
}
1 2 3 4 5 -> 1 3 7 15 31
for (int i = m.Length-1; i >= 0; i--)
{
int s=0;
for (int j = 0; j <= i; j++) s+=m[j];
m[i]=s;
}
1 2 3 4 5 -> 1 3 6 10 15
for (int i = 1; i < m.Length; i++)
m[i] += m[i-1];
1 2 3 4 5 -> 1 3 6 10 15
Слайд 17Многомерные массивы.
Двухмерные массивы (таблицы)
Многомерные массивы
характеризуются двумя или более измерениями, а доступ к каждому элементу
обеспечивается двумя или более индексами.
Простейшим многомерным массивом является двумерный массив.
Двумерные массивы создаются с помощью инструкций следующего типа:
тип [,] имя_массива = new тип [размер1,размер2];
Слайд 18Пример
int [,] a = new int [3,4];
a [1,2] = 4;
int
[,] a = {{1,0,1,0}, {2,3,4,5}, {0,3,0,3}};
1
1
2
4
0
0
0
0
3
3
3
5
3
2
1
0
0
1
2
1
0
1
0
2
3
4
5
0
3
3
0
10256
Слайд 19Пример создания двумерного массива
Пример объявления и инициализации двумерного массива:
int [,]
ms = new int [2,3] {{1,2,3},{4,5,6}};
Доступ к элементам массива :
int k = ms[1,2]; // получим значение 6
Пример: найти сумму всех элементов двухмерного массива:
int s = 0;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
s += ms[i, j];
В результате выполнения этого кода s получит значение 21 – сумму всех элементов массива ms.
Слайд 20Выполнить умножение матрицы размером 3 х 3 на столбец из
трёх элементов
Слайд 21
Выполнить умножение матрицы размером 3 х 3 на столбец из
трёх элементов
Слайд 22Многомерные массивы - трехмерные
float [,,] m = new float
[3,4,3];
m [i,j,k] = 3;
0
1
2
0
1
2
3
0
1
2
i
j
k
Слайд 23Ступенчатые массивы
Массив массивов – количество элементов по каждому измерению непостоянно.
Например:
int[][]
d = new int[3][];
Для создания самих строк массива нужно создать
объекты соответствующих типов:
d[0] = new int[2] { 1, 2 };
d[1] = new int[6] { 3, 4, 5, 6 };
d[2] = new int[3] { 7, 8, 9 };
Схема данного ступенчатого массива: