You are on page 1of 8

ESTRUCTURAS ESTNDAR 3

- 27 -

4. ESTRUCTURAS ESTNDAR 3
En este tema contina el breve repaso de las estructuras estndar, pasando a repasar la primera estructura iterativa disponible en Jasymca. Las estructuras iterativas son aquellas que permiten repetir un determinado proceso una o ms veces. En Jasymca se cuenta con dos estructuras iterativas: la estructura while y la estructura for. 4.1. ESTRUCTURA WHILE

La lgica de la estructura while es la siguiente:


[else] [condicin] instrucciones

Es decir que las instrucciones se repiten mientras que la condicin sea verdadera. Cuando la condicin es falsa (else) el programa contina con la instruccin que exista despus de la estructura while. La forma de codificar esta estructura en Jasymca es: while condicin instrucciones; end La forma normal en que finaliza la estructura while (cuando la condicin toma el valor falso (0)) puede ser modificada mediante las instrucciones break y return. La instruccin break ocasiona la salida inmediata de la estructura while y el programa continua con la instruccin que se encuentre despus del ciclo. La instruccin return (que en realidad funciona tanto dentro de un ciclo como en cualquier otra parte dentro de una funcin) ocasiona la inmediata finalizacin de la funcin. Cuando esta instruccin se ejecuta dentro de un ciclo las instrucciones del ciclo dejan de ejecutarse y el flujo salta hasta el final de la funcin, devolviendo como resultado el valor que tena asignado en ese momento la variable resultante. Adicionalmente, el comportamiento normal de la estructura while puede ser modificado con la instruccin continue. Esta instruccin provoca un salto inmediato a la siguiente iteracin, es decir que las instrucciones del ciclo dejan de ejecutarse y el flujo del programa salta a verificar la condicin del ciclo y, como es usual, se ejecuta el siguiente ciclo si la misma es verdadera o finaliza el ciclo en caso contrario. Con frecuencia la lgica que resuelve los problemas numricos requiere de un ciclo infinito, del cual se sale con la instruccin break o return. Como es de suponera, para crear un ciclo infinito, simplemente se hace que la condicin del ciclo sea verdadera (1): while 1 instrucciones; end;

- 28 -

Hernn Pearanda V.

Por supuesto, dentro de las instrucciones debe existir al menos una instruccin similar a la siguiente: if condicin break; O a la siguiente: if condicin return; Pues de lo contrario el ciclo sera realmente infinito y en consecuencia la funcin nunca terminara. 4.1.1. Ejemplos 1. Elabore la funcin rcuad que reciba un nmero n y devuelva su raz cuadrada, calculando la misma con la ecuacin de Newton:

1 n x 2= x1+ 2 x1

Para calcular la raz cuadrada con esta ecuacin se comienza asumiendo un valor inicial para la raz x1, con este valor y la ecuacin de Newton se calcula x2, entonces se comparan x1 y x2 y si son aproximadamente iguales el proceso concluye (siendo la raz x 2), caso contrario el proceso se repite haciendo que x1 tome el valor de x2. Es decir que el proceso se repite mientras x1 y x2 no son aproximadamente iguales. Para decidir si dos valores numricos dados son aproximadamente iguales se emplear en este y en los subsiguientes temas la expresin:

x1 1 <10d x2

Donde x1 y x2 son los valores numricos a comparar y d es el mnimo nmero de dgitos que deben ser iguales en x 1 y x2 para que la relacin sea verdadera. Si los valores que se compara son los correspondientes a una solucin (como ocurre frecuentemente), al cumplirse la relacin (cuando es verdadera) se habr encontrado la solucin con d-1 dgitos de precisin. Es decir que se podr afirmar que la solucin es exacta en los primeros d-1 dgitos (el ltimo dgito puede no ser correcto debido al redondeo). Con esta relacin se puede implementar el procedimiento para calcular la raz cuadrada de un nmero. El valor inicial asumido x 1 puede ser cualquier valor, aunque el nmero de iteraciones (repeticiones) requeridas, para encontrar la solucin, es menor cuanto ms cercano es el valor asumido de la solucin final. En este ejemplo se asumir directamente un valor cualquiera 1.1. El algoritmo que resuelve el problema se presenta en la siguiente pgina y como se puede observar en el mismo se comprueba primero si el nmero es 1 o 0, porque como se sabe la raz cuadrada de cero es cero y la de uno es uno. Adems se trabaja siempre con el valor positivo del nmero, porque con valores negativos no se logra convergencia (los valores de x 1 y x2 nunca son aproximadamente iguales) porque como se sabe, la raz cuadrada de nmeros negativos es imaginaria. Como tambin se puede observar, en este ejemplo se repite el proceso hasta que los valores son iguales en los primeros 12 dgitos, por lo tanto el resultado ser exacto en los primeros 11 dgitos.

