17
Высшая школа экономики, Москва, 2013 www.hse.ru Язык программирования C# и платформа .NET. Массивы Многомерные массивы Максименкова Ольга Вениаминовна Старший преподаватель Кафедра управления разработкой программного обеспечения

3. Массивы в C#

Embed Size (px)

Citation preview

Page 1: 3. Массивы в C#

Высшая школа экономики, Москва, 2013

www.hse.ru

Язык программирования C# и платформа

.NET.

Массивы

Многомерные массивы

Максименкова Ольга ВениаминовнаСтарший преподаватель

Кафедра управления разработкой программного обеспечения

Page 2: 3. Массивы в C#

МАССИВЫ

• Одномерные массивы

• Обработка одномерных массивов

ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.

Page 3: 3. Массивы в C#

Ссылочный тип данных

ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.

имя_переменной значение_адреса_данных значение_данных

Объекты ссылочных типов размещаются в «куче»

[manager heap]

Если ссылка не связана с данными, то ее значение - null

Page 4: 3. Массивы в C#

Одномерные массивы

имя_ссылки_на_массив[индексирующее_выражение]

тип[ ] имя_ссылки

Операция индексирования

Объявление ссылки на массив

Объявление ссылки на

массив

Инициализация элементов

массива

Работа с элементами

массива

ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.

Создание экземпляра

массива

Создание экземпляра объекта конкретного типа

new тип[размер_массива]

Допустимо объединение

Page 5: 3. Массивы в C#

Одномерные массивы

Объявление ссылки

Описание с инициализацией

Описание и последующая инициализация

int[ ] intArr; // ссылка на целочисленный массив

double[ ] arr; // ссылка на вещественный массив

int[ ] intArr = { 1, 3, -8, 19, 0, 11 };

double[ ] arr = { 3.14, 0.0, 0.5 };

// ссылка

int[ ] intArr;

// выделение памяти

intArr = new int[5];

intArr[0] = -1;

intArr[1] = 12;

intArr[2] = 34;

intArr[3] = -23;

intArr[4] = 78;

int[ ] intArr; // ссылка

intArr = new int[5]; // выделение памяти

for (int i = 0; i < 5; i++) {

intArr[i] = i * i - 1;

Console.Write(intArr[i] + " ");

}

ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.

Page 6: 3. Массивы в C#

Цикл foreach

foreach (тип идентификатор in ссылка)

{

<тело_цикла>

}

int[ ] arInt = { 22, 5, 12, 63, -6, -52, 77, 41, 35, 23 };

foreach (int memb in arInt)

Console.Write(memb + " ");

for (int i = 0; i < arInt.Length; i++)

Console.Write(arInt[i] + " ");

Сравните:

По memb доступно

только значение

элемента

arInt[i] – доступ к значению

i – индекс элемента

Page 7: 3. Массивы в C#

Случайные числа

7

Предыдущее число

Датчик

Новое случайное

число

Random ran = new Random(start);

Random ran = new Random();

Ссылка на

объект-

датчик

Объект-

датчик

случайных

чисел

В 1-м случае, когда в ran заносится стартовое число start. Если его не

изменять, то при повторных запусках программы датчик всегда будет

выдавать одну и туже последовательность случайных чисел.

Во 2-м случае в датчик ran заносится число, зависящее от текущего значения

системного времени - при повторных запусках программы датчик будет

выдавать разные последовательности случайных чисел.

http://msdn.microsoft.com/ru-ru/library/system.random(v=VS.95)

ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В.

Page 8: 3. Массивы в C#

Методы получения случайного числа

int Next () 0≤X<int.MaxValue

int Next (int B) 0≤X<B

int Next(int A, int B) A≤X<B

double NextDouble () 0≤X<1

Получение случайного вещественного числа X из

нужного диапазона A≤X<B:

X = A + (B-A) * ran.NextDouble()

или

X = ran.Next((int)A, (int)B) + ran.NextDouble()

ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В.

Page 9: 3. Массивы в C#

/* Определить и инициализировать целочисленный массив из 10-ти

элементов. Ввести целое число и заменить им значение

максимального элемента. Окончание работы - ввод нулевого

числа.*/

using System;

class Program {

static void Main() {

int[ ] arInt = { 22, 5, 12, 63, -6, -52, 77, 41, 35, 23 };

int numb;

Console.Title = "Инициализация массива";

do { // цикл для повторения ввода числа

Console.WriteLine();

Console.WriteLine("Для выхода нажмите клавишу ESC");

} while (Console.ReadKey(true).Key != ConsoleKey.Escape);

}

}

ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В.

Замена максимального элемента

Page 10: 3. Массивы в C#

do Console.Write("Введите целое число: ");

while (!int.TryParse(Console.ReadLine(), out numb));

int index = 0; // индекс максимального элемента массива

for (int i = 0; i < arInt.Length; i++) // поиск

if (arInt[i] > arInt[index]) index = i;

Console.WriteLine("Заменяем arInt[{0}]={1} на {2} ",

index, arInt[index], numb);

arInt[index] = numb; // замена значения

for (int i = 0; i < arInt.Length; i++)

if ((i + 1) % 10 != 0)

