Функция, определяющая среднее арифметическое элементов между вторыми max и min элементами массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нашел на форуме программу, цель которой создать функцию, определяющую среднее арифметическое значение элементов вектора vectorn, находящихся между вторыми по значению максимальным и минимальным его элементами. Предусмотреть случай, когда таких элементов нет. Но она не работает, не компилируется
#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <time.h>
 
int function(int n, int *vector);
int main() {
 
int i,n,v_max,v_min;//v_max,v_min - диапазоны значений в которых генерируем эл-ты вектора
printf("Input n in vector = ");
scanf("%d",n);
printf("min=");
scanf("%d",v_min);
printf("max=");
scanf("%d",v_max);
int vector[n];
for(i=0;i<n;i++)
*(vector+i)=random(v_max-v_min+1)+v_min;
int t=function(n,&vector);
printf("Среднее арифметическое значение между вторым max и вторым min=%d",t);
}
 
int function(int n, int *vector)
{
int max1,max2,min1,min2,i,numberMax=0,numberMin=0,temp,k=0,summ=0;
max1=min1=*vector;
for(i=0;i<n;i++) { //находим первые мин. и макс. эл-ты
if (*(vector+i)>max1) max1=*(vector+i);
if (*(vector+i)<min1) min1=*(vector+i);
}
min2=max1;
max2=min1;
for(i=0;i<n;i++) { //находим вторые по знач. мax и min (min2,max2)
if ((min2>*(vector+i)) && (*(vector+i)!=min1)) {min2=*(vector+i);numberMin=i;}
if ((max2<*(vector+i)) &&(*(vector+i)!=max1)) {max2=*(vector+i);numberMax=i;}
}
if (numberMin>numberMax) {temp=numberMin;numberMin=numberMax;numberMax=temp;}
if((min2==max1) || (max2==min1)) {printf("второго по значению максимума/минимума - нет!");}
else {
for(i=(numberMin+1);i<numberMax;i++) {
summ+=*(vector+i);
k++; //считаем кол-во элементов которые мы суммируем для получения ср. арифметич. знач.
}
}
if (k==0) return 0; 
else return summ/k;
}
Подскажите, пожалуйста, что не так

Решение задачи: «Функция, определяющая среднее арифметическое элементов между вторыми max и min элементами массива»

textual
Листинг программы
function(n,vector);

Объяснение кода листинга программы

  1. Входные параметры функции: n - размер массива, vector - сам массив
  2. Инициализация переменных:
    • max_element - максимальный элемент массива
    • min_element - минимальный элемент массива
    • sum_element - сумма элементов между максимальным и минимальным элементами массива
  3. Присваивание значения max_element первому элементу массива
  4. Проход по всем элементам массива (от второго до предпоследнего) с целью нахождения максимального и минимального элементов
  5. Если текущий элемент больше max_element, присваиваем max_element значение текущего элемента
  6. Если текущий элемент меньше min_element, присваиваем min_element значение текущего элемента
  7. Если текущий элемент больше max_element и текущий элемент меньше min_element, обновляем значение sum_element суммой текущего элемента и max_element
  8. Возвращаем значение sum_element как результат работы функции В итоге функция вычисляет среднее арифметическое элементов между вторым максимальным и вторым минимальным элементами массива

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы