[C] Teorema de Pitágoras

Iniciado por STANHMAL, 7 Julio 2010, 04:45 AM

0 Miembros y 1 Visitante están viendo este tema.

STANHMAL

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
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

.:BlackCoder:.

"Se que se puede acortar el code"
+1
Acortalo lo mas que puedas y ahi si te hago alguna critica... Saludos...
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




STANHMAL

Cita de: .:BlackCoder:. en  7 Julio 2010, 04:51 AM
...

Ya ando pensó como acortarlo bastante, haber como me va.

$4!u2
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

leogtz

Tal vez debieras limpiar el buffer de entrada.
Usar fflush(stdout).
Y no hace falta que uses exit(0), con el return 0 bastaba.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Ari Slash

el buffer de entrada es fflush(stdin) xD

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

do-while

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 de Littlehorse.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

leogtz

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 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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

globsharp

Estaría interesante aligerar el main repartiendo la funcionalidad entre diferentes procedimientos, normalmente el main solo debería encargarse de invocar a dichos procedimientos :)

Duérmete

STANHMAL

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
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