3. Исследование различных операций в двухмерных массивах в среде Visual С++ 2010
Элементам массива могут быть присвоены значения выражений. При этом элементы массива и значения выражений должны иметь один и тот же тип.
Например, объявлен массив
double А[3][4];
тогда возможна запись
А[0][0]= 3.5;
А[1][3]= 0;
А[2][1]= a*x + b;
Копирование – это присваивание значений элементов одного массива элементам другого массива. При копировании оба массива должны иметь одинаковый размер и тип элементов. Копирование массива А в Bбудет иметь вид:
for (i=0; i<N; i++) B[i][j]= А[i][j];
Рассмотрим основные приемы проведения различных операций с матрицами.
Пример 2.Исследуем операцию присваивания в двухмерных массивах, а также операцию транспонирования матрицы.Задана матрица целых чисел А размерностью 3×4. Необходимо транспонировать матрицу А, т. е. поменять местами ее строки и столбцы, а затем рассчитать матрицу В, элементы которой определяются по формуле
.
Элементы исходной матрицы Авведем непосредственно в программном коде. Исходную матрицу А, транспонированную АТ и полученную матрицу B выведем на экран. Для наглядности примем
.
Блок-схема алгоритма решения данной задачиприведена на рис. 9.3.
j=0,n,1
Начало
Завершение
Ввод i, j, Aij
i=0,m,1
Вложенный цикл
j=0,n,1
i=0,m,1
Вложенный цикл
Вывод Bij
AТij =Aij
Вij =f(ATij)
Рис. 9.3. Блок-схема алгоритма транспонирования и присваивания матрицы
Реализующая данный алгоритм программа имеет следующий вид:
#include "stdafx.h"
#include <conio.h>
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i, j;
double AT[4][3], B[4][3];//Объявление переменных и матриц А и B
double A[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};//Инициализация исходной матрицы А
//Вывод исходной матрицы
cout<<"Matrica A"<<endl;//Вывод названия
for(i=0; i<3; i++)//Внешний цикл вывода элементов матрицы А
{
for(j=0; j<4; j++)//Вложенный цикл для вывода элементов матрицы А
cout<<A[i][j]<<" ";//Вывод элементов исходной матрицыА
cout<<endl;
}
//Транспонирование исходной матрицы
for(i=0; i<3; i++)//Внешний цикл для транспонирования
for(j=0; j<4; j++)// Вложенный цикл для транспонирования
После запуска программы на выполнение экран дисплея должен иметь вид:
.
Пример 3.Исследуем операцию поиска максимального элемента матрицы.Задана матрица Аиз20произвольных чисел размера 4×5. Необходимо найти максимальный элемент матрицы А и номера его строки и столбца (индексы элемента матрицы). Элементы матрицы А введем в программе прямым образом. На экран выведем исходную матрицу А, максимальный элемент и его индексы.
Блок-схема алгоритма решения данной задачиприведена на рис. 9.4.
Для решения задачи используем следующий программный код:
#include "stdafx.h"
#include <conio.h>
#include "iostream"
using namespace std;ij
int _tmain(int argc, _TCHAR* argv[])
{
int i, j, m, n;// Объявление переменных
int A[4][5]={1,2,18,3,20,4,5,6,7,8,9,10,19,11,12,13,14,15,16,17};//Инициализация матрицы А
int B;
cout<<"Matrica A"<<endl;
for(i=0; i<4; i++)//Внешний цикл вывода матрицыА
{
for(j=0; j<5; j++)//Внутренний цикл вывода матрицыА
cout<<A[i][j]<<"\t"; //Вывод элемента матрицы А
cout<<endl;
}
B=A[0][0];//Подготовка к поиску максимального элемента
m=0; n=0;
for(i=0; i<4; i++)//Внешний цикл по перебору элементов матрицыА
for(j=0; j<5; j++)//Внутренний цикл по перебору элементов матрицыА
if(A[i][j]>B)//Выбормаксимального элемента
{
B=A[i][j];//Запоминание в В большего элемента Aij
n=i;//Запоминание в n номера строки iэлемента Aij
m=j;//Запоминание в m номера столбца jэлемента Aij