Calculo de una serie (1)
De Ejercicios
Contenido |
Enunciado
Dado un vector x introducido por teclado, realiza un subalgoritmo que nos calcule la siguiente serie, teniendo en cuenta los casos en los que no sea posible obtener una solución y cuando dicha solución sea compleja:
Si algún termino de la sucesión no se puede calcular se parará el proceso y devolverá 0 (son los casos de divisor 0 y soluciones complejas).
Para calcular la raíz cuadrada y la potencia utilizad los siguientes subalgoritmos que se suponen ya implementados:
FUNCION RaizCuadrada(a):REAL ENTRADAS: a: REAL ''(un real positivo)'' SALIDAS: ''(La raíz cuadrada de a)''
PROCEDIMIENTO Potencia (base, exponente, VAR resultado) ENTRADAS: base: REAL ''(representa el número que se va a elevar)'' exponente: ENTERO ''(representa el exponente al que se va a elevar la base, exponente>=0)'' SALIDAS: resultado: REAL ''(devuelve el resultado de elevar la base al exponente)''
Soluciones
Diseño en pseudocódigo
FUNCION Sumatorio(x,n): REAL ENTRADAS: x:ARRAY(n) DE REAL ''(representa el vector)'' n:ENTERO ''(representa el tamaño)'' SALIDAS: s:REAL ''(representa el valor del sumatario)'' VARIABLES: i,j,k:ENTERO p1,p2:REAL salir:LOGICO res:REAL INICIO s=0 i=0 salir=FALSO MIENTRAS i<=n Y salir=FALSO SI x(i)=0 ENTONCES salir=VERDAD SINO p=1; PARA k=1 HASTA i HACER p1=p1*x(k); FIN_PARA SI p1/x(i)<0 ENTONCES salir=VERDAD; SINO p2=1 PARA j=i HASTA n HACER Potencia(x(j),3,res) p2=p2*res FIN_PARA s = s + p2 + RaizCuadrada( p1/x(i) ) FIN_SI FIN_SI i=i+1 FIN_MIENTRAS SI salir=VERDAD ENTONCES s=0 FIN_SI DEVOLVER s FIN
Programa en Matlab
function s=Sumatorio( x ) % FUNCION s=Sumatorio( x ) % DESCRIPCIÓN: Dado un vector x calcular el valor de la serie dada % ENTRADA: % x: ARRAY DE REALES; Valores de la serie a calcular % SALIDA: % s: REAL; Resultado de la serie % VARIABLES: % n,suma,posi,posj,posk,pro1,pro2,suma: ENTEROS % para: LÓGICO n=length(x); s=0; posi=1; para=false; while (posi<=n)&&(para==false), if x(posi)~=0, pro1=1; for posj=posi:n, pro1=pro1*x(posj)^3; end pro2=1; for posk=1:posi, pro2=pro2*x(posk); end if pro2/x(posi)>=0, s = s + pro1+sqrt(pro2/x(posi)); else para=true; s=0; end else para=true; s=0; end posi=posi+1; end