Опубликован: 02.02.2011 | Уровень: для всех | Доступ: свободно
Лекция 14:

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

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >
Аннотация: В лекции рассматриваются понятие, определение, объявление, инициализация, генерация и вывод двумерных массивов, расположение в памяти элементов массивов, связь между указателями и двумерными массивами, типовые алгоритмы поиска, замены и суммирования в двумерных массивах.

Цель лекции: изучить понятия, особенности внутреннего представления способы генерации и вывода многомерных массивов, научиться выполнять объявление, инициализацию, генерацию и вывод двумерных массивов, использование алгоритмов поиска, замены и суммирования в двумерных массивах при решении задач на языке C++.

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

Двумерные массивы состоят из строк и столбцов.

Объявление двумерных массивов

Синтаксис определения массива без дополнительных спецификаторов и модификаторов имеет два формата:

Тип ИмяМассива[ВыражениеТипаКонстанты][ВыражениеТипаКонстанты];

или

Тип ИмяМассива[][];

ИмяМассиваидентификатор массива.

Тип – тип элементов объявляемого массива. Элементами массива не могут быть функции, файлы и элементы типа void.

ВыражениеТипаКонстанты – задает количество элементов (размерность) массива. Выражение константного типа вычисляется на этапе компиляции. Данное константное выражение может быть опущено в случаях если:

  • при объявлении массив инициализируется;
  • массив объявлен как формальный параметр функции;
  • массив объявлен как ссылка на массив, явно определенный в другом файле.

Например:

  1. int a[100][50];//массив из 100x50 элементов целого типа
  2. double d[4][10];// массив из 4x10 элементов типа double
  3. int t=5, k=8;
    float wer[2*t+k][2*t+k]; 
    //массив из (2*t+k)x(2*t+k) элементов вещественного типа
  4. int sample[853][157]; 
    //массив из 853 строк  и 157 столбцов, элементы типа int
    равносильно объявлению
    const int N_max=853,
          int M_max=157;
    int sample[N_max][M_max];
    равносильно объявлению
    #define N_max 853
    #define M_max 157
    ...
    int sample[N_max][M_max];

Двумерные массивы располагаются в памяти в порядке быстрого изменения последнего индекса. Так, например, данные двумерного массива (состоящего из 3 строк и 10 столбцов и определенного как float A[3][10]; ), располагаются следующим образом:

Строки Столбцы
1 2...9
1 A[0][0] A[0][1] ... A[0][9]
2 A[1][0] A[1][1] ... A[1][9]
3 A[2][0] A[2][1] ... A[2][9]

Инициализация двумерных массивов

Двумерные массивы инициализируются так же, как и одномерные.

Например:

int w[3][3]={ 
//инициализируется целочисленный массив размерностью 3x3
                {2, 3, 4}, //1-я строка
                {3, 4, 8}, //2-я строка
                {1, 0, 9} //3-я строка
               };

float w[2][3]={ 
//инициализируется вещественный массив размерностью 2x3
                {2.1, 3.4, 4.5}, //1-я строка
                {5.0, 6.4, 3.9} //2-я строка
               };

равносильно инициализации

float w[][3]={ 
                {2.1, 3.4, 4.5}, //1-я строка
                {5.0, 6.4, 3.9} //2-я строка
               };

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

int w[3][5]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
1 2 3 4 5
6 7 8 9 10
11
int w[3][5]={{1, 2, 3}, {4, 5, 6, 7, 8}, {9, 10, 11}};
1 2 3
4 5 6 7 8
9 10 11

Обращение к элементам двумерного массива

Обращение к элементам двумерного массива осуществляется так же, как и к элементам одномерного.

ИмяМассива[ВыражениеТипаКонстанты][ВыражениеТипаКонстанты];

или

ИмяМассива[ЗначениеИндекса][ЗначениеИндекса];

Например:

a[0][0]индекс задается как константа,

d[55][5]индекс задается как константа,

s[i][j]индекс задается как переменная,

w[4*p][3+t]индекс задается как выражение.

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >
Денис Курбатов
Денис Курбатов
Выполнение каких функций не изменяет позицию указателя в файле?
Владислав Нагорный
Владислав Нагорный
Высшее образование
Сергей Злобин
Сергей Злобин
Россия, Подольск
Олег Корсак
Олег Корсак
Латвия, Рига