#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int ** macierz(int **, int, int);
void wypisanie(int **, int, int);
void sumowanie(int **, int, int);
 
int main ()
{
    int N = 0;
    int M = 0;
    int **tab;
    int i;
 
    printf("\n Podaj liczbe kolumn oraz wierszy swojej"
    	"macierzy KWADRATOWEJ: ");
    scanf("%d", &N);
    M = N;
 
    tab = macierz(tab, N, M);
    wypisanie(tab, N, M);
    sumowanie(tab, N, M);
 
    for(i = 0; i < N; i++) {
    	free(tab[i]);
    }
    free(tab);
    
	system("pause");
	return 0;
}
 
int ** macierz(int ** tab, int N, int M)
{
    int i = 0;
    int j = 0;
 
    tab = (int **) malloc(N * sizeof(int*));
    for(i = 0; i < M; i++)
    {
        tab[i] = (int *) malloc(M * sizeof(int));
    }
 
    srand((unsigned int) time(NULL));
    for (i = 0; i < N; i++)
        for (j = 0; j < M; j++)
            tab[i][j] = rand() % 10;
            
    return tab;
 
}
 
void wypisanie(int ** tab, int N, int M)
{
    int i = 0;
    int j = 0;
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < M; j++)
        {
            printf("%d ", tab[i][j]);
        }
        printf("\n");
    }
}
 
void sumowanie(int **tab, int N, int M)
{
    int skos = 0;
    int nad = 0;
    int pod = 0;
    int i = 0;
    int j = 0;

    for (i = 0; i < N; i++){
        for (j = 0; j < M; j++)
        {
            if (i < j)
            {
            	nad += tab[i][j];
            }
            else if (i == j)
            {
            	skos += tab[i][j];
            }
            else
            {
            	pod += tab[i][j];
            }
        }
    }
 
    printf("a)\tSuma liczb macierzy nad przekatna jest rowna: %d\n", nad);
    printf("b)\tSuma liczb macierzy na przekatnej jest rowna: %d\n", skos);
   	printf("c)\tSuma liczb macierzy pod przekatna jest rowna: %d\n", pod);
} 