Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: STANHMAL en 7 Julio 2010, 04:45 AM

Título: [C] Teorema de Pitágoras
Publicado por: STANHMAL en 7 Julio 2010, 04:45 AM
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
Título: Re: [C] Teorema de Pitágoras
Publicado por: .:BlackCoder:. en 7 Julio 2010, 04:51 AM
"Se que se puede acortar el code"
+1
Acortalo lo mas que puedas y ahi si te hago alguna critica... Saludos...
Título: Re: [C] Teorema de Pitágoras
Publicado por: STANHMAL en 7 Julio 2010, 04:55 AM
Cita de: .:BlackCoder:. en  7 Julio 2010, 04:51 AM
...

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

$4!u2
Título: Re: [C] Teorema de Pitágoras
Publicado por: leogtz 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.
Título: Re: [C] Teorema de Pitágoras
Publicado por: Ari Slash en 7 Julio 2010, 07:47 AM
el buffer de entrada es fflush(stdin) xD
Título: Re: [C] Teorema de Pitágoras
Publicado por: leogtz en 7 Julio 2010, 07:51 AM
Cita de: Ari-Slash en  7 Julio 2010, 07:47 AM
el buffer de entrada es fflush(stdin) xD

Sin comentarios.  :-\
Título: Re: [C] Teorema de Pitágoras
Publicado por: 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!
Título: Re: [C] Teorema de Pitágoras
Publicado por: leogtz en 7 Julio 2010, 08:46 AM
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.
Título: Re: [C] Teorema de Pitágoras
Publicado por: globsharp en 7 Julio 2010, 13:19 PM
Estaría interesante aligerar el main repartiendo la funcionalidad entre diferentes procedimientos, normalmente el main solo debería encargarse de invocar a dichos procedimientos :)

Título: Re: [C] Teorema de Pitágoras
Publicado por: STANHMAL en 7 Julio 2010, 15:32 PM
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
Título: Re: [C] Teorema de Pitágoras
Publicado por: leogtz en 7 Julio 2010, 19:16 PM
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.
Título: Re: [C] Teorema de Pitágoras
Publicado por: STANHMAL en 7 Julio 2010, 19:25 PM
:S si tienes razón.

ya se que paso, es que también había reemplazado los otros exits  :xD

Gracias Leo.  ;D
Título: Re: [C] Teorema de Pitágoras
Publicado por: .:BlackCoder:. en 7 Julio 2010, 19:28 PM
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
Título: Re: [C] Teorema de Pitágoras
Publicado por: 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:
Título: Re: [C] Teorema de Pitágoras
Publicado por: leogtz en 7 Julio 2010, 20:14 PM
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 {}
Título: Re: [C] Teorema de Pitágoras
Publicado por: STANHMAL en 7 Julio 2010, 20:16 PM
Cita de: Leo Gutiérrez. en  7 Julio 2010, 20:14 PM
...

Cada día se aprende algo nuevo.
Título: Re: [C] Teorema de Pitágoras
Publicado por: .: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...  :¬¬
Título: Re: [C] Teorema de Pitágoras
Publicado por: [L]ord [R]NA en 8 Julio 2010, 01:14 AM
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...

Título: Re: [C] Teorema de Pitágoras
Publicado por: .: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?

Título: Re: [C] Teorema de Pitágoras
Publicado por: [L]ord [R]NA en 8 Julio 2010, 01:24 AM
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.
Título: Re: [C] Teorema de Pitágoras
Publicado por: .:BlackCoder:. en 8 Julio 2010, 01:59 AM
Eso si es verdad  :xD... Pero yo si espero al menos las gracias jeje... Mejor no las espero mas

Saludos...
Título: Re: [C] Teorema de Pitágoras
Publicado por: STANHMAL en 8 Julio 2010, 02:24 AM
 :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
Título: Re: [C] Teorema de Pitágoras
Publicado por: .:BlackCoder:. en 8 Julio 2010, 02:35 AM
A la orden  :D
Cita de: STANHMAL en  8 Julio 2010, 02:24 AM
PD: odio facebook

+1