面積の計算。


12

曲線p(x)= a 0 + a 1 * x + a 2 * x 2 + ...、ラインy = 0、ラインx = 0、ラインx = Cの間の面積を与える最小コード

(つまり、このようなもの:

指名手配エリア)

x <Cに対してp(x)> = 0(コードがp(x)の負の値に対して機能する場合のボーナスポイント)と仮定できます。

入力

C、0、1、...

出力

実数-エリア

例1:

input: 2, 0, 1
output: 2.0

例2:

input: 3.0, 0, 0.0, 2
output: 18

更新:

  • C> 0も想定されます
  • 面積は曲線、y = 0、x = C およびx = 0の間にあります
  • 入力は任意の形式のリストにすることができます。必ずしもコンマ区切りではありません。
  • 出力は任意の形式の実数である可能性があります(したがって、「18.0」と同様に「18」は有効な出力です)

1
ほぼすべての入力に対して答えは「無限」になるので、あなたは問題を誤解していると思います。
— ピーターテイラー

入力を標準入力からコンマ区切りの文字列として読み取る必要がありますか?または、引数としてフロートのリストを取る関数を書くことができますか?
— sepp2k

x = 0、x = C、y = 0、および曲線の間を意味しますか?
— キースランドール

2
@ピーター:そうは思いません。彼は逆の図を示します(その積分は発散します)が、彼が指定する関数は多項式です。[0、C)上の定積分は、明確に定義され、有限係数に対して有限でなければなりません。
— dmckee ---元モデレーター子猫

1
@dmckee、私はそれに気づいていましたが、私のポイントは、彼が-\ inftyからCまでの多項式を、そして発散する任意の非自明な多項式について積分しているということでした。これを修正するために質問が修正されました。
— ピーターテイラー

回答:



5

Python- 71 63文字:

a=input()
print sum(1.*a[i]*a[0]**i/i for i in range(1,len(a)))

それは間の多項式関数の簡単な統合だ0とC。そして、私はそれをテストしていませんが、負の値でも機能すると確信しています。


input()今日について何か新しいことを学んだ:)
— st0le

3

Haskell、85文字

f(c:l)=sum.map(\(i,x)->x*c**i/i)$zip[1..]l
main=getLine>>=print.f.read.('[':).(++"]")

1
質問はあなたが扱うほど厳密ではありません。入力コードを間違いなく単純化し、場合によっては明示的なI / Oを完全になくすことができます。
— JB

3

J、26文字

f=:3 :'((1}.y)&p.d._1)0{y'

例えば

   f 2 0 1
2
   f 3 0 0 2
18

きちんとした!私はそれをより暗黙にする方法を見つけることができません。それd.が接続詞であるからといって、私の初心者のJスキルが非常に簡単になるわけではありません。
— JB

@JB:はい、そのd。私にとっても「問題」です。:)
— エルベックス

2

ルビー、65文字

i=s=0
c=gets(q=",").to_f
$<.each(q){|a|s+=a.to_f*c**(i+=1)/i}
p s

コードは、行の終わりではなく、入力の終わりまで読み取ります。したがって、入力を終了するにはCtrl+ Dを押す必要があります。(入力を使用して、echoまたはファイルからパイプします。)


1
i「は、」変数の意志の助けに...どのようにこれについての割り当てを考えるc=gets(q=",").to_fと$<.each(q){|a|s+=a.to_f*c**(i+=1)/i}、1つの文字....節約
— st0le

@ st0le:とてもいい。ありがとう。
— sepp2k

への引数","(または?,、さらに短い)を割り当てると、$/への引数を省略できます$<.each。また、$<.mapは1文字短くなり$<.eachます。;)
— ヴェンテロ

2

C GCC 186182バイト

f(){i=0,l=1;float *d,s=0.0;d=malloc(sizeof(float)*50);scanf("%f",&d[0]);while(getchar()!='\n'){scanf("%f",&d[l]);l++;}for(i=0;i<l;i++)s+=d[i+1]*pow(d[0],(i+1))/(i+1);printf("%f",s);}

このプログラムは、y = 0、x = C、x = 0の曲線の間の曲線の出力(面積)を提供します。0から48floatまでの係数を使用できます(同様に)。最初に受け入れられた入力の後に係数が続きます。最後の係数の後に押します。CÈnter

void f()
{
  int i=0,l=1;
  float *d,s=0.0;
  const int sz=100;
  d=malloc(sizeof(float)*sz);

  scanf("%f",&d[0]);
  while(getchar()!='\n')
  {
    scanf("%f",&d[l]);
    l++;
  }

  for(i=0;i<l;i++)
    s+=d[i+1]*pow(d[0],(i+1))/(i+1);

   printf("%f",s);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.