ОПЕРАЦИИ С МНОГОМЕРНЫМИ МАССИВАМИ В Visual С++ 2010
Цель лекции.Изучить способы и особенности работы с двухмерными массивами вVisual С++ 2010.
Основные вопросы лекции.
1.Двухмерные массивы данных и их инициализация в среде Visual С++ 2010.
2. Консольный ввод и вывод двухмерных массивов в среде Visual С++ 2010.
3. Присваивание и копирование двухмерных массивов в Visual С++ 2010.
4. Поиск элемента в двухмерных массивах в Visual С++ 2010.
5. Перестановка и сортировка элементов в двухмерных массивах.
1. Двухмерные массивы данных и их инициализация в Visual С++ 2010
Под размерностью массива понимают число индексов, которое необходимо указать для получения доступа к отдельному элементу массива. Массивы, рассмотренные в лабораторной работе № 5, например, были одномерными и требовали только одного индекса. Массивы с более чем одной размерностью, называются многомерными.
Самым простым многомерным массивом является двухмерный массив (матрица).
При объявлении массива указывается тип элементов массива, имя массива и его размер:
Тип ИмяМассива [Размер 1] [Размер 2];
Например, оператор
int А[3][8];
описывает целый двухмерный массив по имени А из 24-х целых чисел.В памяти будет зарезервировано место для 24-х целочисленных элементов массива (рис. 9.1).
В памяти компьютера двухмерный массив располагается непрерывно по строкам, то есть
На рис. 9.1 приведена схема размещения элементов массива из 24-х целых чисел по имени А размерностью 3×8.В памяти будет зарезервировано место для 24-х целочисленных элементов массива, которые располагаются в непрерывном (!!!) блоке памяти.
Рис. 9.1. Значения и расположение в памяти элементов массива А[3][8]
Массивы хранятся в памяти компьютера так, что самый правый индекс измеряется быстрее всего.
Возможна инициализации массива непосредственно в программном коде. В этом случае в фигурных скобках приводятся значения элементов массива (рис. 9.1) в следующем виде:
Кроме этого, инициализация массивов возможна в процессе выполнения программы – путем записи данных в отведенные для массивов ячейки памяти.
При работе с массивами, в т. ч. двухмерными, целесообразно использовать оператор цикла for, т.к. известен размер обрабатываемого массива (число элементов массива), т. е. число повторений цикла.
В языке C++ не проверяется выход индекса за пределы массива. Если массив m[100] целочисленный массив:
int m[100];,
а в программе указано
x=m[200];,
то сообщение об ошибке не будет, а переменной x будет присвоено произвольное значение.
При обработке массивов в Visual С++ 2010 все действия в программе выполняются над элементами массива (!), а не над массивом в целом. При этом индекс элемента может быть задан либо его значением, либо выражением:
А[4], F[i+k+1];.
Над массивами можно выполнять следующие действия:
1. Вводить массивы в память компьютера.
2. Выводить массивы на экран дисплея, на другое устройство или в файл.
3. Присваивать определенные значения элементам массивов.
4. Копировать массивы.
5. Переставлять элементы массивов.
6. Сортировать элементы массивов.
2. Консольный ввод и вывод двухмерных массивов в среде Visual С++ 2010
Т. к. все действия необходимо выполнять над элементами двухмерныхмассивов, то для ввода двухмерного массива в память компьютера необходимо организовать его поэлементный ввод посредством оператора цикла for(т. к.известен размер массива).
Для консольного вывода двухмерного массива также надо с помощью оператора цикла for организовать поэлементный вывод исследуемого массива.
Пример 1. Исследовать способы консольного ввода и вывода двухмерных массивов. Необходимо ввести с клавиатуры матрицу А размерностью M×N в память компьютера и вывести эту информацию на дисплей.
Решение. Для придания программе большей универсальности зададим размерность исходной матрицы с запасом, а реальная размерность будет вводиться в каждом конкретном случае. Число строк обозначим m, а столбцов - n.
Поэлементный ввод матрицы А организован при помощи двух операторов цикла for– внешнего и внутреннего (вложенного). Внешний цикл организует перебор элементов матрицы А по строкам, а вложенный – по столбцам.
Вывод исходной матрицы на экран будет производиться аналогичным образом.
Блок-схема алгоритма решения данной задачиприведена на рис. 9.2.
j=0,n,1
Начало
Завершение
Ввод i, j, n, m
i=0,m,1
Вложенный цикл
Ввод Aij
j=0,n,1
i=0,m,1
Вложенный цикл
Вывод Aij
Рис. 9.2. Блок-схема алгоритма поэлементного ввода и вывода матрицы с использованием цикла for
#include "stdafx.h"
#include <conio.h>
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
const int M=10,N=10;//Число строк и столбцов матрицы А с запасом
int i, j, m, n, A[M][N];//Объявление переменных и матрицы А
cout<<"Vvedite chislo strok i stolbcov matricu:"<<endl;
cin>>m>>n;//Ввод числа строк и столбцов исходной матрицы А
cout<<" Vvedite postrochno elementu matricu:"<<endl;
for(i=0; i<m; i++)//Внешний цикл ввода элементов матрицы А
for(j=0; j<n; j++)//Вложенный цикл ввода элементов матрицы А
cin>>A[i][j];//Ввод элемента матрицы А
cout<<endl;
cout<<"Matrica A"<<endl;
for(i=0; i<m; i++)//Внешний цикл вывода элементов матрицы А
{//Начало составного оператора для внешнего цикла for
for(j=0; j<n; j++)//Вложенный цикл для вывода элементов матрицы А
cout<<A[i][j]<<" ";//Вывод элемента матрицы А
cout<<endl;
}//Конец составного оператора для внешнего цикла for