Четверг, 25.04.2024, 08:33
Discovery
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Форма входа
Категории раздела
PHP [1]
Уроки по PHP для начинающих
C++ [18]
Статьи посвященные С++
XML [2]
Статьи по XML
Математика программистам [0]
Нужна ли программистам математика? Да вроде и не нужна... Или все же нужна? И если да то в каком объеме? Давайте попробуем разобраться в этом вместе!
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
     Каталог статей
    -->
    Главная » Статьи » Программирование » C++

    Многомерные массивы в С++. Объявление, инициализация, использование.

    Многомерные массивы в С++. Объявление, инициализация, использование.

    Кроме одномерных массивов в С++ существуют двух и более мерные массивы. Вот как будет выглядеть объявление трехмерного массива, который содержит элементы типа int:

    int array[10][2][2];

    А вот как будет выглядеть код, с помощью которого выводиться первый элемент данного массива:

    cout << arrray[0][0][0];

    Конечно, никто не может нам запретить использовать только одномерные массивы, но иногда их использование может сильно запутать логику программы а, следовательно, и ее код. Для того чтобы понять, о чем я говорю, давайте представим, что мы получили задание написать программу, которая сначала предлагает пользователю ввести координаты пяти точек по трем осям: x, y и z соответственно. А затем выводит сведения насколько вторая, третья, четвертая и так далее вплоть до пятой точки отличаются от первой по оси x, по оси y и по оси z от первой точки. Для этого нам потребуется массив типа float состоящий из пятнадцати элементов. Вот как будет выглядеть объявление одномерного массива:

    float coordinates[15];

    И так что у нас получается в этом случае... В первый элемент мы записываем координату точки 1 по оси x, в следующий элемент координату той же точки по оси y, а в третий элемент координату по оси z. В четвертый, пятый и шестой элемент координаты второй точки и так далее до точки 5. В этом случае нам придется придумать изощренную систему, что бы присвоить координату определенному элементу, и такую же изощренную систему, когда мы будем выводить результаты работы программы на экран. Писать эту программу я не буду. Вместо нее я привожу код программы, с использованием двухмерного массива:

    #include <iostream>
    #include <windows.h>
    using namespace std;

    int main()
    {
        float coordinates[5][3];

        for(int i=0; i<5; i++)
        {
            cout << "Введите координаты точки " << i+1 << " по оси x: ";
            cin >> coordinates[i][0];
            cout << "\n";

            cout << "Введите координаты точки " << i+1 << " по оси y: ";
            cin >> coordinates[i][1];
            cout << "\n";

            cout << "Введите координаты точки " << i+1 << " по оси z: ";
            cin >> coordinates[i][2];
            cout << "\n";
        }

        cout << "\n\n";
        cout << "Изменение координат по оси x.\n\n";

        for(int i=1; i<5; i++)
        {
            if(coordinates[0][0] == coordinates[i][0])
            {
                cout << "Координата точки " << i+1 << " по оси x равна "
                        << "координате точки 1 по той же оси.\n";
            }
            else if(coordinates[0][0] > coordinates[i][0])
            {
                cout << "Координата точки " << i+1 << " по оси x больше "
                       << "координаты точки 1 по той же оси на ";
                cout << coordinates[0][0] - coordinates[i][0];
                cout << ".\n";
            }
            else
            {
                cout << "Координата точки " << i+1 << " по оси x меньше "
                       << "координаты точки 1 по той же оси на ";
                cout << coordinates[i][0] - coordinates[0][0];
                cout << ".\n";
            }
        }

        cout << "\n\n";
        cout << "Изменение координат по оси y.\n\n";

        for(int i=1; i<5; i++)
        {
            if(coordinates[0][1] == coordinates[i][1])
            {
                cout << "Координата точки " << i+1 << " по оси y равна "
                       << "координате точки 1 по той же оси.\n";
            }
            else if(coordinates[0][1] > coordinates[i][1])
            {
                cout << "Координата точки " << i+1 << " по оси y больше "
                       << "координаты точки 1 по той же оси на ";
                cout << coordinates[0][1] - coordinates[i][1];
                cout << ".\n";
            }
            else
            {
                cout << "Координата точки " << i+1 << " по оси y меньше "
                       << "координаты точки 1 по той же оси на ";
                cout << coordinates[i][1] - coordinates[0][1];
                cout << ".\n";
            }
        }

        cout << "\n\n";
        cout << "Изменение координат по оси z.\n\n";

        for(int i=1; i<5; i++)
        {
            if(coordinates[0][2] == coordinates[i][2])
            {
                cout << "Координата точки " << i+1 << " по оси z равна "
                       << "координате точки 1 по той же оси.\n";
            }
            else if(coordinates[0][2] > coordinates[i][2])
            {
                cout << "Координата точки " << i+1 << " по оси z больше "
                       << "координаты точки 1 по той же оси на ";
                cout << coordinates[0][2] - coordinates[i][2];
                cout << ".\n";
            }
            else
            {
                cout << "Координата точки " << i+1 << " по оси z меньше "
                       << "координаты точки 1 по той же оси на ";
                cout << coordinates[i][2] - coordinates[0][2];
                cout << ".\n";
            }
        }

        cout << "\n\n";
        system("PAUSE");
        return 0;
    }

    Хочу обратить ваше внимание, что если мы захотим изменить количество точек увеличив их до десяти, то нам для этого достаточно лишь изменить объявление массива и условия в четырех циклах for. Если же мы захотим увеличить количество координат у каждой точки, это то же не будет слишком сложным.

    Многомерный массив можно инициализировать как одномерный массив в одну строчку. Внизу пример такой инициализации:

    #include <iostream>
    #include <windows.h>
    using namespace std;

    int main()
    {
        float coordinates[5][3] = {1.1, 1.2, 1.3, 2.1, 2.2,
        2.3, 3.1, 3.2, 3.3, 4.1, 4.2, 4.3, 5.1, 5.2, 5.3};

        for(int i=0; i<5; i++)
        {
            for(int j=0; j<3; j++)
            {
                cout << "coordinates[" << i << "][" << j << "] - ";
                cout << coordinates[i][j] << "\n";
            }
        }
        cout << "\n\n";
        system("PAUSE");
        return 0;
    }

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

    #include <iostream>
    #include <windows.h>
    using namespace std;

    int main()
    {
        float coordinates[5][3] =
        {
            {1.1, 1.2, 1.3},
            {2.1, 2.2, 2.3},
            {3.1, 3.2, 3.3},
            {4.1, 4.2, 4.3},
            {5.1, 5.2, 5.3}
        };

        for(int i=0; i<5; i++)
        {
            for(int j=0; j<3; j++)
            {
                cout << "coordinates[" << i << "][" << j << "] - ";
                cout << coordinates[i][j] << "\n";
            }
        }
        cout << "\n\n";
        system("PAUSE");
        return 0;
    }

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

    Ну и для полноты, давайте создадим трехмерный массив и выведем его на экран:

    #include <iostream>
    #include <windows.h>
    using namespace std;

    int main()
    {
        float coordinates[3][3][3] =
        {
            {
                {1.1, 1.2, 1.3},
                {2.1, 2.2, 2.3},
                {3.1, 3.2, 3.3}
            },

            {
                {4.1, 4.2, 4.3},
                {5.1, 5.2, 5.3},
                {6.1, 6.2, 6.3}
            },

            {
                {7.1, 7.2, 7.3},
                {8.1, 8.2, 8.3},
                {9.1, 9.2, 9.3}
            }
        };

        for(int i=0; i<3; i++)
        {
            for(int j=0; j<3; j++)
            {
                for(int k=0; k<3; k++)
                {
                    cout << "coordinates[" << i << "]"
                           << "[" << j << "]"
                           << "[" << k << "] - ";
                    cout << coordinates[i][j][k] << "\n";
                }
            }
        }
        cout << "\n\n";
        system("PAUSE");
        return 0;
    }

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

    Категория: C++ | Добавил: stranger140569 (06.03.2013)
    Просмотров: 7949 | Комментарии: 1 | Рейтинг: 5.0/1
    Всего комментариев: 1
    1 Redee  
    0
    Спасибо!

    Имя *:
    Email *:
    Код *:
    Copyright MyCorp © 2024
    Конструктор сайтов - uCoz