Преобразование массива с использованием функций - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д