русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


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


Дата додавання: 2014-04-22; переглядів: 1479.


Мова С++ інтерпретує багатовимірний масив як масив масивів, тобто масив, елементами якого є масиви меншої вимірності. Матриця цілих чисел, яку оголошено таким чином:

 

int matr[ 10 ][ 5 ];

 

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

Для збереження цієї матриці в оперативній пам'яті буде виділено неперервну ділянку пам'яті обсягом 10 * 5 * sizeof( int ) байтів. При цьому спочатку в пам'яті розташований перший рядок, після нього – другий, і так далі.

В оголошеннях багатовимірних масивів в окремих квадратних дужках вказується кількість елементів для кожного з вимірів. Багатовимірні масиви можна ініціалізувати в оголошеннях. Наприклад

 

#include <iostream>

using namespace std;

int main() {

int i, j, a[ 2 ][ 3 ] = { 1, 2, 3, 4, 5, 6 };

for ( i = 0; i < 2; i++ ) {

for ( j = 0; j < 3; j++ )

cout << a[ i ][ j ] << " ";

cout << endl;

}

}

 

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

 

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

 

Кількість рядків матриці обчислюється як частка від ділення кількості даних у списку ініціалізації на відому кількість елементів в одному рядку матриці.

Ще один варіант виконання ініціалізації – використання такої додаткових фігурних дужок для виділення рядків даних. Як і для одновимірних масивів, ініціалізація може бути не повною. Елементам масиву без ініціалі заторів будуть присвоєні нульові значення.

 

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

int b[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };

 

Для доступу до елементів багатовимірного масиву за допомогою індексної форми звертання в окремих квадратних дужках вказують значення індексів для кожного з вимірів.

Знайдемо суму елементів в кожному з рядків матриці і кожному стовпчику матриці, заповненої випадковими числами.

 

#include <iostream>

#include <ctime>

using namespace std;

int main() {

srand( unsigned( time( NULL ) ) );

const int NROWS = 3; // кількість рядків

const int NCOLS = 4; // кількість стовпчиків

int a[ NROWS ][ NCOLS ];

int i, j, s;

for ( i = 0; i < NROWS; i++ ) {

for ( j = 0; j < NCOLS; j++ ) {

a[ i ][ j ] = rand( ) % 10;

cout << a[ i ][ j ] << " ";

}

cout << endl;

}

// Сума елементів в кожному рядку

for ( i = 0; i < NROWS; i++ ) {

for ( j = 0, s = 0; j < NCOLS; j++ )

s += a[ i ][ j ];

cout << "Row # " << i << " : " << s << endl;

}

// Сума елементів в кожному стовпчику

for ( i = 0; i < NCOLS; i++ ) {

for ( j = 0, s = 0; j < NROWS; j++ )

s += a[ j ][ i ];

cout << "Col # " << i << " : " << s << endl;

}

}

 

В кінотеатрі 15 рядів по 12 крісел. Ряди поділені на 3 сектора: місця у 1 – 5 рядах коштують 10 гривень, 6 – 14 рядах – 20 гривень, 15 ряді – 100 гривень. Імовірність продати білет на місце в 1 – 5 ряді складає 0,8, на 6 – 14 ряді – 0,4, на 15 ряді – 0,2. Виконати імітаційне моделювання процесу продажу квитків. Знайти загальну вартість проданих квитків і вартість проданих квитків для кожного з секторів.

 

#include <iostream>

#include <ctime>

using namespace std;

int main() {

srand( unsigned( time( NULL ) ) );

const int NROWS = 15; // кількість рядків

const int NCOLS = 12; // кількість стовпчиків

int a[ NROWS ][ NCOLS ];

int b[ NROWS ] = {

10, 10, 10, 10, 10,

20, 20, 20, 20, 20, 20, 20, 20, 20,

};

double c[ NROWS ] = {

0.8, 0.8, 0.8, 0.8, 0.8,

0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,

0.2

};

int i, j, s;

// Заповнимо кінотеатр глядачами

for ( i = 0; i < NROWS; i++ ) {

for ( j = 0; j < NCOLS; j++ ) {

if ( rand( ) % 10 < c[ i ] * 10 )

a[ i ][ j ] = 1;

else

a[ i ][ j ] = 0;

cout << a[ i ][ j ] << " ";

}

cout << endl;

}

// Знайдемо вартість проданих квитків

for ( i = 0, s = 0; i < NROWS; i++ )

for ( j = 0; j < NCOLS; j++ )

s += a[ i ][ j ] * b[ i ];

cout << s << endl;

// Вартість проданих квитків по кожному з секторів

int sum[ 3 ] = { };

for ( i = 0, s = 0; i < NROWS; i++ )

for ( j = 0; j < NCOLS; j++ )

switch ( i ) {

case 0: case 1: case 2: case 3: case 4:

sum[ 0 ] += a[ i ][ j ] * b[ i ]; break;

case 5: case 6: case 7: case 8: case 9:

case 10: case 11: case 12: case 13:

sum[ 1 ] += a[ i ][ j ] * b[ i ]; break;

case 14:

sum[ 2 ] += a[ i ][ j ] * b[ i ]; break;

}

for ( i = 0; i < 3; i++ )

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

}


<== попередня лекція | наступна лекція ==>
Одновимірні масиви | Символьні рядки


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн