Шаг 53.
Язык программирования C#. Начала
Массивы. Операции с массивами (продолжение)

    На этом шаге мы рассмотрим алгоритм нахождения наибольшего элемента в массиве.

    Как пример обработки содержимого массива рассмотрим задачу о поиске наибольшего элемента в числовом массиве. Соответствующая программа представлена ниже.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pr53_1
{
    class Program
    {
        static void Main()
        {
            // Переменные для записи значения элемента и индекса: 
            int value, index;
            // Размер массива: 
            int size = 15;
            // Объект для генерирования случайных чисел:
            Random rnd = new Random();
            // Создание массива: 
            int[] nums= new int[size];
            // Заполнение и отображение массива: 
            for (int k = 0; k < nums.Length; k++){
                // Значение элемента массива: 
                nums[k] = rnd.Next(1,101);
                // Отображение значения элемента:
                Console.Write(nums[k]+" ");
            }
            Console.WriteLine();
            // Поиск наибольшего элемента:
            index = 0;	// Начальное значение для индекса
            value = nums[index]; // Значение элемента с индексом
            // Перебор элементов:
            for (int k = 1; k < nums.Length; k++){
                // Если значение проверяемого элемента больше 
                // текущего наибольшего значения: 
                if ( nums[k] > value ){
                    value = nums[k]; // Новое наибольшее значение 
                    index = k;	// Новое значение для индекса
                }
            }
            // Отображение результата:
            Console.WriteLine("Наибольшее значение: " + value);
            Console.WriteLine("Индекс элемента: " + index);
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

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


Если в массиве несколько элементов с максимальным значением, то выводится индекс первого из этих элементов.

    Результат выполнения программы может быть таким (с поправкой на использование генератора случайных чисел).


Рис.1. Результат работы приложения

    Для запоминания значения элемента и его индекса используются целочисленные переменные value и index. Размер массива, который создается и заполняется случайными числами, определяется значением целочисленной переменной size (значение переменной равно 15 - то есть создается массив из 15 элементов). Для генерирования случайных чисел с помощью команды

  Random rnd = new Random();
создаем объект rnd класса Random.


Объект создается инструкцией new Random(), а ссылка на этот объект записывается в объектную переменную rnd. После этого переменную rnd можно отождествлять с данным объектом. У объекта есть метод Next(), возвращающий результатом случайное целое число. Диапазон возможных значений определяется аргументом (или аргументами) метода.

    Целолочислснный массив создается командой

  int[] nums= new int[size];    .
После этого для заполнения массива запускается конструкция цикла, в котором локальная индексная переменная k последовательно перебирает значения индексов элементов массива. В каждой итерации цикла выполняется команда
  nums[k] = rnd.Next(1,101);   ,
которой элементу массива nums с индексом k в качестве значения присваивается случайное целое число в диапазоне от 1 до 100 включительно.


Если при вызове методу Next() передается неотрицательное целое число, то результатом является случайное целое число в диапазоне от 0 и строго меньше числа, переданного аргументом методу. Если аргументом методу Next() переданы два неотрицательных целых числа, то результатом является случайное число, большее или равное первому аргументу и строго меньшее второго аргумента. Например, если мы вызываем метод Next() с аргументами 1 и 101 (команда rnd.Next (1,101)), то в результате будет сгенерировано число в диапазоне возможных значений от 1 до 100 включительно.

    После присваивания значения элементу массива это значение отображается в консольном окне командой

  Console.Write(nums[k]+" ");     .

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

  index = 0;	// Начальное значение для индекса
переменной index значением присваивается начальное нулевое значение - это индекс первого элемента в массиве. Переменной value значение присваивается командой
  value = nums[index]; // Значение элемента с индексом    .
Это значение первого элемента в массиве. После присваивания начальных значений переменным value и index запускается цикл, в котором перебираются все элементы массива, кроме начального. Поэтому в этой конструкции цикла локальная индексная переменная k принимает значения, начиная с 1 (а не с 0, как было ранее). В теле цикла размещена условная конструкция. В ней проверяется условие nums[k] > value. Состоит оно в том, что проверяемый элемент массива nums[k] имеет значение большее, чем текущее значение в переменной value. Если условие истинно, то командой
  value = nums[k]; // Новое наибольшее значение 
переменной value присваивается новое значение (значение проверяемого элемента массива). Также командой
  index = k;	// Новое значение для индекса
присваивается новое значение переменной index (это индекс проверяемого элемента).

    Таким образом, после завершения выполнения цикла в переменную value записано значение наибольшего элемента в массиве, а и переменную index записано значение индекса этого элемента (если таких элементов несколько, то индекс первого из них). Командами

  Console.WriteLine("Наибольшее значение: " + value);
и
  Console.WriteLine("Индекс элемента: " + index);
вычисленные значения отображаются в консольном окне.


Если в условии в условной конструкции условие "больше" > заменить на "больше или равно" >=, то программа будет работать так же, за исключением одного момента. Если в массиве несколько элементов с наибольшим значением, то будет вычисляться индекс последнего из этих элементов.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг