Одномерные Массивы. Тема 5

Содержание

Слайд 2

Определение массива Массив – это упорядоченная совокупность элементов одного типа. Элементы

Определение массива

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

одно и то же имя, а различаются порядковым номером (индексом).

10

0

0

0

0

1

2

. . .

9

int[] mas=new int[10]; //выделяем память под массив
mas[0]=10;// присваиваем значение элементу массива

Слайд 3

Особенности массивов в С# Массив относится к ссылочным типам данных, то

Особенности массивов в С#

Массив относится к ссылочным типам данных, то есть

располагается в динамической области памяти.
Элементами массива могут быть величины как значимых, так и ссылочных типов (в том числе массивы). Массив значимых типов хранит значения, массив ссылочных типов — ссылки на элементы.
Всем элементам массива при создании массива присваиваются значения по умолчанию: нули для значимых типов и null — для ссылочных.
Количество элементов задается при выделении памяти и не может быть изменено впоследствии.
При работе с массивом автоматически выполняется контроль выхода за его границы.
При создании массива, состоящего из элементов ссылочного типа, память выделяется только под ссылки на элементы, а сами элементы необходимо разместить явным образом.
Слайд 4

Динамическая память Динамическая память – это память, выделяемая программе для ее

Динамическая память

Динамическая память – это память, выделяемая программе для ее работы

за вычетом сегмента данных, стека, в котором размещаются локальные переменные подпрограмм и собственно тела программы.
Для создания динамических переменных используют операцию new:
int [] Arr=new int[10];
Слайд 5

Динамическая память int [ ] а = new int[10]; int [ ] b = а; b

Динамическая память

int [ ] а = new int[10];
int [ ] b

= а;

b

Слайд 6

