Преобразование массива с использованием функций - 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;
}