Функция, определяющая среднее арифметическое элементов между вторыми 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);
Объяснение кода листинга программы
- Входные параметры функции:
n
- размер массива,vector
- сам массив - Инициализация переменных:
max_element
- максимальный элемент массиваmin_element
- минимальный элемент массиваsum_element
- сумма элементов между максимальным и минимальным элементами массива
- Присваивание значения
max_element
первому элементу массива - Проход по всем элементам массива (от второго до предпоследнего) с целью нахождения максимального и минимального элементов
- Если текущий элемент больше
max_element
, присваиваемmax_element
значение текущего элемента - Если текущий элемент меньше
min_element
, присваиваемmin_element
значение текущего элемента - Если текущий элемент больше
max_element
и текущий элемент меньшеmin_element
, обновляем значениеsum_element
суммой текущего элемента иmax_element
- Возвращаем значение
sum_element
как результат работы функции В итоге функция вычисляет среднее арифметическое элементов между вторым максимальным и вторым минимальным элементами массива
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д