Menghitung area.


12

Kode terkecil yang memberikan area antara kurva p (x) = a 0 + a 1 * x + a 2 * x 2 + ..., garis y = 0, garis x = 0 dan garis x = C

(Yaitu sesuatu seperti ini:

daerah yang diinginkan)

Anda dapat mengasumsikan bahwa p (x)> = 0 untuk x <C (poin bonus jika kode Anda bekerja untuk nilai negatif dari p (x)).

Memasukkan

C, a 0 , a 1 , ...

Keluaran

bilangan real - area

Contoh 1:

input: 2, 0, 1
output: 2.0

Examlpe 2:

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

MEMPERBARUI:

  • C> 0 juga diasumsikan
  • area berada di antara kurva, y = 0, x = C dan x = 0
  • input dapat berupa daftar bentuk apa pun; belum tentu koma dipisahkan.
  • output dapat berupa bentuk nyata apa pun (dengan demikian, '18' adalah output yang valid, seperti '18 .0 ')

1
Karena jawabannya akan "tak terbatas" untuk hampir semua masukan, saya pikir Anda salah menuliskan masalahnya.
Peter Taylor

Haruskah input dibaca dari input standar sebagai string yang dipisahkan koma? Atau bisakah kita menulis fungsi yang mengambil daftar float sebagai argumen?
sepp2k

Maksud Anda antara x = 0, x = C, y = 0, dan kurva?
Keith Randall

2
@ Peter: Saya kira tidak. Dia menunjukkan gambar invers (integral yang akan berbeda), tetapi fungsi yang dia tentukan adalah polinomial. Integral pasti atas [0, C) harus didefinisikan dengan baik dan terbatas untuk koefisien hingga.
dmckee --- ex-moderator kitten

1
@ Dmckee, saya telah memperhatikan hal itu, tetapi poin saya lebih dari itu bahwa ia mengintegrasikan polinomial dari - \ infty ke C, dan untuk polinomial non-sepele yang menyimpang. Pertanyaannya sekarang telah diubah untuk memperbaikinya.
Peter Taylor

Jawaban:


3

Mathematica: 48 Karakter

.

Sum[#[[i+1]]#[[1]]^i/i,{i,Length@#-1}]&@Input[]

-1 byte: Length@#-> Tr[1^#]. Anda juga dapat menghilangkan @Input[]dan membuat suatu fungsi.
JungHwan Min

5

Python - 71 63 karakter:

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

Ini adalah integrasi sederhana dari fungsi polinomial antara 0dan C. Dan saya belum mengujinya, tapi saya cukup yakin itu bekerja untuk nilai negatif.


Belajar sesuatu yang baru tentang input()hari ini :)
st0le

3

Haskell, 85 karakter

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

1
Pertanyaannya tidak seketat seperti Anda memperlakukannya. Anda pasti bisa menyederhanakan kode input, dan mungkin menghapus I / O secara eksplisit.
JB

3

J, 26 karakter

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

misalnya

   f 2 0 1
2
   f 3 0 0 2
18

Rapi! Saya tidak dapat menemukan cara untuk membuatnya lebih diam-diam. Yang d.menjadi konjungsi tidak membuatnya sangat mudah untuk keterampilan J pemula saya.
JB

@ JK: Ya, itu d. adalah "masalah" bagi saya juga. :)
Eelvex

2

Ruby, 65 karakter

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

Kode membaca hingga akhir input, bukan akhir baris. Jadi, Anda perlu menekan Ctrl+ Duntuk menghentikan input. (Pipa input dengan menggunakan echoatau dari file.)


1
saya pikir menugaskan "," ke variabel akan membantu ... bagaimana dengan ini c=gets(q=",").to_fdan $<.each(q){|a|s+=a.to_f*c**(i+=1)/i}, menyimpan satu char ....
st0le

@ st0le: Bagus sekali. Terima kasih.
sepp2k

Menetapkan ","(atau ?,, yang bahkan lebih pendek) untuk $/memungkinkan Anda menghilangkan argumen $<.each. Dan $<.mapsatu karakter lebih pendek dari $<.each. ;)
Ventero

2

C GCC 186 182 byte

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);}

Program ini memberikan output (area) untuk setiap kurva antara kurva, y = 0, x = C dan x = 0. Itu dapat mengambil koefisien ( floatjuga) dari 0 hingga 48 . Input yang diterima pertama Cdiikuti oleh koefisien. Tekan Èntersetelah koefisien terakhir.

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);
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.