0

Working on an assignment requesting to calculate the value of 'y', if 'n' and 'x' are given, Assignment: enter image description here

Should the line:

    P=P*(F+i/2); 

be inside the 'else{ }'?!

The code:

//Calculate the value of 'y';
#include<iostream>
using namespace std;

int main()
{
    double y, P=1, F=1;
    int x, n, i, j;
    cout<<"The value of x=";
    cin>>x;
    cout<<"The value of n=";
    cin>>n;
    for(i=1;i<=n;i++)
    {
        if(i==2||i==3)
        {
        }
        else
        {
            for(j=1;j<=(2*i-1);j++)
            {
                F=F*j;
            }
        }
        P=P*(F+i/2);
    }
y=pow((2*x+3),3)+P;
cout<<"The result for the value of y="<<y<<endl;
return 0;
}
4

3 に答える 3

0
P=P*(F+i/2); should be inside else
于 2013-01-07T15:15:17.207 に答える
0

サイクルelseの後、句内にある必要があります。また、階乗を計算する前に毎回for再初期化する必要があります。私はそれを次のように書き直します:F1

for(i=1;i<=n;i++)
{
    if((i!=2) && (i!=3))
    {
        F = 1; // Don't forget this!
        for(j=1;j<=(2*i-1);j++)
        {
            F=F*j;
        }

        P=P*(F+i/2.0); // Don't forget the 2.0 (or you'll get integer division)
    }
}
于 2013-01-07T15:16:56.447 に答える
0

P=P*(F+i/2)実際には、else ブランチ内にある必要があります。

しかし、さらに問題があります:

  • F階乗計算ごとにリセットする必要があります
  • 内部でP=P*(F+i/2)の整数除算を行っていますが、が奇数iの場合に誤った結果が得られます。i

ループから の計算をi == 1取り出すことで、ループを単純化することもできます。

P=1.5; /* For i == 1 */
for(i=4;i<=n;i++)
{
    F=1.0;
    for(j=1;j<=(2*i-1);j++)
    {
        F=F*j;
    }
    P=P*(F+i/2.0);
}

i==2これにより、およびの特殊なケースが削除されi==3ます。

于 2013-01-07T15:37:25.097 に答える