Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: alex2424 en 3 Mayo 2012, 21:30 pm



Título: Tipos de triángulos en C
Publicado por: alex2424 en 3 Mayo 2012, 21:30 pm
Buenas, estoy empezando a darle caña a C como mi primer lenguage.

El problema es: (no me lo plantea nadie, estoy por libre)
A partir de 3 datos recibidos por el usuario (longitus de los lados de un triangulo) determinar que tipo de triangulo se forma.

El programa me funciona pero seguramente habré cometido barbaridades con los goto y tanto "if". Mi idea es conseguir un código eficiente y legible.

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. float a;
  6. float b;
  7. float c;
  8.  
  9. printf( "Introduce el primer lado: " );
  10. scanf( "%f", &a );
  11. printf( "Introduce el tercer lado: " );
  12. scanf( "%f", &b );
  13. printf( "Introduce el segundo lado: " );
  14. scanf( "%f", &c );
  15. printf( "Los lados valen %f, %f y %f \n", a, b, c);
  16. if (a == b && b == c)
  17. {
  18. if (a==0){
  19.  goto notr;
  20.  }
  21. printf("El triangulo es equilatero");
  22. goto end;
  23. notr:
  24. printf("\nLos datos proporcionados no forman un triángulo");
  25. goto end;
  26. }
  27. if (a>b && a>c){
  28. if (a >= (b + c)) goto notr;
  29. printf( "El primer lado dado, %f, es ", a);
  30. if (b*b+c*c==a*a) printf("la hipotenusa, por lo \nque ls triangulo es rectángulo\n");
  31. else if (b == c) printf ("el mayor, y los otros \nson iguales por lo que el triángulo es isóceles\n");
  32. else printf ("el mayor, y el triángulo es escaleno\n");
  33. }
  34. else if (b>c && b>a){
  35. if (b >= (a + c)) goto notr;
  36. printf( "El segundo lado dado, %f, es ", b);
  37. if (a*a+c*c==b*b) printf("la hipotenusa, por lo \nque el triangulo es rectángulo\n");
  38. else if (a == c) printf ("el mayor, y los otros \nson iguales por lo que el triángulo es isóceles\n");
  39. else printf ("el mayor, y el triángulo es escaleno\n");
  40. }
  41. else if (c>b && c>a){
  42. if (c >= (b + a)) goto notr;
  43. printf( "El tercer lado dado, %f, es ", c);
  44. if (b*b+a*a==c*c) printf("la hipotenusa, por lo \nque el triangulo es rectángulo\n");
  45. else if (b == a) printf ("el mayor, y los otros \nson iguales por lo que el triángulo es isóceles\n");
  46. else printf ("el mayor, y el triángulo es escaleno\n");
  47. }
  48. end:
  49. return 0;
  50. }
  51.  