ESTRUCTURAS ESTNDAR 3

- 29 -

rcuad: recibir x [else] [else] n =x [x<0] n = -x

Raz cuadrada de x.

[(x=0) o (x=1)]

x1 = 1.1 x2 = x x2= (x1+n/x1)/2 [|x1/x2-1|<10-12] x1 = x2

[else] devolver x2

[x<0] devolver x2i

El cdigo respectivo es: function x2=rcuad(x) if x==0 | abs(x)==1 x2=x; else if x<0 n=-x; else n=x; end x1=1.1; while 1 x2=(x1+n/x1)/2; if abs(x1/x2-1)<1e-12 break; end x1=x2; end end if x<0 x2=x2*i; end Haciendo correr el programa con algunos valores de prueba se obtiene: >> >> x2 >> x2 >> x2 >> x2 format 10,11 rcuad(2) = 1.4142135624 rcuad(-2) = 1.4142135624i rcuad(64) = 8 rcuad(-23.43) = 4.8404545241i

Los resultados se muestran con 11 dgitos porque esa es la exactitud con la que se encuentra la solucin en la funcin elaborada.

- 30 -

Hernn Pearanda V.

2. Elabore la funcin expo que calcule el exponente de un nmero empleando la serie de Taylor respectiva. La serie de Taylor para el exponente es:

x 2 x3 x4 e =1+x+ + + +...+ 2! 3! 4!
x

Como esta serie va hasta el infinito no es posible en la prctica calcular la sumatoria (pues se requerira un tiempo infinito). Entonces, lo que se hace es sumar trminos hasta que los resultados de dos sumas sucesivas sean aproximadamente iguales. Por otra parte, los trminos de una serie se calculan en base al trmino anterior, empleando la razn (o regla) que rige la serie. Por ejemplo, en este caso se puede ver que el nuevo trmino se calcula multiplicando el trmino anterior por x y dividiendo entre el nmero que representa la posicin del trmino (siendo el primer trmino el nmero 0). Por ejemplo, para calcular el cuarto trmino (en base al tercero) las operaciones necesarias son:

x3 x x4 = 3! 4 4!
Probablemente lo ms difcil al programar una serie sea este paso, es decir identificar la razn o regla que rige la misma. Luego prcticamente todas las series siguen la misma lgica: a) se inicializan variables; b) se calcula el nuevo trmino (aplicando la razn o regla); c) se compara el nuevo trmino con el anterior y si son aproximadamente iguales el proceso concluye, siendo la solucin la ltima sumatoria; d) se actualizan variables y se repite el proceso desde el paso b. El algoritmo que resuelve el problema, siguiendo los pasos antes indicados, se muestra en la siguiente pgina. Como se puede ver en el mismo, adems de los pasos indicados se verifica primero si el nmero es cero, porque el exponente de 0 es 1. Adems, se trabaja con el valor absoluto del nmero porque al ser e-x=1/ex, se puede calcular el resultado negativo conociendo el positivo, esto es muy importante en este caso porque de esa manera se evitan las restas que apareceran si se trabajara con el nmero negativo. En general, en todos los mtodos numricos, se debe evitar trabajar con restas de nmeros muy grandes, porque generan errores de redondeo que llevan a resultados errneos. En este algoritmo el proceso se repite hasta que las dos ltimas sumatorias son iguales en 14 dgitos, es decir que el resultado ser exacto en 13 dgitos. El cdigo en Jasymca es: function s2=expo(xx) if xx==0 s2=1; return; end x=abs(xx); ter=1; s1=ter; i=1; while 1 ter*=x/i; s2=s1+ter; if abs(s1/s2-1)<1e-14 break; end s1=s2;

ESTRUCTURAS ESTNDAR 3

- 31 -

expo: recibir xx

Exponente de xx.

[xx=0] x = |xx| ter = 1 s1 = ter i=1 ter = ter*x/i s2 = s1+ter [|s1/s2-1]<1x10-14] devolver 1

s1 = s 2 i = i+1

[xx<0] devolver s2 devolver 1/s2

i++; end if xx<0 s2=1/s2; end end Haciendo correr el programa con algunos valores de prueba se obtiene: >> >> s2 >> s2 >> s2 >> s2 format 10,13 expo(2) = 7.389056098931 expo(12) = 162754.791419 expo(50) = 5.184705528587E21 expo(-50) = 1.928749847964E-22

Resultados que pueden ser corroborados con exp. En el cdigo elaborado existen algunas cosas nuevas. En el clculo del nuevo trmino se emplea un operador compuesto: ter*=x/i; Esta operacin es equivalente a: ter=ter*x/i; Los operadores compuestos que se pueden emplear en Jasymca son:

- 32 -

