Преобразование массива с использованием функций - C (СИ)

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

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

Здравствуйте! Подскажите пожалуйста, почему компилятор ругается при обращении к каждой из двух функций. Пишет ошибки: "undefined reference to `vect_mass', undefined reference to `arifsumma_min2_max_2" "
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
 
void vect_mass(int p, int vect_max, int vect_min, int vector[p]);
float arifsumma_min_2_max_2(int p, int vector[p], int i_max_1, int i_min_1);
 
int main()
{
    int i,  p, a, b, vect_min, vect_max, arifsumma, min_1, max_1, i_min_1, i_max_1;

    printf("\nВведите нижнюю границу диапазона");
    scanf("%d", &vect_min);
    printf("\nВведите верхнюю границу диапазона:");
    scanf("%d", &vect_max);
    printf("\nВведите размер вектора:");
    scanf("%d", &p);
    
    int vector[p];
    
    printf("\nИсходный вектор:\n"); 
 
    vect_mass(p, vect_min, vect_max, vector);  //вызываем функцию для определения элементов вектора
    
    for (i=0; i<p; i++)                    // выводим вектор на экран
    {       
        printf("%5d", vector[i]);       
        printf("\n");
    }
    
    //выявляем максимумы и минимумы вектора
    
    //первый цикл поиска минимумов и максимумов 
    max_1 = vector[0];
    for (i=1; i<p; i++)     
        if (vector[i] > max_1)
            max_1 = vector[i];
            i_max_1=i;
            
    min_1 = vector[0];
    for (i=1; i<p; i++)     
        if (vector[i] < min_1)
            min_1 = vector[i];
            i_min_1=i;
 
//второй цикл поиска минимумов и максимумов

     a = i_min_1;
     b = i_max_1;
     max_1 = vector[i_min_1];
     min_1 = vector[i_max_1];
     i_max_1 = 0;
     i_min_1 = 0;
 
     for (i=0; i<p ; i++)  
        {
           if ((i == a) || (i == b))
             continue;
 
     if (vector[i] > max_1)
        {
           max_1 = vector[i];
           i_max_1 = i;
        }
 
      if (vector[i] < min_1)
        {
            min_1 = vector[i];
            i_min_1 = i;
   
         printf("\nmin_2=:%3d", min_1);
         printf("   i_min_2=%3d", i_min_1);
         printf("\nmax_2=:%3d", max_1);
         printf("   i_max_2=%3d", i_max_1);
         printf("\n");
 
    arifsumma = arifsumma_min_2_max_2(p, vector, i_max_1, i_min_1);
    
    printf("\nСреднеарифметическая сумма элементов вектора между вторыми максимумом и минимумом: %5d", arifsumma);
    
    getch();
    
    return 0;
}
 
//описание функций
 
// 1. формирование вектора
void vect_mass(int p, int vect_max, int vect_min, int vector[p])
{
    int i, m;
    time_t t;       // текущее время для инициализации 
                    // генератора случайных чисел
                    
    srand((unsigned) time(&t)); // инициализация генератора
                                // случайных чисел
    
    m = vect_max-vect_min + 1;
    
        // получение случайного числа в диапазоне
        // от vect_min  до  vect_max
        
    for (i=0; i<p; i++)     
        vector[i]=rand()% m + vect_min;     
} 
 
// 2. определение среднеарифметической суммы элементов между вторыми по максимальному и минимальному значению элементами вектора
 
float arifsumma_min_2_max_2(int p, int vector[p], int i_max_1, int i_min_1)
{
int m, summa;
float arifsumma;    
//случай, когда между минимум и максимум нет элементов, либо только один
m=abs(i_min_1-i_max_1)-1;
if (m==0 || m==1)
{
printf("Между максимумом и минимумом нет элементов или только один");
}
 
else if(i_max_1<i_min_1)
    {
        for(i=i_max_1+1;i<i_min_1;i++)
        summa+=vector[i];
    }

        else if(i_min_1<i_max_1)
            {
                for(i=i_min_1=1;i<i_max_1;i++)
                 summa+=vector[i];
            }
            
              arifsumma=summa/i;
              return arifsumma;

}
}
}

