0

シンプソンズ規則を使用して積分を解くための C プログラムを作成していましたが、それを書いて実行しましたが、プログラムに値を与えた後、常に 0.0000 の定積分の値を返します。すべての行を再確認しましたが、問題ないようです。この問題の助けになるコードを次に示します。

#include<stdio.h>
#include<math.h>
float ad(int a, int b, int n)
{
    float f4, f2, z, v, q4=0, q2=0, d, m, fa, fb;
    int w=2, g=1, k=1, j=1;
    z=(b-a)/n;
    fa=6*pow(a,2)+16*pow(a,3);
    fb=6*pow(b,2)+16*pow(b,3);
    f4=6*pow(a+z*w,2)+16*pow(a+z*w,3);
    f2=6*pow(a+z*g,2)+16*pow(a+z*g,3);
    v=fa+fb;
    m=v*z;
    while(k<=n/2)
    {

        q4=q4+(z/3)*(4*f4);
        w=w+2; 
        k++;
    }
    while(j<=(n-2)/2)
    {

        q2=q2+(z/3)*(2*f2);
        g=g+2; 
        j++;
    }
    d=m+q4+q2;
    return d;
}
main()
{
    int x, y, l;
    float o;
    printf("Enter number x: ");
    scanf("%d", &x);
    printf("Enter number y: ");
    scanf("%d", &y);
    printf("Enter an even number: ");
    scanf("%d", &l);
    if(l%2!=0)
    {
        printf("The number is odd!\n");
        return 1;

    }
    o=ad(x, y, l);
    printf("The aprox integral is es: %f\n", o);
    return 0;
}    

また、次の2つのエラーが表示されます。

--------------------Configuration: mingw5 - CUI Debug, Builder Type: MinGW--------------------

Checking file dependency...
Compiling E:\anti simpson\ad.cpp...
[Warning] E:\anti simpson\ad.cpp:29: warning: converting to `int' from `float'
[Warning] E:\anti simpson\ad.cpp:50:2: warning: no newline at end of file
Linking...

Complete Make ad: 0 error(s), 2 warning(s)
Generated E:\anti simpson\ad.exe
4

2 に答える 2

3

1 つの問題は次の行です。

int ad(int a, int b, int n)

次のように変更します。

float ad(int a, int b, int n)

この行とその上の同様の行は私を混乱させます:

    q2=0;
    q2=q2+(z/3)*(2*f2);

なぜゼロに設定してから値に設定するのですか。while ループの前にゼロに設定する必要があると思います。

于 2013-10-06T22:10:41.353 に答える
3

関数を int を返すように宣言しましたが、float を返していると、返される float は切り捨てられ、int のみが返されます。

すべての積分の値が 0 から 1 の間であると推測しているため、関数は 0 だけを返しました。

に変更int ad(int a, int b, int n)するだけfloat ad(int a, int b, int n)

EDIT : z=(b-a)/n;a、b、n はすべて int です。この除算では小数部は得られません。opreandz=(b-a)/(n * 1.0);の1つをfloatにキャストして、小数部分も取得してみてください

于 2013-10-06T22:12:16.553 に答える