C++ 模糊逻辑循环在第一次输入后递增
C++ Fuzzy Logic loop increments after first input
我写了我的第一个模糊逻辑程序,第一个输入通过输出正确的电压值完美地完成了它的工作。电压一词严格来说是一个占位符。它完全符合我的数学。之后的任何值都会增加最终输出,并且在我重置程序之前永远不会再次工作,在这之后,它会做同样的事情。
我会尽量简化我的代码。
int main()
{
int InputDistance;
double BetweenDistance1;
double BetweenDistance2;
double DoM1;
double DoM2;
double OutputComponent1;
double OutputComponent2;
double CrispOutput;
bool NN = false;
bool N = false;
bool Z = false;
const double NNVolt (0);
const double NVolt (2.25);
const double ZVolt (4.5);
for(;;)
{
cout << "What is the distance?" << endl << endl;
cin >> InputDistance;
cout << endl;
if(InputDistance > 0 && InputDistance <= 5)
{
BetweenDistance1 = InputDistance - 0;
BetweenDistance2 = 5 - InputDistance;
NN = true;
N = true;
}
if(InputDistance > 5 && InputDistance <= 10)
{
BetweenDistance1 = InputDistance - 5;
BetweenDistance2 = 10 - InputDistance;
NN = true;
N = true;
}
if(InputDistance > 10 && InputDistance <= 15)
{
BetweenDistance1 = InputDistance - 10;
BetweenDistance2 = 15 - InputDistance;
N = true;
Z = true;
}
if(InputDistance > 15 && InputDistance <= 20)
{
BetweenDistance1 = InputDistance - 15;
BetweenDistance2 = 20 - InputDistance;
N = true;
Z = true;
}
DoM1 = BetweenDistance1 / 5;
DoM2 = BetweenDistance2 / 5;
if(NN == true && N == true)
{
OutputComponent1 = NNVolt * DoM1;
OutputComponent2 = NVolt * DoM2;
}
if(N == true && Z == true)
{
OutputComponent1 = NVolt * DoM1;
OutputComponent2 = ZVolt * DoM2;
}
CrispOutput = OutputComponent1 + OutputComponent2;
cout << "Voltage = " << CrispOutput << endl << endl;
}
return (0);
}
是什么导致我每次输入新的距离值时值都会增加?我看不到。
您永远不会重置您的 bool
s。
bool NN = false;
bool N = false;
bool Z = false;
应该在 for 循环的开头,这样每次循环时它们都会被重置。
根据经验,您将在循环中使用的任何变量都应在循环中声明,除非您需要在循环范围之外访问它。
您应该初始化所有变量,因为即使您的编译器会将它们初始化为 null, "", preppended "[=12=]", 0, 0.0, 0.0f
,也可以认为它是在不遵循此类标准的不同编译器下编译的,或者使用标志进行编译使用不同的东西进行初始化。
int main()
{
int InputDistance = 0;
double BetweenDistance1 = 0.0;
double BetweenDistance2 = 0.0;
double DoM1 = 0.0;
double DoM2 = 0.0;
double OutputComponent1 = 0.0;
double OutputComponent2 = 0.0;
double CrispOutput = 0.0;
bool NN = false;
bool N = false;
bool Z = false;
const double NNVolt (0);
const double NVolt (2.25);
const double ZVolt (4.5);
并且您应该在循环开始时重新初始化,以确保您最终不会使用之前迭代的数据。
for(;;)
{
//----------- init ------------
InputDistance = 0;
BetweenDistance1 = 0.0;
BetweenDistance2 = 0.0;
DoM1 = 0.0;
DoM2 = 0.0;
OutputComponent1 = 0.0;
OutputComponent2 = 0.0;
CrispOutput = 0.0;
NN = false;
N = false;
Z = false;
//-----------------------------
cout << "What is the distance?" << endl << endl;
cin >> InputDistance;
cout << endl;
..
}
return (0);
}
我写了我的第一个模糊逻辑程序,第一个输入通过输出正确的电压值完美地完成了它的工作。电压一词严格来说是一个占位符。它完全符合我的数学。之后的任何值都会增加最终输出,并且在我重置程序之前永远不会再次工作,在这之后,它会做同样的事情。
我会尽量简化我的代码。
int main()
{
int InputDistance;
double BetweenDistance1;
double BetweenDistance2;
double DoM1;
double DoM2;
double OutputComponent1;
double OutputComponent2;
double CrispOutput;
bool NN = false;
bool N = false;
bool Z = false;
const double NNVolt (0);
const double NVolt (2.25);
const double ZVolt (4.5);
for(;;)
{
cout << "What is the distance?" << endl << endl;
cin >> InputDistance;
cout << endl;
if(InputDistance > 0 && InputDistance <= 5)
{
BetweenDistance1 = InputDistance - 0;
BetweenDistance2 = 5 - InputDistance;
NN = true;
N = true;
}
if(InputDistance > 5 && InputDistance <= 10)
{
BetweenDistance1 = InputDistance - 5;
BetweenDistance2 = 10 - InputDistance;
NN = true;
N = true;
}
if(InputDistance > 10 && InputDistance <= 15)
{
BetweenDistance1 = InputDistance - 10;
BetweenDistance2 = 15 - InputDistance;
N = true;
Z = true;
}
if(InputDistance > 15 && InputDistance <= 20)
{
BetweenDistance1 = InputDistance - 15;
BetweenDistance2 = 20 - InputDistance;
N = true;
Z = true;
}
DoM1 = BetweenDistance1 / 5;
DoM2 = BetweenDistance2 / 5;
if(NN == true && N == true)
{
OutputComponent1 = NNVolt * DoM1;
OutputComponent2 = NVolt * DoM2;
}
if(N == true && Z == true)
{
OutputComponent1 = NVolt * DoM1;
OutputComponent2 = ZVolt * DoM2;
}
CrispOutput = OutputComponent1 + OutputComponent2;
cout << "Voltage = " << CrispOutput << endl << endl;
}
return (0);
}
是什么导致我每次输入新的距离值时值都会增加?我看不到。
您永远不会重置您的 bool
s。
bool NN = false;
bool N = false;
bool Z = false;
应该在 for 循环的开头,这样每次循环时它们都会被重置。
根据经验,您将在循环中使用的任何变量都应在循环中声明,除非您需要在循环范围之外访问它。
您应该初始化所有变量,因为即使您的编译器会将它们初始化为 null, "", preppended "[=12=]", 0, 0.0, 0.0f
,也可以认为它是在不遵循此类标准的不同编译器下编译的,或者使用标志进行编译使用不同的东西进行初始化。
int main()
{
int InputDistance = 0;
double BetweenDistance1 = 0.0;
double BetweenDistance2 = 0.0;
double DoM1 = 0.0;
double DoM2 = 0.0;
double OutputComponent1 = 0.0;
double OutputComponent2 = 0.0;
double CrispOutput = 0.0;
bool NN = false;
bool N = false;
bool Z = false;
const double NNVolt (0);
const double NVolt (2.25);
const double ZVolt (4.5);
并且您应该在循环开始时重新初始化,以确保您最终不会使用之前迭代的数据。
for(;;)
{
//----------- init ------------
InputDistance = 0;
BetweenDistance1 = 0.0;
BetweenDistance2 = 0.0;
DoM1 = 0.0;
DoM2 = 0.0;
OutputComponent1 = 0.0;
OutputComponent2 = 0.0;
CrispOutput = 0.0;
NN = false;
N = false;
Z = false;
//-----------------------------
cout << "What is the distance?" << endl << endl;
cin >> InputDistance;
cout << endl;
..
}
return (0);
}