5.03M
Category: programmingprogramming

Массивы

1.

Массивы

2.

1. Определение массива
Хранение
группы связанных элементов данных
является основным требованием большинства
программных приложений. Для этого существуют
два основных способа: массивы и коллекции.
Индексный
массив

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

3.

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

4.

2. Одномерный массив
тип_элемента[] имя_массива;
int[] myArray1;

5.

Инициализация одномерного массива
1) инициализация массива с использованием
ключевого слова new:
int[] m1 = new int[] {10,20,30,40,50};
2) инициализации строкового массива без
использования слова new:
string[] m2 = { «Фамилия», «Имя»,
«Отчество» };
3) используем ключевое слово new и желаемый
размер массива символов:
char[] m3 = new char[4] { ‘Я’,’з’,’ы’,’к’ };

6.

4) без указания типа после ключевого слова
new:
int[] m4 = new[] { 1, 2, 3, 5 };
5) длина массива вводится с клавиатуры:
int n = Convert.ToInt32(Console.ReadLine());
int[] m5 = new int [n];

7.

Индексация массивов начинается с нуля,
поэтому номер первого элемента массива
равен 0.
Обращение
к
элементу
массива
осуществляется через квадратные скобки
[ ].
myArray1[0]=17;

8.

3. Многомерный массив
Объявление многомерного массива
тип[,…,] имя_массива = new тип[размер1,
размер2, … размеры];
Объявление двумерного массива
тип[,] имя_массива = new тип[размер1,
размер2];
int[,] nums1;

9.

Инициализация двумерного массива
int[,] nums2 = new int[2, 3];//по умолчанию 0
int[,] nums3 = new int[2, 3] {{ 0, 1, 2 },{ 3, 4, 5 } };
int[,] nums4 = new int[,] { { 0, 1, 2 }, { 3, 4, 5 } };
int[,] nums5 = new [,]{{ 0, 1, 2 },{ 3, 4, 5 }};
int[,] nums6 = {{ 0, 1, 2 },{ 3, 4, 5 }};
int[,] nums7 = new int [n,m];

10.

Нумерация элементов начинается с 0;
Обращение к элементу массива:
mas[0,0]=10;

11.

4. Генератор случайных чисел
Объявление переменной для генерации
чисел
Random x = new Random();
или
var x = new Random()

12.

Неявно
типизированные переменные – это
переменные, для которых отсутствует определение
типа при их объявлении (например int, float).
Вместо названия типа используется ключевое слово
var.
При
объявлении
неявно
типизированной
переменной тип этой переменной определяется
компилятором на основе значения которым она
инициализируется.
Если
инициализирующее
значение
есть
целочисленным, то переменная получает тип int.
Неявно
типизированная переменная обязательно
должна быть инициализирована при ее объявлении.

13.

Генерация целых случайных чисел
C# имеет 3 перегруженных метода:
1. Возвращает значение большее нуля. Максимальное число
больше 10 миллионов:
int n = x.Next();
2. Возвращает значение имеющееся в промежутке (min,max).
При этом min значение входит в случайное число, а max не
входит:
int n = x.Next(-100, 100);
3. Возвращает целое положительное число не больше
максимального:
int n = x.Next(10);
При этом максимальное число также не входит в генерацию
случайных чисел, то есть в данном случае от 0 до 9.

14.

Генерация дробных случайных чисел
double r = Convert.ToDouble(x.Next(-100, 100)/10.0);
//генерируются числа от -10 до 9.9.
double r = Convert.ToDouble(x.Next(100)/10.0);
//генерируются числа от 0 до 9.9.

15.

5. Ввод и вывод элементов одномерного
массива

16.

17.

6. Ввод и вывод элементов двумерного
массива

18.

19.

7. Цикл foreach
Для
одномерных
массивов
оператор
foreach
обрабатывает элементы в порядке возрастания
индекса, начиная с индекса 0 и заканчивая индексом
Length - 1:
foreach (тип имя_переменной_цикла in массив)
{
оператор;
}

20.

Когда цикл начинается, первый элемент
массива
выбирается
и
присваивается
переменной цикла.
На каждом последующем шаге итерации
выбирается следующий элемент массива,
который сохраняется в переменной цикла.
Цикл завершается, когда все
массива окажутся выбранными.
элементы
Значения элементов
изменять нельзя
в
массива
цикле

21.

22.

23.

