Переделать код для работы с матрицами, используя функции - C (СИ)
Формулировка задачи:
Оформите через функцию код:
#include <stdio.h>
#include <conio.h>
int main()
{int M=3, k, A[10][10], B[10][10], i, j, s=0;
printf( "Nachalnaya matrica: \n" );
for (i = 0; i < M; i++){
for (j = 0; j < M; j++){
scanf("%d", &A[i][j]);
}
}
for (i = 0; i < M; i++){
for (j = 0; j < M; j++){
if (i == 0 && j == 0) // вверх левый угол
{ B[i][j] = (A[i][j + 1] + A[i + 1][j] + A[i + 1][j + 1]) / 3;}
if ((i == 0) && (j == M - 1)) // вверх правый угол
{B[i][j] = (A[i][M - 2] + A[i + 1][M - 1] + A[i + 1] [M - 2]) / 3;}
if ((i == M - 1) && (j == 0)) // низ левый угол
{
B[i][j] = (A[M - 1] [j + 1] + A[M - 2][j] + A[M - 2][j + 1]) / 3;}
if ((i == M - 1) && (j == M - 1)) // низ правый угол
{
B[i][j] = (A[M - 1][M - 2] + A[M - 2][M - 1] + A[M - 2][M - 2]) / 3;
}
if (i == 0 && j != 0 && j != M - 1) // вверх
{
B[i][j] = (A[i][j - 1] + A[i][j + 1] + A[i + 1][j - 1] + A[i + 1][j] + A[i + 1][j + 1]) / 5;
}
if (i == M - 1 && j != 0 && j != M - 1) // низ
{
B[i][j] = (A[i][j - 1] + A[i][j + 1] + A[i - 1][j - 1] + A[i - 1][j] + A[i - 1][j + 1]) / 5;
}
if (i != 0 && i != M - 1 && j == 0) // левый край
{
B[i][j] = (A[i - 1][j] + A[i - 1][j + 1] + A[i][j + 1] + A[i + 1][j] + A[i + 1][j + 1]) / 5;
}
if (i != 0 && i != M - 1 && j == M - 1) // правый край
{
B[i][j] = (A[i - 1][j] + A[i - 1][j - 1] + A[i][j - 1] + A[i + 1][j] + A[i + 1][j - 1]) / 5;
}
if (i != 0 && i != M - 1 && j != 0 && j != M - 1) // общий случай
{
B[i][j] = (A[i - 1][j - 1] + A[i - 1][j] + A[i - 1][j + 1] + A[i][j - 1] + A[i][j] + A[i][j + 1] + A[i + 1][j - 1] + A[i + 1][j] + A[i + 1][j + 1]) / 9;
}
}
}
printf("Sglajennaya matrica:\n");
for(i=0; i<M; i++)
{
for(j=0; j<M; j++)
printf("%d ", B[i][j]);
printf("\n");
}
for(i = 0; i < M; i++)
for(j = 0; j < i; j++)
s=s+fabs(B[i][j]);
printf("\n summa = %d",s);
getch();
return 0;
}Решение задачи: «Переделать код для работы с матрицами, используя функции»
textual
Листинг программы
#include <stdio.h>
int main()
{int A[10][10], B[10][10], buf, i, j, N=3, k;
for(i=0; i<N; i++)
for(j=0; j<N; j++)
{
printf("[%d][%d]= ", i, j);
scanf("%d", &A[i][j]);
}
printf("Ishodnaya matrica:\n");
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
printf("%d ", A[i][j]);
printf("\n");
}
for(i=0; i<N; i++)
for(j=0; j<N; j++)
{
buf=0; k=0;
if(i>0)
{
buf+=A[i-1][j];
k++;
if(j>0)
{
buf+=A[i-1][j-1];
k++;
}
if(j<N-1)
{
buf+=A[i-1][j+1];
k++;
}
}
if(i<N-1)
{
buf+=A[i+1][j];
k++;
if(j>0)
{
buf+=A[i+1][j-1];
k++;
}
if(j<N-1)
{
buf+=A[i+1][j+1];
k++;
}
}
if(j>0)
{
buf+=A[i][j-1];
k++;
}
if(j<N-1)
{
buf+=A[i][j+1];
k++;
}
B[i][j]=buf/k;
}
printf("Sglajennaya matrica:\n");
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
printf("%d ", B[i][j]);
printf("\n");
}
for(i = 0; i < N; i++)
for(j = 0; j < i; j++)
s=s+fabs(B[i][j]);
printf("\n summa = %d",s);
getch();
return 0;
}
Объяснение кода листинга программы
- Объявление переменных:
- A[10][10] - матрица размером 10x10 для хранения исходных данных;
- B[10][10] - матрица размером 10x10 для хранения результатов;
- buf - временная переменная для хранения суммы элементов матрицы;
- i, j, N=3, k - вспомогательные переменные для циклов.
- Заполнение матрицы A с помощью scanf.
- Вывод исходной матрицы A с помощью printf.
- Обход матрицы A для вычисления суммы элементов в каждой ячейке матрицы B.
- Если элемент находится вне матрицы (i<0 или i>N-1 или j<0 или j>N-1), то он не учитывается в расчете.
- Для вычисления суммы элементов в строке i используются следующие элементы: A[i-1][j], A[i-1][j-1], A[i-1][j+1] (если они есть).
- Для вычисления суммы элементов в столбце j используются следующие элементы: A[i][j-1], A[i][j+1] (если они есть).
- Вывод матрицы B с помощью printf.
- Вычисление суммы всех элементов матрицы B с помощью цикла.
- Вывод значения суммы с помощью printf.
- Использование функции getch для приостановки выполнения программы до нажатия клавиши.
- Возврат 0, что означает успешное выполнение программы.