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

Тема в разделе "C/C++/C#", создана пользователем Novice, 7 дек 2014.

  1. Novice

    Novice New Member

    Регистрация:
    7 дек 2014
    Сообщения:
    0
    Симпатии:
    0
    Вот дана задача:
    Найти среднее арифметическое всех элементов между минимальным и максимальным элементами в массивах А (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;
    }
    Прошу подсказать,что не так у меня с функцией нахождения среднего арифметического.
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Код (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;
    }
    //
    а почему вы работаете с указателями,а не просто с индексами элементов?
     
  3. Novice

    Novice New Member

    Регистрация:
    7 дек 2014
    Сообщения:
    0
    Симпатии:
    0
    Whatka , мне показалось,что так проще будет.


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

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    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) ?

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

    Novice New Member

    Регистрация:
    7 дек 2014
    Сообщения:
    0
    Симпатии:
    0
    Whatka спасибо,постараюсь разобраться)
     
Загрузка...

Поделиться этой страницей