Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ChicoMaravilla en 10 Noviembre 2011, 03:26 am



Título: Teorema del seno
Publicado por: ChicoMaravilla en 10 Noviembre 2011, 03:26 am
 ;-)  ;-)  ;-)  ;-)  ;-)  ;-)  ;-)   ;-)  ;-)  ;-)  ;-)  ;-)  ;-)  ;-)  ;-)
 ;-) ;-) ;-) Termine mi primer "programa en C"  ;-)  ;-)  ;-)

bueno, nomas quería compartir mi primer programa ( es sumamente sencillo ), se que me van a criticar por todos lados, pero tengan en cuenta que empece en esta semana C y que los hice solo, ( lo de la función del seno, me fije en la pagina que compartó pucheto: http://www.cplusplus.com/reference/clibrary/cmath/ ) aunque no llegue a usar el asin, por cuestiones de que lo deje en que solo pueda resolver dos incognitas, una del angulo , y otra del lado

acepto criticas igual  :xD

Código
  1. /*Creado por: Chico_Maravilla*/
  2. /*lucas_solymar@hotmail.com*/
  3. /*09/11/2011*/
  4.  
  5. #include <stdio.h>
  6. #include <math.h>
  7. #define PI 3.14159265
  8.  
  9. float a, b, c, aa, bb, cc;
  10.  
  11.  
  12. int main()
  13. {
  14.  
  15.    /*el titulo ocupa varios espacios, pero es el siguiente*/
  16.  
  17.      printf("                    ************************** \n                    ********   ANGULOS  ******\n                    ************************** \n \n \n ");
  18.  
  19.      /*aquì se recojen los datos*/
  20.  
  21.      printf(" Llena los siguientes datos, en el caso de que alguna sea la incognita, escribir un 0 \n \n \n");
  22.      printf("\n \n \n lado a: \n");
  23.      scanf("%f", &a);
  24.      printf(" lado b: \n");
  25.      scanf("%f", &b);
  26.      printf(" lado c: \n");
  27.      scanf("%f", &c);
  28.      printf(" Angulo de A: \n");
  29.      scanf("%f", &aa);
  30.      printf(" Angulo de B: \n");
  31.      scanf("%f", &bb);
  32.      printf(" Angulo de C: \n");
  33.      scanf("%f", &cc);
  34.  
  35.      /*de aqui los angulos*/
  36.  
  37.      if (aa && bb != 0 && cc==0)
  38.      {
  39.             cc=(180-aa)-bb;
  40.             printf(" Angulo C es: %f \n", cc);
  41.             }
  42.      if (bb && cc != 0 && aa==0)
  43.      {
  44.             aa=(180-bb)-cc;
  45.             printf(" Angulo A es: %f \n", aa);
  46.             }
  47.      if (aa && cc != 0 && bb==0)
  48.      {
  49.             bb=(180-cc)-aa;
  50.             printf(" Angulo B es: %f \n", bb);
  51.             }
  52.  
  53.      /*los senos de los angulos*/
  54.  
  55.      float senoA= sin (aa*PI/180);
  56.      float senoB= sin (bb*PI/180);
  57.      float senoC= sin (cc*PI/180);
  58.  
  59.      /*aqui es para saber los lados*/
  60.  
  61.      /*para el lado b*/
  62.      if (a && aa != 0 && bb != 0 && b == 0)
  63.      {
  64.            b= (a * senoB) / senoA;
  65.            printf(" el lado b es: %f \n", b);
  66.            }
  67.  
  68.      /*para el lado c*/
  69.      if (a && aa != 0 && cc != 0 && c == 0)
  70.      {
  71.            c= (a * senoC) / senoA;
  72.            printf(" el lado c es: %f \n", c);
  73.            }
  74.  
  75.      /*para el lado a*/
  76.      if (b && bb != 0 && aa != 0 && a == 0)      
  77.      {
  78.            a= (b * senoA) / senoB;
  79.            printf(" el lado a es: %f \n", a);
  80.            }
  81.  
  82.  
  83.  
  84.      scanf("%d");
  85.      return 0;
  86. }

espero que les sirva  :xD


Título: Re: Teorema del seno
Publicado por: Rich_crazy2 en 10 Noviembre 2011, 03:33 am
Hola...

Compartir programas con todos nosotros es bueno...

Bien por ti, solo falta esperar a las criticas de los expertos....

Suerte!

 ;-) ;-) ;-)


Título: Re: Teorema del seno
Publicado por: do-while en 10 Noviembre 2011, 09:48 am
¡Buenas!

Enhorabuena por el codigo. Sigue asi. Solo te comentare algun detalle.

En C, las variables se declaran antes de cualquier otra sentencia del programa, por lo tanto, tendras que declararlas justo despues de la cabecera de las fuciones (en este caso al principio de main).

Y otro detalle, que funciona pero creo que tu intencion era otra, en las condiciones. Has puesto:
Código
  1. if (aa && bb != 0 && cc==0)
y expresiones similares.

