Sacar raiz cuadrada sin usar la funcion sqrt(x)

Iniciado por mort, 9 Febrero 2015, 22:25 PM

0 Miembros y 1 Visitante están viendo este tema.

mort

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 :-\.


eferion

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

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

mort

Ups... tienes mucha razon xD.
y yo que hice todo esto para hacer una comprobacion:
#include <stdio.h>

int main (){

float lado1, lado2, lado3;
float hipotenusa, r, t;

printf("Introduzca medida1: ");
scanf("%f", &lado1);

while (lado1 != -1){


printf("Introduzca medida2: ");
scanf("%f", &lado2);
printf("Introduzca medida3: ");
scanf("%f", &lado3);

if (lado1 == 0 || lado2 == 0 || lado3 == 0){
printf("introduzca un valor correcto\n\n");
}
   
else if (lado1 > lado2 && lado1 > lado3){

       hipotenusa = (lado2 * lado2) + (lado3 * lado3);
       r = hipotenusa;
       t = 0;
       while (t != r){
        t = r;
        r = (hipotenusa/r + r)/2;
       }
       if (lado1 == r){
        printf("forma triangulo recto, la hipotenusa es %f\n", r);
       }
       else{
        printf("No se forma triangulo recto\n");
       }
   
       
}
   else if  (lado2 > lado1 && lado2 > lado3){
   
      hipotenusa = (lado1 * lado1) + (lado3 * lado3);
      r = hipotenusa;
      t = 0;
      while (t != r){
      t = r;
      r = (hipotenusa/r + r)/2;
      }
      if (lado2 == r){
      printf("forma triangulo recto, la hipotenusa es %f\n\n", r);
      }
      else{
      printf("No se forma triangulo recto\n\n");
      }
   }
   else if (lado3 > lado1 && lado3 > lado2){
   
    hipotenusa = (lado1 * lado1) + (lado2 * lado2);
    r = hipotenusa;
    t = 0;
    while (t != r){
    t = r;
    r = (hipotenusa/r + r)/2;
    }
   
    if (lado3 == r){
    printf("forma trinagulo recto, la hipotenusa es %f\n\n", r);
    }
    else{
    printf("No se forma triangulo recto\n\n");
    }
   }
   else{
    printf("No se forma un triangulo recto\n\n");
   }
   printf("Introduzca medida1, (-1 para terminar): ");
   scanf("%f", &lado1);
   }
   system ("pause");
   return 0;
}


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