Приклад виконання лабораторної роботи №3

Приклад використання масивів для збереження та обробки однотипових даних.

Нехай задано деяку квадратну матрицю розмірності n ´ n, яка містить дійсні числа.. Розіб’ємо дану матрицю на чотири сектори однакового розміру, як показано на рис.1. Будемо вважати, що квадратна матриця є збалансованою,

якщо сума елементів першого та четвертого секторів дорівнює сумі елементів другого та третього секторів. Необхідно написати програму, яка б для будь – якої матриці заданого розміру визначала, чи є така матриця збалансованою.

Для збереження елементів матриці використаємо статичний двовимірний масив даних типу float, а для підрахунку необхідних сум – статичний одномірний масив даних типу float, елементи якого спочатку завжди дорівнюватимуть нулю:

float mas[10][10]; ],//оголошення масиву mas, який містить 100 елементів типу

float Sum[]={0,0,0,0};//оголошення масиву Sum з чотирма елементами, які //дорівнюють нулю

int i,j,n;

cin>>n; //ввід кількості елементів масиву

for(i=0;i<n;i++)

for(j=0;j<n;j++)

cin>>mas[i][j]; // внесення значень елементів масиву

Для визначення суми елементів по секторах необхідно спочатку визначити розмір сектору. Для цього достатньо виконати наступну дію:

int rozmir=n/2;

В даному випадку використане ціле ділення. Тобто, якщо n є числом, яке не кратне 2, змінна rozmir буде цілим числом. Це дозволяє відкинути середній стовпчик та рядок при визначенні розміру сектора, якщо n є числом, яке не кратне 2.

Обчислення суми елементів в секторах можна проводити окремо по кожному сектору, але це збільшить загальний час виконання програми, тому підрахунок сум виконаємо одночасно за один прохід циклу. Наведений нижче фрагмент програми демонструє використання циклів для проходу по всім елементам масиву і підрахунку всіх чотирьох сум:

for(i=0;i<centr;i++)

for(j=0;j<centr;j++)

{ Sum[0]+=mas[i][j]; //підрахунок суми в першому секторі

Sum[1]+=mas[n-1-i][j]; //підрахунок суми в другому секторі

Sum[2]+=mas[i][n-1-j]; //підрахунок суми в третьому секторі

Sum[3]+=mas[n-1-i][n-1-j]; //підрахунок суми в четвертому секторі

}

Підрахунок суми елементів першого та третього секторів ведеться, починаючи з елементів рядка з нульовим індексом в прямому напрямку, другого і четвертого секторів – починаючи з останнього елемента рядка у зворотному напрямку. Аналогічно, накопичення суми елементів першого та другого секторів ведеться, починаючи з нульового елемента стовпчика в прямому напрямку, для третього та четвертого секторів – починаючи з останнього елементу стовпчика в зворотному напрямку.

Таким чином, в цілому програма визначення збалансованості заданої матриці матиме вигляд:

#include <iostream.h>

#include <conio.h>

void main()

{ float mas[10][10];

float Sum[]={0,0,0,0};

int i,j,n;

cin>>n;

for(i=0;i<n;i++)

for(j=0;j<n;j++)

cin>>mas[i][j];

int rozmir=n/2;

cout<<"\nc="<<centr+n%2;

for(i=0;i<rozmir;i++)

for(j=0;j<rozmir;j++)

{Sum[0]+=mas[i][j];

Sum[1]+=mas[n-1-i][j];

Sum[2]+=mas[i][n-1-j];

Sum[3]+=mas[n-1-i][n-1-j];

}

for(i=0;i<4;i++)

cout<<"\nSum["<<i<<"]="<<Sum[i];

if ((Sum[0]==Sum[3])&&(Sum[1]==Sum[2])) cout<<"\n збалансована";

else cout<<"\n не збалансована";

getch();}