• Viernes 29 de Marzo de 2024, 16:01

Autor Tema:  Problema Con Funciones  (Leído 947 veces)

MaPpY

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Problema Con Funciones
« en: Domingo 25 de Noviembre de 2007, 20:03 »
0
Hola, estoy intentando hacer un programa que calcule densidades de tal manera que pida al usuario una masa y que despues muestre un menu que calcule el volumen ya sea un rectangulo, un triangulo o un circulo. El programa me compila y se ejecuta pero no hace los calculos bien, si me pudierais ayudar a ver si fallo estare muy agradecida.
Dejo el codigo fuente para que lo vean:

#include <stdio.h>

int menu (void)
{
    int opcion;
    float masa;
   
       printf("\nMENU:");
       printf("\n1. Calcular densidad si el volumen es un rectangulo");
       printf("\n2. Calcular densidad si el volumen es un triangulo");
       printf("\n3. Calcular densidad si el volumen es un cilindro");
       printf("\n4. Salir");
       printf("\nIntroduzca opcion a elegir: ");
       
       scanf("%d",&opcion);
       
    return(opcion);    
}

void rellenamasa(float masa)
{
        printf("\nIntroduzca masa: ");
        scanf("%f",&masa);
}

void drect(float masa,float a,float b,float h,float dr)
{
         float v;
         
         
         printf("Introduce a: ");
         scanf("%f",&a);
         printf("Introduce b: ");
         scanf("%f",&b);
         printf("Introduce h: ");
         scanf("%f",&h);
         
         v=a*b*h;
         dr=v*masa;
         
         printf("La densidad es: %f",dr);  
}

void dtrian(float masa,float a,float b,float h,float dt)
{
         float v;
         
         
         printf("Introduce a: ");
         scanf("%f",&a);
         printf("Introduce b: ");
         scanf("%f",&b);
         printf("Introduce h: ");
         scanf("%f",&h);
         
         v=(a*b*h)/2;
         dt=v*masa;
         
         printf("La densidad es: %f",dt);
}

void dcilin(float masa,float r,float h,float dc)
{
         float v;
         
         printf("Introduce r: ");
         scanf("%f",&r);
         printf("Introduce h: ");
         scanf("%f",&h);
         
         v=3.14*(r*r)*h;
         dc=v*masa;
         
         printf("La densidad es %f",dc);
             
}

int main()
{ /*programa principal*/

        float a; /*defino las variables que necesito*/
        float b;
        int opcion=0;
        float h;
        float r;
        float masa;
        float v;
        float dr;
        float dt;
        float dc;

              rellenamasa(masa);
           
        do
           {
              opcion= menu();
             
             
              switch(opcion)
              {
                 case 1:   drect(masa,a,b,h,dr);
                           
                    break;
                 case 2:   dtrian(masa,a,b,h,dt);
                           
                    break;
                 case 3:   dcilin(masa,r,h,dc);
                           
                    break;  
                 case 4:
                     
                    break;
                 default: printf("\nERROR al escoger opcion");
                    break;
                 
              }
            }
           while(opcion<=4);
           
fflush(stdin);
getchar();
return(1);
   } /*fin del cuerpo principal*/

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Problema Con Funciones
« Respuesta #1 en: Domingo 25 de Noviembre de 2007, 23:37 »
0
Hola,

