- •Лабораторная работа № 7 программирование задач обработки двумерных массивов
- •1 Цель и порядок работы
- •Порядок выполнения работы:
- •2 Общие сведения
- •2.1 Прямоугольные массивы
- •2.2 Ступенчатые массивы
- •2.3 Оператор цикла с перебором foreach
- •3. Варианты заданий для самостоятельной работы
- •Содержание отчета
2.3 Оператор цикла с перебором foreach
Цикл перебора foreach используется для просмотра всех объектов из некоторой группы данных – коллекции. В языке С# определен ряд типов коллекций, например, коллекцией являются массивы.
Синтаксис записи цикла foreach:
foreach(тип имя_переменной in имя коллекции) выражение;
где тип и имя_переменной задают тип и имя итерационной переменной, которая в процессе итераций цикла foreach получает значения элементов коллекции, заданной своим именем.
Если в программе в качестве коллекции используется массив данных, то необходимо помнить, что тип итерационной переменной должен совпадать или быть совместимым с базовым типом массива. Необходимо также учитывать, что итерационная переменная как элемент массива доступна только для чтения, и ей нельзя присвоить новое значение, а значит с помощью этой конструкции нельзя изменить и значение элемента массива.
Рассмотрим программу поиска максимального элемента в одномерном массиве.
Листинг 4 - Использование оператора цикла foreach для поиска наибольшего элемента одномерного массива
using System;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
const int n = 6;
int[] a = new int[n] { 3, 12, 5, -9, 8, -4 };
Console.WriteLine("Исходный массив:");
for (int i = 0; i < n; ++i)
Console.WriteLine("\t" + a[i]);
Console.WriteLine();
int max = a[0];
foreach (int x in a)
{
if (x > max)
max = x;
}
Console.WriteLine("Максимальный элемент = " + max);
Console.Read();
}
}
}
Как видно из текста программы цикл foreach последовательно просматривает все элементы массива а и присваивает итерационной переменной х значение очередного элемента массива. Значение х в дальнейшем используется в операторе if для коррекции переменной max.
Результаты работы программы:
Следует отметить тот факт, что не всегда требуется просматривать всю коллекцию до конца, например, в задаче, где требуется найти первый отрицательный элемент. После того как отрицательный элемент найден, можно прервать работу цикла с помощью оператора break.
При работе с многомерными массивами цикл foreach возвращает элементы в порядке следования строк.
Листинг 5 - Использование оператора цикла foreach для поиска наибольшего элемента двумерного массива
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
const int m = 3, n = 4;
int[,] y = new int[m, n] {
{ 2, 2, 8, 9 },
{ 4, 5, 6, 2 },
{ 7, 0, 1, 1 }
};
Console.WriteLine("Исходный массив:");
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
Console.Write(" " + y[i, j]);
Console.WriteLine();
}
int max = y[0, 0];
foreach (int x in y){
if (x > max) max = x;
}
Console.WriteLine("Наибольший элемент в матрице " + max);
Console.Read();
}
}
}
Как видно из текста программы использование одного оператора foreach позволило заменить два вложенных оператора for в поиске наибольшего элемента двумерного массива.
Результаты работы программы:
