I need to write functions which receives a matrix applied as an array static 2D and sizes. The function must assign a new two-dimensional array - a matrix B which has a Fraction type and contains the same sizes as the matrix A.
typedef struct fraction
{
int num, numerator, denominator;
} fraction;
This is what I have written so far with explanations about the implementations
 /// <summary>
/// This code required one extra important function.
/// </summary>
/// <params>You decide</params>
/// <returns>You decide</returns>
    // your code:
// --------------------------- //
/// <summary>
/// This function allocate a dynamic matrix from type fraction.
/// </summary>
/// <param>int rows - the number of rows in the matrix</param>
/// <param>int cols - the number of colums in the matrix</param>
/// <returns>allocated empty matrix B from type fraction</returns>
fraction** createMatrix(int rows, int cols)
{
    int i;
    fraction** mat = (fraction**)calloc(rows, sizeof(fraction));
    for (i = 0; i < rows; i++)
    {
        *mat = (fraction*)calloc(cols, sizeof(fraction));
    }
    return mat;
}
// --------------------------- //
/// <summary>
/// The function receives a static matrix 
/// and for each cell in the matrix calculates 
/// the average of its neighbors.  
/// </summary>
/// <param>int A[][COLS] - the static matrix</param>
/// <param>int rows - the number of rows in the matrix</param>
/// <param>int cols - the number of colums in the matrix</param>
/// <returns>matrix B from type fraction</returns>
fraction** matrixAverageNeighbor(int A[][COLS], int rows, int cols)
{
    // your code:
    int i, j;
    fraction** B = createMatrix(rows, cols);
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            B[i][j] = neighborFractionAverage(A, i, j, rows, cols);
        }
    }
    return B;
}
// --------------------------- //
/// <summary>
/// The function receives a static matrix, and a cell value,
/// and calculates the average of its neighbors.  
/// </summary>
/// <param>int A[][COLS] - the static matrix</param>
/// <param>int i - the cell row number in matrix</param>
/// <param>int j - the cell colum number in the matrix</param>
/// <param>int rows - the number of rows in the matrix</param>
/// <param>int cols - the number of colums in the matrix</param>
/// <returns>value from type fraction</returns>
fraction neighborFractionAverage(int A[][COLS], int i, int j, int rows, int cols)
{
    // ???
}
// --------------------------- //
/// <summary>
/// The function receives a dynamic matrix from type fraction,
/// and print the matrix as double varibles.  
/// </summary>
/// <param>fraction** B - the dynamic matrix</param>
/// <param>int rows - the number of rows in the matrix</param>
/// <param>int cols - the number of colums in the matrix</param>
/// <returns>None</returns>
void printMatrix(fraction** B, int rows, int cols)
{
    int i, j;
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("%2f ", B[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}
// --------------------------- //
/// <summary>
/// The function receives a dynamic matrix from type fraction,
/// and free all allocated memory.  
/// </summary>
/// <param>fraction** B - the dynamic matrix</param>
/// <param>int rows - the number of rows in the matrix</param>
/// <returns>None</returns>
void freeMatrix(fraction** B, int rows)
{
    int i;
    for (i = 0; i < rows; i++)
        free(B[i]);
}
The function for printing matrix B should be written according to a double type representation, with 2 digits after the point. For example - input:
    5 12 6 8
    4 7 0 9
    13 20 8 2
    18 0 2 6
should output:
7.66  4.40  7.20  5.00
11.40  8.50  9.00  4.80
9.80  6.50  5.75  5.00
11.00  12.20  7.20  4.00
I am really lost here. I have thought alot and tried. I thought using an extra function that will calculate how many neighbors a cell has, but managed to fail.
