Calcolo delle aree.


12

Il codice più piccolo che indica l'area tra la curva p (x) = a 0 + a 1 * x + a 2 * x 2 + ..., la linea y = 0, la linea x = 0 e la linea x = C

(cioè qualcosa del genere:

area desiderata)

Puoi supporre che p (x)> = 0 per x <C (punti bonus se il tuo codice funziona con valori negativi di p (x)).

Ingresso

C, a 0 , a 1 , ...

Produzione

un numero reale: l'area

Esempio 1:

input: 2, 0, 1
output: 2.0

Esempio 2:

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

AGGIORNARE:

  • Si presuppone anche C> 0
  • l'area è compresa tra la curva, y = 0, x = C e x = 0
  • l'input può essere un elenco di qualsiasi forma; non necessariamente separati da virgola.
  • l'output può essere reale di qualsiasi forma (quindi, '18' è un output valido, come lo è '18 .0 ')

1
Poiché la risposta sarà "infinita" per quasi tutti gli input, penso che tu abbia frainteso il problema.
Peter Taylor,

L'input deve essere letto dall'input standard come una stringa separata da virgola? Oppure possiamo scrivere una funzione che prende un elenco di float come argomento?
sepp2k,

Intendi tra x = 0, x = C, y = 0 e la curva?
Keith Randall,

2
@Peter: io non la penso così. Egli mostra una foto di un inverso (l'integrale delle quali sarebbe divergere), ma la funzione che specifica è un polinomio. L'integrale definito su [0, C) deve essere ben definito e finito per i coefficienti finiti.
dmckee --- ex gattino moderatore

1
@dmckee, l'avevo notato, ma il mio punto era più che stava integrando un polinomio da - \ infty a C, e per qualsiasi polinomio non banale che divergesse. La domanda è stata ora modificata per risolvere questo problema.
Peter Taylor,

Risposte:


3

Mathematica: 48 caratteri

.

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

-1 byte: Length@#-> Tr[1^#]. Inoltre, potresti omettere @Input[]e creare una funzione.
JungHwan Min

5

Python - 71 63 caratteri:

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

È una semplice integrazione di una funzione polinomiale tra 0e C. E non l'ho provato, ma sono abbastanza sicuro che funzioni con valori negativi.


input()Oggi
ho

3

Haskell, 85 caratteri

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

1
La domanda non è così severa come la tratti. Potresti sicuramente semplificare il codice di input e forse eliminare completamente l'I / O esplicito.
JB

3

J, 26 caratteri

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

per esempio

   f 2 0 1
2
   f 3 0 0 2
18

! Neat Non riesco a trovare un modo per renderlo più tacito. Il fatto di d.essere una congiunzione non rende molto facile per le mie abilità di novizio J.
JB

@JB: Sì, quello d. è un "problema" anche per me. :)
Eelvex,

2

Rubino, 65 caratteri

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

Il codice legge fino alla fine dell'input, non alla fine della riga. Quindi devi premere Ctrl+ Dper terminare l'input. (Installa l'input usando echoo da un file.)


1
penso che assegnare "," a una variabile aiuterà ... che ne dici di questo c=gets(q=",").to_fe $<.each(q){|a|s+=a.to_f*c**(i+=1)/i}, salva un carattere ....
st0le

@ st0le: molto bello. Grazie.
sepp2k,

Assegnare ","(o ?,, che è ancora più breve) per $/consentire di omettere l'argomento $<.each. Ed $<.mapè un personaggio più corto di $<.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);}

Questo programma fornisce un output (area) per qualsiasi curva tra la curva, y = 0, x = C e x = 0. Può prendere coefficienti ( floatpure) da 0 a 48 . Il primo input accettato è Cseguito da coefficienti. Premere Ènterdopo l'ultimo coefficiente.

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);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.