Цикл работает в полном соответствии со своим названием - тело цикла выполняется для каждого элемента в контейнере. Тип идентификатора должен быть согласован с типом элементов, хранящихся в контейнере данных. Предполагается также, что элементы контейнера (массива, коллекции) упорядочены. На каждом шаге цикла идентификатор, задающий текущий элемент контейнера, получает значение очередного элемента в соответствии с порядком, установленным на элементах контейнера. С этим текущим элементом и выполняется тело цикла - выполняется столько раз, сколько элементов находится в контейнере. Цикл заканчивается, когда полностью перебраны все элементы контейнера. Серьезным недостатком циклов foreach в языке C# является то, что цикл работает только на чтение, но не на запись элементов. Так что наполнять контейнер элементами приходится с помощью других операторов цикла.
В приведенном ниже примере показана работа с трехмерным массивом. Массив создается с использованием циклов типа for, а при нахождении суммы его элементов, минимального и максимального значения используется цикл foreach:
/// <summary>
/// Демонстрация цикла foreach.
/// Вычисление суммы, максимального и минимального элементов
/// трехмерного массива, заполненного случайными числами.
/// </summary>
public void SumMinMax() {
int[,,] arr3d = new int[10,10,10];
Random rnd = new Random();
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
for (int k = 0; k < 10; k++)
arr3d[i, j, k] = rnd.Next(100);
long sum = 0;
int min = arr3d[0, 0, 0], max = arr3d[0, 0, 0];
foreach (int item in arr3d) {
sum += item;
if (item > max) max = item;
else if (item < min) min = item;
}
Console.WriteLine("sum = {0}, min = {1}, max = {2}", sum, min, max);
} //SumMinMax
Практическая часть
Задание
1. Изучить теоретическую часть.
2. Получить вариант задания.
3. Выполнить вычисления заданного выражения на компьютере, осуществляя все шаги «Решения задач на компьютере», описанные в теоретической части.
4. Оформить отчет в электронном виде.
5. Защитить лабораторную работу, ответив на вопросы преподавателя.
Варианты
1. Подсчитать число и сумму положительных, число и произведение отрицательных элементов заданного пользователем массива A(N).
2. Сжать заданный массив A(N) отбрасыванием нулевых элементов.
3. Элементы заданного массива B(N) переписать в новый массив A(N) в обратном порядке. Массив задается пользователем.
4. У кассы выстроилась очередь из N человек. Время обслуживания кассиром i-го клиента равно Ti (i = 1,..., N).
а) Определите время пребывания в очереди каждого клиента;
б) Укажите номер клиента, для обслуживания которого кассиру потребовалось больше всего время.
5. В заданном массиве Х(N) заменить нулями все отрицательные компоненты, непосредственно предшествующие его максимальной компоненте (первой по порядку, если их несколько).
6. Вычислить значения
а) sin x + sin2x +... + sinnx;
б) sin x + sin x2 +... + sin xn;
в) sin x + sin2x2 +... + sinnxn;
г) sin x + sin sin x +... + sin sin...sin x (n раз).
7. Вычислить сумму квадратов всех элементов заданного массива X(N), за исключением элементов, кратных пяти.
8. Вычислить значения функции z = (a + b + ci) / i, если a изменяется от 0 с шагом 1, b изменяется от 5 с шагом 1, ci является элементом массива C(N). При этом a и b изменяются одновременно с i.
9. В заданном массиве A(N) поменять местами наибольший и наименьший элементы.
10. В заданном массиве A(N) определить количество элементов, которые меньше заданного значения.
11. Осуществить циклический сдвиг компонент заданного вектора A(N) влево на одну позицию, то есть получите вектор А = (a2, a3,..., aN, a1).
12. Осуществите циклический сдвиг компонент заданного вектора A(N) вправо на две позиции, т. е. получить вектор A = (aN-1, aN, a1, a2,..., aN-2).
13. Дан массив A(N). Получить массив B(N), i-й элемент которого равен среднему арифметическому первых i элементов массива А: bi = (a1 + a2 +... + ai) / i.
14. Для заданного набора коэффициентов a, b, c, d найти наименьшее значение функции y = a x3 + b x2 + cx + d и значение аргумента, при котором оно получено. Значение х изменяется от 0 до 2 с шагом 0,2.
15. Записать подряд в массив A(N) элементы заданного массива В(2N), стоящие на чётных местах, а элементы, стоящие на нечетных местах, – в массив С(N).
16. Выведите на печать номера элементов заданного массива Y(N), удовлетворяющих условию 0 < yi < 1.
17. Дан массив A(2N). Построить массивы с элементами, соответственно равными:
а) a1, aN+1, a2, aN+2,..., aN, a2N;
б) a2N, a1, a2N-1, a2,..., aN+1, aN..
18. В заданном массиве A(N) заменить наибольший элемент массива элементом a1, наименьший элемент массива — aN.
19. В заданном массиве A(N), все элементы которого попарно различны, найти:
а) наибольший элемент из отрицательных;
б) наименьший элемент из положительных;
в) второй по величине элемент.
20. В заданном массиве A(N) определить число соседств:
а) двух положительных чисел;
б) двух чисел разного знака;
в) двух чисел одного знака, причем абсолютная величина первого числа должна быть больше второго числа;
г) чётного числа и нечётного c нечётным индексом.
21. В заданном массиве A(N) положительные элементы уменьшить вдвое, а отрицательные заменить на значения их индексов.
22. В заданном массиве A(N) вычислить среднее геометрическое и среднее арифметическое значения для положительных элементов.
23. Элементы заданного массива X = (x1, x2,...,xN) переупорядочить следующим образом: X = (xN, xN-1,..., x1).
24. Образовать массив B, состоящий из положительных элементов заданного массива A(N), больших пяти. Выведите на печать образованный массив и число его элементов.
25. Из заданных векторов X(N) и Y(N) получить вектор Z(2N) c элементами (x1, y1, x2, y2,..., xN, yN).