Преобразования в двумерном массиве. - C (СИ)
Формулировка задачи:
Написать программу, заполняющую двумерный массив случайными значениями и
выполняющую над ним преобразования. Осуществить вывод на экран
содержимого массива и результата вычислений.
50x3 - Размерность массива
-18 … 0 (целые) - Значения массива в этом диапазоне
Каждый элемент является среднеарифметическим своих
соседей
Программа не работает, т.е. не выводится массив после преобразования.
Вопрос как программу нужно доработать
#include <stdio.h> #include <stdlib.h> #define N 50 #define M 3 int main() { int i,j,k,l; int a[N][M],b[N][M]; for (i=0;i<N;i++) { for (j=0;j<M;j++) { a[i][j]=rand()%19-18; printf ("%4d " ,a[i][j]); } printf ("\n"); } printf("\n fsdfsdfsd \n"); for (i=0;i<N;i++) { for (j=0;j<M;j++) { if ((i=0) && (j=0)) b[0][0]=(a[0][1]+a[1][0])/2; else if ((i=N) && (j=0)) b[N][0]=(a[N-1][0]+a[N][1])/2; else if ((i=0) && (j=M)) b[0][M]=(a[0][M-1]+a[1][M])/2; else if ((i=M) && (j=M)) b[N][M]=(a[N-1][M]+a[N][M-1])/2; else if ((i=0) && (j>0) && (j<M)) b[k][l]=(a[i][j-1]+a[i][j+1]+a[i+1][j])/3; else if ((i<N) && (i>0) && (j=0)) b[k][l]=(a[i-1][j]+a[i+1][j]+a[i][j+1])/3; else if ((i=N) && (j>0) && (j<M)) b[k][l]=(a[i][j-1]+a[i][j+1]+a[i-1][j])/3; else if ((i<N) && (i>0) && (j=M)) b[k][l]=(a[i-1][j]+a[i+1][j]+a[i][j-1])/3; else b[k][l]=a[i-1][j]+a[i+1][j]+a[i][j+1]+a[i][j-1]; } } for (k=0;k<N;k++) { for (l=0;l<M;l++) printf("%4d " ,b[k][l]); printf("\n"); } return 0; }
Решение задачи: «Преобразования в двумерном массиве.»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #define N 50 #define M 3 int main() { int i,j,k,l, tmp, col; int a[N][M],b[N][M]; for (i=0;i<N;i++) { for (j=0;j<M;j++) { a[i][j]=rand()%19-18; printf ("%4d " ,a[i][j]); } printf ("\n"); } printf("\n fsdfsdfsd \n"); for (i=0;i<N;i++) { for (j=0;j<M;j++) { tmp=col=0; if(i>0) { tmp+=a[i-1][j]; col++; } if(i<N-1) { tmp+=a[i+1][j]; col++; } if(j>0) { tmp+=a[i][j-1]; col++; } if(j<M-1) { tmp+=a[i][j+1]; col++; } b[i][j]=tmp/col; } } for (k=0;k<N;k++) { for (l=0;l<M;l++) printf("%4d " ,b[k][l]); printf("\n"); } return 0; }
Объяснение кода листинга программы
- #include
- подключает файл стандартного ввода/вывода - #include
- подключает файл стандартных библиотек - #define N 50 - определяет размер первого массива
- #define M 3 - определяет размер второго массива
- int main() - функция main() является точкой входа в программу
- int i,j,k,l, tmp, col; - объявляет переменные для использования в программе
- int a[N][M],b[N][M]; - объявляет два двумерных массива a и b для хранения данных
- for (i=0;i<N;i++) - первый цикл for для заполнения массива a случайными значениями от -18 до 19
- for (j=0;j<M;j++) - вложенный цикл for для заполнения каждой строки массива a
- a[i][j]=rand()%19-18; - присваивает случайное значение каждой ячейке массива a
- printf (
%4d
,a[i][j]); - выводит значение каждой ячейки массива a с форматированием - printf (
\n
); - переходит на новую строку - for (i=0;i<N;i++) - второй цикл for для обработки массива b
- for (j=0;j<M;j++) - вложенный цикл for для обработки каждой строки массива b
- tmp=col=0; - инициализирует переменные для хранения суммы и количества используемых ячеек
- if(i>0) - проверяет условие для добавления значения из предыдущей строки
- { - начало блока if
- tmp+=a[i-1][j]; - добавляет значение из предыдущей строки к переменной tmp
- col++; - увеличивает количество использованных ячеек на 1
- } - конец блока if
- if(i<N-1) - проверяет условие для добавления значения из следующей строки
- { - начало блока if
- tmp+=a[i+1][j]; - добавляет значение из следующей строки к переменной tmp
- col++; - увеличивает количество использованных ячеек на 1
- } - конец блока if
- if(j>0) - проверяет условие для добавления значения из предыдущего столбца
- { - начало блока if
- tmp+=a[i][j-1]; - добавляет значение из предыдущего столбца к переменной tmp
- col++; - увеличивает количество использованных ячеек на 1
- } - конец блока if
- if(j<M-1) - проверяет условие для добавления значения из следующего столбца
- { - начало блока if
- tmp+=a[i][j+1]; - добавляет значение из следующего столбца к переменной tmp
- col++; - увеличивает количество использованных ячеек на 1
- } - конец блока if
- b[i][j]=tmp/col; - вычисляет среднее значение для каждой ячейки массива b
- for (k=0;k<N;k++) - цикл for для вывода значений массива b
- for (l=0;l<M;l++) - вложенный цикл for для обработки каждой строки массива b
- printf(
%4d
,b[k][l]); - выводит значение каждой ячейки массива b с форматированием - printf(
\n
); - переходит на новую строку - return 0; - завершает программу