Hernn Pearanda V.

Operador compuesto y+=x y-=x y*=x y/=x

Operacin equivalente y=y+x y=y-x y=y*x y=y/x

El contador i empleando un operador de incremento: i++; Que es equivalente a: i=i+1; Los operadores de incremento y decremento que se pueden emplear son: Operador x++ x-++x --x Operacin equivalente x=x+1 x=x-1 x=x+1 x=x-1

Si la variable sobre la que acta el operador forma parte de una expresin, cuando el operador se emplea despus de la variable, primero se realizan las operaciones con la variable y luego se incrementa su valor, por el contrario cuando se emplea el operador antes de la variable primero se incrementa su valor y luego se emplea la variable. Por ejemplo con las siguientes instrucciones se obtiene: >> x=5; y=x++ + 3 y = 8 >> x x = 6 En este caso, primero se suma el valor de x (5) a 3 y luego se incrementa su valor en 1. Por el contrario en las siguientes instrucciones: >> x=5;y=++x + 3 y = 9 >> x x = 6 Primero se incrementa el valor de x (a 6) y luego se le suma 3. 3. Elabore la funcin seno que calcule el seno de un ngulo en radianes empleando la serie de Taylor respectiva. La serie de Taylor del seno es:

sen ( x )=x

x3 x5 x 7 + +... 3! 5! 7!

En este caso el nuevo trmino se calcula multiplicando el anterior por -x2 y dividiendo entre un contador y su valor siguiente. Dicho contador comienza en 0 e incrementa de 2 en 2, por ejemplo para calcular el cuarto trmino a partir del tercero las operaciones son:

x 5 x 2 x7 = 5! 67 7!

ESTRUCTURAS ESTNDAR 3

- 33 -

En este caso la serie misma tiene restas, por lo que esta operacin no puede ser evitada, pero s se puede evitar trabajar con nmeros muy grandes pues como se sabe todo ngulo superior a 3*/2 puede ser reducido a su equivalente entre -3*/2 y 3*/2 simplemente restando al ngulo 2* hasta que sea menor o igual a 3*/2. En este proceso, sin embargo, es conveniente trabajar con grados (en lugar de radianes) para minimizar los errores de redondeo, adems, como se cumple que sin(-)=-sin(), se puede trabajar con el ngulo sin singo y cambiar el signo al devolver el resultado en el caso de que el ngulo sea negativo. El algoritmo que resuelve el problema es:
seno: seno de a. recibir a x = |a|*180/ [else] [x>270] x = x-360

x = x* /180 [x=0] ter = x s1 = ter x x = -x*x i =2 ter = ter*xx/(i*(i+1)) s2 = s1+ter [|s1/s2-1]<10- 15] devolver 0

s1 = s2 i = i+2

[a<0] devolver s2 devolver -s 2

El cdigo respectivo es: function s2=seno(a) x=abs(a)*180/float(pi); while x>270 x-=360; end

- 34 -

Hernn Pearanda V.

x*=float(pi)/180; if x==0 s2=0; return; end ter=x; s1=ter; xx=-x*x; i=2; while 1 ter*=xx/(i*(i+1)); s2=s1+ter; if abs(s1/s2-1)<1e-15 break; end s1=s2; i+=2; end if a<0 s2=-s2; end end Haciendo correr el programa con algunos valores de prueba se obtiene: >> >> s2 >> s2 >> s2 format 10,14 seno(2.56) = 0.54935543642713 seno(67.3) = -0.97032089132789 seno(-120.2) = -0.7307904049279

Resultados que pueden ser corroborados con sin. 4.1.2. Ejercicios 1. Elabore la funcin rcub_ que calcule, con 11 dgitos de exactitud, la raz cbica de un nmero n empleando la ecuacin de Newton:

1 n x 2= 2 x 1+ 2 3 x1
2.

Elabore la funcin expo_ que modifique la funcin expo, de manera que no se considere como caso especial los nmeros negativos. Pruebe luego la funcin calculando el exponente de 50 y de -50. Elabore la funcin senoh que calcule, con 14 dgitos de exactitud, el seno hiperblico de un nmero x empleando la serie de Taylor respectiva.

3.

senh (x )=x +
4.

x3 x5 x7 + + +...+ 3! 5! 7!

Elabore la funcin cose que calcule, con 12 dgitos de exactitud, el coseno de un ngulo x en radianes empleando la serie de Taylor respectiva.

cos ( x )=1
5.

x2 x4 x6 + +... 2! 4! 6!

Elabore la funcin atanh_ que calcule, con 13 dgitos de exactitud, la tangente hiperblica de un nmero x empleando la serie de Taylor respectiva.

tanh 1( x)= x+

x 3 x5 x 7 + + +... ; 3 5 7

x<1

You might also like