elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Tipos de triángulos en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tipos de triángulos en C  (Leído 13,007 veces)
alex2424

Desconectado Desconectado

Mensajes: 57



Ver Perfil WWW
Tipos de triángulos en C
« 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.  


« Última modificación: 5 Mayo 2012, 11:15 am por alex2424 » En línea

¿Por qué has de firmar?
s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Tipos de triángulos en C
« Respuesta #1 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.  


En línea

STANHMAL

Desconectado Desconectado

Mensajes: 107


ςταηhmαl - hηαfε


Ver Perfil WWW
Re: Tipos de triángulos en C
« Respuesta #2 en: 4 Mayo 2012, 01:37 am »

Intenta no usar goto, son mala practica de programación.

$4!u2
En línea

Power Metal vs Reggaeton



Que es mi ordenador mi tesoro que todo el mundo ha de temer. Mi ley, el ratón y el módem. Mi única patria, la red
Slava_TZD
Wiki

Desconectado Desconectado

Mensajes: 1.466

♪ [8675309] ♪


Ver Perfil WWW
Re: Tipos de triángulos en C
« Respuesta #3 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
« Última modificación: 4 Mayo 2012, 09:13 am por Tzhed // Kyperf » En línea


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.
alex2424

Desconectado Desconectado

Mensajes: 57



Ver Perfil WWW
Re: Tipos de triángulos en C
« Respuesta #4 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?
En línea

¿Por qué has de firmar?
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Tipos de triángulos en C
« Respuesta #5 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Regalo para los que empiezar a programar (triangulos recursivos):
Java
4nc3str4l 2 3,393 Último mensaje 25 Enero 2014, 10:01 am
por DarkSorcerer
Dibujar cuatro triangulos de asteriscos « 1 2 »
Programación C/C++
SebaC 14 5,156 Último mensaje 3 Mayo 2016, 22:05 pm
por Eternal Idol
Suma simple da 0 (Problema de triángulos)
Programación C/C++
unpunto 2 2,172 Último mensaje 25 Mayo 2016, 01:50 am
por unpunto
Sumar triangulos en una matriz nxn en C
Programación C/C++
Ndiar 1 1,881 Último mensaje 28 Julio 2018, 19:35 pm
por Ndiar
Tipos de NAT 1,2, 3
Redes
retr02332 1 4,253 Último mensaje 17 Julio 2020, 12:43 pm
por el-brujo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines