Оператор foreach применяется для перебора элементов в специальным образом организованной группе данных. Массив является такой группой. Удобство такого вида цикла заключается в том, что не требуется определять количество элементов и выполнять их перебор по индексу. Просто указывается необходимость перебора всех элементов группы. Синтаксис оператора:
foreach (тип имя in выражение) тело_цикла
Имя задает локальную по отношению к циклу переменную, которая будет по очереди принимать все значения из массива выражение (обычно имя массива или имя другой группы данных). В теле цикла выполняются действия с переменной цикла.
Вывод массива a на экран с помощью оператора foreach:
// х - локальная переменная цикла, а - одномерный массив
foreach (int x in a) Console.WriteLine(x);
На каждом проходе цикла очередной элемент массива присваивается переменной х и с ней выполняются действия, записанные в теле цикла.
Ограничением применения оператора foreach является то, что с помощью его можно только просматривать значения в группе данных, но не изменять их.
Использование оператора foreach для вывода на экран двумерного массива имеет вид:
foreach (int [] x in a)
{
foreach (int y in x) Console.Write(“\t”+y);
Console.WriteLine();
}
Класс System.Array
Все массивы в С# построены на основе базового класса Array, который содержит свойства и методы, представленные в таблице
Свойство | Описание |
Length | Количество элементов массива (по всем размерностям) |
Rank | Количество размерностей массива |
BinarySearch | Двоичный поиск в отсортированном массиве |
Clear | Выполняет начальную инициализацию элементов. В зависимости от типа элементов устанавливает значение 0 для арифметического типа, false - для логического типа, Null для ссылок, "" - для строк. |
Copy | Копирование части или всего массива в другой массив. |
IndexOf | Поиск индекса первого вхождения элемента в одномерный массив. |
LastIndexOf | Поиск индекса последнего вхождения элемента в одномерный массив. |
Reverse | Изменение порядка следования элементов на обратный. |
Sort | Сортировка элементов одномерного массива |
CopyTo | Копируются все элементы одномерного массива в другой одномерный массив, начиная с заданного индекса |
GetLength | Возвращает число элементов массива по указанному измерению. |
GetValue, SetValue | Возвращает или устанавливает значение элемента массива с указанными индексами. |
Свойство Length позволяет реализовывать алгоритмы, которые будут работать с массивами различной длины. Использование этого свойства вместо явного задания размерности исключает возможность выхода индекса за границы массива.
|
Примеры обработки массивов с использованием класса Array
//ДВУМЕРНЫЙ МАССИВ
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.Write("Введите количество строк массива: ");
int n=Convert.ToInt32(Console.ReadLine());
Console.Write("Введите количество столбцов массива: ");
int m=Convert.ToInt32(Console.ReadLine());
int[,] a = new int[n,m];
ВводМассива(a);
РешениеЗадачи(a);
ВыводМассива(a);
Console.ReadKey();
}
//----------------------------------------------------------------
public static void ВводМассива(Array a)
{
for (int i = 0; i < a.GetLength(0); ++i)
for (int j = 0; i < a.GetLength(1); ++i)
a.SetValue(Convert.ToInt32(Console.ReadLine()),i,j);
}
//----------------------------------------------------------------
public static void РешениеЗадачи(Array a)
{
for (int i = 0; i < a.GetLength(0); ++i)
for (int j = 0; i < a.GetLength(1); ++i)
{
//обработка массива – решение задачи
}
}
//----------------------------------------------------------------
|
public static void ВыводМассива(Array a)
{
// 1 способ
Console.WriteLine("Вывод массива: ");
for (int i = 0; i < a.GetLength(0); ++i)
{
for (int j = 0; i < a.GetLength(1); ++i)
Console.Write(“\t” +a[i,j]);
Console.WriteLine();
{
// 2 способ
Console.WriteLine("Вывод массива: ");
foreach (int [] x in a)
{
foreach (int y in x)
Console.Write("\t "+y);
Console.WriteLine();
}
}
} }}
Обнуление элементов двумерного массива можно выполнить, используя вложенный оператор for:
for (int k=0; k<3; k++)
for (int m=0; m <5; m ++)
a[k, m]=0;
Пример программирования с использованием
двумерного массива
Задание. Подсчитайте сумму всех элементов в двумерном массиве а[4, 5].
1. На рисунке 6.2 – разработка алгоритма:
– входные данные: a – массив, состоящий из вещественных чисел;
– выходные данные: sum – вещественная переменная, сумма всех элементов массива;
– промежуточные данные: i, j – счетчики циклов.
Рисунок 6.2 − Схема алгоритма вычисления суммы элементов массива
При вычислении суммы элементов массива в начале алгоритма переменную, хранящую сумму, необходимо обнулить.
При вычислении произведения элементов массива в начале алгоритма переменной, хранящей произведение, необходимо присвоить единицу.
2. Разработка формы – рисунок 6.3, таблица 6.1.
//Пример удален, надо добавить
Индивидуальные задания
При выполнении заданий первого уровня сложности рекомендуется использовать статический массив, а для заданий второго уровня сложности – динамический массив.
Задачи первого уровня сложности
1. Дана вещественная матрица размером 4 строки, 5 столбцов. Переставляя ее строки и столбцы, добейтесь того, чтобы наибольший элемент (один из них) оказался в верхнем левом углу.
|
2. Определите, является ли заданная целочисленная квадратная матрица порядка 5симметричной относительно главной диагонали.
3. Дана вещественная матрица размером 4 строки, 5 столбцов. Поменяйте местами максимальный и минимальный элементы матрицы.
4. Дана целочисленная квадратная матрица порядка 5. Найдите максимальный элемент среди элементов, лежащих ниже главной диагонали, и максимальный элемент среди элементов, лежащих выше главной диагонали, поменяйте их местами.
5. Дана целочисленная квадратная матрица порядка 5. Найдите максимальный элемент среди элементов, лежащих левее вспомогательной диагонали, и максимальный элемент среди элементов, лежащих правее вспомогательной диагонали, поменяйте их местами.
6. Среди строк целочисленной квадратной матрицы порядка 5 найдите строку с минимальной суммой элементов.
7. Дана целочисленная квадратная матрица порядка 5. Найдите минимальный элемент среди элементов, лежащих ниже главной диагонали, и максимальный элемент среди элементов, лежащих выше главной диагонали, вычислите их среднее арифметическое.
8. Дана целочисленная квадратная матрица порядка 5. Найдите минимальный элемент среди элементов, лежащих левее вспомогательной диагонали, и максимальный элемент среди элементов, лежащих правее вспомогательной диагонали, и вычислить их среднее геометрическое.
9. Среди столбцов целочисленной квадратной матрицы порядка 5 найдите столбец с максимальной суммой элементов.
10. Среди тех столбцов целочисленной матрицы размером 3 строки, 5 столбцов, которые содержат только такие элементы, значения которых по модулю не превышают 10, найдите столбец с минимальным произведением элементов.
11. Даны целые числа а1,...,а10, целочисленная квадратная матрица порядка 5. Замените нулями в матрице те элементы, для которых имеются равные числа среди а1,...,а10.
12. В двумерном целочисленном массиве размером 4 строки, 5 столбцов поменяйте местами строки, симметричные относительно середины массива (горизонтальной линии).
13. В двумерном целочисленном массиве размером 4 строки, 5 столбцов поменяйте местами столбцы, симметричные относительно середины массива (вертикальной линии).
14. Даны две вещественные квадратные матрицы порядка 4. Получите новую матрицу прибавлением к элементам каждого столбца первой матрицы минимального элемента соответствующего столбца второй матрицы.
15. В целочисленной квадратной матрице порядка 4 найдите наибольший по модулю элемент. Получите квадратную матрицу порядка 3 путем выбрасывания из исходной матрицы строки и столбца, на пересечении которых расположен элемент с найденным значением.
16. В данной вещественной квадратной матрице порядка 5 найдите наименьший элемент. Получите квадратную матрицу порядка 4 путем выбрасывания из исходной матрицы строки и столбца, на пересечении которых расположен элемент с найденным значением.
17. Дана вещественная матрица размером 4 строки, 5 столбцов. Получите новую матрицу путем вычитания из всех элементов данной матрицы наименьшего по модулю элемента.
18. Дана целочисленная квадратная матрица порядка4. Най-дите в каждой строке наибольший элемент и поменяйте его местами с элементом, расположенным на главной диагонали.
19. Дана целочисленная квадратная матрица порядка 5. Найдите в каждой строке наименьший элемент и поменяйте его местами с элементом, расположенным на вспомогательной диагонали.
20. Дана вещественная матрица размером 4 строки, 5 столбцов. Определите числа b1,..,b4, равные значениям средних арифметических элементов строк.
21. Дана вещественная матрица размером 4 строки, 5 столбцов. Определите числа b1,..,b5, равные значениям средних арифметических элементов столбцов.
22. Дана вещественная матрица размером 4 строки, 5 столбцов. Определите числа b1,..,b5, равные среднему арифметическому значению максимального и минимального элементов каждого столбца.
23. В данной вещественной квадратной матрице порядка 5найдите сумму элементов строки, в которой расположен элемент с наименьшим значением. Предполагается, что такой элемент единственный.
24. В данной вещественной квадратной матрице порядка 5найдите среднее геометрическое положительных элементов столбца, в котором расположен элемент с наименьшим значением. Предполагается, что такой элемент единственный.
25. Дана целочисленная квадратная матрица порядка4. Для каждой строки найдите минимальный элемент или максимальный в зависимости от условия: если на главной диагонали находится элемент больше элемента, расположенного на вспомогательной диагонали, то найдите минимальный элемент, иначе – максимальный.
26. Дана целочисленная квадратная матрица порядка4. Ниже главной диагонали найдите минимальный элемент среди четных элементов, а выше главной диагонали - среди нечетных элементов.
27. Дана целочисленная квадратная матрица порядка4. Ниже главной диагонали найдите минимальный элемент среди положительных элементов, а выше главной диагонали – максимальный элемент среди отрицательных элементов.
28. Дана целочисленная квадратная матрица порядка5. Левее вспомогательной диагонали найдите минимальный элемент среди четных элементов, а правее вспомогательной диагонали - среди нечетных элементов.
29. Дана целочисленная квадратная матрица порядка5. Левее вспомогательной диагонали найдите минимальный элемент среди положительных элементов, а правее вспомогательной диагонали – максимальный элемент среди отрицательных элементов.
30. Дана целочисленная квадратная матрица порядка 5. Для каждого столбца найдите минимальный элемент или максимальный в зависимости от условия: если на главной диагонали находится элемент меньше элемента, расположенного на вспомогательной диагонали, то найдите минимальный элемент, иначе – максимальный.
Задачи второго уровня сложности
1. Дана вещественная матрица размером n строк, m столбцов. Упорядочьте ее строки по возрастанию их первых элементов.
2. Дана вещественная матрица размером n строк, m столбцов. Упорядочьте ее строки по возрастанию значений элементов.
3. Дана вещественная матрица размером n строк, m столбцов. Для каждой строки найдите наибольший элемент и упорядочьте строки матрицы по возрастанию значений наибольших элементов.
4. Дана вещественная матрица размером n строк, m столбцов. Для каждой строки найдите наименьший элемент и упорядочьте строки матрицы по возрастанию значений наименьших элементов.
5. Дана вещественная матрица размером n строк, m столбцов. Для каждой строки найдите сумму элементов и упорядочьте строки матрицы по возрастанию сумм.
6. Дана вещественная матрица размером n строк, m столбцов. Для каждого столбца найдите сумму элементов и упорядочьте столбцы матрицы по возрастанию сумм.
7. Дана целочисленная матрица размером n строк, m столбцов. Для каждого столбца найдите сумму нечетных элементов и упорядочьте столбцы матрицы по возрастанию сумм.
8. Дана целочисленная матрица размером n строк, m столбцов. Для каждого столбца найдите сумму положительных элементов и упорядочте столбцы матрицы по возрастанию сумм.
9. Дана целочисленная матрица размером n строк, m столбцов. Для каждого столбца найдите произведение элементов, значения которых лежат в диапазоне [1, 10], упорядочьте столбцы матрицы по убыванию произведений.
10. Дана целочисленная матрица размером n строк, m столбцов. Для каждого столбца найдите наибольшие элементы и упорядочьте столбцы матрицы по убыванию наибольших элементов.
11. Дана вещественная матрица размером n строк, m столбцов. Упорядочьте ее столбцы по возрастанию их первых элементов.
12. Дана целочисленная матрица размером n строк, m столбцов. Найдите и выведите строку, в которой длина максимальной серии одинаковых элементов максимальна.
13. Дана целочисленная матрица размером n строк, m столбцов. Найдите и выведите столбец, в котором длина максимальной серии возрастающих по значению элементов максимальна.
14. Дана вещественная матрица размером n строк, m столбцов. Для каждого столбца найдите среднее арифметическое элементов и упорядочьте столбцы матрицы по возрастанию среднего арифметического элементов.
15. Дана вещественная матрица размером n строк, m столбцов. Для каждой строки найдите среднее арифметическое элементов и упорядочьте строки матрицы по возрастанию среднего арифметического элементов.
16. Дана вещественная матрица размером n строк, m столбцов. Для каждого столбца найдите среднее геометрическое положительных элементов и упорядочьте столбцы матрицы по возрастанию среднего геометрического элементов.
17. Дана вещественная матрица размером n строк, m столбцов. Для каждой строки найдите среднее геометрическое положительных элементов и упорядочьте строки матрицы по убыванию среднего геометрического элементов.
18. Дана вещественная матрица размером n строк, m столбцов. Найдите строку, содержащую максимальный элемент, и
упорядочьте эту строки матрицы по возрастанию значений элементов.
19. Дана вещественная матрица размером n строк, m столбцов. Найдите строку, содержащую минимальный элемент, и упорядочьте эту строки матрицы по убыванию значений элементов.
20. Дана вещественная матрица размером n строк, m столбцов. Найдите столбец, содержащий минимальный элемент, и упорядочьте этот столбец матрицы по убыванию значений элементов.
21. Дана вещественная матрица размером n строк, m столбцов. Найдите столбец, содержащий максимальный элемент, и упорядочьте этот столбец матрицы по возрастанию значений элементов.
22. Дана целочисленная матрица размером n строк, m столбцов. Найдите столбец, сумма элементов которого минимальна, и упорядочьте этот столбец матрицы по убыванию значений элементов.
23. Дана целочисленная матрица размером n строк, m столбцов. Найдите строку, сумма элементов которой максимальна, и упорядочьте эту строку матрицы по убыванию значений элементов.
24. Дана целочисленная матрица размером n строк, m столбцов. Найдите строку, среднее арифметическое элементов которой максимально, и упорядочьте эту строку матрицы по возрастанию значений элементов.
25. Дана целочисленная матрица размером n строк, m столбцов. Найдите столбец, среднее арифметическое элементов которого максимально, и упорядочьте этот столбец матрицы по возрастанию значений элементов.
26. Дана целочисленная матрица размером n строк, m столбцов. Найдите строку, среднее геометрическое элементов которой максимально, и упорядочьте эту строку матрицы по убыванию значений элементов.
27. Дана целочисленная матрица размером n строк, m столбцов. Найдите столбец, среднее геометрическое элементов которого минимально, и упорядочьте этот столбец матрицы по убыванию значений элементов.
28. Дана целочисленная матрица размером n строк, m столбцов. Найдите строку, произведение элементов которой максимально, и упорядочьте эту строку матрицы по убыванию значений элементов.
29. Дана целочисленная матрица размером n строк, m столбцов. Найдите столбец, произведение элементов которого минимально, и упорядочьте этот столбец матрицы по убыванию значений элементов.
30. Дана целочисленная матрица размером n строк, m столбцов. Найдите строку, количество различных элементов в которой максимально, и упорядочьте эту строку матрицы по возрастанию значений элементов.
Контрольные вопросы к главе 6
1. Напишите фрагмент программы ввода двумерного целочисленного массива, в котором 5 строк и 10 столбцов.
2. Напишите фрагмент программы вывода двумерного вещественного массива, в котором 5 строк и 6 столбцов.
3. Дайте описание трехмерного целочисленного массива.
4. Дайте описание четырехмерного целочисленного массива.
7. Введите квадратную вещественную матрицу 4-го порядка, элементы которой заданы построчно, и распечатайте ее по столбцам.
8. Присвойте нулевые значения всем элементам массива:
float a[5, 4];
9. Для чего предназначается компонент DataGridView?
10. Какими основными свойствами обладает компонент DataGridView?