Вопрос Что не так с программой с++ ( не могу понять ввод и вывод)

Регистрация
22 Дек 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
Unsigned int n;
float f,sum,mult;
sum = 0.0;
mult = 1.0;
puts("Введите число N");
fflush(stdin);
scanf_s("%d", &n);
puts("Введите число f");
fflush(stdin);
scanf_s("%f", &f);
puts("P = ");
fflush(stdin);
for (int i = 0; i != n; i++)
{
for (int k = 0; k != i; k++)
{
sum = sum + (f + k);
}
mult = mult * (1 / (sum));
}
printf_s("%f", mult);

n - натуральное число
f- c плав точкой

Выводит просто inf что это значит?
44355085_2a52bb7ad57c07954e55975d198c00f6_800.png
 
for (int i = 0; i != n; i++) Сумма считается до верхней границы индекса включительно. У тебя же цикл останавливается, как только натыкается на n, хотя по нему тоже нужно ещё раз проитерироваться. То же и со вторым циклом.
 
По моему, тут лучше всего сделать так: #include "iostream" using namespace std; int main() { double f,P=1; int k,N; cout << "f N > "; cin >> f >> N; for (k=1; k <=n; k++) P*=(k+1)*(f+k*0.5); cout.precision(17); cout << 1/P; } И ещё: f со значением равным неотрицательным целым числам от 0 до N лучше не брать!..
 
У тебя это, по сути, чистый С, и притом весьма плохой. На C++ это делается так: #include "iostream" using namespace std; int main(){ double f,p=1; int n; cout<<"N f: "; cin>>n>>f; for(int i=1;i<=n;i++){int s=0; for(int k=0;k<=i;k++)s+=f+k; p/=s;} cout<< p<< endl;} Хотя, упростив формулу, и без цикла по k действительно можно обойтись. #include "iostream" using namespace std; int main(){ double f,p=1; int n; cout<<"N f: "; cin>>n>>f; for(int i=1;i<=n;i++)p/=i*(i+1)/2+(i+1)*f; cout<<p<<endl;}
 
Когда ты идешь в первый раз, у тебя не работает расчет sum (потому что i = 0 и в итоге ты в первой же итерации делишь 1 / 0 и получаешь бесконечность. Сделай лучше (k = 0; k <= i; k++)
 
Назад
Сверху