Преобразования в двумерном массиве. - 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;
}

Объяснение кода листинга программы

  1. #include - подключает файл стандартного ввода/вывода
  2. #include - подключает файл стандартных библиотек
  3. #define N 50 - определяет размер первого массива
  4. #define M 3 - определяет размер второго массива
  5. int main() - функция main() является точкой входа в программу
  6. int i,j,k,l, tmp, col; - объявляет переменные для использования в программе
  7. int a[N][M],b[N][M]; - объявляет два двумерных массива a и b для хранения данных
  8. for (i=0;i<N;i++) - первый цикл for для заполнения массива a случайными значениями от -18 до 19
  9. for (j=0;j<M;j++) - вложенный цикл for для заполнения каждой строки массива a
  10. a[i][j]=rand()%19-18; - присваивает случайное значение каждой ячейке массива a
  11. printf (%4d ,a[i][j]); - выводит значение каждой ячейки массива a с форматированием
  12. printf (\n); - переходит на новую строку
  13. for (i=0;i<N;i++) - второй цикл for для обработки массива b
  14. for (j=0;j<M;j++) - вложенный цикл for для обработки каждой строки массива b
  15. tmp=col=0; - инициализирует переменные для хранения суммы и количества используемых ячеек
  16. if(i>0) - проверяет условие для добавления значения из предыдущей строки
  17. { - начало блока if
  18. tmp+=a[i-1][j]; - добавляет значение из предыдущей строки к переменной tmp
  19. col++; - увеличивает количество использованных ячеек на 1
  20. } - конец блока if
  21. if(i<N-1) - проверяет условие для добавления значения из следующей строки
  22. { - начало блока if
  23. tmp+=a[i+1][j]; - добавляет значение из следующей строки к переменной tmp
  24. col++; - увеличивает количество использованных ячеек на 1
  25. } - конец блока if
  26. if(j>0) - проверяет условие для добавления значения из предыдущего столбца
  27. { - начало блока if
  28. tmp+=a[i][j-1]; - добавляет значение из предыдущего столбца к переменной tmp
  29. col++; - увеличивает количество использованных ячеек на 1
  30. } - конец блока if
  31. if(j<M-1) - проверяет условие для добавления значения из следующего столбца
  32. { - начало блока if
  33. tmp+=a[i][j+1]; - добавляет значение из следующего столбца к переменной tmp
  34. col++; - увеличивает количество использованных ячеек на 1
  35. } - конец блока if
  36. b[i][j]=tmp/col; - вычисляет среднее значение для каждой ячейки массива b
  37. for (k=0;k<N;k++) - цикл for для вывода значений массива b
  38. for (l=0;l<M;l++) - вложенный цикл for для обработки каждой строки массива b
  39. printf(%4d ,b[k][l]); - выводит значение каждой ячейки массива b с форматированием
  40. printf(\n); - переходит на новую строку
  41. return 0; - завершает программу

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы