Задание: осуществить ввод размерности двумерного массива, его элементов с клавиатуры (можно предположить, что максимальная размерность входного массива не более чем 10 на 10). Осуществлять вывод на экран входного массива, результата работы, а также всех промежуточных решений.
Дан двумерный массив, размером (n на m). Создать и заполнить одномерный массив, найдя среднее геометрическое (корень n-ой степени из произведения n чисел) положительных элементов в каждом столбце матрицы и в каждом столбце заменить все отрицательные числа соответствующим значением среднего геометрического. В случае отсутствия в столбце отрицательных чисел заполнить его минимальным значением из элементов данного столбца.
C/C++
Написать программу на Си
#include
#include
#include
#include
#include
#define RAND(min, max) (rand() % ((max) - (min)) + (min))
size_t input(const char* msg, size_t lim) {
size_t value = 0;
while (value < 2 || value > lim) {
printf("%s", msg);
scanf("%zu", &value);
}
return value;
}
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 = input("n: ", 10);
m = input("m: ", 10);
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(-499, 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;
}
#include
#include
#include
int main()
{
const int max = 10;
int n,m,proizv,count_plus,count_minus,min;
double srednee,**a,*b;
do
{
printf("n = ");
scanf("%d",&n);
}while(n < 1 || n > max);
do
{
printf("m = ");
scanf("%d",&m);
}while(m < 1 || m > max);
a = (double**) malloc(n * sizeof(double*));
for(int i = 0; i < n; i++)
a[i] = (double*) malloc(m * sizeof(double));
b = (double*) malloc(m * sizeof(double));
printf("\n\tВвод массива:\n");
for(int x = 0; x < n; x++)
{
for(int y = 0; y < m; y++)
{
printf("a[%d][%d] = ",x,y);
scanf("%lf",&a[x][y]);
}
}
printf("\n\tВывод на экран введённого массива:\n");
for(int x = 0; x < n; x++)
{
for(int y = 0; y < m; y++)
printf("%lf\t",a[x][y]);
putchar('\n');
}
putchar('\n');
/* вычисления */
for(int y = 0; y < m; y++)
{
proizv = 1.0;
count_plus = count_minus = 0;
min = a[0][y];
for(int x = 0; x < n; x++)
{
if(a[x][y] < min) min = a[x][y];
if(a[x][y] > 0.0)
{
proizv *= a[x][y];
printf("промежуточный результат произведения в столбце %d -- %lf.\n",y,proizv);
count_plus++;
}
else if(a[x][y] < 0.0) count_minus++;
}
if(count_plus == 0)
{
printf("в столбце %d нет положительных элементов.\n",y);
b[y] = 0.0;
}
else
{
srednee = pow(proizv,1.0/(double) count_plus);
printf("среднее геометрическое положительных элементов в столбце %d равно %lf.\n",y,srednee);
if(count_minus == 0)
{
printf("в столбце %d нет отрицальных элементов.\n",y);
for(int x = 0; x < n; x++)
{
a[x][y] = min;
printf("значение a[%d][%d] = %lf\n",x,y,a[x][y]);
}
}
else
{
b[y] = srednee;
for(int x = 0; x < n; x++)
{
if(a[x][y] < 0.0) a[x][y] = b[y];
printf("значение a[%d][%d] = %lf\n",x,y,a[x][y]);
}
}
}
}
printf("\n\tВ результате получился массив:\n");
for(int x = 0; x < n; x++)
{
for(int y = 0; y < m; y++)
printf("%lf\t",a[x][y]);
putchar('\n');
}
putchar('\n');
if(b == (double*) NULL) exit(1);
free(b);
b = (double*) NULL;
if(a == (double**) NULL) exit(1);
for(int i = 0; i < n; i++)
{
if(a[i] = (double*) NULL) exit(1);
free(a[i]);
a[i] = (double*) NULL;
}
free(a);
a = (double**) NULL;
return 0;
}
Не дочитал.
Уснул.
Уснул.
Похожие вопросы
- Помогите пожалуйста написать программу на Си
- Написать программы на СИ
- Работа со структурами. Написать программу для СИ
- Помогите написать программу на СИ
- Написать программу на Си, помогите!!!
- Написать программу на Си
- Написать программу на СИ
- Помогите плиз написать программу на Си Массив структур
- Написать программу на Си
- Помогите написать программу на си