C/C++

Написать программу на Си

Дан двумерный массив, размером (n на m). Создать и заполнить одномерный массив, найдя среднее геометрическое (корень n-ой степени из произведения n чисел) положительных элементов в каждом столбце матрицы и в каждом столбце заменить все отрицательные числа соответствующим значением среднего геометрического. В случае отсутствия в столбце отрицательных чисел заполнить его минимальным значением из элементов данного столбца
 #include  
#include
#include
#include
#include
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
int main(void) {
size_t n = 0;
size_t m = 0;
size_t i = 0;
size_t j = 0;
double** matrix = NULL;
double* box = NULL;
double* fox = NULL;
double* cox = NULL;
double mul = 1.0;
size_t count = 0;
size_t pos = 0;
double min = 0.0;
srand((unsigned)time(NULL));
n = RAND(5, 10);
printf("n: %zu\n", n);
m = RAND(6, 12);
printf("m: %zu\n", m);
matrix = (double**)malloc(n * sizeof(double*));
for (i = 0; i < n; ++i) {
matrix[i] = (double*)malloc(m * sizeof(double));
for (size_t j = 0; j < m; ++j) {
matrix[i][j] = RAND(-999, 1000) / 10.0;
printf("%8.1lf", matrix[i][j]);
}
puts("");
}
puts("");
box = (double*)malloc(m * sizeof(double));
fox = (double*)malloc(m * sizeof(double));
cox = (double*)malloc(m * sizeof(double));
for (j = 0; j < m; ++j) {
count = 0;
pos = 0;
mul = 1.0;
fox[j] = matrix[0][j];
min = matrix[0][j];
for (i = 0; i < n; ++i) {
if (matrix[i][j] > 0) {
++count;
mul *= matrix[i][j];
}
if (matrix[i][j] < fox[j]) {
fox[j] = matrix[i][j];
}
if (matrix[i][j] >= 0) {
++pos;
}
if (matrix[i][j] < min) {
min = matrix[i][j];
}
}
cox[j] = min;
fox[j] = pos;
box[j] = pow(mul, 1.0 / count);
}
for (j = 0; j < m; ++j) {
for (i = 0; i < n; ++i) {
if (fox[j] == n) {
matrix[i][j] = cox[j];
} else if (matrix[i][j] < 0) {
if (box[j] != 1.0) {
matrix[i][j] = box[j];
}
}
}
}
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
printf("%8.2lf", matrix[i][j]);
}
puts("");
}
free(cox);
free(fox);
free(box);
for (i = 0; i < n; ++i) free(matrix[i]);
free(matrix);
return 0;
}
P.S. Жаль, что вами не оговорен случай, когда все числа в столбце отрицательные.
Сергей Шептяков
Сергей Шептяков
92 507
Лучший ответ
Начал про 2-мерный массив, а закончил 1-мерным массивом