Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mort en 9 Febrero 2015, 22:25 pm



Título: Sacar raiz cuadrada sin usar la funcion sqrt(x)
Publicado por: mort en 9 Febrero 2015, 22:25 pm
Estoy haciendo un ejercicio que  pide que introduzca 3 valores de tipo float y que determine si los números pueden representar los lados de un triangulo recto.

Intento hacer la comparación mediante el teorema de pitagoras, pero no se como sacar la raíz cuadrada en el ultimo paso, lo debo sacar sin usar usar pow, ni tampoco la función sqrt(x), debido a que son temas que todavía no veo en el libro :-\.


Título: Re: Sacar raiz cuadrada sin usar la funcion sqrt(x)
Publicado por: _Enko en 9 Febrero 2015, 22:51 pm
Links en  "mensajes similares" abajo del post:

http://foro.elhacker.net/programacion_cc/raiz_cuadrada_en_c-t320138.0.html
http://foro.elhacker.net/programacion_cc/ayuda_novato_raiz_cuadrada_en_c_sin_sqrt-t404341.0.html

Saludos.


Título: Re: Sacar raiz cuadrada sin usar la funcion sqrt(x)
Publicado por: eferion en 10 Febrero 2015, 10:30 am
Puedes intentar A = RAIZ( B^2 + C^2 ) o bien puedes probar con A^2 = B^2 + C^2

Moraleja: No necesitas calcular la raiz cuadrada... simplemente hacer la comprobación

Código
  1. if ( abs( A^2 - B^2 - C^2 ) < 1e-4 ) { /* A,B,C son los vértices de un triángulo rectángulo */ }


Título: Re: Sacar raiz cuadrada sin usar la funcion sqrt(x)
Publicado por: mort en 10 Febrero 2015, 23:35 pm
Ups... tienes mucha razon xD.
y yo que hice todo esto para hacer una comprobacion:
Código
  1. #include <stdio.h>
  2.  
  3. int main (){
  4.  
  5. float lado1, lado2, lado3;
  6. float hipotenusa, r, t;
  7.  
  8. printf("Introduzca medida1: ");
  9. scanf("%f", &lado1);
  10.  
  11. while (lado1 != -1){
  12.  
  13.  
  14. printf("Introduzca medida2: ");
  15. scanf("%f", &lado2);
  16. printf("Introduzca medida3: ");
  17. scanf("%f", &lado3);
  18.  
  19. if (lado1 == 0 || lado2 == 0 || lado3 == 0){
  20. printf("introduzca un valor correcto\n\n");
  21. }
  22.  
  23. else if (lado1 > lado2 && lado1 > lado3){
  24.  
  25.       hipotenusa = (lado2 * lado2) + (lado3 * lado3);
  26.       r = hipotenusa;
  27.       t = 0;
  28.       while (t != r){
  29.       t = r;
  30.       r = (hipotenusa/r + r)/2;
  31.       }
  32.       if (lado1 == r){
  33.       printf("forma triangulo recto, la hipotenusa es %f\n", r);
  34.       }
  35.       else{
  36.       printf("No se forma triangulo recto\n");
  37.       }
  38.  
  39.  
  40. }
  41.   else if  (lado2 > lado1 && lado2 > lado3){
  42.  
  43.    hipotenusa = (lado1 * lado1) + (lado3 * lado3);
  44.    r = hipotenusa;
  45.    t = 0;
  46.    while (t != r){
  47.     t = r;
  48.     r = (hipotenusa/r + r)/2;
  49.    }
  50.    if (lado2 == r){
  51.     printf("forma triangulo recto, la hipotenusa es %f\n\n", r);
  52.    }
  53.    else{
  54.     printf("No se forma triangulo recto\n\n");
  55.    }
  56.   }
  57.   else if (lado3 > lado1 && lado3 > lado2){
  58.  
  59.   hipotenusa = (lado1 * lado1) + (lado2 * lado2);
  60.   r = hipotenusa;
  61.   t = 0;
  62.   while (t != r){
  63.   t = r;
  64.   r = (hipotenusa/r + r)/2;
  65.   }
  66.  
  67.   if (lado3 == r){
  68.   printf("forma trinagulo recto, la hipotenusa es %f\n\n", r);
  69.   }
  70.   else{
  71.   printf("No se forma triangulo recto\n\n");
  72.   }
  73.   }
  74.   else{
  75.   printf("No se forma un triangulo recto\n\n");
  76.   }
  77.   printf("Introduzca medida1, (-1 para terminar): ");
  78.   scanf("%f", &lado1);
  79.   }
  80.   system ("pause");
  81.   return 0;
  82. }

Gracias! lo hare como tu me dices para hacer mas corto el programa.