Autor
|
Tema: Tipos de triángulos en C (Leído 13,072 veces)
|
alex2424
|
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. #include <stdio.h> int main() { float a; float b; float c; printf( "Introduce el primer lado: " ); printf( "Introduce el tercer lado: " ); printf( "Introduce el segundo lado: " ); printf( "Los lados valen %f, %f y %f \n", a , b , c ); if (a == b && b == c) { if (a==0){ goto notr; } printf("El triangulo es equilatero"); goto end; notr: printf("\nLos datos proporcionados no forman un triángulo"); goto end; } if (a>b && a>c){ if (a >= (b + c)) goto notr; printf( "El primer lado dado, %f, es ", a ); if (b *b +c *c ==a *a ) printf("la hipotenusa, por lo \nque ls triangulo es rectángulo\n"); else if (b == c ) printf ("el mayor, y los otros \nson iguales por lo que el triángulo es isóceles\n"); else printf ("el mayor, y el triángulo es escaleno\n"); } else if (b>c && b>a){ if (b >= (a + c)) goto notr; printf( "El segundo lado dado, %f, es ", b ); if (a *a +c *c ==b *b ) printf("la hipotenusa, por lo \nque el triangulo es rectángulo\n"); else if (a == c ) printf ("el mayor, y los otros \nson iguales por lo que el triángulo es isóceles\n"); else printf ("el mayor, y el triángulo es escaleno\n"); } else if (c>b && c>a){ if (c >= (b + a)) goto notr; printf( "El tercer lado dado, %f, es ", c ); if (b *b +a *a ==c *c ) printf("la hipotenusa, por lo \nque el triangulo es rectángulo\n"); else if (b == a ) printf ("el mayor, y los otros \nson iguales por lo que el triángulo es isóceles\n"); else printf ("el mayor, y el triángulo es escaleno\n"); } end: return 0; }
|
|
« Última modificación: 5 Mayo 2012, 11:15 am por alex2424 »
|
En línea
|
¿Por qué has de firmar?
|
|
|
s00rk
Desconectado
Mensajes: 195
|
Bueno viendo tu codigo yo pues lo dejaria asi: #include <stdio.h> int main() { float a; float b; float c; printf( "Introduce el primer lado: " ); scanf( "%f", &a ); printf( "Introduce el tercer lado: " ); scanf( "%f", &b ); printf( "Introduce el segundo lado: " ); scanf( "%f", &c ); printf( "Los lados valen %f, %f y %f \n", a, b, c); if(a == 0 || a >= (b + c) || b >= (a + c) || c >= (b + a)) { printf("\nLos datos proporcionados no forman un triángulo"); }else if(a == b && b == c) { printf("El triangulo es equilatero"); }else if(a > b && a > c) { printf( "El primer lado dado, %f, es ", a); if( (b*b+c*c) == (a*a) ) printf("la hipotenusa, por lo \nque ls triangulo es rectángulo\n"); else if (b == c) printf ("el mayor, y los otros \nson iguales por lo que el triángulo es isóceles\n"); else printf ("el mayor, y el triángulo es escaleno\n"); }else if( b > c && b > a) { printf( "El segundo lado dado, %f, es ", b); if( (a*a+c*c) == (b*b) ) printf("la hipotenusa, por lo \nque el triangulo es rectángulo\n"); else if( a == c ) printf ("el mayor, y los otros \nson iguales por lo que el triángulo es isóceles\n"); else printf ("el mayor, y el triángulo es escaleno\n"); }else if( c > b && c > a ) { printf( "El tercer lado dado, %f, es ", c); if ( (b*b+a*a) == (c*c) ) printf("la hipotenusa, por lo \nque el triangulo es rectángulo\n"); else if( b == a ) printf ("el mayor, y los otros \nson iguales por lo que el triángulo es isóceles\n"); else printf ("el mayor, y el triángulo es escaleno\n"); } return 0; }
|
|
|
En línea
|
|
|
|
|
Slava_TZD
Wiki
Desconectado
Mensajes: 1.466
♪ [8675309] ♪
|
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? #include<stdio.h> int main() { int ladoa=0,ladob=0,ladoc=0; printf("\nIntroduce el lado 1: ");scanf ("%i",&ladoa ); printf("Introduce el lado 2: ");scanf ("%i",&ladob ); printf("Introduce el lado 3: ");scanf ("%i",&ladoc ); if(ladoa==ladob && ladob==ladoc) { else if(ladoa==ladob && ladob!=ladoc || ladob==ladoc && ladoc!=ladoa || ladoc==ladoa && ladoa!=ladob) { else{ }
[08:25] kyperf@Hagher:~$ ./trian Introduce el lado 1: 20 Introduce el lado 2: 20 Introduce el lado 3: 20 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
|
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: 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
Mensajes: 375
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Regalo para los que empiezar a programar (triangulos recursivos):
Java
|
4nc3str4l
|
2
|
3,409
|
25 Enero 2014, 10:01 am
por DarkSorcerer
|
|
|
Dibujar cuatro triangulos de asteriscos
« 1 2 »
Programación C/C++
|
SebaC
|
14
|
5,246
|
3 Mayo 2016, 22:05 pm
por Eternal Idol
|
|
|
Suma simple da 0 (Problema de triángulos)
Programación C/C++
|
unpunto
|
2
|
2,211
|
25 Mayo 2016, 01:50 am
por unpunto
|
|
|
Sumar triangulos en una matriz nxn en C
Programación C/C++
|
Ndiar
|
1
|
1,918
|
28 Julio 2018, 19:35 pm
por Ndiar
|
|
|
Tipos de NAT 1,2, 3
Redes
|
retr02332
|
1
|
4,362
|
17 Julio 2020, 12:43 pm
por el-brujo
|
|