2011-01-04 6 views
1

使用して二つの機能:数式(総和)をコードに変換するにはどうすればよいですか?

  • 階乗関数
  • 電力機能

は、以下の式のためのCプログラムを開発:

alt text

私はこれをやりました。出力はありません。

#include <stdio.h> 
#include <math.h> 

double factorial(double x); 
double Power_function(double y); 

int main(){ 
    double answer=0; 
    double n; 
    double y; 

    printf("Enter Y :The last limit of the summation:>"); 
    scanf("%ld",&y); 
    for (n=1;n<=y;++n){ 
    answer=answer +factorial(n)*Power_function(n)*y; 
    } 

    printf("The Answer is %0.2f\n",answer); 
    return 0; 
} 

double factorial(double x) 
{ 
    double ans; 
    if (x==0){ 
    ans = 1; 
    } 
    else 
    { 
    ans = x*factorial(x-1); 
    } 
    return ans; 
} 

double Power_function(double y){ 
    double ans; 
    ans=pow(2,y); 
    return ans; 
} 
+2

宿題?そのように見える。 –

+0

これは宿題だと思います。対応するタグを追加してください。 –

+3

この式を手動でどのように計算しますか?これはまずは​​始めるためのアルゴリズムです。 – OrangeDog

答えて

1

私はあなたのためにすべてをやったわけではありませんが、ここでは基本的な概要です。

あなたはそれを終了する必要があります。

int answer = 0; 
int n; 
for(n=1; n <= y; ++n) 
{ 
    answer = answer + (n! * 2^n)*y; 
} 
+2

@binarylife:これが擬似コードであることに注目してください。とC++の^は階乗とべき乗を意味しません(実際には、2項演算子とビットごとのxor演算子です)。 –

+1

ああ、それは@matteo:私は彼がその苦労を楽しみにしていた!私は彼に手がかりを与えて、彼はそれを終わらせなければならなかった。 – abelenky

+0

@abelenkey、彼は彼がすでに機能を持っていると言っています:P – Muggen

1

あなたは1からyまで(n!* 2^n)の合計を探しています。

total variable is 0 
for 1 until y: 
multiply factorial(n) and pow(2, n) and add this to total 
end of loop 
print out total 
1

私は疑問を抱いています。これは学習の成果の1つで、ここではあまりにも助けてゲームを遠ざけるでしょう。

私は、あなたが方程式の各部分をより小さな解ける部分に分割する必要があると言うことは間違いないと思います。

三の大部分が加算され、N階乗(N!)と電源N

総和が効果的にNとループ1から始まりYで終わるので、のC構文を探すために2

他の2つは関数であり、あなたが事前作成された関数を使用することが許されていれば、たくさんのものが存在していて、あなた自身で書く必要があります。下降ループとrecursive functionまたは機能の

要因であるn*(n-1)*(n-2)...(n-(n-2))*(n-(n-1))

よう4! = 4*3*2*1

素数候補それに

2電源N 2自体を乗じたn回

あります

so 2 to power 2 = 2*2

2から電源3 = 2*2*2など

もう一度ループを開始するとよいでしょう。

その後、ループ内で2つの関数を使用するだけで、ユーザーはYを入力していくつかの数値でテストすることができます。

1,2,3は、電卓でうまくやりやすいので、良いスタートです。

今まで投稿したすべての例に興味深いことが起こることを願っています。それは32のような大きな数字でボートを押し出す前です。

編集: 私はあなたのコードを見てきました。あなたの問題はアルゴリズムの実装ではなく、変数を正しく読み込んでいない、設定した直後にyを出力しているようです、何かがすぐそこでうまく動作していません。私はCコーダーではありませんでしたが、私はいくつかのリベラルなグーグルと機能していないコードでそれを素早くハックし、それを引数に読んでダブルに解析しました。

#include<stdio.h> 
#include<math.h> 
double factorial(double x); 
double Power_function(double y); 

main(int argc, char *argv[]){ 
    double answer=0; 
    double n; 
    double y; 
    y = atol(argv[1]); 
    //printf("%lf\n",y); 
    for (n=1;n<=y;++n){ 
    answer=answer +factorial(n)*Power_function(n)*y; 
    } 

    printf("The Answer is %0.2f\n",answer); 
    return 0; 
} 

double factorial(double x) 
{ 
    double ans; 
    if (x==0){ 
    ans = 1; 
    } 
    else 
    { 
    ans = x*factorial(x-1); 
    } 
    return ans; 
} 

double Power_function(double y){ 
    double ans; 
    ans=pow(2,y); 
    return ans; 
} 

だから、本質的に異なる入力方式を使用してコード、

./a.out 1 として実行

gcc so.c -lm

利回り使用してコンパイルThe Answer is 2.00

./a.out 2 利回りThe Answer is 20.00

./a.out 3 利回りThe Answer is 174.00

ペンと紙の数学は、ので、あなたのアルゴリズムは、これまでの音で、それをバックアップします!

いくつかの負の数値といくつかの巨大な数値を入力して、ここから何ができるかを確認してください。

+0

あなたが言ったことをほぼ正確に行いましたが、コードを投稿しました。しかし、それは私に出力を与えません。 – BinaryLife

+0

@binarylife - 私の答えを編集しました。あなたのコメント。あなたが元のメソッドが正しく入力を読み取っていない理由を知るために講師/ラボの監督をしていることを伝えてください。私はそれを自分自身でデバッグするための経験がありませんでした。 – Robb

0

最初に行うべきことは、手動で式を実行するために手動で行うことを書き留めることです。たとえば、1から5を試してみて、あなたが得るものを見てください。

関連する問題