Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ Лабораторная работа № 6 КТ.doc
Скачиваний:
57
Добавлен:
28.05.2015
Размер:
1.57 Mб
Скачать

Двумерный массив Теория

Данные из прямоугольных таблиц хранятся в двумерных массивах или матрицах. Каждый элемент двумерного массива характеризуется двумя индексами: первый индекс это номер строки, в которой находится данный элемент, второй индекс – номер столбца.

Массивы языка С могут иметь только один индекс, но при этом элементами массивов могут быть другие массивы, что позволяет создавать многомерные массивы. Пример двумерного массива в C:

char page[30] [100];

Приведенный массив, по существу, является одномерным 30-элементным массивом, базовый тип которого представлен одномерным 100-символьным массивом.

Объявление многомерного массива Синтаксис:

Тип Имя_массива[Разм_Измер_1] [Разм_Измер_2]...[Разм Измер_N];

Например:

int matrix[2][3];

double three_d_picture[10][20][30];

Для работы с элементами двумерного массива требуется два вложенных цикла: внешний цикл перебирает строки, а внутренний цикл – столбцы в этих строках.

Пример ввода двумерного массива A:

Так же как и в одномерном массиве, блок-схема вывода и ввода массива совпадают.

Пример вывода двумерного массива как таблицы:

cout<<"Двумерный массив"<<endl;

for(int i=0;i<n;i++,cout<<endl)

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

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

_getch();

Многомерные массивы как параметры функций

Существует по крайней мере одна ситуация, когда двухмерный массив проявляет себя именно как массив массивов. Это бывает в функциях, пара­метры которых являются двухмерными массивами.

Когда в заголовке или прототипе функции фигурирует параметр, являющийся много­мерным массивом, то размер первого его измерения не указывается; размеры осталь­ных измерений должны быть обязательно указаны.

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

void display_page(const char p[][100], int size_dimension_l)

Это правило обретает четкий смысл, если вспомнить, что параметр представляет собой массив массивов. Поскольку параметр const char p[] [100] — это двухмерный массив, который представляет собой массив массивов, то лишь первое его измерение является индексом массива и трактуется так же, как и индекс одномерного массива. Вторая же размерность является частью описания базового типа, который представляет собой массив из 100 символов.

Пример void-функции ввода двумерного массива А, количество строкn, количество столбцовm.

void vvod2(int n,int m, int a[][10])

{

for(int i=0;i<n;i++)

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

cin>>a[i][j];

}

Двумерный массив можно вводить данные как таблицу.

Пример процедуры вывода двумерного массива А по строкам:

void vivod2(int n, int m, int a[][10])

{

for(int i=0;i<n;i++,cout<<endl)

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

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

}

Обратите внимание на оператор for(int i=0;i<n;i++,cout<<endl) в нем при переходе на новую строку в матрице выполнен переход на новую строку на экране.

Программа ввода и вывода двумерного массива:

# include <iostream>

# include <conio.h>

#include <locale>

using namespace std;

void vvod2(int n,int m, int a[][10]);

void vivod2(int n, int m, int a[][10]);

void main()

{

setlocale(0, "");

int x[20][10];

int n,m;

cout<<"введите количество строк в массиве"; cin>>n;

cout<<"введите количество столбцов в массиве"; cin>>m;

cout<<"Введите элементы массива"<<endl;

vvod2(n,m, x);

cout<<"Двумерный массив"<<endl;

vivod2(n,m, x,);

_getch();

}

Обратите внимание, что у формального параметра, массив a, - второе измерение имеет значение 10 и у фактического параметра, массивx– второе измерение имеет значение 10. Если, например, фактический параметрxбудет описан какintx[20][20], возникнет синтаксическая ошибка, связанная с несовпадением типа фактического и формального параметров.

Результат работы этой программы:

В двумерном массиве, который является и матрицей существуют элементы главной и побочной диагонали. Элементы главной диагонали удовлетворяют условию i=j. Элементы побочной диагонали удовлетворяют условию:i+j=m.