Теоретическая часть. “Обработка и преобразование статических двумерных массивов”

Лабораторная работа №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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: