Найти среднее геометрическое строки матрицы, на которой находится макс элемент - C (СИ)
Формулировка задачи:
найти среднее геометрическое строки матрицы на которой находится макс элемент.
Выбивает после ввода элементов и я не додумаюсь как сделать чтобы искал среднее геометрическое только строки с макс. элементом
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "windows.h"
#include "math.h"
#define n 20
#define m 20
void main()
{
float a[n][m],srg,max,p;
int i,j,ri,rj;
char otv;
while(1)
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("cls");
printf("\n Постановка");
while(1)
{
printf("\n кол-во строк в массиве <=%d \n",n);
scanf("%d",&ri);
if((ri>1)&&(ri<=n))break;
printf("\n повторите ввод");
}
while(1)
{
printf("\n кол-во столбцов в массиве <=%d \n",m);
scanf("%d",&rj);
if((rj>1)&&(rj<=m))break;
printf("\n повторите ввод");
}
system("cls");
printf("\n Введите метрицу А \n");
for(i=0;i<ri;i++)
{
for(j=0;j<rj;j++)
{
printf("a[%d][%d]=",i+1,j+1);
scanf("%f",&a[i][j]);
}
}
system("cls");
printf("\n Исходная матрица \n");
for ( i = 0; i <ri; i ++ )
{
for ( j = 0; j <rj; j ++ )
printf ( "%6.2f", a[i][j] );
printf("\n");
}
max=a[0][0];
for (i=0;i<ri;i++)
{
for(j=0;i<rj;j++)
if(a[i][j]>max)
max=a[i][j];
}
printf("\n max=%6.2f",max);
for (i=0;i<ri;i++)
{
p=1;
srg=0;
for(j=0;i<rj;j++)
p=p*a[i][j];
srg=pow(p,1/ri);
}
for ( i = 0; i <ri; i ++ )
{
for ( j = 0; j <rj; j ++ )
printf("\n srg=%6.2f",srg);
}
printf("\n Продолжить(Y/N)?");
scanf("%s",&otv);
if((otv=='n')||(otv=='N'))break;
}
printf("\n Клементьев 22П");
getch();
}Решение задачи: «Найти среднее геометрическое строки матрицы, на которой находится макс элемент»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define N 5
int main(void)
{
int mass[N][N], i, j, max = -1, d = 1, index = 0;
float sg = 1;
system("cls");
srand(time(NULL));
printf("Matrucya:\n");
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
{
printf("%d ", mass[i][j] = rand() % 99);
if(mass[i][j] > max)
{
max = mass[i][j];
index = i;
}
}
printf("\n");
}
printf("\n MAX = ");
printf("%d , ryadok #%d", max, index + 1);
printf("\nseredne geometruchne ryadka, y jakomy znah. MAX : ");
for(i = 0; i < N; i++)
d *= mass[index][i];
sg = exp(log(abs(d))/N);
printf("%.2f\n", sg);
getch();
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с стандартными функциями, математическими и случайными операциями, а также для работы с временем.
- Определяем размерность матрицы N = 5.
- Инициализируем переменные: матрицу mass[N][N], индексы i, j, значение max = -1, значение d = 1, индекс = 0; а также переменную sg = 1.
- Очищаем консоль с помощью функции system(
cls). - Инициализируем генератор случайных чисел с помощью srand(time(NULL)).
- Выводим матрицу mass на экран с помощью двух вложенных циклов и функции printf().
- Если найденное число в матрице больше текущего максимального числа, то обновляем максимальное число и его индекс.
- Выводим на экран максимальное число и его индекс.
- Вычисляем среднее геометрическое строки матрицы, на которой находится макс элемент, с помощью цикла и функции printf().