/*Write a function int numNonZero(int A[][COL], int num_rows, int num_cols, int i, int j) that finds and returns the amount of non-zero neighbours elements of the element (i, j) of the two-dimensional array A. Write a program that generates one two-dimensional array of size 3X4 of 0's and 1's and for prints the amount of non-zero neighbours for each location in the array. */ #include #include #include #define ROW 3 #define COL 4 void print_array(int A[][COL], int num_row, int num_col); void make_random_array2d(int A[][COL], int num_row, int num_col, int min, int max); int numNonZero(int board[][COL], int, int, int, int); int main(){ srand(time(NULL)); int A[ROW][COL],i,j, count2D[ROW][COL]={0}; make_random_array2d(A,ROW, COL,0,1); printf("random array\n"); print_array(A,ROW, COL); for (i = 0; i < ROW; i++){ for (j = 0; j < COL; j++){ count2D[i][j]=numNonZero(A, ROW, COL, i,j); } } printf("non zero neigh count\n"); print_array(count2D, ROW, COL); return 0; } int numNonZero(int board[][COL], int row, int col, int i, int j){ int sum=0; //corners if(i==0 && j==0) sum=board[i][j+1]+board[i+1][j+1]+board[i+1][j]; else if(i==0 && j==col-1) sum=board[i][j-1]+board[i+1][j-1]+board[i+1][j]; else if(i==row-1 && j==0) sum=board[i-1][j]+board[i-1][j+1]+board[i][j+1]; else if(i==row-1 && j==col-1) sum=board[i-1][j-1]+board[i-1][j]+board[i][j-1]; //borders else if(i==0) sum=board[i][j+1]+board[i+1][j+1]+board[i+1][j]+board[i][j-1]+board[i+1][j-1]; else if(i==row-1) sum=board[i][j+1]+board[i-1][j+1]+board[i-1][j]+board[i][j-1]+board[i-1][j-1]; else if(j==0) sum=board[i-1][j]+board[i][j+1]+board[i+1][j+1]+board[i-1][j+1]+board[i+1][j]; else if(j==col-1) sum=board[i-1][j]+board[i+1][j]+board[i-1][j-1]+board[i][j-1]+board[i+1][j-1]; else{ //middle sum=board[i-1][j]+board[i+1][j]+board[i-1][j-1]+board[i][j-1]+board[i+1][j-1]; sum+=board[i][j+1]+board[i+1][j+1]+board[i-1][j+1]; } return sum; } void print_array(int A[][COL], int num_row, int num_col){ int i; /* row counter */ int j; /* column counter */ for (i = 0; i < num_row; i++){ for (j = 0; j < num_col; j++){ printf("%d ", A[i][j]); } printf("\n"); } } void make_random_array2d(int A[][COL], int num_row, int num_col, int min, int max){ int i; /* row counter */ int j; /* column counter */ for (i = 0; i < num_row; i++){ for (j = 0; j < num_col; j++){ A[i][j]=min+rand()%(max-min+1); } } }