Igual lo estoy interpretando mal y realmente querias poner esto, pero creo que tu intencion era decir que si aa y bb son distintos de cero y cc es igual a cero... En C y C++ tienes que poner cada condicion de forma explicita y utilizar parentesis para agruparlas. En este caso los parentesis dan igual, pero cuando utilices expresiones mas complejas que impliquen y y o logicos, tendras que tener en cuenta que el y tiene mayor precedencia que el o. Por lo tanto vete acostumbrandote, aunque te parezca que no es necesario, a utilizar parentesis, asi cuando empieces a manejar expresiones mas complicadas te ahorraras problemas. Bueno, la expresion quedaria asi:
Código
  1. if ((aa!=0 && bb != 0) && cc==0)
.

¿Poque funciona el codigo que has puesto? En C las expresiones logicas son valores enteros, cero es falso y no cero eas verdadero, por lo tanto, las expresiones siguientes son equivalentes:
Código
  1. if (aa != 0 && bb != 0 && cc==0)
  2. if (aa && bb && !cc)
  3.  
Ya que si aa != 0, tanto la expresion aa != 0 como solamente aa son verdad, la primera de dara 1, y la segunda sera un valor distinto de cero, por lo que ambas seran verdad. Si cc == 0, significa que cc a secas es falso (ya que cc es cero) por lo tanto ! transformara el cero en uno, por lo que !cc y c == 0, produciran como resultado verdadero.

Recuerda esto:
cero es falso.
no cero es verdadero.
! transforma cero en uno.
! transforma no cero en cero.
&& tiene mayor precedencia que ||
utiliza parentesis para agrupar las expresiones logicas, aunque te parezca que no hace falta, para obligar a que se evaluen en el orden correcto.

Un ejemplo de esto ultimo seria por ejemplo, decidir el color y la forma de un objeto. Imagina que tiene una propiedad color, y otra forma y quieres saber si el objeto es por ejemplo un cubo de color rojo o azul. Lo harias asi:
Código
  1. if((color == ROJO || color == AZUL) && forma == CUBO)
  2.    //...
  3.  
Ya que si lo pones asi:
Código
  1. if(color == ROJO || color == AZUL && forma == CUBO)
  2.    //...
  3.  
&& se evaluara antes que || por lo que realmente estarias evaluando:

Código
  1. if(color == ROJO || (color == AZUL && forma == CUBO))
  2.    //...
  3.  

Ya ves que son detalles, el codigo en general esta bien, sigue trabajando que vas bien.

¡Saludos!


Título: Re: Teorema del seno
Publicado por: ChicoMaravilla en 10 Noviembre 2011, 13:55 pm
¡Buenas!

Enhorabuena por el codigo. Sigue asi. Solo te comentare algun detalle.

En C, las variables se declaran antes de cualquier otra sentencia del programa, por lo tanto, tendras que declararlas justo despues de la cabecera de las fuciones (en este caso al principio de main).

Y otro detalle, que funciona pero creo que tu intencion era otra, en las condiciones. Has puesto:
Código
  1. if (aa && bb != 0 && cc==0)
y expresiones similares.

Igual lo estoy interpretando mal y realmente querias poner esto, pero creo que tu intencion era decir que si aa y bb son distintos de cero y cc es igual a cero... En C y C++ tienes que poner cada condicion de forma explicita y utilizar parentesis para agruparlas. En este caso los parentesis dan igual, pero cuando utilices expresiones mas complejas que impliquen y y o logicos, tendras que tener en cuenta que el y tiene mayor precedencia que el o. Por lo tanto vete acostumbrandote, aunque te parezca que no es necesario, a utilizar parentesis, asi cuando empieces a manejar expresiones mas complicadas te ahorraras problemas. Bueno, la expresion quedaria asi:
Código
  1. if ((aa!=0 && bb != 0) && cc==0)
.

¿Poque funciona el codigo que has puesto? En C las expresiones logicas son valores enteros, cero es falso y no cero eas verdadero, por lo tanto, las expresiones siguientes son equivalentes:
Código
  1. if (aa != 0 && bb != 0 && cc==0)
  2. if (aa && bb && !cc)
  3.  
Ya que si aa != 0, tanto la expresion aa != 0 como solamente aa son verdad, la primera de dara 1, y la segunda sera un valor distinto de cero, por lo que ambas seran verdad. Si cc == 0, significa que cc a secas es falso (ya que cc es cero) por lo tanto ! transformara el cero en uno, por lo que !cc y c == 0, produciran como resultado verdadero.

Recuerda esto:
cero es falso.
no cero es verdadero.
! transforma cero en uno.
! transforma no cero en cero.
&& tiene mayor precedencia que ||
utiliza parentesis para agrupar las expresiones logicas, aunque te parezca que no hace falta, para obligar a que se evaluen en el orden correcto.

Un ejemplo de esto ultimo seria por ejemplo, decidir el color y la forma de un objeto. Imagina que tiene una propiedad color, y otra forma y quieres saber si el objeto es por ejemplo un cubo de color rojo o azul. Lo harias asi:
Código
  1. if((color == ROJO || color == AZUL) && forma == CUBO)
  2.    //...
  3.  
Ya que si lo pones asi:
Código
  1. if(color == ROJO || color == AZUL && forma == CUBO)
  2.    //...
  3.  
&& se evaluara antes que || por lo que realmente estarias evaluando:

Código
  1. if(color == ROJO || (color == AZUL && forma == CUBO))
  2.    //...
  3.  

Ya ves que son detalles, el codigo en general esta bien, sigue trabajando que vas bien.

¡Saludos!

es verdad  ;D, voy por esa parte en el libro  :xD , gracias por ayudarme  :D