Соседями элемента Аij в матрице назовем элементы Аkl, где i – 1 ≤ k ≤ i + 1, j – 1 ≤ l ≤ j + 1, (k, l) ≠ (i, j). Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы.
1. Построить результат сглаживания заданной вещественной матрицы размером 10 × 10 (оформить в виде процедуры).
2. В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали (оформить в виде функции).
C/C++
Напишите пожалуйста код на C++ или Python
Я так понимаю, что усредняются только внутренние элементы (квадратной) матрицы, так как у элементов снаружи нет четырёх соседей? Если да, то можно так вот сделать с матрицей рандомных элементов, границы диапазона которых определяются пользователем:
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <iostream>
using namespace std;
void print_matrix(double **A, int n)
{
int i, j;
cout << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
cout << setw(8) << A[i][j];
cout << endl;
}
cout << endl;
}
void sglazh(double **A, int n)
{
int i, j;
for (i = 1; i < n - 1; i++)
for (j = 1; j < n - 1; j++)
A[i][j] = (A[i - 1][j] + A[i + 1][j] +
A[i][j - 1] + A[i][j + 1]) * 0.25;
}
double s(double **A, int n)
{
int i, j;
double su = 0.;
for (i = 1; i < n; i++)
for (j = 0; j < i; j++) su += abs(A[i][j]);
return su;
}
int main()
{
int i, j, n, iter;
double a, b;
cout << "a b n iter: " <<
setprecision(4) << fixed;
cin >> a >> b >> n >> iter;
double **A = new double *[n];
for (i = 0; i < n; i++) A[i] = new double [n];
srand(time(nullptr));
for (i = 0; i < n; i++) for (j = 0; j < n; j++)
A[i][j] = a + (b - a) * rand() / RAND_MAX;
print_matrix(A, n);
for (i = 1; i <= iter; i++)
{
sglazh(A, n);
cout << "Iteration " << i << ':' << endl;
print_matrix(A, n);
}
cout.precision(16);
cout << "Sum = " << s(A, n) << endl;
}
Печать получающихся в процессе сглаживания промежуточных матриц можно отменить. При границах диапазона [-20;20] элементов начальной матрицы весь процесс сглаживания занимает несколько десятков итераций. ✿ ✿ ✿ ✿
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <iostream>
using namespace std;
void print_matrix(double **A, int n)
{
int i, j;
cout << endl;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
cout << setw(8) << A[i][j];
cout << endl;
}
cout << endl;
}
void sglazh(double **A, int n)
{
int i, j;
for (i = 1; i < n - 1; i++)
for (j = 1; j < n - 1; j++)
A[i][j] = (A[i - 1][j] + A[i + 1][j] +
A[i][j - 1] + A[i][j + 1]) * 0.25;
}
double s(double **A, int n)
{
int i, j;
double su = 0.;
for (i = 1; i < n; i++)
for (j = 0; j < i; j++) su += abs(A[i][j]);
return su;
}
int main()
{
int i, j, n, iter;
double a, b;
cout << "a b n iter: " <<
setprecision(4) << fixed;
cin >> a >> b >> n >> iter;
double **A = new double *[n];
for (i = 0; i < n; i++) A[i] = new double [n];
srand(time(nullptr));
for (i = 0; i < n; i++) for (j = 0; j < n; j++)
A[i][j] = a + (b - a) * rand() / RAND_MAX;
print_matrix(A, n);
for (i = 1; i <= iter; i++)
{
sglazh(A, n);
cout << "Iteration " << i << ':' << endl;
print_matrix(A, n);
}
cout.precision(16);
cout << "Sum = " << s(A, n) << endl;
}
Печать получающихся в процессе сглаживания промежуточных матриц можно отменить. При границах диапазона [-20;20] элементов начальной матрицы весь процесс сглаживания занимает несколько десятков итераций. ✿ ✿ ✿ ✿
Похожие вопросы
- Напишите пожалуйста код на 5 вариант очень простой я на 1 курсе вуза и нужен простой код.
- Помогите пожалуйста написать код на c++, выводящий имя, фамилию и дату рождения нескольких человек
- Помогите пожалуйста написать код на C++
- Помогите, пожалуйста, написать код на C (Си)
- Прошу помогите написать код на c++, нужно сдать сегодня ?
- Помогите пж написать код на C++
- Помогите с кодом задачи c++. задача на фото
- Нужен готовый код по C++ рабочий без ошибок C++
- Здравствуйте, помогите пожалуйста написать программы на языке C++.
- Помогите пожалуйста! Нужен код на C++