Título: Re: Tipos de triángulos en C
Publicado por: s00rk en 4 Mayo 2012, 00:21 am
Bueno viendo tu codigo yo pues lo dejaria asi:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. float a;
  6. float b;
  7. float c;
  8.  
  9. printf( "Introduce el primer lado: " );
  10. scanf( "%f", &a );
  11. printf( "Introduce el tercer lado: " );
  12. scanf( "%f", &b );
  13. printf( "Introduce el segundo lado: " );
  14. scanf( "%f", &c );
  15. printf( "Los lados valen %f, %f y %f \n", a, b, c);
  16.  
  17. if(a == 0 || a >= (b + c) || b >= (a + c) || c >= (b + a))
  18. {
  19. printf("\nLos datos proporcionados no forman un tri&#225;ngulo");
  20. }else if(a == b && b == c)
  21. {
  22. printf("El triangulo es equilatero");
  23. }else if(a > b && a > c)
  24. {
  25. printf( "El primer lado dado, %f, es ", a);
  26. if( (b*b+c*c) == (a*a) )
  27. printf("la hipotenusa, por lo \nque ls triangulo es rect&#225;ngulo\n");
  28. else if (b == c)
  29. printf ("el mayor, y los otros \nson iguales por lo que el tri&#225;ngulo es is&#243;celes\n");
  30. else
  31. printf ("el mayor, y el tri&#225;ngulo es escaleno\n");
  32. }else if( b > c && b > a)
  33. {
  34. printf( "El segundo lado dado, %f, es ", b);
  35. if( (a*a+c*c) == (b*b) )
  36. printf("la hipotenusa, por lo \nque el triangulo es rect&#225;ngulo\n");
  37. else if( a == c )
  38. printf ("el mayor, y los otros \nson iguales por lo que el tri&#225;ngulo es is&#243;celes\n");
  39. else
  40. printf ("el mayor, y el tri&#225;ngulo es escaleno\n");
  41. }else if( c > b && c > a )
  42. {
  43. printf( "El tercer lado dado, %f, es ", c);
  44. if ( (b*b+a*a) == (c*c) )
  45. printf("la hipotenusa, por lo \nque el triangulo es rect&#225;ngulo\n");
  46. else if( b == a )
  47. printf ("el mayor, y los otros \nson iguales por lo que el tri&#225;ngulo es is&#243;celes\n");
  48. else
  49. printf ("el mayor, y el tri&#225;ngulo es escaleno\n");
  50. }
  51. return 0;
  52. }
  53.  


Título: Re: Tipos de triángulos en C
Publicado por: STANHMAL en 4 Mayo 2012, 01:37 am
Intenta no usar goto, son mala practica de programación.

$4!u2


Título: Re: Tipos de triángulos en C
Publicado por: Slava_TZD en 4 Mayo 2012, 08:25 am
Te complicas mucho para decir de que tipo de triángulo se trata. Intenta no usar GOTO, como te dicen arriba, es una mala práctica. ¿Querías un código legible, simple y funcional?

Código
  1. #include<stdio.h>
  2. int main()
  3. {
  4.  int ladoa=0,ladob=0,ladoc=0;  
  5.  
  6.  printf("\nIntroduce el lado 1: ");scanf("%i",&ladoa);
  7.  printf("Introduce el lado 2: ");scanf("%i",&ladob);
  8.  printf("Introduce el lado 3: ");scanf("%i",&ladoc);
  9.  
  10.  if(ladoa==ladob && ladob==ladoc) {
  11.  printf("Equilatero\n"); }
  12.  else if(ladoa==ladob && ladob!=ladoc || ladob==ladoc && ladoc!=ladoa || ladoc==ladoa && ladoa!=ladob) {
  13.  printf("Isosceles\n"); }
  14.  else{
  15.  printf("Escaleno\n"); }
  16. }

Código
  1. [08:25] kyperf@Hagher:~$ ./trian
  2.  
  3. Introduce el lado 1: 20
  4.  
  5. Introduce el lado 2: 20
  6.  
  7. Introduce el lado 3: 20
  8. Equilatero


Título: Re: Tipos de triángulos en C
Publicado por: alex2424 en 4 Mayo 2012, 18:36 pm
tengo que estudiar lo de las condiciones en if, las comprendo pero no me siento comodo con ellas.El codigo de s00rk es bueno pero en este ultimo, (Si no me equivoco) en:
Código:
else if(ladoa==ladob && ladob!=ladoc || ladob==ladoc && ladoc!=ladoa || ladoc==ladoa && ladoa!=ladob)
no es necesario el "&& ladox!=ladoy) porque de ser iguales el programa hubiese mostrado "equilatero" y saltado al final del if.

Otra cosa, lo del codigo en colores, ¿es una funcionalidad del foro o es externo?


Título: Re: Tipos de triángulos en C
Publicado por: Ferno en 4 Mayo 2012, 19:46 pm
Otra cosa, lo del codigo en colores, ¿es una funcionalidad del foro o es externo?

Al escribir una respuesta, selecciona el código y en la opción que dice "GeSHi" arriba a la derecha de este cuadro de texto (donde están las opciones para darle formato) elige el lenguaje correcto.