Foreach (тип идентификатор in контейнер) оператор

Цикл работает в полном соответствии со своим названием - тело цикла выполняется для каждого элемента в контейнере. Тип идентификатора должен быть согласован с типом элементов, хранящихся в контейнере данных. Предполагается также, что элементы контейнера (массива, коллекции) упорядочены. На каждом шаге цикла идентификатор, задающий текущий элемент контейнера, получает значение очередного элемента в соответствии с порядком, установленным на элементах контейнера. С этим текущим элементом и выполняется тело цикла - выполняется столько раз, сколько элементов находится в контейнере. Цикл заканчивается, когда полностью перебраны все элементы контейнера. Серьезным недостатком циклов 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) .

Наши рекомендации