Поиск Cреднего Арифметического В Массиве С Использованием Функций

Novice

New Member
07.12.2014
0
0
#1
Вот дана задача:
Найти среднее арифметическое всех элементов между минимальным и максимальным элементами в массивах А (7х8) и В (34).
Требуется решить задачу с использованием функций,так же требуется написать функции для ввода и вывода массива(если требуется) отдельно.
У меня получилось написать функции для ввода и вывода,для поиска максимума и минимума,но не получается найти среднее арифметическое. Сам мой алгоритм такой : я хочу ввести массив,затем найти в нем максимум,причем вернуть не значение,а указатель на него,затем так же найти минимум и вернуть указатель на него и в функцию среднего арифметического передать сам массив и указатели на максимум и минимум и,собственно,запустить в теле функции цикл для подсчета. Но на словах всё не так и сложно,а на практике всё выходит очень трудно.

Вот мой код:
C++:
#include <stdio.h>
#include <stdlib.h>
#define m 2
#define n 3
#define k 6

void in_mass(int *,int);		/*функция ввода массива */
int *max(int *,int,int);	 /*поиск максимума */
int *min(int *,int,int);	 /*поиск минимума */
double sr_ar(int *,int*,int*);	/*нахождение среднего арифметического */
int main()
{
int x[m][n],y[k];
in_mass(y,6);
sr_ar(y,max(y,1,6),min(y,1,6));
system("pause");
return(0);
}

void in_mass(int *a,int b)
{
for(;b>0;b--)
scanf("%d",a++);
}

int *max(int *c,int a,int b)
{
int *maximum = c;
for(b;b>0;b--){
if(*c*a>*maximum*a)
maximum=c;
c++;
}
return maximum;
}
int *min(int *c,int a,int b)
{
int *minimum = c;
for(b;b>0;b--){
if(*c*a<*minimum*a)
minimum=c;
c++;
}
return minimum;
}
double sr_ar(int *c,int *a,int *b){
int l=0,sum=0,z=0;
double arifm=0;
for(*a;*a>*b;*a--){
sum+=*c;
l++;
c++;
}
arifm=sum/l;
printf("%d\n",l);
printf("%lf",arifm);
return arifm;
}
Прошу подсказать,что не так у меня с функцией нахождения среднего арифметического.
 

Whatka

Well-Known Member
09.10.2011
428
4
24
Минск
#2
C++:
//
double sr_ar(int *c, int *a, int *b){
int l = 0, z = 0;
double sum = 0,arifm = 0;
c = a + 1;
for (; *a>*b; *a--)
{
sum += *c;
l++;
c++;
}
arifm = sum / l;
printf("%d\n", l);
printf("%lf", arifm);
return arifm;
}
//
а почему вы работаете с указателями,а не просто с индексами элементов?
 

Novice

New Member
07.12.2014
0
0
#3
Whatka , мне показалось,что так проще будет.


Добавлено: Whatka
можете подсказать,что не так в самой функции?
 

Whatka

Well-Known Member
09.10.2011
428
4
24
Минск
#4
Ну на самом деле с индексами было бы проще (моё субъективное мнение).
Я скинул вам работающую функцию.(не всегда -_-,но об этом дальше)

Там переменная С у вас указывала на начало массива,а должна для корректной работы
на первый элемент после a.

И переменная sum была интом,так что sum / l; выдавала целое значение.


А теперь про возможную ошибку)
Вы уверенны что при
C++:
 sr_ar(y,max(y,1,6),min(y,1,6));
элемент max(y,1,6) будет идти раньше чем min(y,1,6) ?

надо будет в функции,где считается среднее значение сделать проверку