- •Лабораторная работа № 6. Алгоритмы работы со структурированными типами данных
- •Стандартные алгоритмы работы с одномерными массивами Теория
- •Примеры
- •Контрольные вопросы
- •Задания для лабораторной работы
- •Формирование массива Теория
- •Примеры
- •Контрольные вопросы
- •Задание для лабораторных работ
- •Двумерный массив Теория
- •Примеры
- •Контрольные вопросы
- •Задания для лабораторной работы
Двумерный массив Теория
Данные из прямоугольных таблиц хранятся в двумерных массивах или матрицах. Каждый элемент двумерного массива характеризуется двумя индексами: первый индекс это номер строки, в которой находится данный элемент, второй индекс – номер столбца.
Массивы языка С могут иметь только один индекс, но при этом элементами массивов могут быть другие массивы, что позволяет создавать многомерные массивы. Пример двумерного массива в 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.