Неинициализированная переменная P на C++
Я писал код к следующем задаче:
В партии, состоящей из K изделий, имеются L дефектных. Выбираются для контроля из партии R изделий. Найти вероятность того, что партия будет забракована. Партия бракуется, если среди контрольных окажется более S дефектных изделий. Должно быть при вводе L< k и r <k.Если L<S или R<=S, то партия не бракуется.
Искомая вероятность:

#include<iostream>
#include<math.h>
using namespace std;
int i;
float fact(int a)
{
if (a < 0)
return 0;
if (a == 0 || a == 1)
return 1;
long f = 1;
for (i = 2; i <= a; i++)
f *= i;
return f;
}
float C(float x, float y)
{
float pi;
pi = fact(x) / (fact(x - y) * fact(y));
return pi;
}
int main()
{
int R, L, K, S;
float P{};
setlocale(LC_ALL, "Rus");
system("color f0");
//cout << "Введите переменные K,L,R так, чтобы они соответствовали следующим условиям: L < K && R < K\n";
cout << "Введите количество изделий в партии: \n";
cin >> K;
cout << "Введите количество дефектных изделий в партии: \n";
cin >> L;
cout << "Введите количество изделий, взятых для контроля: \n";
cin >> R;
cout << "Введите количество дефектных изделий, найденных в контрольной партии: \n";
cin >> S;
if (L < K && R < K)
{
for (i=S + 1; R<i; i++)
P += C(i,L) * C(R-i,K-L) / C(R,K);
if (L < S || R <= S)
{
cout << "\nПартия не бракуется\n";
}
cout << "Вероятность забраковки партии = " << P*100 << "% \n";
}
else
{cout << "Неверный ввод данных " << '\n';}
return 0;
}
Код запускается, но выдаёт странное значение: -1.07374e+10%, однако перед тем, как выдать это значение, выдаёт следующую ошибку: Run-Time Check Failure #3 - The variable 'P' is being used without being initialized.
Если ввести в начале P=0, то будет выдаваться постоянно значение 0.
Помогите пожалуйста исправить это предупреждение, которое мешает правильной работе программы.
Ответы (1 шт):
Ошибка была исправлена, поменяв в строке объявления функции C, поменять местами float x и float y, что выглядело так: float C(float y, float x). Это сделано для того, что бы не получался отрицательный ответ, т.к. до этого выдавало, либо 0, либо -nan(ind).
Далее я заметил, что в строке for (i=S + 1; R<i; i++), R<i, а такого не может быть ведь допустим, если R=4(количество изделий в контрольной), то i = S + 1 будет в любом случае меньше, либо равно R, т.к. S - количество найденных дефектных изделий, найденных в контрольной партии. Поэтому я исправил это условие на i<=R, после чего программа стала работать.
Спасибо @Kotomi за помощь.