Решение задачи: «Преобразование массива с использованием функций»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
 
void vect_mass(int p, int vect_max, int vect_min, int vector[p]);
float arifsumma_min_2_max_2(int p, int vector[p], int i_max_1, int i_min_1);
 
int main() {
    int i,  p, a, b, vect_min, vect_max, arifsumma, min_1, max_1, i_min_1, i_max_1;
 
    printf("\nВведите нижнюю границу диапазона");
    scanf("%d", &vect_min);
    printf("\nВведите верхнюю границу диапазона:");
    scanf("%d", &vect_max);
    printf("\nВведите размер вектора:");
    scanf("%d", &p);
 
    int vector[p];
 
    printf("\nИсходный вектор:\n");
 
    vect_mass(p, vect_min, vect_max, vector);  //вызываем функцию для определения элементов вектора
 
    for (i = 0; i < p; i++) {              // выводим вектор на экран
        printf("%5d", vector[i]);
        printf("\n");
    }
 
    //выявляем максимумы и минимумы вектора
 
    //первый цикл поиска минимумов и максимумов
    max_1 = vector[0];
    for (i = 1; i < p; i++)
        if (vector[i] > max_1) {
            max_1 = vector[i];
        }
    i_max_1 = i;
 
    min_1 = vector[0];
    for (i = 1; i < p; i++)
        if (vector[i] < min_1) {
            min_1 = vector[i];
        }
    i_min_1 = i;
 
    //второй цикл поиска минимумов и максимумов
 
 
    a = i_min_1;
    b = i_max_1;
    max_1 = vector[i_min_1];
    min_1 = vector[i_max_1];
    i_max_1 = 0;
    i_min_1 = 0;
 
    for (i = 0; i < p ; i++) {
        if ((i == a) || (i == b)) {
            continue;
        }
 
        if (vector[i] > max_1) {
            max_1 = vector[i];
            i_max_1 = i;
        }
 
        if (vector[i] < min_1) {
            min_1 = vector[i];
            i_min_1 = i;
 
            printf("\nmin_2=:%3d", min_1);
            printf("   i_min_2=%3d", i_min_1);
            printf("\nmax_2=:%3d", max_1);
            printf("   i_max_2=%3d", i_max_1);
            printf("\n");
 
            arifsumma = arifsumma_min_2_max_2(p, vector, i_max_1, i_min_1);
 
            printf("\nСреднеарифметическая сумма элементов вектора между вторыми максимумом и минимумом: %5d", arifsumma);
 
            return 0;
        }
    }
 
    system("pause");
    return 0;
}
 
//описание функций
 
// 1. формирование вектора
void vect_mass(int p, int vect_max, int vect_min, int vector[p]) {
    int i, m;
    time_t t;       // текущее время для инициализации
    // генератора случайных чисел
 
    srand((unsigned) time(&t)); // инициализация генератора
    // случайных чисел
 
    m = vect_max - vect_min + 1;
 
    // получение случайного числа в диапазоне
    // от vect_min  до  vect_max
 
    for (i = 0; i < p; i++) {
        vector[i] = rand() % m + vect_min;
    }
}
 
// 2. определение среднеарифметической суммы элементов между вторыми по максимальному и минимальному значению элементами вектора
float arifsumma_min_2_max_2(int p, int vector[p], int i_max_1, int i_min_1) {
    int m, summa, i;
    float arifsumma;
    //случай, когда между минимум и максимум нет элементов, либо только один
    m = abs(i_min_1 - i_max_1) - 1;
    if (m == 0 || m == 1) {
        printf("Между максимумом и минимумом нет элементов или только один");
    }
    else if (i_max_1 < i_min_1) {
        for (i = i_max_1 + 1; i < i_min_1; i++) {
            summa += vector[i];
        }
    }
    else if (i_min_1 < i_max_1) {
        for (i = i_min_1 = 1; i < i_max_1; i++) {
            summa += vector[i];
        }
    }
 
    arifsumma = summa / i;
    return arifsumma;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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