8. Массив массивов (“зубчатый массив”)
int[][] nums = new int[3][];
nums[0] = new int[2] { 1, 2 }; // выделяем
память для первого подмассива
nums[1] = new int[3] { 1, 2, 3 };// выделяем
память для второго подмассива
nums[2] = new int[5] { 1, 2, 3, 4, 5 }; //
выделяем память для третьего подмассив

24.

Две группы квадратных скобок указывают,
что это массив массивов, то есть такой
массив, который в свою очередь
содержит в себе другие массивы.
Длина массива указывается только в
первых
квадратных
скобках,
все
последующие квадратные скобки должны
быть пусты: new int[3][].
В данном случае у нас массив nums
содержит
три
массива.
Причем
размерность каждого из этих массивов
может не совпадать.

25.

26.

Перебор элементов многомерного
массива
for (int i = 0; i < numbers.Length; i++)
{
for (int j = 0; j < numbers[i].Length; j++)
{
Console.Write($"{numbers[i][j]} \t");
}
Console.WriteLine();
}

27.

28.

9. Неявно типизированные массивы
var имя_массива = new[] { значение1,
значение2, ..., значениеN }
имя_массива – непосредственно имя массива;
значение1, значение2, значениеN – набор значений,
которые получают элементы массива. На основе
типа данных этих значений определяется тип
элементов массива.

29.

// пример объявления неявно типизированных
одномерных массивов
var A = new[] { 5, 10, 23, 16, 8 }; // тип элементов массива int, количество элементов – 5
var B = new[] { true, false, false }; // тип элементов bool,
количество элементов - 3
var C = new[] { 'A', ';', '\'', '\n', '5', 'z' }; // тип элементов char,
количество – 6
var X = new[] { 2.86, 2.0, 3.5 }; // тип элементов double,
количество – 3
int d; bool b; char c; float f;
d = A[2]; // d = 23
b = B[1]; // b = false
c = C[4]; // c = '5’
f = (float)X[2]; // f = 3.5

30.

31.

10. Определение массива объектов
В большинстве случаев при определении массива
тип элемента, содержащегося
указывается явно.
в
массиве,
В
основе каждого типа в системе типов .NET в
конечном
итоге
лежит
базовый
класс
System.Object.
В
результате
получается,
что
в
случае
определения массива объектов находящиеся
внутри него элементы могут представлять собой
что угодно:

32.

имя_массива =
значение2, ..., значениеN }
object[]
имя_массива
элементов]
object[]
new[]
=new
{
значение1,
object[количество

33.

34.

11. Класс Array
Массивы реализуются в C# в виде объектов.
Ключевое слово ООП — класс, в библиотеке
System имеется статический класс Array.
Класс
Array определяет ряд свойств и
методов, которые используются при работе с
массивами.

35.

Свойство Rank возвращает размерность
массива (одномерный, двумерный и т.д.).
int[] a=new int[] { 1,2,3,4};
int n= a.Rank //1
Статический метод Clear() очищает массив,
устанавливая для всех его элементов
значение по умолчанию.
Array.Clear(a,0,a.Length);
//Значения элементов массива =0

36.

Статический
метод Copy() копирует часть
одного массива в другой массив.

37.

Статический
метод
Exists()
проверяет,
содержит ли массив определенный элемент.

38.

Статический метод Find() находит элемент,
который удовлетворяет определенному условию

39.

Статический метод FindAll() находит все элементы,
которые удовлетворяет определенному условию

40.

Статический метод IndexOf() возвращает
индекс элемента.

41.

Статический
метод Resize() изменяет размер
одномерного массива.

42.

Статический метод Reverse() располагает
элементы массива в обратном порядке.

43.

12. Свойство Length
свойство Length, содержит число элементов, из которых
может состоять массив.

44.

13. Сортировка и поиск
Статический метод BinarySearch() выполняет
бинарный поиск в отсортированном массиве.
Статический метод Sort() сортирует элементы
одномерного массива.

45.

46.

Sort – этот метод использует алгоритм реализующий
интроспективную сортировку (introsort) следующим образом:
Если размер массива меньше 16 элементов, используется
сортировка вставками.
Если число элементов превышает 2logN, где N диапазон
входного массива, используется пирамидальная сортировка.
В противном случае используется алгоритм быстрой
сортировки.
Introsort или интроспективная сортировка — алгоритм
сортировки, предложенный Дэвидом Мюссером в 1997 году. Он
использует
быструю
сортировку
и
переключается
на
пирамидальную сортировку, когда глубина рекурсии превысит
некоторый заранее установленный уровень (например, логарифм
от числа сортируемых элементов).
English     Русский Rules