Багатовимірний масив

Ми вже ознайомилися зі звичайними масивами. Тому, ми вже знаємо, що масив це набір однотипної інформації.

Раніше ми розглянули масив який називають Все через те, що інформацію в ньому записувалася в одному рядку. Немов стрічка. Наприклад, цифри номеру телефону Як помітно вони записані стрічкою.

В пам’яті комп’ютера воно буде мати приблизно такий вигляд:

012345

Тобто, це є послідовні комірки в які записується якась інформація.

Звісно, дану інформацію ви можете виводити по різному. У вигляді рядка, стовпця, таблиці, тощо.

Якщо ваша інформація є одного типу і ви завчасно знаєте, що її краще за все зберігати у вигляді таблиці, то ідеальним рішенням буде використання масиву.

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

Сергіїв Андрій
Олешків Світлана
Макарів Микола

Як помітно, наша таблиця складається з трьох рядків та двох стовпців. Розмір таблиці записують так: Тобто, з першу йдуть рядки, а потім стовпці.

При бажанні ви можете створити дану таблицю у вигляді рядків та стовпців. Тобто, розміром

Звісно, при бажанні ви можете записувати першими стовпці, а потім рядки. Логіка буде абсолютно такою ж. Єдине чим це відрізнятиметься, то записом у циклі.

Сергіїв Олешків Макарів
Андрій Світлана Микола

Для того щоб створити багатовимірний масив у С++ достатньо після іменні змінної у квадратних дужках записати його розміри. Наприклад, двохвимірний масив виглядатиме так:


        Тип_змінних ім’я_масиву [к-сть_ рядків] [к-сть_ стовпців];
        

Відповідно, тепер щоб звернутися до якогось елементу потрібно вказувати номер його стовпця та рядка. Пам’ятаємо, що відлік розпочинається з нуля!

Наприклад, якщо ми маємо масив розміром то його елементи будуть мати такі номера:

[0][0] [0][1]
[1][0] [1][1]
[2][0] [2][1]

Пам’ятаємо, першим йде номер рядка, другим номер стовпця в якому знаходиться елемент.