Варианты описания массива: тип[] имя; тип[] имя = new тип [

Варианты описания массива:

тип[] имя;
тип[] имя = new тип [ размерность ];
тип[]

имя = { список_инициализаторов };
тип[] имя = new тип [] { список_инициализаторов };
тип[] имя = new тип [ размерность ] { список_инициализаторов };
Слайд 7

Примеры описания массивов i n t [ ] а; i n

Примеры описания массивов

i n t [ ] а;
i n t

[ ] b= new int[4];
i n t [ ] с = { 61,2, 5, -9 } ;
i n t [ ] d = new int [ ] { 61, 2, 5, -9};
i n t [ ] e = new int [4] { 61, 2, 5, -9};
Слайд 8

Оператор foreach foreach ( тип имя in выражение ) тело цикла

Оператор foreach

foreach ( тип имя in выражение ) тело цикла
Пример:

Вывод массива на экран с помощью оператора foreach выглядит следующим образом:
int [ ] а = {24, 50, 18, 3, 16, -7, 9, -1 } ;
foreach ( int х in а ) Console.WriteLine( х );
Слайд 9

Обработка одномерных массивов Перебор элементов массива характеризуются : направлением перебора; количеством

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

Перебор элементов массива характеризуются :
направлением перебора;
количеством одновременно обрабатываемых элементов;
характером

изменения индексов.
По направлению перебора массивы обрабатывают:
слева направо;
справа налево;
от обоих концов к середине.
Индексы могут меняться
линейно (с постоянным шагом);
нелинейно (с переменным шагом).
Слайд 10

Перебор элементов массива по одному элементу for(int i=0;i for(int i=size-1;i>=0;i--) for(int i=0;i for(int i=size-1;i>=0;i-=step)

Перебор элементов массива по одному элементу

for(int i=0;i
for(int i=size-1;i>=0;i--) <обработка

a[i]>
for(int i=0;i
for(int i=size-1;i>=0;i-=step) <обработка a[i]>
Слайд 11

Перебор элементов массива по два элемента int l=0,r=n-1; while (l {

Перебор элементов массива по два элемента

int l=0,r=n-1; while (l{ <обработка a[l] и a[r]>; l++;

r--;
}
for(i=0;i
i=0; while(i i=i+2;}
Слайд 12

Формирование массива с помощью датчика случайных чисел Создать переменную типа Random:

Формирование массива с помощью датчика случайных чисел

Создать переменную типа Random:
Random

rand=new Random(); /* Чтобы сгенерировать последовательность псевдослучайных чисел, используется класс Random*/
2. Сформировать число с помощью одного из следующих способов:
mas_int[i] = rand.Next();/* целое число из диапазона 0-int32.MaxVaiue-1, включительно*/
mas_int[i] = rand.Next(left, right); /* целое число из диапазона от left до right -1 включительно */
mas_int[i] = rand.Next(right); /* целое число из диапазона от 0 до right -1 включительно */
mas_double[i] = rand.NextDouble();/*число (представленное в форме с плавающей точкой), которое будет больше или равно числу 0,0 и меньше 1,0 */
Слайд 13

Пример Console.WriteLine("Введите количество элементов в массиве"); int size = Convert.ToInt32(Console.ReadLine()); if

Пример

Console.WriteLine("Введите количество элементов в массиве");
int size = Convert.ToInt32(Console.ReadLine());
if (size <=

0)
{
Console.WriteLine ("Не правильно задан размер массива");
return;
}
 Random rnd=new Random();
int[] arr = new int[size];
for(int i=0;i {
arr[i] = rnd.Next(1, 100);
Console.Write(arr[i]+ " ");
}
Console.WriteLine();
Слайд 14

Задачи Задача. Найти сумму элементов массива с четными индексами.

Задачи

Задача. Найти сумму элементов массива с четными индексами.

Слайд 15

Решение задачи (1 способ) Массив перебирается с шагом 2 и все

Решение задачи (1 способ)

Массив перебирается с шагом 2 и все элементы

суммируются.
int summa = 0;
int tek = 1;
for (; tek < size; tek += 2) summa += arr[tek];
Console.WriteLine("Сумма элементов массива с четными номерами=" + summa);
Слайд 16

Решение задачи (2 способ) Массив перебирается с шагом 1 и суммируются

Решение задачи (2 способ)

Массив перебирается с шагом 1 и суммируются только

элементы, имеющие четные индексы. Для проверки на четность используется операция получения остатка от деления на 2.
int summa = 0;
int tek = 0;
for (; tek < size; tek ++)
if(tek%2!=0)
summa += arr[tek];
Console.WriteLine("Сумма элементов массива с четными номерами=" + summa);
Слайд 17

Классы задач по обработке массивов К задачам 1 класса относятся задачи,

Классы задач по обработке массивов

К задачам 1 класса относятся задачи,

в которых выполняется однотипная обработка всех или указанных элементов массива.
К задачам 2 класса относятся задачи, в которых изменяется порядок следования элементов массива.
К задачам 3 класса относятся задачи, в которых выполняется обработка нескольких массивов или подмассивов одного массива. Массивы могут обрабатываться по одной схеме – синхронная обработка или по разным схемам – асинхронная обработка массивов.
К задачам 4 класса относятся задачи, в которых требуется отыскать первый элемент массива, совпадающий с заданным значением – поисковые задачи в массиве.
Слайд 18

Задачи 1 класса Решение таких задач сводится к установлению того, как

Задачи 1 класса

Решение таких задач сводится к установлению того, как обрабатывается

каждый элемент массива или указанные элементы, а затем подбирается подходящая схема перебора, в которую подставляются операторы обработки.
Примеры задач 1 класса:
Дан массив целых чисел. Найти количество четных элементов массива.
Дан массив целых чисел. Найти среднее арифметическое элементов массива.
Дан массив целых чисел. Найти максимальный (минимальный) элемент массива.
Дан массив целых чисел. Найти номер максимального (минимального) элемента массива.
Слайд 19

Задачи 2 класса Для изменения порядка следования используют: Обмен элементов массива.

Задачи 2 класса

Для изменения порядка следования используют:
Обмен элементов массива.
Сдвиг одного элемента

на место другого элемента.
Обмен элементов внутри массива выполняется с использованием вспомогательной переменной:
//обмен a[i]и a[j]элементов массива.
temp=a[i];a[i]=a[j]; a[j]=temp;
Cдвиг одного элемента на место другого элемента:
a[i]=a[i+1];//сдвиг влево
a[i]=a[i-1];// сдвиг вправо
Слайд 20

Примеры задач 2 класса Дан массив целых чисел. Перевернуть массив. Дан

Примеры задач 2 класса

Дан массив целых чисел. Перевернуть массив.
Дан массив целых

чисел. Поменять местами пары элементов ( 1-ый и 2-ой, 3-ий и 4-ый, и т.д.)
Сдвинуть элементы массива на k элементов влево (вправо).
Слайд 21

Задачи 3-ого класса При синхронной обработке массивов индексы при переборе массивов

Задачи 3-ого класса

При синхронной обработке массивов индексы при переборе массивов меняются

одинаково.
При асинхронной обработке массивов индекс каждого массива меняется по своей схеме.
Примеры задач 3-го класса
Заданы два массива из n целых элементов. Получить массив c, где c[i]=a[i]+b[i].
В массиве целых чисел все отрицательные элементы перенести в начало массива.
Слайд 22

Задачи 4-ого класса В поисковых задачах требуется найти элемент, удовлетворяющий заданному

Задачи 4-ого класса

В поисковых задачах требуется найти элемент, удовлетворяющий заданному условию.


Для этого требуется организовать перебор массива и проверку условия.
При этом существует две возможности выхода из цикла:
нужный элемент найден ;
элемент не найден, но просмотр массива закончен.
Пример задачи 4 класса:
Найти первое вхождение элемента К в массив целых чисел.
Слайд 23

Сортировка массивов Сортировка – это процесс перегруппировки заданного множества объектов в

Сортировка массивов

Сортировка – это процесс перегруппировки заданного множества объектов в некотором

установленном порядке.
Различают:
простые методы сортировки (требуют х2 сравнений);
сложные методы сортировки (требуют х ln x сравнений).
Слайд 24

Простые методы сортировки Сортировка с помощью простого включения (вставки). Сортировка с

Простые методы сортировки

Сортировка с помощью простого включения (вставки).
Сортировка с помощью простого

выделения (выбора).
Сортировка с помощью простого обмена(метод пузырька).
Слайд 25

Сортировка с помощью простого включения int j,el; for (i = 1;

Сортировка с помощью простого включения

int j,el;
for (i = 1; i

< size; i++)
{
el = arr[i];
j = i - 1;
while ( j >= 0&&el < arr[j] )
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = el;
}

44

55

12

42

94

18

55

44

55

12

42

94

18

12

Слайд 26

Сортировка с помощью простого выбора int min, n_min, j; for (i

Сортировка с помощью простого выбора

int min, n_min, j;
for (i = 0;

i < size - 1; i++)
{
min = arr[i]; n_min = i;
for (j = i + 1; j < size; j++)
if (arr[j] < min)
{
min = arr[j];
n_min = j;
}
arr[n_min] = arr[i];
arr[i] = min;
}

44

55

12

42

94

18

12

55

44

42

94

18

min

min

Слайд 27

Сортировка с помощью простого обмена int j; for(i=1;i for(j=size-1;j>=i;j--) if(arr[j] {

Сортировка с помощью простого обмена

int j;
for(i=1;ifor(j=size-1;j>=i;j--)
if(arr[j]{
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}

44

55

12

42

94

18

12

44

55

18

42

94

Слайд 28

Поиск в отсортированном массиве В отсортированном массиве используется дихотомический (бинарный) поиск.

Поиск в отсортированном массиве

В отсортированном массиве используется дихотомический (бинарный) поиск.
При

последовательном поиске требуется в среднем n/2 сравнений, где n – количество элементов в массиве.
При дихотомическом поиске требуется не более m сравнений, если n- m-ая степень 2, если n не является степенью 2, то n