Работа с массивами как с объектами

В C# массивы являются объектами (экземплярами). Класс Arrayпредоставляет методы для создания, изменения, поиска и сортировки массивов, т.е. выступает в роли базового класса для всех массивов.

Если мы поставим точку после имени массива, например, a, то мы получим доступ к методам экземпляра и свойствам экземпляра типа Array.

 

double[] a = new double[5] {

4.0, -3.0, 4.0, -5.0, 7.0 };

Console.WriteLine(a.Length);

Console.WriteLine(a.Rank);

Для одномерного массива размера 5 выбраны свойства, возвращающие длину массива и размерность массива, которые выводятся на консоль.

Поставив точку после имени типа Array, мы получаем доступ к методам типа Array. Выберем в качестве примера статический метод Sort и укажем в качестве его параметра имя массива a.

double[] a = new double[5] { 4.0,-3.0,9.0,-5.0,7.0 };

Array.Sort(a);

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

Console.Write("{0:f1} ", a[i]);

Console.WriteLine();

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

Пример 3.1. Задан массив x, содержащий 14 элементов. Вставить после максимального элемента новый элемент, значение которого равно среднему арифметическому положительных элементов, расположенных перед максимальным элементом:

const int n = 15;

double[] x = new double[n]{

5.0, -7.0, -9.0, 6.0, 4.0, 12.0, 2.0,

8.0, 7.0, 6.0, 5.0, 3.0, 1.0, 1.0, 0.0};

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

double amax = x[0];

int imax = 0;

for (int i = 0; i < n; i++)

{

if (x[i] > amax)

{

amax = x[i];

imax = i;

}

}

//Нахождение среднего арифметического

double s = 0.0;

int k = 0;

for (int i = 0; i < imax; i++)

{

if (x[i] > 0)

{

s += x[i];//вместо = s = s + x[i]

k++;

}

}

double sr = s / k;

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

for (int i = n - 2; i >= imax + 1; i--)

x[i + 1] = x[i];

x[imax + 1] = sr;

for (int i = 0; i < n; i++)

Console.Write("{0:f} ", x[i]);

Console.WriteLine();

Console.ReadKey();

Пример 3.2. Упорядочить положительные элементы массива a, содержащего 7 элементов, по убыванию, оставив отрицательные элементы массива на прежних местах:

const int n = 7;

int[] a = new int[n] { 4, 7, 9, -10, 3, -12, 8 };

for (int i = 0; i < n - 1; i++)

{

if (a[i] > 0)

{

int amax = a[i];

int imax = i;

for (int j = i + 1; j < n; j++)

{

if (a[j] > amax)

{

amax = a[j];

imax = j;

}

}

a[imax] = a[i];

a[i] = amax;

}

}

 

for (int i = 0; i < n; i++)

Console.Write("{0:d} ", a[i]);

Console.ReadKey();

Пример 3.3. Включить заданное значение p в качестве элемента в массив x, содержащий 12 элементов, с сохранением упорядоченности (массив упорядочен по убыванию):

const int n = 13;

int[] x = new int[n] {

18, 15, 14, 13, 12, 9,

8, 7, 6, 5, 4, 3, 0 };

int p = 10;

int i;

for (i = 0; i < n - 1; i++)

if (x[i] < p) break;

for (int k = n - 2; k >= i; k--)

x[k + 1] = x[k];

x[i] = p;

for (i = 0; i < n; i++)

Console.Write("{0:d} ", x[i]);

Console.WriteLine();

Console.ReadKey();

Пример 3.4. Массив M содержит оценки 25 студентов по курсу «Информатика». Определить, сколько студентов получили оценку «5», «4», «3», «2» или «0» (в случае неявки на экзамен).

Исходные данные содержатся в массиве M размера 25. Результат получим в массиве K размера 5, где каждый элемент содержит количество соответствующих оценок. Сформируем также вспомогательный массив MK размера 5, в который поместим сами оценки:

int[] M = new int[25] { 4, 4, 5, 0, 2,

3, 0, 3, 3, 3,

4, 3, 0, 4, 4,

5, 2, 4, 3, 4,

3, 3, 5, 4, 4 };

int[] MK = new int[5] { 5, 4, 3, 2, 0 };

int[] K = new int[5];

int i;

for (i = 0; i < 25; i++)

if (M[i] == 0) K[4]++;

else K[5 - M[i]]++;

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

Console.Write("{0:d} - {1:d}, ", MK[i], K[i]);

Console.WriteLine();

Console.ReadKey();

Здесь само значение оценки в массиве М (т.е. М[i]) связано с индексом j соответствующего элемента в массиве МK: j = 5 – M[i], т.е. количество оценок «5» будет помещаться в 1-й элемент массива МK, количество оценок «4» – во 2-й элемент массива МK и т.д. Исключение составляют только значения «0», количество которых необходимо поместить в 5-й элемент массива МK, что и сделано в программе отдельно.

Вопросы для самопроверки

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

2. Суммирование элементов массива. Суммирование элементов массива, удовлетворяющих условию.

3. Формирование другого массива из элементов заданного массива, удовлетворяющих условию. Перестановка элементов массива.

4. Удаление элемента массива. Включение элемента в массив.

5. Нахождение максимального (минимального) элемента массива.

6. Упорядочение элементов массива.

7. Массивы как объекты. Доступ к методам и свойствам экземпляра типа Array.

8. Доступ к методам типа Array.

Задание для самостоятельного выполнения

