У вас есть две проблемы с пониманием основ в C ++:
- Переменная область.
- Параметры функции.
Чтобы кратко объяснить:
Переменные в C ++ живут только в той области, в которой они были объявлены. В вашем случае вы объявили: x1, x2, x3, x4, x5
внутри функции main
, что означает, что они не существуют вне этой области. Переменные x1, x2, x3, x4, x5
в meanfn
и deviationfn
- это совершенно разные переменные. Они только одни и те же имена, и это все. Поэтому, когда вы объявили их внутри функций, у них не было ранее назначенных значений, что означает, что вы не можете их использовать.
Что касается параметров функции, вы должны объявить, какие параметры функция принимает в своей подписи. Ваша meanfn
подпись double meanfn()
, которая не принимает никаких параметров. Если вы хотите, чтобы он принимал 5 и только 5 double
переменных, вы должны изменить его для соответствия.
Есть два решения, основанные на объяснениях выше:
#include <iostream>
#include <cmath>
using namespace std;
// Named constant definitions (and function declarations):
//Prototype
double meanfn();
double deviationfn();
// Main program:
// Variable declarations:
double x1, x2, x3, x4, x5; // outside of 'main' making them global and everything has access to these variables.
int main()
{
// Function body:
cout << "Enter a number followed by space 5 times to calculate the mean of five numbers. " << endl;
cin >> x1 >> x2 >> x3 >> x4 >> x5;
// CALL YOUR FUNCTIONS, THEY WONT BE CALLED BY THEIR OWN
double mean = meanfn();
double deviation = deviationfn(mean);
// print results
std::cout << "\n Mean: " << mean << "\n Deviation: " << deviation;
return 0;
} // end function main
double meanfn()
{
double mean = (x1 + x2 + x3 + x4 + x5) / 5;
return mean;
}// end function meanfn
double deviationfn(double mean)
{
double x,deviation;
x = mean;
deviation = sqrt((pow(x1 - x, 2) + pow(x2 - x, 2) + pow(x3 - x, 2) + pow(x4 - x, 2) + pow(x5 - x, 2)) / 5);
return deviation;
}
В приведенном выше решении переменные x1, x2, x3, x4, x5
были перемещены в глобальные переменные, что делает их доступ глобальным, и, следовательно, все функции могут использовать их.
Второе решение будет учитывать передачу параметров для функций, таких как:
#include <iostream>
#include <cmath>
using namespace std;
// Named constant definitions (and function declarations):
//Prototype
double meanfn(double x1, double x2, double x3, double x4, double x5);
double deviationfn(double mean, double x1, double x2, double x3, double x4, double x5);
// Main program:
int main()
{
// Variable declarations:
double x1, x2, x3, x4, x5;
// Function body:
cout << "Enter a number followed by space 5 times to calculate the mean of five numbers. " << endl;
cin >> x1 >> x2 >> x3 >> x4 >> x5;
// see the difference in the function calls?
double mean = meanfn(x1, x2, x3, x4, x5);
double deviation = deviationfn(mean, x1, x2, x3, x4, x5);
// print results
std::cout << "\n Mean: " << mean << "\n Deviation: " << deviation;
return 0;
} // end function main
double meanfn(double x1, double x2, double x3, double x4, double x5)
{
double mean;
mean = (x1 + x2 + x3 + x4 + x5) / 5;
return mean;
}// end function meanfn
double deviationfn(double mean, double x1, double x2, double x3, double x4, double x5)
{
double x,deviation;
x = mean;
deviation = sqrt((pow(x1 - x, 2) + pow(x2 - x, 2) + pow(x3 - x, 2) + pow(x4 - x, 2) + pow(x5 - x, 2)) / 5);
return deviation;
}