Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ;c1v!c en 16 Agosto 2011, 17:05 pm



Título: Problema con Funciones en C
Publicado por: ;c1v!c en 16 Agosto 2011, 17:05 pm
tengo esto hasta ahora, pero nose q es lo q estoy haciendo mal y no entiendo el error.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.    void Listado(char palabra[6], float n1,int n2);
  5.  
  6. int main()
  7.    {  
  8.        int n2,desc,subtotal;
  9.        float n1;
  10.        char prod3[6]="prod3";
  11.        char prod2[6]="prod2";
  12.        char prod1[6]="prod1";
  13.        char palabra[6];        
  14.        printf("Ingrese nombre del producto:");
  15.        fgets(palabra,6,stdin);
  16.        printf("Ingrese precio unitario:");
  17.        scanf("%f",&n1);
  18.        printf("Ingrese cantidad necesitada:");
  19.        scanf("%d",&n2);
  20.  
  21.        printf("| Producto: %s \t\n| Cantidad: %d \t\n| P.unitario: %0.2f \t\n| Descuento: \t\n| Subtotal: \t\n",palabra,n2,n1,Listado(desc,subtotal));
  22.  
  23.  
  24.            //return 0;
  25.    }
  26. //--------------Descuento PROD1--------------------//
  27. void Listado(char pala[6], float val1,int val2)
  28.    {  
  29.      int desc,subtotal;
  30.      char prod3[6]="prod3";
  31.        char prod2[6]="prod2";
  32.        char prod1[6]="prod1";
  33.  
  34.        if(strcmp(pala,prod1)==0)
  35.        {
  36.          desc=(val1*val2*10)/100;
  37.          subtotal=(val1*val2)-desc;
  38.        }
  39.        else if(strcmp(pala,prod2)==0)
  40.        {
  41.          desc=(val1*val2*10)/100;
  42.          subtotal=(val1*val2)-desc;
  43.        }
  44.        else(strcmp(pala,prod3)==0)
  45.        { subtotal=val1*val2;  }
  46.  
  47.        return desc,subtotal;
  48.  
  49.    }
  50.  

y lo q tengo q hacer es que el usuario ingrese un codigo (PROD1,PROD2 y PROD3) si ingresa PROD1 o PROD2 tiene sus respectivos descuentos y sin ingresa PROD3 no tiene descuentos y devuelve el resultado.


Título: Re: Problema con Funciones en C
Publicado por: bigfu en 16 Agosto 2011, 17:09 pm
El problema es que void no devuelve ningun valor, tienes que sacarlo del printf.


Título: Re: Problema con Funciones en C
Publicado por: ;c1v!c en 16 Agosto 2011, 17:23 pm
y como hago para q me aparezca el "desc" y el "subtotal" del void hay en el print donde falta.


Título: Re: Problema con Funciones en C
Publicado por: bigfu en 16 Agosto 2011, 18:01 pm
y como hago para q me aparezca el "desc" y el "subtotal" del void hay en el print donde falta.

O declaras esas variables en el subalgoritmo y haces el cout interno al subalgoritmo o en el prototipo declaras los parámetros como entrada/salida.


Título: Re: Problema con Funciones en C
Publicado por: ;c1v!c en 16 Agosto 2011, 18:08 pm
O declaras esas variables en el subalgoritmo y haces el cout interno al subalgoritmo o en el prototipo declaras los parámetros como entrada/salida.

no entendi mucho nose C++ jeje
q es cout en C scanf?


Título: Re: Problema con Funciones en C
Publicado por: bigfu en 16 Agosto 2011, 18:34 pm
no entendi mucho nose C++ jeje
q es cout en C scanf?

Lo siento, me he liado xD cout es lo mismo que printf, pero viene incluida en una librería de C++.
He estado mirando un poco como hacerlo en C y no se pueden pasar valores por referencia. Asi que antes de liarte más, a ver si tienes suerte y te ayuda alguien que programa en C.

Suerte!


