Cálculo de áreas.


12

El código más pequeño que da el área entre la curva p (x) = a 0 + a 1 * x + a 2 * x 2 + ..., la línea y = 0, la línea x = 0 y la línea x = C

(es decir, algo como esto:

área deseada)

Puede suponer que p (x)> = 0 para x <C (puntos de bonificación si su código funciona para valores negativos de p (x)).

Entrada

C, a 0 , a 1 , ...

Salida

un número real - el área

Ejemplo 1:

input: 2, 0, 1
output: 2.0

Examen 2:

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

ACTUALIZAR:

  • C> 0 también se supone
  • el área está entre la curva, y = 0, x = C yx = 0
  • la entrada puede ser una lista de cualquier forma; no necesariamente separados por comas.
  • la salida puede ser real de cualquier forma (por lo tanto, '18' es una salida válida, al igual que '18 .0 ')

1
Dado que la respuesta va a ser "infinita" para casi cualquier entrada, creo que ha expresado mal el problema.
— Peter Taylor

¿Debería leerse la entrada de la entrada estándar como una cadena separada por comas? ¿O podemos escribir una función que tome una lista de flotantes como argumento?
— sepp2k

¿Quieres decir entre x = 0, x = C, y = 0 y la curva?
— Keith Randall

2
@Peter: No lo creo. Se muestra una imagen de una inversa (la integral de los cuales se divergen), pero la función que especifica es un polinomio. La integral definida sobre [0, C) debe estar bien definida y ser finita para coeficientes finitos.
— dmckee --- ex gatito moderador

1
@dmckee, lo había notado, pero mi punto era más que él estaba integrando un polinomio de - \ infty a C, y para cualquier polinomio no trivial que diverge. La pregunta ahora se ha modificado para solucionar esto.
— Peter Taylor

Respuestas:


3

Mathematica: 48 caracteres

.

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

-1 byte: Length@#-> Tr[1^#]. Además, puede omitir @Input[]y hacer una función.
— JungHwan Min

5

Python - 71 63 caracteres:

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

Es una integración simple de una función polinómica entre 0y C. Y no lo he probado, pero estoy bastante seguro de que funciona para valores negativos.


Aprendí algo nuevo sobre input()hoy :)
— st0le

3

Haskell, 85 personajes

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

1
La pregunta no es tan estricta como la tratas. Definitivamente, podría simplificar el código de entrada y posiblemente eliminar por completo las E / S explícitas.
— JB

3

J, 26 caracteres

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

p.ej

   f 2 0 1
2
   f 3 0 0 2
18

¡Ordenado! No puedo encontrar una manera de hacerlo más tácito. El hecho de d.ser una conjunción no hace que sea muy fácil para mis habilidades de principiante J.
— JB

@JB: Sí, eso d. También es un "problema" para mí. :)
— Eelvex

2

Ruby, 65 caracteres

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

El código se lee hasta el final de la entrada, no al final de la línea. Por lo tanto, debe presionar Ctrl+ Dpara terminar la entrada. (Canalice la entrada usando echoo desde un archivo).


1
Creo que la asignación de "" a una variable ayudará ... ¿qué tal esto c=gets(q=",").to_fy $<.each(q){|a|s+=a.to_f*c**(i+=1)/i}, salva una Char ....
— st0le

@ st0le: Muy bien. Gracias.
— sepp2k

Asignar ","(o ?,, que es aún más corto) a le $/permite omitir el argumento $<.each. Y $<.mapes un personaje más corto que $<.each. ;)
— Ventero

2

C GCC 186182 bytes

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

Este programa proporciona una salida (área) para cualquier curva entre la curva, y = 0, x = C yx = 0. Puede tomar coeficientes ( floattambién) de un 0 a un 48 . La primera entrada aceptada es Cseguida por coeficientes. Presione Ènterdespués del último coeficiente.

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);
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.