Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс_ред.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.76 Mб
Скачать

Использование оператора foreach

Хотя для циклической обработки массивов можно использовать любые циклические операторы, удобнее всего применять специализированный оператор foreach.

К программе, описанной в предыдущем разделе и предназначенной для вывода на консоль содержимого массива, добавим цикл подсчета суммы элементов этого массива:

int sum = 0;

foreach(int number in Numbers)

{

sum += number;

}

WriteLine("Summa = {0}", sum);

На блок-схеме оператор foreach изображается так же, как обычный цикл с параметром с шагом, равным единице. В псевдокоде допускается запись данного цикла в виде:

Для-Каждого number В Numbers

sum += number

Все-Для-Каждого

Обратите внимание, что для вычисления суммы достаточно знать только идентификатор массива Numbers, но нет необходимости знать его длину. К сожалению, оператор foreach не позволяет изменять содержимое элементов массива, но для просмотра массива (и, как вы узнаете позже, для просмотра содержимого контейнеров объектов других типов) он очень удобен. Как только вы попытаетесь изменить элемент массива в цикле foreach:

foreach(int number in Numbers)

{

number++;

}

Вы получите сообщение компилятора от ошибке:

error CS1656: Cannot assign to 'number' because it is

a 'foreach iteration variable'

Данное сообщение переводится как «Невозможно присвоить значение number, потому что это итерационная переменная цикла foreach».

Типы задач обработки одномерных числовых массивов

Задачи, связанные с обработкой одномерных массивов чисел, чрезвычайно разнообразны. В курсах, посвященных изучению основ программирования, этим задачам уделяется достаточно много внимания, так как считается, что знания, получаемые при изучении данного раздела и навыки разработки и отладки соответствующих программ многократно используются в дальнейшем при изучении прочих разделов.

Попытаемся выделить основные типы задач, решаемых в рамках данного раздела. Рассмотрим алгоритмы решения элементарных задач, из которых, как правило, состоит решение реальных задач, встречающихся на практике. Для записи алгоритмов будем использовать псевдокод.

Подсчет суммы или произведения элементов

Данная задача является одной из простейших, но часто встречающихся на практике. Необходимо использовать переменную того же типа, что и элементы массива, начальное значение которой определяется типом задачи: для суммы это ноль, для произведения – единица. Далее в цикле определяем требуемую величину. Приведем полный алгоритм для случая нахождения суммы, включая ввод исходных данных и вывод результата:

Начало

Ввод N (размер массива)

Ввод массива A(N)

Summa = 0

Для i = 0 До N-1

Summa = Summa + A(i)

Все-Для-i

Вывод: «Сумма равна», Summa

Конец

Данный алгоритм легко преобразуется в функцию Main(), которая может иметь следующий вид:

using System;

namespace Summa

{

class Program

{

static void Main(string[] args)

{

int N; // Размер массива

Console.Write("Введите N: ");

N = Convert.ToInt32(Console.ReadLine());

int[] A = new int[N];

Console.WriteLine("Введите массив А(N): ");

for (int i = 0; i < N; i++)

{

A[i] = Convert.ToInt32(Console.ReadLine());

}

int Summa = 0;

for (int i = 0; i < N; i++)

{

Summa += A[i];

}

Console.WriteLine("Сумма равна {0}", Summa);

Console.ReadLine();

}

}

}

Сравнив псевдокод алгоритма с текстом программы, легко заметить основные отличия. В псевдокоде отсутствуют описания переменных: алгоритм суммирования не зависит от типа элементов массива. Операции ввода и вывода записываются в псевдокоде одной строкой, так как являются типовыми и выполняются практически всегда одинаково для любой задачи обработки массивов. При выводе результата работы в псевдокоде не указывается способ форматирования выходной строки, а лишь перечисляются значения, которые должны быть выведены на консоль. Для обращения к элементам массива допускается использование круглых скобок, так как не все языки программирования используют для этого квадратные скобки.

В дальнейшем при описании последующих алгоритмов обработки одномерных массивов ввод исходных данных будет опускаться, а основное внимание будет уделяться их обработке.

Подсчет количества элементов, отвечающих заданному условию

Задачи данного типа решаются с использованием целочисленных переменных-счетчиков, вне зависимости от типа элементов массива. Начальным значением счетчика является ноль. Рассмотрим алгоритм подсчета количества четных элементов в целочисленном массиве.

Count = 0

Для i = 0 До N-1

Если A(i) – четный, То

Count = Count + 1

Все-Если

Все-Для-i

Если Count = 0, То

Вывод: «Четных элементов нет»

Иначе

Вывод: «В массиве », Count, « четных элементов»

Все-Если

В приведенном алгоритме прокомментируем два момента. При проверке четности элемента массива не конкретизируется, каким именно способом это будет сделано в программе (можно использовать остаток от деления на два, побитовую операцию И, есть и другие варианты). После завершения цикла, где определяется значение счетчика, производится проверка полученного значения и предусмотрено два варианта вывода результата на консоль.

На последнем пункте следует остановиться особо. В случаях, когда задача не является элементарной, или результат зависит от введенных пользователем данных, всегда существует вероятность невозможности получения требуемого решения. В данной задаче это связано с возможным отсутствием четных элементов в массиве. В таких случаях необходимо наличие проверки перед выводом результата и выдача осмысленного сообщения о причинах, почему результат не может быть получен.