Título: [C] Raiz Cuadrada sin math.h Publicado por: edr89 en 19 Mayo 2013, 08:22 am Hola,
Necesito calcular la raiz cuadrada de un numero, encontre en la red una funcion que no necesita de la libreria math.h, todo ejecuta pero no termino de entender el for loop de la raiz: Código: #include<stdio.h> ¿Porqué i<20?, num es el dato que el usuario va a teclear que es = x, entonces mientras el loop corre ¿qué le pasa a x? x1 = las operaciones indicadas con el dato que escribe el usuario. x2 = las mismas operaciones ahora con el nuevo dato resultado de x1. x3 = operaciones con el dato que se genero en x2. xn = ... es asi como sucede? sospecho que la condicion en for() y la expresion de X se reducen a meras formulas matematicas, no recuerdo muy bien como resolver una raiz cuadrada con precision y cifras significativas. Trato de pensar en alguna funcion que resuelva con dos numeros de raiz entera como (4, 9) para buscar raices en dicho intervalo. La cuestion es que no puedo usar sqrt() de math.h. Sugerencias bienvenidas! Título: Re: [C] Raiz Cuadrada sin math.h Publicado por: Shell Root en 19 Mayo 2013, 08:29 am No se como será eso, pero se supone que expresar la raiz cuadrada de un numero es igual a la potenciación con exponente ½, es decir,
(http://upload.wikimedia.org/math/b/8/6/b861ec9ad8897b01215c4714d9192c9e.png) Más fácil por ahí? :http://es.wikipedia.org/wiki/Ra%C3%ADz_cuadrada Título: Re: [C] Raiz Cuadrada sin math.h Publicado por: leosansan en 19 Mayo 2013, 12:39 pm Hola, Necesito calcular la raiz cuadrada de un numero, encontre en la red una funcion que no necesita de la libreria math.h, todo ejecuta pero no termino de entender el for loop de la raiz: El 20del for es como un número mínimo de aproximaciones sucesivas. En realidad está mal implementado el código ya que en números pequeños se alcanza el valor correcto en la tercerao cuarta iteración o aproximación, resultando inútiles las demás, dependiendo el número de aproximaciones del tamaño del numero. Más bien debería de comparar el valor de x calculado con el anterior y si son iguales se acaba. Por ejemplo, la salida para raiz de 2 es: Código
Fíjate que en la cuarta ya se tiene el valor deseado resultando inútiles las demás. Citar ¿Porqué i<20?, num es el dato que el usuario va a teclear que es = x, entonces mientras el loop corre ¿qué le pasa a x? x1 = las operaciones indicadas con el dato que escribe el usuario. x2 = las mismas operaciones ahora con el nuevo dato resultado de x1. x3 = operaciones con el dato que se genero en x2. xn = ... es asi como sucede? Tal y com ves en la salida que te he puesto, es así. Citar sospecho que la condicion en for() y la expresion de X se reducen a meras formulas matematicas, no recuerdo muy bien como resolver una raiz cuadrada con precision y cifras significativas. La condición del for es una chapuza, ya te comente que debería ser mejor con un while comparando valor actual y valor anterior, es un número el 20 de "mínimos" para asegurar la convergencia para números muy grandes, pero para números cortos es demasiado elevado. Y el valor de x es que el que resulta de un cálculo "a mano", mira en Wikipedia que lo explica bien. Observa en cambio ésta salida y compárala con la original: Código
Como ves he comparado cada valor obtenido en cada iteración con el anterior y en el momento que son iguales paro. Me ahorro unas cuantitas iteraciones. Y el código, con una pequeña modificación para evitar bucles si en lugar de un número se introduce una letra: Código
Citar Trato de pensar en alguna funcion que resuelva con dos numeros de raiz entera como (4, 9) para buscar raices en dicho intervalo. La cuestion es que no puedo usar sqrt() de math.h. Tendrías que escanear dos números en lugar de uno y usando un for pasar los números comprendidos entre esos dos a la función y meter el código que te calculala raiz en un for que va desde num1 a num2. Una salida a esta opción sería: Código
con el siguiente código: Código
Está hecho a toda pastilla, por lo que habría que testearlo un poco a ver si falla o no, pero para que veas más o menos como sería la cosa. Saluditos!. .... .. Título: Re: [C] Raiz Cuadrada sin math.h Publicado por: edr89 en 19 Mayo 2013, 22:52 pm Está hecho a toda pastilla, por lo que habría que testearlo un poco a ver si falla o no, pero para que veas más o menos como sería la cosa. Ambos códigos funcionan, el primero solo te faltó un cierre de instrucción, me has dejado boquiabierto!, lo reviso con tiempo para poder entenderlo, el segundo código era una idea solamente, en realidad el programa debe dar la raiz del numero tecleado, ademas que es un poco mas elaborado y no entiendo ciertas partes. :( Estuve buscando sin exito como evitar el bucle infinito cuando se teclea un caracter y no un numero, tengo varios archivos con esa falla, con un do-while lo soluciono no? Código: do Saludos!! Título: Re: [C] Raiz Cuadrada sin math.h Publicado por: leosansan en 19 Mayo 2013, 23:03 pm Estuve buscando sin exito como evitar el bucle infinito cuando se teclea un caracter y no un numero, tengo varios archivos con esa falla, con un do-while lo soluciono no? Código: do Es la forma más corriente de hacerlo, aunque puede estar más elaborada con una variable cont que cuente las lecturas que hace scanf, que es lo que utilizo en el código que te pase junto con el mencionada while. Realmente es una forma de limpiar lo que se llama buffer o memoria intermedia por decirlo a lo breve. Saluditos! ..... ...nuevamente!!!!(http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: [C] Raiz Cuadrada sin math.h Publicado por: edr89 en 20 Mayo 2013, 06:30 am Gracias.
|