Показать полную графическую версию : Квадратная матрица - среднее геометрическое положительных элементов
Доброго времени суток!
Прошу, как говорится, помощи :)
В университете задали несколько задач, а у меня совсем нет времени - как раз нагрузили работой, и так ничего не успеваю. Плюс дома нет билдера, и где его найти в 11 часов вечера, с моим инетом 64кб - хз.
У кого время есть, черкните код, буду очень благодарен.
Суть задачи:
Для квадратной матрицы от 4х4 до 10х10 найти среднее геометрическое положительных элементов первой четверти, т.е. элементов, расположенных в верхней половине матрицы между диагоналями.
Кто откликнется - заранее спасибо :) Желательно до завтра, максимум - до четверга..
Элементы первой четверти, то есть элементы между главной и побочной диагональю?
n - количество элементов первой четверти
Среднее геометрическое это произведение корней n степени из этих элементов
Если сначала все перемножать, то понадобится длинная арифметика. Т.к результат умножения в long не влезет. Так что я сразу вычисляю корни.
Как-то так. Корректность не гарантирую.
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <math.h>
#define XYZZ 10 // размерность квадратной матрицы
void print_matrix(int **m);
void random_matrix(int **m);
double geom(int **m, int sz);
void main()
{
double mn;
int size=XYZZ;
int** matrix;
matrix = new int*[size];
for(int k=0;k<size;k++)
{
matrix[k]=new int[size];
}
random_matrix(matrix);
print_matrix(matrix);
mn=geom(matrix,XYZZ);
printf("%f\n",mn);
}
void print_matrix(int **m)
{
int i,j;
for (i=0 ; i<XYZZ; i++)
{
for (j=0; j<XYZZ;j++)
{
printf("%d ", m[i][j]);
}
printf("\n");
}
}
void random_matrix(int **m)
{
int i,j;
srand (time(NULL));
for (i=0 ; i<XYZZ; i++)
for (j=0; j<XYZZ;j++)
m[i][j]=rand()%10;
}
double geom(int **m, int sz)
{
double result;
int gap_x,gap_y,a,b,i,sk;
//------------Определение корень какой степени нужно вычислить
sk=0;
gap_x=1;
gap_y=XYZZ-2;
for(i=0;i<XYZZ && gap_x<=gap_y;i++,gap_x++,gap_y--)
{
for(a=gap_x,b=gap_y;a<b;a++,b--)
{
if(m[i][a]>0)
sk++;
if(m[i][b]>0)
sk++;
}
if(a==b)
sk++;
}
//------------Конец определения корень какой степени нужно вычислить
//------------Вычисление среднего геометрического
result=1;
gap_x=1;
gap_y=XYZZ-2;
for(i=0;i<XYZZ && gap_x<=gap_y;i++,gap_x++,gap_y--)
{
for(a=gap_x,b=gap_y;a<b;a++,b--)
{
if(m[i][a]>0)
{
result*=pow(m[i][a],1.0/sk);
}
if(m[i][b]>0)
{
result*=pow(m[i][b],1.0/sk);
}
}
if(a==b)
result*=pow(m[i][a],1.0/sk);
}
//------------Конец вычисления среднего геометрического
return(result);
}
Mrcnn, спасибо!
Я, правда, на паре умудрился сделать, но все равно :)
Щас посмотрел код, приблизительно так и решал. Со средним геометрическим правда пришлось повозиться, долго не мог разобраться у какой из переменных тип другой поставить.
Еще раз спасибо за ответ :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.