Estoy en una clase de introducción a la programación C y estoy trabajando en una tarea. Simplemente no puedo trabajar correctamente. Esta es la tarea asignada:

Cuando alguien compra una pequeña cantidad de widgets, paga un precio normal. Cuando alguien compra un número medio de widgets, Nick está bastante contento y les ofrece un descuento de lo normal precio. Cuando alguien compra una gran cantidad de widgets, Nick se enamora de ellos y les da ¡Tienen un descuento aún mayor del precio normal! Pero su problema es este: a veces estos las cantidades son más bajas que sus costos originales, por lo que pierde dinero en la venta. Para simplificar, asumiremos que cada widget le cuesta a Nick 0,40 dólares cada uno (por lo que debería estar vendiendo cada uno de ellos por un costo mayor que este para sus clientes): #define WIDGET_COST 0.40

Para ayudar a Nick a salvar su negocio, escriba un programa que le indique el precio por el que venderá cada widget, el porcentaje en el que descontará las compras medianas y el porcentaje en el que descontará las compras grandes (cada uno como números enteros de un por ciento), luego emitirá un mensaje indicando cuál de estas opciones está causando que no obtenga ganancias. Los posibles problemas que Nick podría tener son (muestre solo el primero en esta lista que sea verdadero):

  1. Nick, tu precio base es demasiado bajo.
  2. Nick, ¡estás descontando demasiado las compras medianas!
  3. Nick, ¡estás descontando demasiado las compras grandes!

Si no hay problemas con sus precios, debería publicar: ¡Todos los precios me parecen buenos! Después de enviar el mensaje correspondiente desde arriba, no olvide desearle buena suerte a Nick con su nuevo negocio: ¡Buena suerte!

Este es mi código hasta ahora:

int main(){

    double base;
    printf("How much are you selling each widget for?\n");
    scanf("%lf", &base);

    int medium;
    printf("How much are you discounting medium orders?\n");
    scanf("%d", &medium);

    int large;
    printf("How much are you discounting large orders?\n");
    scanf("%d", &large);

    double medium_total = base - medium/100 * base;
    double large_total = base - large/100 * base;

    if (base < WIDGET_COST) {
        printf("Nick, your base prices are to low!\n");
    }else if (medium_total < WIDGET_COST){
        printf("Nick, you are discounting medium purchases too much!\n");
    }else if (large_total < WIDGET_COST){
        printf("Nick, you are discounting large purchases too much!\n");
    }else {
        printf("All prices look good to me!\n");
    }

    printf("Good luck!\n");

    return 0;
}

¿Qué estoy haciendo mal?

Creo que podría ser la forma en que estoy estructurando las declaraciones if: no se producirán correctamente, o dirán que los precios base son demasiado bajos o dirán que todos los precios son buenos, a menos que descarte más de 100 en las compras.

-2
staringblind 6 feb. 2015 a las 22:48

2 respuestas

La mejor respuesta

Reemplazar:

double medium_total = base - medium/100 * base;

Con

double medium_total = base - medium/100.0 * base;

medium es un int lo que significa que medium / 100 es una división entera. Al cambiar 100 a 100.0, se realizará una división de punto flotante.

Lo mismo para la declaración large_total.

0
ouah 6 feb. 2015 a las 19:50

En su código, medium es un int, medium/100 se realiza como una división de enteros, produciendo un 0 para medium < 100. Es por eso que

Todos los precios son buenos, a menos que haga un descuento de más de 100 en las compras.

Para evitarlo, use un yeso, como

double medium_total = base - ((double)medium)/100 * base;

O escriba 100 como 100.0 para aplicar una división de punto flotante.

Caso similar en large/100 también.

0
Sourav Ghosh 6 feb. 2015 a las 20:02