Problema con Funciones en C

Iniciado por ;c1v!c, 16 Agosto 2011, 17:05 PM

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

;c1v!c

tengo esto hasta ahora, pero nose q es lo q estoy haciendo mal y no entiendo el error.

#include <stdio.h>
#include <stdlib.h>

    void Listado(char palabra[6], float n1,int n2);
   
int main()
    {   
        int n2,desc,subtotal;
        float n1;
        char prod3[6]="prod3";
        char prod2[6]="prod2";
        char prod1[6]="prod1";
        char palabra[6];       
        printf("Ingrese nombre del producto:");
        fgets(palabra,6,stdin);
        printf("Ingrese precio unitario:");
        scanf("%f",&n1);
        printf("Ingrese cantidad necesitada:");
        scanf("%d",&n2);
               
        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));
       
       
            //return 0;
    }
//--------------Descuento PROD1--------------------//
void Listado(char pala[6], float val1,int val2)
    {   
      int desc,subtotal;
      char prod3[6]="prod3";
        char prod2[6]="prod2";
        char prod1[6]="prod1";
     
        if(strcmp(pala,prod1)==0)
        {
          desc=(val1*val2*10)/100;
          subtotal=(val1*val2)-desc;
        }
        else if(strcmp(pala,prod2)==0)
        {
          desc=(val1*val2*10)/100;
          subtotal=(val1*val2)-desc;
        }
        else(strcmp(pala,prod3)==0)
        { subtotal=val1*val2;  }
       
        return desc,subtotal;
       
    }


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.

bigfu

El problema es que void no devuelve ningun valor, tienes que sacarlo del printf.
A reader lives a thousand lives before he dies. The man who never reads lives only one

;c1v!c

y como hago para q me aparezca el "desc" y el "subtotal" del void hay en el print donde falta.

bigfu

Cita de: ;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.

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.
A reader lives a thousand lives before he dies. The man who never reads lives only one

;c1v!c

Cita de: bigfu en 16 Agosto 2011, 18:01 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?

bigfu

Cita de: ;c1v!c en 16 Agosto 2011, 18:08 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!
A reader lives a thousand lives before he dies. The man who never reads lives only one

Valkyr

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


#include <stdio.h>
#include <stdlib.h>

    void Listado(char palabra[6], float n1,int n2);

int main()
    {   
        int n2,desc,subtotal;
        float n1;
        char prod3[6]="prod3";
        char prod2[6]="prod2";
        char prod1[6]="prod1";
        char palabra[6];       
        printf("Ingrese nombre del producto:");
        fgets(palabra,6,stdin);
        printf("Ingrese precio unitario:");
        scanf("%f",&n1);
        printf("Ingrese cantidad necesitada:");
        scanf("%d",&n2);

        printf("| Producto: %s \t\n|, palabra);
        printf("| Cantidad: %d \t\n|, n2);
        printf("| P.unitario: %0.2f \t\n|, n2);
        desc = Listado(prod1, n1, n2);
        printf("| Descuento: %d\t\n|, desc);
        printf("Subtotal: %d\t\n", (val1*val2)-desc);


            //return 0;
    }
//--------------Descuento PROD1--------------------//
int Listado(char pala[6], float val1,int val2)
    {   
      int desc,subtotal;
      char prod3[6]="prod3";
        char prod2[6]="prod2";
        char prod1[6]="prod1";

        if(strcmp(pala,prod1)==0)
        {
          desc=(val1*val2*10)/100;
          subtotal=(val1*val2)-desc;
        }
        else if(strcmp(pala,prod2)==0)
        {
          desc=(val1*val2*10)/100;
          subtotal=(val1*val2)-desc;
        }
        else(strcmp(pala,prod3)==0)
        { subtotal=val1*val2;  }

        return desc;

}


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.

;c1v!c

perfecto lo voy a probar gracias!!!

satu

Hola

Cita de: Valkyr en 16 Agosto 2011, 19:02 PM
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


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
* Función que calcula el descuento y el subtotal de un producto a partir de su precio unitario y la cantidad introducida
* Devuelve 1 si existe el producto, 0 en caso contrario
*/
int listado(char palabra[], float, int, float*, float*);

int main()
{
    int cant;
    float precio, *desc, *subtotal;
    char palabra[6];

    desc = (float*)malloc(sizeof(float));
    subtotal = (float*)malloc(sizeof(float));

    printf("Ingrese nombre del producto:");
    fgets(palabra, 6, stdin);
    printf("Ingrese precio unitario:");
    scanf("%f", &precio);
    printf("Ingrese cantidad necesitada:");
    scanf("%d", &cant);

    if(listado(palabra, precio, cant, desc, subtotal) == 1)
        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);
    else
        printf("ERROR");

    free(desc);
    free(subtotal);

    return 0;
}


/*
* Función que calcula el descuento y el subtotal de un producto a partir de su precio unitario y la cantidad introducida
* Devuelve 1 si existe el producto, 0 en caso contrario
*/
int listado(char pala[6], float precio, int cant, float *desc, float *subtotal)
{
    if((strcmp(pala, "prod1")==0) || (strcmp(pala, "prod2")==0))
        {
        *desc = (precio*cant*10)/100;
        *subtotal = ((precio*cant)-(*desc));
        return 1;
        }
    else
        if(strcmp(pala, "prod3")==0)
            {
            *desc = 0;
            *subtotal = precio*cant;
            return 1;
            }
        else
            return 0;
    }


Saludos
Breakbeat como forma de vida