1. Найти сумму элементов одномерного массива размера 6. Разделить каждый элемент исходного массива на полученное значение. Результат получить в том же массиве.

2. Положительные элементы массива заменить средним арифметическим среди положительных элементов.

3. Каждый отрицательный элемент заменить первым положительным из расположенных после него.

4. Вычислить сумму и разность двух одномерных массивов размера 4. (Суммой (разностью) двух массивов одинакового размера называется третий массив такого же размера, каждый элемент которого равен сумме (разности) соответствующих элементов исходных массивов.)

5. Найти среднее значение элементов массива размера 5. Преобразовать исходный массив, вычитая из каждого элемента полученное значение.

6. Вычислить скалярное произведение двух векторов размера 4. (Скалярным произведением называется сумма попарных произведений соответствующих элементов массивов.)

7. Вычислить длину вектора размера 5. (Длина вектора вычисляется по формуле

.)

8. Элементы одномерного массива, большие среднего значения элементов массива, заменить на 0.

9. Подсчитать количество отрицательных элементов заданного одномерного массива.

10. Определить, сколько элементов заданного одномерного массива больше среднего значения элементов этого массива.

11. Дан одномерный массив размера 10 и два числа P и Q (P < Q). Определить, сколько элементов массива заключено между P и Q.

12. Сформировать массив из положительных элементов заданного массива размера 10.

13. Определить значение и номер последнего отрицательного элемента массива размера 8.

14. Дан массив размера 10. Сформировать два массива размера 5, включая в первый массив элементы исходного массива с четными индексами, во второй – с нечетными.

15. Найти сумму квадратов элементов, расположенных до первого отрицательного элемента массива.

16. Дан одномерный массив размера 10. Минимальный элемент массива увеличить в два раза.

17. Дан одномерный массив размера 10. Найти сумму элементов, расположенных до максимального элемента массива.

18. Все элементы одномерного массива, расположенные перед минимальным, увеличить в 2 раза.

19. В одномерном массиве все элементы, расположенные после максимального, заменить средним значением элементов массива.

20. Задан одномерный массив размера 10. Сформировать другой одномерный массив из отрицательных элементов, расположенных между максимальным и минимальным элементами исходного массива.

21. Задан одномерный массив и число P. Включить элемент, равный Р, после того элемента массива, который наиболее близок к среднему значению его элементов.

22. Увеличить в 2 раза элемент, расположенный непосредственно после максимального элемента массива.

23. Поменять местами максимальный элемент массива и минимальный элемент части массива, расположенной после максимального.

24. Найти среднее арифметическое значение элементов массива, расположенных между минимальным и максимальным элементами массива.

25. Удалить минимальный среди положительных элементов массива.

26. Включить заданный элемент после последнего положительного в массиве.

27. Первый отрицательный элемент массива заменить суммой элементов, расположенных после максимального.

28. Максимальный элемент массива среди элементов с четными индексами заменить значением его индекса.

29. Найти все максимальные элементы одномерного массива (предполагается, что в массиве несколько одинаковых максимальных элементов) за один проход исходного массива. Сформировать массив из их индексов.

30. В одномерном массиве увеличить максимальные элементы на их порядковые номера (1-й максимальный – на 1; 2-й – на 2; 3-й – на 3 и т.д.).

31. В одномерном массиве размера 14 поменять местами соседние элементы (1-й со 2-м, 3-й с 4-м и т.д.), распложенные перед максимальным элементом массива.

32. Упорядочить по возрастанию элементы массива с четными индексами (остальные элементы оставить на своих местах).

33. Задан массив В. Максимальный элемент (или максимальные элементы, если их несколько) заменить суммой элементов массива, расположенных до него (до каждого из них, если их несколько).

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

35. Заданы массивы А и В, содержащие n и m элементов соответственно. Вставить массив В между k-м и (k + 1)-м элементами массива А (k задано).

36. Задан массив х размера 10. Вычислить значения функции у = 0,5lnx при значениях аргумента, заданных в массиве х. Вычисленные значения поместить в массив y. Вывести массивы х и y в виде двух столбцов.

37. Поменять местами максимальный и первый отрицательный элементы массива.

38. Все отрицательные элементы переставить в конец массива с сохранением порядка их следования.

39.Определить индексы элементов массива, меньших среднего. Результат получить в виде массива.

40. Упорядочить по убыванию положительные элементы массива, сохраняя остальные элементы на прежних местах.

41. В заданной последовательности чисел длиной n (n £ 100) определить длину самой большой упорядоченной по возрастанию подпоследовательности.

42. В массиве, заполненном наполовину, продублировать все элементы с сохранением порядка следования. (Например, задан массив Х = (3, 8, ...), получить массив Х = (3, 3, 8, 8, ...)).

43. Из массива удалить повторяющиеся элементы. Массив сжать.

44. Вычислить значения функции y = cosx + xsinx в n точках отрезка [a,b]. Результат получить в двух массивах х (аргумент), y (функция). Используя сформированные массивы, определить все значения аргумента, при которых функция имеет максимум или минимум (включая локальные). Для точек, в которых достигается экстремум, вывести значения аргумента, функции и вид эстремума (максимум или минимум).

Указание. Функция имеет локальный (или глобальный) максимум со значением yi (из массива Y) при значении аргумента xi (из массива Х), если значения функции yi–1 и yi+1 в двух соседних точках меньше yi. Аналогично для минимума.

45. Из массива размера 12 удалить все отрицательные элементы. Массив сжать.