Познакомившись с циклами, переменными, условными конструкциями и массивами, рассмотрим несколько задач для работы с массивами.
Найдем количество положительных чисел в массиве:
int[] numbers = { -4, -3, -2, -1, 0, 1, 2, 3, 4 }; int result = 0; foreach(int number in numbers) { if(number > 0) { result++; } } Console.WriteLine($"Число элементов больше нуля: {result}");
Здесь создаем вспомогательную переменную result
, которая будет содержать количество положительных чисел. В цикле прохожим по массиву и, если его элемент больше нуля,
добавляем к переменной result
единицу.
Вторая задача - инверсия массива, то есть переворот его в обратном порядке:
int[] numbers = { -4, -3, -2, -1,0, 1, 2, 3, 4 }; int n = numbers.Length; // длина массива int k = n / 2; // середина массива int temp; // вспомогательный элемент для обмена значениями for(int i=0; i < k; i++) { temp = numbers[i]; numbers[i] = numbers[n - i - 1]; numbers[n - i - 1] = temp; } foreach(int i in numbers) { Console.Write($"{i} \t"); }
Поскольку нам надо изменять элементы массива, то для этого используется цикл for. Алгоритм решения задачи подразумевает перебор элементов до середины массива, которая в программе представлена переменной k, и обмен значений элемента, который имеет индекс i, и элемента с индексом n-i-1.
Теперь возьмем задачу посложнее - простейшую сортировку массива:
int[] nums = { 54, 7, -41, 2, 4, 2, 89, 33, -5, 12 }; // сортировка int temp; for (int i = 0; i < nums.Length - 1; i++) { for (int j = i + 1; j < nums.Length; j++) { if (nums[i] > nums[j]) { temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } } } // вывод Console.WriteLine("Вывод отсортированного массива"); for (int i = 0; i < nums.Length; i++) { Console.WriteLine(nums[i]); }
Для сортировки массива выполняем проходы по массиву и сравниваем элементы. Поскольку нам надо последовательно сравнивать каждый элемент массива с каждым (за исключением сравния с самим собой), то здесь применятся вложенный цикл.
Во внешнем цикле мы берем элемент, который будем сравнивать:
for (int i = 0; i < nums.Length - 1; i++)
Далее запускаем вложенный цикл, который начинается, со следующего элемента, и из которого извлекаем элементы, с которыми будем сравнивать тот элемент, которые берется из массива во внешнем цикле:
for (int j = i + 1; j < nums.Length; j++)
Если элемент с меньшим индексом больше элемента с большим индексом, то меняем элементы местами.
if (nums[i] > nums[j]) { temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; }
В конце выводим все элементы.