Введение в программирование

Содержание

Слайд 2

Массив – ссылочный тип Максименкова О.В., 2017 Объекты ссылочных типов размещаются

Массив – ссылочный тип

Максименкова О.В., 2017

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

[managed

heap]

Стек
Значение адреса данных

Куча
Значение данных

Код
Имя переменной

Слайд 3

Массивы Максименкова О.В., 2017 Одномерный массив – набор однотипных элементов, доступ

Массивы

Максименкова О.В., 2017

Одномерный массив – набор однотипных элементов, доступ к которым

осуществляется с помощью выражения с операцией индексирования

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

[] array_ref_name;

int[] intArray;
double[] doubleArray;
char[] charArray;

☜создание экземпляра массива конкретного типа

new [];

intArray = new int[100];
doubleArray = new double[56];
charArray = new char[26];

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

Слайд 4

Одномерные массивы Максименкова О.В., 2017 имя_ссылки_на_массив [индексирующее_выражение] тип[ ] имя_ссылки Операция

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

Максименкова О.В., 2017

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

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

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

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

Объявление

ссылки на массив

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

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

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

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

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

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

Слайд 5

Описание одномерного массива Максименкова О.В., 2017 Источник: http://msdn.microsoft.com/ru-ru/library/9b9dty7d(v=vs.90).aspx // Declare a

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

Максименкова О.В., 2017

Источник:
http://msdn.microsoft.com/ru-ru/library/9b9dty7d(v=vs.90).aspx

// Declare a single-dimensional array
int[] array1 =

new int[5];
// Declare and set array element values
int[] array2 = new int[] { 1, 3, 5, 7, 9 };
// Alternative syntax
int[] array3 = { 1, 2, 3, 4, 5, 6 };

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

описание

// Invalid syntax
int[] array2 = new int[5];
array2 = { 1, 3, 5, 7, 9 };

Слайд 6

Инициализация элементов массива Максименкова О.В., 2017 double[] ar = new double[10];

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

Максименкова О.В., 2017

double[] ar = new double[10];
ar[0] = ar[1]

= ar[2] = ar[3] = ar[4] = 1.22;
ar[5] = ar[6] = ar[7] = ar[8] = ar[9] = 1.22;

double[] ar = new double[10];
for (int i = 0; i < 10; i++) {
ar[i] = i * i + 1;
Console.Write(ar[i] + " ");
}

Явная инициализация

Вычисление значений элементов по соотношению

double[] ar = new double[10];
ar[0] = 0;
for (int i = 1; i < 10; i++) {
ar[i] = ar[i - 1] + 3 * i;
Console.Write(ar[i] + " ");
}

Вычисление значений элементов по рекуррентной формуле

Слайд 7

Генерация случайных чисел Максименкова О.В., 2017 Используем объект класса System.Random Random

Генерация случайных чисел

Максименкова О.В., 2017

Используем объект класса System.Random

Random rnd = new

Random(5); // создаём объект-генератор
int X = rnd.Next(); // значение из [0;MaxInt)
Console.WriteLine(X);

Random rnd = new Random(); // создаём объект-генератор
int X = rnd.Next(); // значение из [0;MaxInt)
int Y = rnd.Next(100); // значение из [0;100)
int Z = rnd.Next(10, 20); // значение из [10;20)

Очень важно: объект-генератор достаточно создать один раз и использовать в программе.

Слайд 8

