[C con Clase] Resultado no esperado.

Mariano Demarchi marchi.hh en gmail.com
Jue Sep 23 03:01:28 CEST 2010


El problema es el comentado por Josu Diaz de Arcaya.
En realidad el problema sucede cuando los valores ingresados no correspondan
a las medidas de los lados de un triángulo.
Para ser mas claro, en cualquier triángulo, la suma de la medida de 2 lados
cualesquiera siempre será menor o igual a la medida del lado restante.
Por eso, la fórmula es correcta siempre y cuando los valores sean
consistentes, así que deberías agregar una validación para esto.

Saludos

El 21 de septiembre de 2010 14:08, Antonio Félix Enríquez <
antoniofelix91 en gmail.com> escribió:

>  Buenas, en la librería math viene incluída una función para obtener el
> valor absoluto, fabs.
>
> Aquí la implementación:
>
>
> #include <stdio.h>
> #include <math.h>
>
> /* Programa para el cálculo del área de un triángulo.
> El programa, al recibir los tres laterales de un triángulo calcula su
> área*/
>
> void main(void){
>
> float la1=0, la2=0, la3=0, aux=0, Are= 0;
>
> printf("Ingrese los tres laterales de un triángulo: ");
> scanf("%f %f %f", &la1, &la2, &la3);
> aux = (la1 + la2 + la3) / 2;
> Are = sqrt( aux * fabs(( aux-la1)) * fabs(( aux-la2)) * fabs(( aux-la3)));
> printf("\nEl área es %6.2f\n", Are);
> }
>
> Un saludo y gracias nuevamente.
>
> Reignerok escribió:
>
> Supongo que necesitarás la diferencia entre ambos números. Podrías hacer
> una función que calculara el valor absoluto, de forma que se te convierta en
> positivo y ya no haya problema.
>
>  Un saludo.
>
> El 21 de septiembre de 2010 18:34, Antonio Félix Enríquez <
> antoniofelix91 en gmail.com> escribió:
>
>  Buenas, pues podría ser por eso, yo realmente no lo hago así, pero como
>> viene con ese ejemplo y con esa fórmula en el libro, vamos en bachillerato
>> no te enseñan de esa forma :P.
>>
>> Muchas gracias a todos, un saludo ^^.
>>
>> Josu Diaz de Arcaya escribió:
>>
>>  sospecho que es porque no se puede hacer la raiz de un numero negativo.
>>
>> Si ingresas 6 3 2 por ej, devuelve nan porque el resultado de (aux -l1) es
>> negativo y por consiguiente haces la raiz de un numero negativo
>>
>> Curiosa forma de calcular el area de un triangulo...
>>
>> On Tue, 2010-09-21 at 17:56 +0200, Reignerok wrote:
>>
>> NaN significa Not a Number. Debe ser que en alguna operación estás
>> cometiendo un error. ¿Has revisado las operaciones a mano?
>>
>>  El 21 de septiembre de 2010 17:51, Antonio Félix Enríquez <
>> antoniofelix91 en gmail.com> escribió:
>>
>>   Hola, estoy aprendiendo a programar en C con algunos libros que me he
>> comprado, ahora mismo estoy leyendo Fundamentos de programación: Piensa en
>> C, me ha surgido un problema y es el siguiente:
>>
>> El código:
>>
>> #include <stdio.h>
>> #include <math.h>
>>
>> /* Programa para el cálculo del área de un triángulo.
>> El programa, al recibir los tres laterales de un triángulo calcula su
>> área*/
>>
>> void main(void){
>>
>> float la1=0, la2=0, la3=0, aux=0, Are=0;
>>
>> printf("Ingrese los tres laterales de un triángulo: ");
>> scanf("%f %f %f", &la1, &la2, &la3);
>> aux = (la1 + la2 + la3) / 2;
>> Are = sqrt( aux * (aux - la1) * (aux - la2) * (aux - la3));
>> printf("\nEl área es %f\n", Are);
>> }
>>
>>  El problema es que me produce un resultado algo raro a mi parecer, pues
>> en vez de imprimir el área de un triángulo imprime casi siempre *nan*lo
>> cual me parece bastante raro.
>>
>>
>> Compilo con gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48) con la siguiente
>> orden, gcc -Wall -lm codigo.c -o calcular_area_triangulo.
>>
>> Un saludo y gracias.
>>
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.nethttp://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>>
>>  ------------------------------
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.nethttp://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>>
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>
>  ------------------------------
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.nethttp://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100922/70ddc24c/attachment.html>


Más información sobre la lista de distribución Cconclase