Código: Text
  1. #include &#60;stdio.h&#62;
  2.  
  3. int menu (void)
  4. {
  5. int opcion;
  6. float masa;
  7.  
  8. printf(&#34;&#092;nMENU:&#34;);
  9. printf(&#34;&#092;n1. Calcular densidad si el volumen es un rectangulo&#34;);
  10. printf(&#34;&#092;n2. Calcular densidad si el volumen es un triangulo&#34;);
  11. printf(&#34;&#092;n3. Calcular densidad si el volumen es un cilindro&#34;);
  12. printf(&#34;&#092;n4. Salir&#34;);
  13. printf(&#34;&#092;nIntroduzca opcion a elegir: &#34;);
  14.  
  15. scanf(&#34;%d&#34;,&opcion);
  16.  
  17. return(opcion);
  18. }
  19.  
  20. void rellenamasa(float *masa)
  21. {
  22. printf(&#34;&#092;nIntroduzca masa: &#34;);
  23. scanf(&#34;%f&#34;,masa);
  24. }
  25.  
  26. void drect(float masa)
  27. {
  28. float v,a,b,h,dr;
  29.  
  30.  
  31. printf(&#34;Introduce a: &#34;);
  32. scanf(&#34;%f&#34;,&a);
  33. printf(&#34;Introduce b: &#34;);
  34. scanf(&#34;%f&#34;,&b);
  35. printf(&#34;Introduce h: &#34;);
  36. scanf(&#34;%f&#34;,&h);
  37.  
  38. v=a*b*h;
  39. dr=v*masa;
  40.  
  41. printf(&#34;La densidad es: %f&#34;,dr);
  42. }
  43.  
  44. void dtrian(float masa)
  45. {
  46. float v,a,b,h,dt;
  47.  
  48.  
  49. printf(&#34;Introduce a: &#34;);
  50. scanf(&#34;%f&#34;,&a);
  51. printf(&#34;Introduce b: &#34;);
  52. scanf(&#34;%f&#34;,&b);
  53. printf(&#34;Introduce h: &#34;);
  54. scanf(&#34;%f&#34;,&h);
  55.  
  56. v=(a*b*h)/2;
  57. dt=v*masa;
  58.  
  59. printf(&#34;La densidad es: %f&#34;,dt);
  60. }
  61.  
  62. void dcilin(float masa)
  63. {
  64. float v,r,h,dc;
  65.  
  66. printf(&#34;Introduce r: &#34;);
  67. scanf(&#34;%f&#34;,&r);
  68. printf(&#34;Introduce h: &#34;);
  69. scanf(&#34;%f&#34;,&h);
  70.  
  71. v=3.14*(r*r)*h;
  72. dc=v*masa;
  73.  
  74. printf(&#34;La densidad es %f&#34;,dc);
  75.  
  76. }
  77.  
  78. int main()
  79. { /*programa principal*/
  80.  
  81. int opcion=0;
  82. float masa;
  83.  
  84. rellenamasa(&masa);
  85.  
  86. do
  87. {
  88. opcion= menu();
  89.  
  90.  
  91. switch(opcion)
  92. {
  93. case 1: drect(masa);
  94.  
  95. break;
  96. case 2: dtrian(masa);
  97.  
  98. break;
  99. case 3: dcilin(masa);
  100.  
  101. break;
  102. case 4:
  103.  
  104. break;
  105. default: printf(&#34;&#092;nERROR al escoger opcion&#34;);
  106. break;
  107.  
  108. }
  109. }
  110. while(opcion&#60;=4);
  111.  
  112. fflush(stdin);
  113. getchar();
  114. return(1);
  115. } /*fin del cuerpo principal*/
  116.  

No lo he compilado para comprobar que este bien, el verdadero fallo está en la función rellenamasa(), el parámetro masa al pasarlo directamente, pasas el valor que masa tuviera en ese momento y en la función rellenamasa() se crea la variable masa de forma local a la función (una vez que la función termine esa variable desaparece) con ese valor que le pasas... como lo que quieres es que la función te devuelva el valor de masa tienes dos opciones:
- la primera te la he indicado (con punteros)
- la segunda:
Código: Text
  1.  
  2. float rellenamasa()
  3. {
  4. float masa;
  5. printf(&#34;&#092;nIntroduzca masa: &#34;);
  6. scanf(&#34;%f&#34;,&masa);
  7. return masa;
  8. }
  9.  
y a la hora de llamar a la función desde la rutina principal lo haces de esta forma:
Código: Text
  1.  
  2. masa=rellenamasa();
  3.  
  4.  

Espero que te sirva de ayuda,
Un saludo  :lightsabre:
No hay tonto más molesto que el ingenioso.

MaPpY

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Problema Con Funciones
« Respuesta #2 en: Lunes 26 de Noviembre de 2007, 00:13 »
0
Gracias carmamezo

He seguido intentando buscarle el fallo y tambien le he encontrado solucion y ya hace bien los calculos, lo dejo aqui por si sirve de ayuda a alguien mas:

#include <stdio.h>  /* inclusión de biblioteca necesaria para lo mandatos printf y scanf*/

int menu (void)  /*función para pintar el menú*/
{
    int opcion;
   
       printf("\nMENU:");
       printf("\n1. Calcular densidad si el volumen es un rectangulo");
       printf("\n2. Calcular densidad si el volumen es un triangulo");
       printf("\n3. Calcular densidad si el volumen es un cilindro");
       printf("\n4. Salir");
       printf("\nIntroduzca opcion a elegir: ");
       
       scanf("%d",&opcion);  /*guardo la opción elegida*/
       
    return(opcion); /*necesito que me devuelva opción*/  
}

float drect(float masa,float a,float b,float h)  /*funcion para calcular la densidad si el volumen es un rectangulo*/
{
         float v,d;
         
         printf("Introduce a: ");   /*pide que introduzcamos las dimensiones y las guarda*/
         scanf("%f",&a);
         printf("Introduce b: ");
         scanf("%f",&b);
         printf("Introduce h: ");
         scanf("%f",&h);
         printf("Introduzca masa: "); /*pide masa y la guarda*/
         scanf("%f",&masa);
         
         v=a*b*h;  /*calculos volumen*/
         d=v*masa; /*calculos densidad*/
         
         printf("La densidad es: %f",d);   /*imprime valor densidad*/
}

float dtrian(float masa,float a,float b,float h) /*funcion para calcular la densidad si el volumen es un triangulo*/
{
         float v,d;

         printf("Introduce a: ");    /*pide que introduzcamos las dimensiones y las guarda*/
         scanf("%f",&a);
         printf("Introduce b: ");
         scanf("%f",&b);
         printf("Introduce h: ");
         scanf("%f",&h);
         printf("Introduzca masa: ");  /*pide masa y la guarda*/
         scanf("%f",&masa);
         
         v=(a*b*h)/2;   /*calculos volumen*/
         d=v*masa;      /*calculos densidad*/
         
         printf("La densidad es: %f",d);   /*imprime valor densidad*/
}

float dcilin(float masa,float r,float h)  /*funcion para calcular la densidad si el volumen es un cilindro*/
{
         float v,d;
         
         printf("Introduce r: ");   /*pide que introduzcamos las dimensiones y las guarda*/
         scanf("%f",&r);
         printf("Introduce h: ");
         scanf("%f",&h);
         printf("Introduzca masa: ");  /*pide masa y la guarda*/
         scanf("%f",&masa);
         
         v=3.14*(r*r)*h;   /*calculos volumen*/
         d=v*masa;         /*calculos densidad*/
         
         printf("La densidad es %f",d);   /*imprime valor densidad*/    
}

int main()
{ /*programa principal*/

        float a,b,h,r; /*defino las variables que necesito*/
        int opcion=0;
        float masa;
        float v;
        float d;
         
        do{
              opcion=menu();  /*llamamos a la función menú*/
             
              switch(opcion)  /*según la opción elegida tenemos cuatro posibilidades*/
              {
                 case 1:   drect(masa,a,b,h);   /*si es la uno llamamos a la función densidad rectangulo*/                        
                    break;
                 case 2:   dtrian(masa,a,b,h);  /*si es la dos llamamos a la función densidad triangulo*/                        
                    break;
                 case 3:   dcilin(masa,r,h);    /*si es la tres llamamos a la función densidad cilindro*/                        
                    break;  
                 case 4:   /*si es la cuatro termina el programa*/
                    break;
                 default: /*si la opción elegida no es ninguna de las anteriores termina el programa*/
                    break;  
              }
            }
        while(opcion<4); /*este bucle se repetira hasta que opcion sea mayor o igual que 4*/
           
fflush(stdin);
getchar();
return(1);
} /*fin del cuerpo principal*/