Лабораторная работа №4
“Обработка и преобразование статических двумерных массивов”
Цель работы: освоение методов обработки и преобразования статических двумерных массивов, разработки алгоритмов, построения и отладки программ, ввода и вывода на печать двумерных массивов.
Теоретическая часть
1.1. Описание статических двумерных массивов в языке программирования C++.
Двумерные массивы, как и одномерные, объявляются непосредственно в разделе описания переменных. Описание статического двумерного массива (матрицы) имеет следующую структуру:
тип имя_матрицы[N1][N2];
где:
тип – указание на любой стандартный или нестандартный тип, которому будут принадлежать элементы матрицы;
имя_массива – идентификатор матрицы;
N1 – максимальное количество строк в матрице;
N2 – максимальное количество столбцов в матрице.
int X[10][10];
#define N 5;
...
float B[N][N];
Обращение к элементам матрицы в программе происходит по индексам, например:
D[i][j]
X[2][0]
Y[i-1][j+2]
Следует обратить внимание, что в языке C++ нумерация строк и столбцов в двумерных массивах начинается с 0.
|
|
1.2 Пример составления алгоритма и программы на языке C++ для обработки и преобразования двумерного массива.
Задание:
Дана матрица действительных чисел А (5х5). Найти Amin – минимальный элемент среди элементов, расположенных ниже главной диагонали, и Amax – максимальный элемент среди элементов, расположенных выше главной диагонали, Разделить элементы, расположенных ниже главной диагонали, на Amin, а выше главной диагонали – на Amax.
Решение.
Постановка задачи.
Для обработки матрицы A сначала необходимо ввести ее элементы. Выполним ввод элементов матрицы с помощью генератора случайных чисел rand(). Для обозначения размерности массива A введем константу n. После формирования элементов матрицы выведем их на экран.
Далее выполним поиск максимального элемента Amax среди элементов, расположенных выше главной диагонали. Поскольку у элементов, расположенных выше главной диагонали, номер столбца больше номера строки, для поиска максимального элемента среди этих элементов внутренний цикл организуем по переменной j, начиная с i+1: for (j=i+1;j<n;j++). Аналогично при поиске минимального элемента среди элементов, расположенных ниже главной диагонали, будем использовать внутренний цикл по переменной j, начиная с 0 до i–1: for (j=0;j<i;j++).
Затем, используя аналогичные вложенные циклы, выполним деление элементов матрицы на Amax или Amin в соответствии с заданием.
1.2.1 Блок-схема алгоритма решения данной задачи:
1.2.2 Текст программы на языке C++:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define n 5
|
|
int main()
{
int i,j;
float A[5][5],Amin=1000,Amax=-1000;
clrscr();
randomize();
printf(" Matrix A:\n");
for (i=0;i<n;i++)
{ for (j=0;j<n;j++)
{ A[i][j]=20.0*rand()/RAND_MAX-10;
printf("%7.2f",A[i][j]);
}
printf("\n");
}
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (A[i][j]>Amax) Amax=A[i][j];
for(i=1;i<n;i++)
for (j=0;j<i;j++)
if (A[i][j]<Amin) Amin=A[i][j];
printf("\nMaximum vishe glavnoi diagonali: %.2f",Amax);
printf("\nMimimum nije glavnoi diagonali: %.2f",Amin);
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
A[i][j]=A[i][j]/Amax;
for(i=1;i<n;i++)
for (j=0;j<i;j++)
A[i][j]=A[i][j]/Amin;
printf("\n\n New matrix A:\n");
for (i=0;i<n;i++)
{ for (j=0;j<n;j++)
printf("%7.2f",A[i][j]);
printf("\n");
}
getch();
return 0;
}
1.2.3 Результаты работы программы:
Matrix A:
-2.21 -5.59 1.34 -3.15 -7.76
9.17 -8.43 2.54 -5.78 -7.21
-3.46 4.10 -8.32 -9.45 -5.84
9.66 -0.89 -9.07 4.14 8.87
-5.12 -4.09 -7.72 -1.38 -7.78
Maximum vishe glavnoi diagonali: 8.87
Mimimum nije glavnoi diagonali: -9.07
New matrix A:
-2.21 -0.63 0.15 -0.35 -0.87
-1.01 -8.43 0.29 -0.65 -0.81
0.38 -0.45 -8.32 -1.06 -0.66
-1.07 0.10 1.00 4.14 1.00
0.56 0.45 0.85 0.15 -7.78