Console.Write(arInt[i] + "\t");

ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В.

Замена максимального элемента

Page 11: 3. Массивы в C#

Описание одномерного массива

double[ ] dbArr; // описание ссылки на массив

dbArr = new double[10]; // определение массива из 10-ти элементов

int[ ] intArr = new int[15];

// элементы массива могут иметь ссылочный тип

string[ ] strArr = new string[3];

Решите самостоятельно:

1. Пользователем с клавиатуры вводится целое число N > 0.

Сформировать и вывести на экран целочисленный массив из N

элементов, элементами которого являются нечетные числа от 1.

2. Пользователем с клавиатуры вводится целое число N > 1.

Сформировать целочисленный массив, содержащий N первых

элементов последовательности Фибоначчи: A[0] = 1, A[1] = 1, A[2] = A[0]

+ A[1], … A[K] = A[K-1] + A[K-2], … Элементы массива вывести на экран

в обратном порядке, методы класса Array не использовать.

// описание с инициализацией

int[ ] intArr = {1, 0, 1};

ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.

Page 12: 3. Массивы в C#

Методы класса Array

/* Клонирование массива. */

using System;

class Program {

static void Main() {

char[ ] hi = { '1', 'A', '2', 'B', '3', 'C', '4', 'D', '5', 'E‘ };

char[ ] hiNew = (char[ ])hi.Clone(); // копирование

Array.Sort(hiNew); // сортировка

Console.Write("Сортировка: ");

foreach (char ch in hiNew) // вывод значений массива

Console.Write("" + ch);

Console.WriteLine();

Array.Reverse(hiNew); // реверсирование

Console.Write("Реверсирование: ");

foreach (char ch in hiNew)

Console.Write("" + ch);

Console.WriteLine();

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

foreach (char ch in hi)

Console.Write("" + ch);

Console.WriteLine();

}

} ФПК учителей НИУ ВШЭ 11.2012, Максименкова О.В.

Page 13: 3. Массивы в C#

/* Определить и инициализировать целочисленный массив из 10-ти

элементов. Упорядочить его элементы по возрастанию значений, методом

Sort(). Ввести целое число и методом двоичного поиска найти номер

элемента с этим значением в упорядоченном массиве.*/

using System;

class Program {

static void Main() {

int[ ] arInt = { 22, 5, 12, 63, -6, -52, 77, 41, 35, 23 };

int numb;

Console.Title = "Двоичный поиск в массиве";

Array.Sort(arInt); // Сортировка (упорядочение массива)

Console.WriteLine("Упорядоченный массив: ");

foreach (int memb in arInt) // Перебор значений элементов

Console.Write(memb + " ");

Console.WriteLine();

do {// цикл для повторения ввода числа

Console.WriteLine("Для выхода нажмите клавишу ESC");

} while (Console.ReadKey(true).Key != ConsoleKey.Escape);

}

}

ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В.

Бинарный поиск

Page 14: 3. Массивы в C#

do Console.Write("Введите целое число: ");

while (!int.TryParse(Console.ReadLine(), out numb));

int index = -1; // индекс найденного элемента массива

// Алгоритм двоичного поиска в упорядоченном массиве:

for (int i = 0, j = arInt.Length - 1, k = j / 2; i <= j; k = (i + j) / 2) // поиск

if (arInt[k] == numb) { index = k; break; }

else

if (numb > arInt[k]) i = k + 1;

else j = k - 1;

if (index == -1)

Console.WriteLine("В массиве нет такого элемента!");

else

Console.WriteLine("Результат поиска: arInt[{0}]={1}",

index, arInt[index]);

ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В.

Бинарный поиск

Page 15: 3. Массивы в C#

/* Определить и инициализировать целочисленный массив из 10-ти

элементов. Упорядочить его элементы по возрастанию значений,

методом Sort(). Ввести целое число и с помощью метода BinarySearch()

найти номер

элемента с этим значением в упорядоченном массиве. */

using System;

class Program {

static void Main() {

int[] arInt = { 22, 5, 12, 63, -6, -52, 77, 41, 35, 23 };

int numb;

Console.Title = "Сортировка и поиск методами класса Array";

Array.Sort(arInt); // Сортировка

Console.WriteLine("Упорядоченный массив: ");

foreach (int memb in arInt)

Console.Write(memb + " ");

Console.WriteLine();

do { // цикл для повторения ввода числа

Console.WriteLine("Для выхода нажмите клавишу ESC");

} while (Console.ReadKey(true).Key != ConsoleKey.Escape);

}

} ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В.

Бинарный поиск(2)

Page 16: 3. Массивы в C#

do Console.Write("Введите целое число: ");

while (!int.TryParse(Console.ReadLine(), out numb));

// индекс искомого элемента массива:

int index = Array.BinarySearch(arInt, numb);

if (index < 0)

Console.WriteLine("В массиве нет такого элемента!");

else

Console.WriteLine("Результат поиска: arInt[{0}]={1}",

index, arInt[index]);

ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В.

Бинарный поиск(2)

Page 17: 3. Массивы в C#

101000, Россия, Москва, Мясницкая ул., д. 20

Тел.: (495) 621-7983, факс: (495) 628-7931

www.hse.ru