Работа с массивами...93

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

    /* ArrayDemo — демонстрирует использование массивов. Считывает последовательность целых чисел и отображает их по порядку */

    #include <cstdio>

    #include <cstdlib>

    #include <iostream>

    using namespace std ;

    /* объявления прототипов функций */

    int sumArray( int integerArray[ ] , int sizeOfloatArray ) ;

    void displayArray( int integerArray[ ] , int sizeOfloatArray ) ;

_________________

93 стр. Глава 7. Хранение последовательностей в массивах

    int main( int nArg , char* pszArgs[ ] )

    {

        setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */

        /* Описываем счётчик цикла */

        int nAccumulator = 0 ;

        cout << "Эта программа суммирует числа,"

        << " введённые пользователем " ;

        cout << "Цикл прерывается, когда"

              << " пользователь вводит "

              << "отрицательное число " ;

        /* Сохраняем числа в массиве */

        int inputValues[ 128 ] ;

        int numberOfValues = 0 ;

        for ( numberOfValues = 0 ; numberOfValues < 128 ; numberOfValues++ )

        {

            /* Ввод очередного числа */

            int integerValue ;

            cout << "Введите следующее число: " ;

            cin >> integerValue ;

            /* Если оно отрицательное... */

            if ( integerValue < 0 )

           {

                /* ...тогда выходим из цикла */

                break ;

            }

            /* ...иначе сохраняем число в массиве */

            inputValues[ numberOfValues ] = integerValue ;

        }

        /* Теперь выводим значения и их сумму */

        displayArray( inputValues , numberOfValues ) ;

        cout << "Сумма введённых чисел равна "

               << sumArray( inputValues , numberOfValues )

               << endl ;

        /* Пауза для того, чтобы посмотреть на результат работы программы */

        system( "PAUSE" ) ; return 0 ;

    }

    /* displayArray — отображает элементы массива integerArray длиной sizeOfloatArray */

    void displayArray( int integerArray[ ] , int sizeOfArray )

    {

        cout << "В массиве хранятся"

                << " следующие значения: " ;

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

        {

            cout.width( 3 ) ;

            cout << i << ": " << integerArray[ i ] << endl ;

         }

        cout << endl ;

    }

_________________

94 стр. Часть 2. Становимся функциональными программистами

    /* sumArray — возвращает сумму элементов целочисленного массива */

    int sumArray( int integerArray[ ] , int sizeOfArray )

    {

        int accumulator = 0 ;

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

        {

            accumulator += integerArray[ i ] ;

        }

        return accumulator ;

    }

Программа ArrayDemo начинается с объявления прототипов функций sumArray( ) и displayArray( ), которые понадобятся нам позже. Главная часть программы содержит довольно скучный цикл ввода значений. На этот раз вводимые значения сохраняются в массиве inputValues.

Если введённое значение отрицательно, цикл прерывается при помощи инструкции break, если же нет — оно копируется в массив. Целочисленная переменная numberOfValues используется в качестве индекса массива. Она инициализирована нулём в начале цикла for. При каждой итерации индекс увеличивается. В условии выполнения цикла for осуществляется контроль за тем, чтобы количество введённых чисел не превышало 128, т.е. размера массива ( после введения 128 чисел программа переходит к выводу элементов массива на экран независимо от того, ввёл пользователь отрицательное число или нет ).

«В объявлении массива inputValues было указано, что его максимальная длина равна 128. При записи большего числа данных, чем определено в объявлении, ваша программа может работать неправильно и даже аварийно завершать работу. Поэтому лучше застраховаться и оставить больше места для хранения данных. Неважно, насколько велик массив; всегда нужно следить за тем, чтобы операции с массивом не приводили к выходу за его пределы.»

[Атас!]

Функция main заканчивается выводом на экран содержимого массива и суммы его элементов.

«Среда Dev-C++ может помочь вам в работе с исходными текстами, в которых имеется много функций. На рис. 7.1 показано содержимое вкладки Classes ( Классы ), в которой перечисляются все функции в исходном файле. Двойной щелчок на имени функции переносит вас в окне редактирования в строку с этой функцией.»

[Советы]

Функция displayArray( ) содержит обычный цикл for, который используется для прохождения по массиву. Каждый очередной элемент массива добавляется к переменной accumulator. Передаваемый функции параметр sizeOfArray включает количество значений, содержащихся в массиве.

Напомню ещё раз, что индекс массива в С++ отсчитывается от 0 , а не от 1. Кроме того, обратите внимание, что цикл for прерывается в тот момент, когда значение i становится равным sizeOfArray. Вы же не хотите добавлять все 128 элементов массива integerArray к accumulator? Ни один элемент массива, индекс которого больше или равен числу sizeOfArray, учитываться не будет. Вот как выглядит пример работы с этой программой:

_________________ 

95 стр. Глава 7. Хранение последовательностей в массивах

    Эта программа суммирует числа, введённые пользователем

    Цикл прерывается, когда пользователь вводит

    отрицательное число

    Введите следующее число: 1

    Введите следующее число: 2

    Введите следующее число: 3

    Введите следующее число: -1

    В массиве хранятся следующие значения:

    0: 1

    1: 2

    2: 3

    Сумма введённых чисел равна 6

    Press any key to continue...

Рис. 7.1. Вкладка Классы выводит информацию о функциях, составляющих программу