Título: Re: Problema con Funciones en C
Publicado por: Valkyr en 16 Agosto 2011, 19:02 pm
Sí el calculo del subtotal porque no lo haces al volver de la llamada a la función? Es decir, yo haría algo así:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.    void Listado(char palabra[6], float n1,int n2);
  5.  
  6. int main()
  7.    {  
  8.        int n2,desc,subtotal;
  9.        float n1;
  10.        char prod3[6]="prod3";
  11.        char prod2[6]="prod2";
  12.        char prod1[6]="prod1";
  13.        char palabra[6];        
  14.        printf("Ingrese nombre del producto:");
  15.        fgets(palabra,6,stdin);
  16.        printf("Ingrese precio unitario:");
  17.        scanf("%f",&n1);
  18.        printf("Ingrese cantidad necesitada:");
  19.        scanf("%d",&n2);
  20.  
  21.        printf("| Producto: %s \t\n|, palabra);
  22.        printf("| Cantidad: %d \t\n|, n2);
  23.        printf("| P.unitario: %0.2f \t\n|, n2);
  24.        desc = Listado(prod1, n1, n2);
  25.        printf("| Descuento: %d\t\n|, desc);
  26.        printf("Subtotal: %d\t\n", (val1*val2)-desc);
  27.  
  28.  
  29.            //return 0;
  30.    }
  31. //--------------Descuento PROD1--------------------//
  32. int Listado(char pala[6], float val1,int val2)
  33.    {  
  34.      int desc,subtotal;
  35.      char prod3[6]="prod3";
  36.        char prod2[6]="prod2";
  37.        char prod1[6]="prod1";
  38.  
  39.        if(strcmp(pala,prod1)==0)
  40.        {
  41.          desc=(val1*val2*10)/100;
  42.          subtotal=(val1*val2)-desc;
  43.        }
  44.        else if(strcmp(pala,prod2)==0)
  45.        {
  46.          desc=(val1*val2*10)/100;
  47.          subtotal=(val1*val2)-desc;
  48.        }
  49.        else(strcmp(pala,prod3)==0)
  50.        { subtotal=val1*val2;  }
  51.  
  52.        return desc;
  53.  
  54. }
  55.  

Por ejemplo podrías hacerlo así, en C que yo sepa si se pueden pasar los parámetros por referencia, pero si es algo que todavía no has visto creo que sería mejor hacer algo así como lo que te he puesto.

Saludos.


Título: Re: Problema con Funciones en C
Publicado por: ;c1v!c en 16 Agosto 2011, 19:26 pm
perfecto lo voy a probar gracias!!!


Título: Re: Problema con Funciones en C
Publicado por: satu en 17 Agosto 2011, 10:19 am
Hola

en C que yo sepa si se pueden pasar los parámetros por referencia

En C no se pueden pasar parámetros por referencia como en C++ utilizando &, para hacerlo hay que pasar un puntero y modificar el valor al que apunta, pongo un ejemplo con este ejercicio

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. /*
  6.  * Función que calcula el descuento y el subtotal de un producto a partir de su precio unitario y la cantidad introducida
  7.  * Devuelve 1 si existe el producto, 0 en caso contrario
  8.  */
  9. int listado(char palabra[], float, int, float*, float*);
  10.  
  11. int main()
  12. {
  13.    int cant;
  14.    float precio, *desc, *subtotal;
  15.    char palabra[6];
  16.  
  17.    desc = (float*)malloc(sizeof(float));
  18.    subtotal = (float*)malloc(sizeof(float));
  19.  
  20.    printf("Ingrese nombre del producto:");
  21.    fgets(palabra, 6, stdin);
  22.    printf("Ingrese precio unitario:");
  23.    scanf("%f", &precio);
  24.    printf("Ingrese cantidad necesitada:");
  25.    scanf("%d", &cant);
  26.  
  27.    if(listado(palabra, precio, cant, desc, subtotal) == 1)
  28.        printf("| Producto: %s \t\n| Cantidad: %d \t\n| P.unitario: %0.2f \t\n| Descuento: %0.2f \t\n| Subtotal: %0.2f \t\n", palabra, cant, precio, *desc, *subtotal);
  29.    else
  30.        printf("ERROR");
  31.  
  32.    free(desc);
  33.    free(subtotal);
  34.  
  35.    return 0;
  36. }
  37.  
  38.  
  39. /*
  40.  * Función que calcula el descuento y el subtotal de un producto a partir de su precio unitario y la cantidad introducida
  41.  * Devuelve 1 si existe el producto, 0 en caso contrario
  42.  */
  43. int listado(char pala[6], float precio, int cant, float *desc, float *subtotal)
  44. {
  45.    if((strcmp(pala, "prod1")==0) || (strcmp(pala, "prod2")==0))
  46.        {
  47.        *desc = (precio*cant*10)/100;
  48.        *subtotal = ((precio*cant)-(*desc));
  49.        return 1;
  50.        }
  51.    else
  52.        if(strcmp(pala, "prod3")==0)
  53.            {
  54.            *desc = 0;
  55.            *subtotal = precio*cant;
  56.            return 1;
  57.            }
  58.        else
  59.            return 0;
  60.    }
  61.  

Saludos