С#. Тема 2. Структурированные типы данных. Одномерные массивы

Содержание

Слайд 2

ТЕМА 2. Структурированные типы данных Задание 4. «Одномерные массивы»: Массивы в

ТЕМА 2. Структурированные типы данных

Задание 4. «Одномерные массивы»:
Массивы в языке C#;
Описание

массива;
Инициализация массива;
Некоторые методы класса Array (поиск, сортировка, перестановка в обратном порядке).
Слайд 3

Массивы в языке C# Массивом называют упорядоченную совокупность элементов одного типа.

Массивы в языке C#

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

элемент массива имеет индексы, которые определяют его расположение.
Число индексов характеризует размерность массива (одномерный, двумерный).
Каждый индекс изменяется в некотором диапазоне [0,n].
В языке C#, как и во многих других языках, индексы задаются целочисленным типом. 
Слайд 4

Массивы в языке C# Массивы в языке C# относятся к ссылочным

Массивы в языке C#

Массивы в языке C# относятся к ссылочным типам,

то есть являются динамическими. Поэтому память им отводится во время выполнения программы, в "куче".
При описании массива, сам массив не формируется, а создается только ссылка на него, имеющая неопределенное значение Null. Поэтому пока элементы массива не будут проинициализированы, использовать его в вычислениях нельзя. 
Слайд 5

Описание одномерного массива, без инициализации При описании массива не указывается размер

Описание одномерного массива, без инициализации

При описании массива не указывается размер (количество

элементов):
int [] Arr1;
Person [] Arr2;
Массив Arr1 будет содержать целые числа (то есть значения), а массив Arr2 – объекты класса Person (то есть ссылки на объекты).
Квадратные скобки в C# указываются после типа, перед именем массива.
Слайд 6

Описание одномерного массива, с инициализацией Существует два варианта инициализации. В первом

Описание одномерного массива, с инициализацией

Существует два варианта инициализации.
В первом случае

инициализация является явной и задается константным массивом. Например: double[] x= {5.5, 6.6, 7.7};
Элементы имеют индексы: 0, 1, 2.
Слайд 7

Описание одномерного массива, с инициализацией Во втором случае создание и инициализация

Описание одномерного массива, с инициализацией

Во втором случае создание и инициализация массива

выполняется в объектном стиле с вызовом конструктора массива new. И это наиболее распространенная практика объявления массивов. Пример: int[] d= new int[5];
Здесь 5 – количество элементов массива, а их индексы 0, 1, 2, 3, 4.
Слайд 8

Описание одномерного массива, с инициализацией Во втором случае в динамической памяти

Описание одномерного массива, с инициализацией

Во втором случае в динамической памяти создается

сам массив, элементы которого инициализируются константами соответствующего типа (ноль для арифметики, пустая строка для строковых массивов), и ссылка связывается с этим массивом. 
Если количество элементов массива заранее неизвестно, то сначала вводится количество элементов, а потом инициализируется массив.
Слайд 9

Примеры описаний массива с инициализацией Массив создается с помощью операции new:

Примеры описаний массива с инициализацией

Массив создается с помощью операции new:
// все

4 элемента равны 0
int[] b = new int[4];
// если указаны значения, new можно не писать
int[] c = { 61, 2, 5, -9 };
// размерность вычисляется
int[] d = new int[] { 61, 2, 5, -9 };
// избыточное описание
int[] e = new int[4] { 61, 2, 5, -9 };
Элементы массива нумеруются с нуля.
Слайд 10

