Holas
Esta aburrido así que decidí hacer esta pequeña aplicación, supongo que no tocara explicarla puesto que todo el mundo la conoce :xD
/************************************
* Solución al Teorema de Pitágoras *
************************************
* Creado por STANHMAL *
************************************/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
enum stan {continua};
int main()
{
int x;
double c, c2, C, C2, h, h2;
enum stan hmal;
printf("\n **************************************\n");
printf(" * Solución al Teorema de Pitágoras *\n");
printf(" **************************************\n\n");
hmal = continua;
while (hmal == continua) {
printf("\n1. Para hallar un cateto.\n");
printf("2. Para hallar la hipotenusa.\n3. Para salir.\n");
printf("Opción escogida: ");
scanf("%d", &x);
if (x == 1) {
printf("Introduzca el valor de un cateto: ");
scanf("%lf", &c);
printf("Introduzca el valor de la hipotenusa: ");
scanf("%lf", &h);
c2 = c * c;
h2 = h * h;
C = sqrt(h2 - c2);
printf("El cateto tiene un valor de: %f\n", C);
printf("\nDesea continuar o salir.\n1. continuar 2. salir ");
scanf("%d", &x);
if (x == 1){
hmal = continua;
}
else if (x == 2) {
exit(0);
}
}
else if (x == 2) {
printf("Introduzca el valor del cateto opuesto: ");
scanf("%lf", &c);
printf("Introduzca el valor del cateto adyacente: ");
scanf("%lf", &C);
c2 = c * c;
C2 = C * C;
h = sqrt(C2 + c2);
printf("El valor de la hipotenusa es: %f\n", h);
printf("\nDesea continuar o salir.\n1. continuar 2. salir ");
scanf("%d", &x);
if (x == 1){
hmal = continua;
}
else if (x == 2) {
exit(0);
}
}
else if (x == 3) {
exit(0);
}
else {
printf("Error, opción no definida.\n");
}
}
return 0;
}
Se que se puede acortar el code, pero bueno, es mientras aprendo bien C
espero criticas constructivas ^^
$4!u2
"Se que se puede acortar el code"
+1
Acortalo lo mas que puedas y ahi si te hago alguna critica... Saludos...
Cita de: .:BlackCoder:. en 7 Julio 2010, 04:51 AM
...
Ya ando pensó como acortarlo bastante, haber como me va.
$4!u2
Tal vez debieras limpiar el buffer de entrada.
Usar fflush(stdout).
Y no hace falta que uses exit(0), con el return 0 bastaba.
el buffer de entrada es fflush(stdin) xD
Cita de: Ari-Slash en 7 Julio 2010, 07:47 AM
el buffer de entrada es fflush(stdin) xD
Sin comentarios. :-\
Leo, el bufer de entrada es stdin. El de salida es stdout.
fflush solo se puede utilizar con bufers de salida, para obligar a que se vacien, por ejemplo cuando hay un bufer asociado a un fichero de salida, y se quiere escribir la informacion del bufer en el fichero antes de que este completo...
fflush(stdin), funciona solo bajo windows. Al aplicar fflush a cualquier flujo que no sea de salida, el comportamiento queda indefinido.
Revisa este post (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html) de Littlehorse.
¡Saludos!
Cita de: do-while en 7 Julio 2010, 08:15 AM
Leo, el bufer de entrada es stdin. El de salida es stdout.
fflush solo se puede utilizar con bufers de salida, para obligar a que se vacien, por ejemplo cuando hay un bufer asociado a un fichero de salida, y se quiere escribir la informacion del bufer en el fichero antes de que este completo...
fflush(stdin), funciona solo bajo windows. Al aplicar fflush a cualquier flujo que no sea de salida, el comportamiento queda indefinido.
Revisa este post (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html) de Littlehorse.
¡Saludos!
Cita de: Leo Gutiérrez. en 7 Julio 2010, 07:00 AM
Tal vez debieras limpiar el buffer de entrada.
Usar fflush(stdout).
Y no hace falta que uses exit(0), con el return 0 bastaba.
Lo de "Usar fflush(stdout)" no tiene nada que ver con la primera línea, es por eso que está en una segunda línea. Yo sé que el buffer de entrada es stdin y sé también que fflush() con un buffer de entrada da como resultado un comporamiento indefinido en algunos compiladores.
La segunda recomendación no tiene nada que ver con la primera.
Estaría interesante aligerar el main repartiendo la funcionalidad entre diferentes procedimientos, normalmente el main solo debería encargarse de invocar a dichos procedimientos :)
ya acorte un poco el código, a ver que tal me quedo.
Cita de: Leo Gutiérrez. en 7 Julio 2010, 07:00 AM
Y no hace falta que uses exit(0), con el return 0 bastaba.
te refieres a reemplazar el exit por el return?
porque si es así, lo probé y no sirvió.
y con respecto al
flash fflush, bueno, no lo entiendo muy bien.
$4!u2
Cita de: STANHMAL en 7 Julio 2010, 15:32 PM
Cita de: Leo Gutiérrez. en 7 Julio 2010, 07:00 AM
Y no hace falta que uses exit(0), con el return 0 bastaba.
te refieres a reemplazar el exit por el return?
porque si es así, lo probé y no sirvió.
Debería de servir, mira:
leo@lein:~/Escritorio/c_proyect$ cat code.c | indent
/************************************
* Solución al Teorema de Pitágoras *
************************************
* Creado por STANHMAL *
************************************/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
enum stan
{ continua };
int
main ()
{
int x;
double c, c2, C, C2, h, h2;
enum stan hmal;
printf ("\n **************************************\n");
printf (" * Solución al Teorema de Pitágoras *\n");
printf (" **************************************\n\n");
hmal = continua;
while (hmal == continua)
{
printf ("\n1. Para hallar un cateto.\n");
printf ("2. Para hallar la hipotenusa.\n3. Para salir.\n");
printf ("Opción escogida: ");
scanf ("%d", &x);
if (x == 1)
{
printf ("Introduzca el valor de un cateto: ");
scanf ("%lf", &c);
printf ("Introduzca el valor de la hipotenusa: ");
scanf ("%lf", &h);
c2 = c * c;
h2 = h * h;
C = sqrt (h2 - c2);
printf ("El cateto tiene un valor de: %f\n", C);
printf ("\nDesea continuar o salir.\n1. continuar 2. salir ");
scanf ("%d", &x);
if (x == 1)
{
hmal = continua;
}
else if (x == 2)
{
exit (0);
}
}
else if (x == 2)
{
printf ("Introduzca el valor del cateto opuesto: ");
scanf ("%lf", &c);
printf ("Introduzca el valor del cateto adyacente: ");
scanf ("%lf", &C);
c2 = c * c;
C2 = C * C;
h = sqrt (C2 + c2);
printf ("El valor de la hipotenusa es: %f\n", h);
printf ("\nDesea continuar o salir.\n1. continuar 2. salir ");
scanf ("%d", &x);
if (x == 1)
{
hmal = continua;
}
else if (x == 2)
{
exit (0);
}
}
else if (x == 3)
{
return 0;
}
else
{
printf ("Error, opción no definida.\n");
}
}
return 0;
}
leo@lein:~/Escritorio/c_proyect$
Compilar, ejecutar y checar el estado de error:
leo@lein:~/Escritorio/c_proyect$ gcc code.c -o code -lm
leo@lein:~/Escritorio/c_proyect$
leo@lein:~/Escritorio/c_proyect$ ./code ; echo -e "Error : $?"
**************************************
* Solución al Teorema de Pitágoras *
**************************************
1. Para hallar un cateto.
2. Para hallar la hipotenusa.
3. Para salir.
Opción escogida: 3
Error : 0
leo@lein:~/Escritorio/c_proyect$
El return hace su trabajo.
:S si tienes razón.
ya se que paso, es que también había reemplazado los otros exits :xD
Gracias Leo. ;D
Yo lo hice asi... Se puede recortar un poco mas pero pes ya va a empezar el juego...
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int x=1;
double c, C, h;
printf("\n **************************************\n");
printf(" * Solución al Teorema de Pitágoras *\n");
printf(" **************************************\n\n");
while (x == 1) {
printf("\n1. Para hallar un cateto.\n");
printf("2. Para hallar la hipotenusa.\n3. Para salir.\n");
printf("Opción escogida: ");
scanf("%d", &x);
if (x == 1) {
printf("Introduzca el valor de un cateto: ");
scanf("%lf", &c);
printf("Introduzca el valor de la hipotenusa: ");
scanf("%lf", &h);
if (c<h){
C = sqrt(h*h - c*c);
printf("El cateto tiene un valor de: %f\n", C);
printf("\nDesea continuar o salir.\n1. continuar 2. salir ");
scanf("%d", &x);}
else {printf("Error matematico"); x=3;}
}
else if (x == 2) {
printf("Introduzca el valor del cateto opuesto: ");
scanf("%lf", &c);
printf("Introduzca el valor del cateto adyacente: ");
scanf("%lf", &C);
h = sqrt(C*C + c*c);
printf("El valor de la hipotenusa es: %f\n", h);
printf("\nDesea continuar o salir.\n1. continuar 2. salir ");
scanf("%d", &x);
}
else if (x>3 || x<1)
printf("Error, opción no definida.\n");
else printf ("Saliendo\n\n");
}
getchar();
getchar();/*Tengo que ver cual es el pedo con el buffer aqui*/
return 0;
}
Saludos...
PD: No le hice la tarea el de el ya servia :xD
2 cosas
la primera:
Cita de: .:BlackCoder:. en 7 Julio 2010, 19:28 PM
else if (x>3 || x<1)
printf("Error, opción no definida.\n");
else printf ("Saliendo\n\n");
que no le hace falta:
{} ?
else if (x>3 || x<1) {
printf("Error, opción no definida.\n");
}
else {
printf ("Saliendo\n\n");
}
la segunda:
Cita de: .:BlackCoder:. en 7 Julio 2010, 19:28 PM
PD: No le hice la tarea el de el ya servia :xD
No es tarea :rolleyes:
Cita de: STANHMAL en 7 Julio 2010, 19:39 PM
2 cosas
la primera:
Cita de: .:BlackCoder:. en 7 Julio 2010, 19:28 PM
else if (x>3 || x<1)
printf("Error, opción no definida.\n");
else printf ("Saliendo\n\n");
que no le hace falta: {} ?
else if (x>3 || x<1) {
printf("Error, opción no definida.\n");
}
else {
printf ("Saliendo\n\n");
}
la segunda:
Cita de: .:BlackCoder:. en 7 Julio 2010, 19:28 PM
PD: No le hice la tarea el de el ya servia :xD
No es tarea :rolleyes:
Cuando es una única línea puedes omitir las llaves {}
:¬¬ Aprende a decir gracias... Te ayude a "recortar" y te "critique" el code, se puede decir q le hice algunas mejoras siguiendo TU code... :¬¬
Esta bueno el code para haberlo hecho para matar el aburrimiento, yo deberia de seguir tu ejemplo y dejar de Facebookear cuando me encuentro aburrido.
Cita de: .:BlackCoder:. en 8 Julio 2010, 00:17 AM
:¬¬ Aprende a decir gracias... Te ayude a "recortar" y te "critique" el code, se puede decir q le hice algunas mejoras siguiendo TU code... :¬¬
:¬¬ no tiene porque decir gracias porque no te pidio que lo hicieras...
El pidio criticas contructivas... Lo cual hice pero con el code ya arreglado (para mi es mejor el code que decirle lo q se podria hacer) pero ya q coño :-\
Saludos...
PD: Cuando te hacen un favor sin pedirlo no agradeces?
Cita de: .:BlackCoder:. en 8 Julio 2010, 01:23 AM
El pidio criticas contructivas... Lo cual hice pero con el code ya arreglado (para mi es mejor el code que decirle lo q se podria hacer) pero ya q coño :-\
Saludos...
PD: Cuando te hacen un favor sin pedirlo no agradeces?
Nop, quien hace un favor sin que se lo pidan no lo hace para esperar un agradecimiento.
Eso si es verdad :xD... Pero yo si espero al menos las gracias jeje... Mejor no las espero mas
Saludos...
:xD
Cita de: .:BlackCoder:. en 8 Julio 2010, 00:17 AM
...
Te voy a decir la verdad, cuando hice el post de las llaves {} (el siguiente citado.)
Cita de: STANHMAL en 7 Julio 2010, 19:39 PM
...
esperaba que respondieras tu, y resulto respondiendo Leo, y se me pazo darte la gracias, ahora te las doy ^^
Gracias man, tu code me sirvió de mucho, me refiero a manera de aprendizaje no de tarea xD.
PD: odio facebook
$4!u2