Инициализация массива случайными числами Максименкова О.В., 2017 class Program { //

Инициализация массива случайными числами

Максименкова О.В., 2017

class Program {
// одно на

весь класс статическое поле
static Random rnd = new Random();
static void Main(string[] args) {
double a = 0, b = 100;
double[] arr = new double[10];
for (int i = 0; i < 10; i++)
// масштабируем
arr[i] = a + (b - a) * rnd.NextDouble();
foreach (double el in arr)
Console.Write($"{el:f3} ");
}
}
Слайд 9

Массив – ссылочный тип Максименкова О.В., 2017 int[] A = {

Массив – ссылочный тип

Максименкова О.В., 2017

int[] A = { 1, 2,

3, 4 };
int[] B;
B = A; // присваивание ссылки
foreach (int a in A)
Console.Write(a + " ");
B[1] = 13;
Console.WriteLine();
foreach (int a in A)
Console.Write(a + " ");

int[] ar = { 1, 2, 3, 4 };
double[] ar2;
ar2 = ar;

int[] ar = new int[] { 1, 2, 3 };
Console.Write(ar);

Что выведет на экран этот код?

Слайд 10

Что будет выведено? Максименкова О.В., 2017 int[] ar; if (ar ==

Что будет выведено?

Максименкова О.В., 2017

int[] ar;
if (ar == null)
Console.Write("1");
Console.Write("2");

int[] ar =

new int[10];
if (ar == null) Console.Write("1");
else
Console.Write("2");

int[] ar = new int[10];
int[] ar2 = ar;
if (ar == ar2)
Console.Write("1");
else
Console.Write("2");

Слайд 11

Цикл foreach foreach (тип идентификатор in ссылка) { } int[ ]

Цикл 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 – индекс элемента

Максименкова О.В., 2017

Слайд 12

Пример заполнения и обработки массива Максименкова О.В., 2017 int[] ar; int

Пример заполнения и обработки массива

Максименкова О.В., 2017

int[] ar;
int n; // помним,

что размер массива должен быть положительным
do {
Console.Write("Введите размер массива: ");
} while (!int.TryParse(Console.ReadLine(), out n) || n <= 0);
ar = new int[n];
for (int i = 0; i < ar.Length; i++) {
Console.Write("ar[" + i + "] = ");
ar[i] = int.Parse(Console.ReadLine());
}
int j = 1;
while (j < ar.Length) {
Console.Write("ar[" + j + "] = " + ar[j]);
j += 2;
}
Слайд 13

Обработка массива Максименкова О.В., 2017 int[] ar = new int[] {

Обработка массива

Максименкова О.В., 2017

int[] ar = new int[] { -10, 0,

3, 2, 17, 99, -4};
int max = ar[0];
for (int i = 1; i < ar.Length; i++)
if (ar[i] > max) max = ar[i];
Console.Write(max);

int[] ar = new int[] { -10, 0, 3, 2, 17, 99, -4};
int max = ar[0];
int maxInd = 0;
for (int i = 1; i < ar.Length; i++)
if (ar[i] > max) {
max = ar[i];
maxInd = i;
}
Console.Write("ar[{0}] = {1}",maxInd,max);

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

Поиск максимального и сохранение его индекса

Слайд 14

Обработка массива Максименкова О.В., 2017 int[] ar = new int[] {

Обработка массива

Максименкова О.В., 2017

int[] ar = new int[] { -10, 0,

3, 2, 17, 99, -4};
int i = 0;
double sumInverse = 0.0;
do {
if (ar[i] == 0) continue;
sumInverse += 1.0 / ar[i];
} while (++i < ar.Length);
Console.WriteLine("{0:f2}", sumInverse);

Сумма величин обратных значениям элементов массива

int[] ar = new int[] { -10, 0, 3, 2, 17, 99, -4};
int summ = 0;
for (int i = 0; i < ar.Length; i += 2)
summ += ar[i];
Console.Write(summ);

Сумма величин, стоящих на позициях с чётными индексами

Слайд 15

Преобразование массива Сортировка Сдвиги Максименкова О.В., 2017

Преобразование массива

Сортировка
Сдвиги

Максименкова О.В., 2017

Слайд 16

Пример: Некольцевые сдвиги Максименкова О.В., 2017 Не кольцевой сдвиг элементов на

Пример: Некольцевые сдвиги

Максименкова О.В., 2017

Не кольцевой сдвиг элементов на две позиции

влево:

Не кольцевой сдвиг элементов на одну позицию вправо:

Слайд 17

Некольцевой сдвиг массива static void ArrPrintConsole (int[] arr) { foreach (int

Некольцевой сдвиг массива

static void ArrPrintConsole (int[] arr) {
foreach (int x

in arr)
Console.Write(x + " ");
}
static void Main(string[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
ArrPrintConsole(arr);
Console.WriteLine();
for (int i = 0; i < arr.Length-1;i++) {
arr[i] = arr[i + 1];
}
ArrPrintConsole(arr);
}

Максименкова О.В., 2017

Слайд 18

Пример: Кольцевые сдвиги Максименкова О.В., 2017 Кольцевой сдвиг на одну позицию

Пример: Кольцевые сдвиги

Максименкова О.В., 2017

Кольцевой сдвиг на одну позицию вправо:

Самостоятельно на

семинаре реализуйте кольцевой сдвиг на одну позицию вправо и на одну позицию влево
Слайд 19

Сортировка вставками: шаг 1 Максименкова О.В., 2017

Сортировка вставками: шаг 1

Максименкова О.В., 2017

Слайд 20

Сортировка вставками: шаг 2 Максименкова О.В., 2017

Сортировка вставками: шаг 2

Максименкова О.В., 2017

Слайд 21

Сортировка вставками: шаг 3 Максименкова О.В., 2017 И так далее…

Сортировка вставками: шаг 3

Максименкова О.В., 2017

И так далее…

Слайд 22

Бинарный поиск do Console.Write("Введите целое число: "); while (!int.TryParse(Console.ReadLine(), out numb));

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

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]);

Максименкова О.В., 2017

Слайд 23

Оглавление и его использование Максименкова О.В., 2017

Оглавление и его использование

 

Максименкова О.В., 2017

Слайд 24

Индексные массивы Максименкова О.В., 2017 Исходный массив A Массив индексов (B)

Индексные массивы

Максименкова О.В., 2017

Исходный массив A

Массив индексов (B) для хранения сортированного

представления

Как получить значение элемента в массиве А по элементу из массива B?

Слайд 25

Передача массивов в методы При передачи массива в метод, передаётся ссылка

Передача массивов в методы

При передачи массива в метод, передаётся ссылка на

массив (элементы массива не копируются)
Сама ссылка на массив передаётся по значению

Максименкова О.В., 2017

Слайд 26

Максименкова О.В., 2017 public static void Change(string[] changingArr) { for (int

Максименкова О.В., 2017

public static void Change(string[] changingArr) {
for (int i

= 0; i < changingArr.Length; i++) {
changingArr[i] = i.ToString();
}
}
public static void Main() {
string[] arr = { "Foo", "Bar", "Baz", "Quux" };
Console.WriteLine("Before calling Change:");
foreach (string str in arr) Console.Write(str + " ");
Change(arr);
Console.WriteLine("\nAfter calling Change:");
foreach (string str in arr) Console.Write(str + " ");
}

public static void Change(string[] changingArr) {
string[] newAr = { "One", "Two", "Three" };
changingArr = newAr;
}
public static void Main() {
string[] arr = { "Foo", "Bar", "Baz", "Quux" };
Console.WriteLine("Before calling Change:");
foreach (string str in arr) Console.Write(str + " ");
Change(arr);
Console.WriteLine("\nAfter calling Change:");
foreach (string str in arr) Console.Write(str + " ");
}

Изменяются значения элементов

Изменяется значение ссылки

Слайд 27

Максименкова О.В., 2017 public static void Main() { int[ ] mainAr

Максименкова О.В., 2017

public static void Main() {
int[ ] mainAr =

{ 1, 2, 3, 4 };
ArrayPrint(mainAr);
Console.WriteLine();
ArrayProceed(mainAr);
ArrayPrint(mainAr);
}

Вывод различен.
В обоих вариантах по значению передаётся ссылка

Слайд 28

Максименкова О.В., 2017 public static void Main() { int[] mainAr =

Максименкова О.В., 2017

public static void Main() {
int[] mainAr = {

1, 2, 3, 4 };
ArrayPrint(mainAr);
Console.WriteLine();
ArrayProceed(mainAr);
ArrayPrint(mainAr);
}

Вывод одинаков.
В варианте 1 ссылка передаётся по значению
В варианте 2 ссылка передаётся по ссылке

Слайд 29

Важные мелочи Индексация элементов массива начинается с нуля Если нужно вернуть

Важные мелочи

Индексация элементов массива начинается с нуля
Если нужно вернуть из метода

ссылку на массив, а он пуст – верните NULL
Контролируйте выход индекса за границы массива

Максименкова О.В., 2017