C/C++

Дана матрица nxn, вычислить суммы диагональных элементов( главной и побочной ) отдельно, но в одной функции на языке си.

Помогите доработать код для функции
Pair sum_main_side_diagonal(int** matrica, size_t n) {//нахождение суммы элементов главной и побочной диагонали
size_t j = n - 1;
size_t s = 0;
Pair pair;
pair.first = &matrica[0][0];
pair.second = &matrica[0][j];

--j;
size_t i;
for (i = 1; i < n; ++i, --j) {
s = s + matrica[i][j];



}
return pair;
}

int main(void) {
int** a = NULL;
system("chcp 1251 > nul");
size_t n = matrica_size("Введите размерность матрицы: ");
a = create_matrica(a, n, n);
if (a != NULL) {
int x, c;
unsigned q, w;
Pair mm;
x = n << 2;
fill(a, n, n, x);
w = 5;
show(a, n, n, w);

mm = sum_main_side_diagonal(a, n);
printf(" Сумма на главной диагонали: %i\n", *mm.first);
printf(" Сумма на побочной диагонали: %i\n", *mm.second);
a = destroy(a, n);
}
else {
puts("Недостаточно памяти!");
}
system("pause > nul");
return 0;
}
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
typedef struct {
int first;
int second;
} Pair;
int** create(int** mx, size_t n) {
size_t i, j;
srand((unsigned)time(NULL));
mx = (int**)malloc(n * sizeof(int*));
for (i = 0; i < n; ++i) {
mx[i] = (int*)malloc(n * sizeof(int));
for (j = 0; j < n; ++j) mx[i][j] = RAND(10, 101);
}
return mx;
}
int** destroy(int** mx, size_t n) {
if (mx != NULL) {
size_t i;
for (i = 0; i < n; ++i) free(mx[i]);
free(mx);
mx = NULL;
}
return mx;
}
void show(int** mx, size_t n) {
size_t i, j;
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j) printf("%4i", mx[i][j]);
puts("");
}
}
Pair sum(int** mx, size_t n) {
Pair pair;
pair.second = pair.first = 0;
size_t i;
for (i = 0; i < n; ++i) {
pair.first += mx[i][i];
pair.second += mx[i][n - i - 1];
}
return pair;
}
size_t length(const char* msg) {
size_t value;
printf(msg);
scanf_s("%Iu", &value);
while (getchar() != '\n');
return value;
}
int main(void) {
system("chcp 1251 > nul");
int** mx = NULL;
size_t n = length("Введите размерность матрицы: ");
mx = create(mx, n);
if (mx != NULL) {
Pair pair;
show(mx, n);
pair = sum(mx, n);
printf("Сумма элементов главной диагонали: %i\n", pair.first);
printf("Сумма элементов побочной диагонали: %i\n", pair.second);
mx = destroy(mx, n);
} else {
puts("Недостаточно памяти!");
}
system("pause > nul");
return 0;
}
Aidar Shakirov
Aidar Shakirov
88 135
Лучший ответ