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.