Для того щоб заповнити весь масив значеннями отриманими від користувача потрібно використовувати два цикл (можна і цикли один з яких буде рухатись по елементам рядка інший по елементам стовпця. При цьому один з циклів має бути в середині іншого.

    
            #include <iostream>
            int main()
            {
                //створюємо масив з "2" рядками та "3" стовпцями
                int mas[2][3];

                //заповнюємо масив елементами
                //перший цикл дозволяє рухатися по рядках (бо "i < 2")
                for(int i = 0; i < 2; i++)
                {
                    //другий по стовпцях (бо j < 3)
                    //враховуючи, що внутрішній цикл йде по стовпцях, то з першу
                    //заповнюємо всі стовпці першого рядка, потім переходимо
                    //до наступних рядків
                    for(int j = 0; j < 3; j++)
                    {
                        std::cout<<"input number in element:\n"
                                 << "[" << i << "][" << j << "] = ";

                        //вказуємо елемент "i-го" рядка та "j-го" стовпця
                        std::cin >> mas[i][j];
                    }
                }

                //виводимо елементи масиву
                //рухаємося по рядках
                for(int i = 0; i < 2; i++)
                {
                    //потім по стовпцях
                    //оскільки стовпці є в середині, то їх виведемо першими
                    for(int j = 0; j < 3; j++)
                    {
                        std::cout << " mas [" << i << "] [" << j << "] = " << mas[i][j];
                    }

                    //після заповнення першого рядка (після завершення внутрішнього циклу)
                    //наступний почнеться з нового
                    std::cout << std::endl;
                }
                return 0;
            }
        
    

Ви можете ініціалізувати значеннями елементи масиву. Оскільки багатовимірний масив можна розцінювати як масив значення якого є також масивами, то відповідно для ініціалізації таких масивів ми маємо в якості значень передавати масиви.

Це складно зрозуміти на практиці, тому розглянемо це на прикладі.

    
            #include <iostream>
            int main()
            {
                //створимо масив у якому буде "2" рядки
                //та "3" стовпці
                //виходить, що кожен рядок буде складатися з "3-х" стовпців
                //тому значення кожного рядка можна розглядати як масив
                //значень з кожного стовпця
                int mas[2][3] = { {1, 2, 3}, {4, 5, 6} };

                for(int i = 0; i < 2; i++)
                {
                    for(int j = 0; j < 3; j++)
                    {
                        std::cout << mas[i][j] << " ";
                    }
                    std::cout << std::endl;
                }

                return 0;
            }
        
    

У рядку:


        int mas[2][3] = { {1, 2, 3}, {4, 5, 6} };
        

Ви можете помітити, що при ініціалізації даного масиву ми маємо внутрішні та зовнішні фігурні дужки. Таке можливо лише, коли ви маєте багатовимірний масив. У нас є два внутрішні масиви. Їх кількість відповідає кількості вказаних рядків І в кожному з внутрішніх масивів знаходиться по три елементи. Кількість елементів відповідає вказаній кількості стовпців

Якщо ви будете ініціалізувати масив при створенні, то краще за все вказувати кількість рядків та стовпців. Хоча компілятор може самостійно визначити кількість рядків але при цьому кількість стовпців має бути вказана обов’язково!

Якщо ж ви вкажете кількість елементів більше чим ініціалізуєте, то програма заповнить порожні місця нулями (при числах) або пропусками (при символах).

    
            #include <iostream>
            int main()
            {
                //створимо масив у якому буде "3" рядки
                //та "4" стовпці
                //виходить, що кожен рядок буде складатися з "4-х" стовпців
                //тому значення кожного рядка можна розглядати як масив
                //значень з кожного стовпця
                //при цьому не всі значення є ініціалізованими, тому
                //не іціалізовані значення будуть нулями
                int mas[3][4] = { {7, 8}, {1}, {4, 5, 6} };

                for(int i = 0; i < 3; i++)
                {
                    for(int j = 0; j < 4; j++)
                    {
                        std::cout << mas[i][j] << " ";
                    }
                    std::cout << std::endl;
                }

                return 0;
            }
        
    

Масиви можуть бути не лише «одновимірними» чи «двовимірними», а і більше. Для цього лише необхідно вказати додаткові квадратні дужки.


        Тим_масиву ім’я_масиву [к-сть_елементів][к-сть_елементів][к-сть_елементів];
        

Це є «тривимірний» масив. Створювати масиви більші за тривимірні не рекомендується, оскільки їх важко уявити в реальному житті (по факту цього досі не зробили). Зараз ще тривимірний простір можна порівняти з тривимірною системою координат, де ми маємо координати по осях

Для роботи з такими масивами потрібно використовувати вже три цикли послідовно вкладені один в одного.

Щоб звернутися до елементу такого масиву тепер потрібно вказувати три його координати.

    
            #include <iostream>
            int main()
            {
                int mas[2][3][4];
                int k = 1; //рядок для заповнення інформації програмно
                           //можна за коментувати

                for(int x = 0; x < 2; x++)
                {
                    for(int y = 0; y < 3; y++)
                    {
                        for(int z = 0; z < 4; z++)
                        {
                            std::cout << "input number in element"
                                      << "mas[" << x << "][" << y << "][" << z << "] = "
                                      << k << std::endl;  //щоб не вводити значення
                            mas[x][y][z] = k;             //в ручну ми заповнюємо
                            k++;                          //програмно

                            //std::cin >> mas[x][y][z];   //рядок, якщо потрібно ввести в ручну.
                                                          //тоді попередні за коментуйте
                        }
                    }
                }

                for(int x = 0; x < 2; x++)
                {
                    for(int y = 0; y < 3; y++)
                    {
                        for(int z = 0; z < 4; z++)
                        {
                            std::cout << "mas[" << x << "][" << y << "][" << z << "] = " << mas[x][y][z] << " ";
                        }
                        std::cout << std::endl;
                    }
                    std::cout << std::endl << std::endl;
                }

                return 0;
            }