Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Многомерные массивы




Многомерные массивы фиксированного размера задаются указанием каждого измерения в квадратных скобках, например, оператор

int Mas [6][8];

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

Все многомерные массивы в C++ имеют индексы, которые начинаются с нуля.

Другие варианты объявления многомерных массивов:

 

const int Nmax = 5, Mmax = 5;

 

int Mas1[Nmax][Mmax];

int Mas2[Nmax][Mmax] = { {0} }; // все элементы равны 0

int Mas3[Nmax][Mmax] = { {1, 2}, {3, 4}, {5, 6} };

// проинициализированы по 2 элемента в 3 строках, остальные элементы равны 0

int Mas4[Nmax+10][Mmax];

int Mas5[3][2] = {1, 1, 0, 2, 1, 0}; // число строк – 3, столбцов – 2

int Mas6[ ][2] = {1, 1, 0, 2, 1, 0}; // число строк – 3

 

Для многомерного массива может быть опущена только первая размерность.

Для доступа к элементу многомерного массива указываются все его индексы, например, Mas[i][j], где

В следующем примере приведены блоки ввода и вывода двумерного массива:

 

#include <stdio.h>

 

void main()

{

const int Nmax = 5, Mmax = 5; // максимальная размерность

 

int Mas[Nmax][Mmax];

int N, M; // реальное число строк и столбцов

 

printf("\n N = "); // ввод реальной размерности матрицы

scanf("%d", &N);

printf(" M = ");

scanf("%d", &M);

for (int i = 0; i < N; i++) // блок ввода матрицы

for (int j = 0; j < M; j++)

{

printf(" Mas[%d][%d] = ", i + 1, j + 1);

scanf("%d", &Mas[i][j]);

}

 

printf("\n\n Massiv\n");

for (int i = 0; i < N; i++) // блок вывода матрицы

{

for (int j = 0; j < M; j++)

printf("%5d", Mas[i][j]);

printf("\n");

}

}

Вид экрана во время выполнения программы:

 

N = 3

M = 2

Mas[1][1] = 1

Mas[1][2] = 2

Mas[2][1] = 3

Mas[2][2] = 4

Mas[3][1] = 5

Mas[3][2] = 6

 

Massiv

1 2

3 44

5 6

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

Пример 1. Заполнить нулями выделенную часть матрицы, перемещаясь по строкам слева направо и сверху вниз.

 

for (int i = 0; i < N-1; i++) for (int j = i+1; j < N; j++) Mas[i][j] = 0;  

 

Пример 2. Заполнить нулями выделенную часть матрицы, перемещаясь по строкам сверху вниз и справа налево.

 

for (int j = N-1; j >=0; j--) for (int i = 0; i <= j; i++) Mas[i][j] = 0;  

 

Пример 3. Поменять местами верхнюю и нижнюю половины матрицы, перемещаясь по строкам слева направо и сверху вниз.

 

for (int i = 0; i < N / 2; i++) for (int j = 0; j < M; j++) { temp =Mas[i][j]; Mas[i][j] = Mas[N/2 + i][j]; Mas[N/2 + i][j] = temp; }
Исходная матрица 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6   Матрица после перестановки 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3  

 




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 276; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.