Я написал свою первую программу Fuzzy Logic, и первый вход отлично справляется со своей задачей, выводя правильное значение напряжения. Слово Напряжение строго заполнитель. Это точно соответствует моей математике. Любое значение после этого увеличивает конечный результат, и НИКОГДА не работает снова, пока я не перезапущу программу, после чего она делает то же самое.
Я постараюсь максимально упростить мой код.
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 "\0", 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);
}