Цикл foreach Цикл foreach – универсальный перечислитель для коллекций. Синтаксис: foreach(

Цикл foreach

Цикл foreach – универсальный перечислитель для коллекций. Синтаксис:
foreach(<переменная> in <коллекция>)
Тут

элемент <переменная> задает тип и имя переменной, которая при функционировании цикла foreach будет иметь значения элементов из коллекции.
Цикл имеет следующую семантику «Для каждого элемента из коллекции делать».
Слайд 11

Цикл foreach Так как массив можно определить как коллекцию, то этот

Цикл foreach

Так как массив можно определить как коллекцию, то этот цикл

может использоваться для перебора элементов массива. Значение элементов массива в этом цикле изменить нельзя!
Пример:
int[] a = new int[] { 61, 2, 55, -9 };
foreach (int i in a) Console.WriteLine(i);
Результат работы: 61, 2, 55, -9
То есть выводятся не индексы элементов, а соответствующие им значения.
Слайд 12

Пример 1 Ввести с клавиатуры количество элементов массива и сами элементы.

Пример 1

Ввести с клавиатуры количество элементов массива и сами элементы. Найти:
сумму

отрицательных элементов;
количество отрицательных элементов;
максимальный элемент.
Слайд 13

Пример 1 // ввод количества элементов int n = Convert.ToInt32(Console.ReadLine()); //описание

Пример 1

// ввод количества элементов
int n = Convert.ToInt32(Console.ReadLine());
//описание массива с инициализацией

нулями
int[] a = new int[n] ;
// ввод элементов массива в столбик
for (int i = 0; i < n; ++i)
a[i]=Convert.ToInt32(Console.ReadLine());
Слайд 14

Пример 1 long sum = 0; // cумма отрицательных int num

Пример 1

long sum = 0; // cумма отрицательных
int num = 0;

// количество отрицательных
// просмотр массива и подсчет
for (int i = 0; i < n; ++i)
if (a[i] < 0)
{
sum = sum+a[i]; num=num+1;
}
// вывод результата
Console.WriteLine("Сумма отр = " + sum);
Console.WriteLine("Кол-во отр = " + num);
Слайд 15

Пример 1 int max = a[0]; // начальное значение макс //поиск

Пример 1

int max = a[0]; // начальное значение макс
//поиск максимального
foreach (int

i in a) if (i > max) max = i;
Console.WriteLine("Максимальный элемент = {0}" , max);
// запоминается не номер, а элемент с этим //номером
//вывод максимального
Console.WriteLine("Максимальный элемент="+max);
Console.ReadKey();
Слайд 16

НЕКОТОРЫЕ МЕТОДЫ КЛАССА Array

НЕКОТОРЫЕ МЕТОДЫ КЛАССА Array

Слайд 17

Методы IndexOf, LastIndexOf класса Array IndexOf, LastIndexOf - определяют индексы первого

Методы IndexOf, LastIndexOf класса Array

IndexOf, LastIndexOf - определяют индексы первого и

последнего вхождения образца в массив, возвращая -1, если такового вхождения не обнаружено.
Пример.
//в массиве а находим индекс первой 2
// и присваиваем его переменной first
int first = Array.IndexOf(a, 2);
//в массиве а находим индекс последней 2
// и присваиваем его переменной last
int last = Array.LastIndexOf(a, 2);
Слайд 18

Пример 2 Ввести с клавиатуры количество элементов массива и сами элементы.

Пример 2

Ввести с клавиатуры количество элементов массива и сами элементы. Найти:
Индекс

первой 2;
Индекс последней 2;
Выдать сообщение, если 2 нет.
Слайд 19

Пример 2 // ввод количества элементов int n = Convert.ToInt32(Console.ReadLine()); //описание

Пример 2

// ввод количества элементов
int n = Convert.ToInt32(Console.ReadLine());
//описание массива с инициализацией

нулями
int[] a = new int[n] ;
// ввод элементов массива в столбик
for (int i = 0; i < n; ++i)
a[i]=Convert.ToInt32(Console.ReadLine());
Слайд 20

Пример 2 int first = Array.IndexOf(a, 2); int last = Array.LastIndexOf(a,

Пример 2

int first = Array.IndexOf(a, 2);
int last = Array.LastIndexOf(a, 2);
if (first

== -1)
Console.WriteLine("Нет вхождений 2 в массив");
else if (first == last)
Console.WriteLine("Одно вхождение 2 в массив имеет индекс {0}", first);
else
{
Console.WriteLine
("Первое вхождение 2 в массив имеет индекс {0}", first);
Console.WriteLine
("Последнее вхождение 2 в массив имеет индекс {0}", last);
}
Слайд 21

Метод Reverse класса Array Reverse - выполняет обращение всего массива, переставляя

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

Reverse - выполняет обращение всего массива, переставляя элементы

в обратном порядке
Пример.
//в массиве а числа 4 5 6 7
// применяем к этому массиву метод Reverse
Array.Reverse(a);
//в массиве а будут числа 7 6 5 4
Слайд 22

Метод Reverse класса Array Reverse - выполняет обращение части массива, переставляя

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

Reverse - выполняет обращение части массива, переставляя элементы

этой части в обратном порядке
Пример.
//в массиве а числа 5 9 4 2 3 0
// применяем к этому массиву метод Reverse
Array.Reverse(a,2,3);
//в массиве а будут числа 5 9 3 2 4 0
Слайд 23

Метод Sort класса Array Sort - выполняет сортировку всего массива по

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

Sort - выполняет сортировку всего массива по возрастанию
Пример

1.
//в массиве а числа 3 1 6 2
// применяем к этому массиву метод Sort Array.Sort(a);
//в массиве а будут числа 1 2 3 6
Слайд 24

Метод Sort класса Array Sort - выполняет сортировку части массива по

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

Sort - выполняет сортировку части массива по возрастанию
Пример

1.
//в массиве а числа 3 1 6 2 7 4
// отсортируем 3 элемента, начиная со второго
Array.Sort(a,2,3);
//в массиве а будут числа 3 1 2 6 7 4
Слайд 25

Задания (1 вариант) Получить случайным образом целочисленный массив и ввести с

Задания (1 вариант)

Получить случайным образом целочисленный массив и ввести с клавиатуры

целое число. Найти:
Индекс первого вхождения этого числа во введенный массив;
Индекс последнего вхождения этого числа во введенный массив;
Если такого числа нет в массиве, то вывести сообщение.
Ввести с клавиатуры массив действительных чисел и ввести два целых числа: x и y. Переставить в обратном порядке все элементы массива между элементами с индексами x и y.
Ввести с клавиатуры целочисленный массив и отсортировать его по возрастанию и убыванию.