Переделать код для работы с матрицами, используя функции - 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, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д