Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Progama de descuentos

Estas en el tema de Progama de descuentos en el foro de C/C++ en Foros del Web. Buenas noches tengo un problemilla con el siguiente programa. En una tienda efectúan un descuento a los clientes dependiendo del monto de la compra. El ...
  #1 (permalink)  
Antiguo 17/09/2008, 19:59
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 0
Progama de descuentos

Buenas noches tengo un problemilla con el siguiente programa. En una tienda efectúan un descuento a los clientes dependiendo del monto de la
compra. El descuento se efectúa con base en el siguiente criterio:
a. Si el monto es menor que Q.500.00, no hay descuento e indíqueselo al
usuario.
b. Si el monto está comprendido entre Q.500.00 y Q.1000.00 inclusive, el
5% de descuento.
c. Si el monto está comprendido entre Q.1000.00 y Q.7000.00 inclusive, el
11% de descuento.
d. Si el monto está comprendido entre Q.7000.00 y Q.15000.00 inclusive,
el 18% de descuento.
e. Si el monto es mayor a Q.15000.00, el descuento e del 30% de descuento
si es fin de semana, en caso contrario es del 25%.
Todos los descuentos habrán de notificarse al usuario.quisiera ver si ustedes me pueden ayudar a resolverlo me da un error con el ultimo else.

Mi estructura esta de esta manera

/*El programa calcula el descuento por compra basado en el monto de la misma*/

#include<stdio.h>
#include<math.h>
main()
{
printf("\n El programa calcula el descuento de la compra de un cliente");
printf("\ El descuento es deacuerdo al monto de la compra");

float Compra, Descuento, Resultado;

printf("Ingrese el monto de la compra");
scanf("%f",&Compra);

if (Compra<500)
{
Resultado = Compra;
printf("\n El monto de su compra es de: %7.2f", Resultado);
printf("\n Su compra no aplica para descuento");
}
else
{
if ((Compra>=500)&&(Compra<=1000))
{
Descuento = Compra * 0.05;
Resultado = Descuento - Compra;
printf("\n El monto de su compra es de: %7.2f",Resultado);
printf("\n Su ahorro es de Q. %7.2f",Descuento);
}
else
{
if ((Compra>=1001)&&(Compra<=7000))
{
Descuento = Compra * 0.11;
Resultado = Descuento - Compra;
printf("\n El monto de su compra es de: %7.2f",Resultado);
printf("\n Su ahorro es de Q. %7.2f",Descuento);
}
else
{
if ((Compra>=7001)&&(Compra<=15000));
{
Descuento = Compra * 0.18;
Resultado = Descuento - Compra;
printf("\n El monto de su compra es de: %7.2f",Resultado);
printf("\n Su ahorro es de Q. %7.2f",Descuento);
}
else
{
while (Compra>15001)
{
Descuento = Compra * 0.25;
Resultado = Descuento - Compra;
printf("\n El monto de su compra es de: %7.2f",Resultado);
printf("\n Su ahorro es de Q. %7.2f",Descuento);
}
}
}
}
}



return 0;

}
  #2 (permalink)  
Antiguo 17/09/2008, 20:58
Avatar de antoniog  
Fecha de Ingreso: junio-2006
Mensajes: 118
Antigüedad: 17 años, 10 meses
Puntos: 4
Mensaje Respuesta: Progama de descuentos

Hola,

Seria bueno que pusieras el error que te marca.

Lo que si es que el error te lo marca por un erro con las llaves {}, te equivocaste por ahi.

Notas para tu codigo:
  • Estas dejando fuera valores de compra como 1000.5 (Compra es de tipo float), debes poner (Compra>=1000) en lugar de (Compra>=1001)!
  • podrias ahorrarte condiciones en los ifs que pones
    por ejemplo
    Código:
    if (Compra<500)
       {
       }
    else
       {
       if ((Compra>=500)&&(Compra<=1000))
       :
       }
    
    Nota que la parte en rojo ya no tiene porque ir, ya que si no cumplio la condicion del primer if es porque Compra es >= 500, asi que tu codigo quedaria algo como asi:
    Código:
    if (Compra<500)
       {
       }
    else
       {
       //aqui ya sabemos que compra es >=500
       if (Compra<=1000)
       :
       }
    
  • Poner codigo con tanto if y else confunde (como en tu caso), podrias tener una variable auxiliar que te indique el tipo de descuento y ya luego usar un switch para ejecutar el codigo correspondiente al descuento, o sea, algo como asi:
    Código:
    int tipodescuento;
    
    if(condicion1)
       tipodescuento=0;
    else
       {
       if (condicion2)
          tipodescuento=1;
        else
           {
           if (condicion2)
              tipodescuento=2;
            else
           :
           :
           }
       }
    
    y luego el switch:
    Código:
    switch(tipodescuento){
    case 0://codigo para el descuento 0
                break;
    case 1://codigo para el descuento 1
                break;
            :
        }
    
    pienso que asi quedaria mas claro el codigo.

Si solo quieres quitar ese error, pues solo busca donde te equivocaste al poner las llaves {} en tu codigo, te sugiero que indentes el codigo para mas claridad.

Saludos
__________________
Mis pininos en blogs: prog en C, cursos

Última edición por antoniog; 25/10/2009 a las 13:12
  #3 (permalink)  
Antiguo 17/09/2008, 21:46
 
Fecha de Ingreso: septiembre-2008
Mensajes: 22
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Progama de descuentos

pos la verdad descubri el error como tu me habias dicho eran en una de las llaves y ya me corrio el programa ahora solo me queda el problema del descuento que ves en el ultimo inciso para el descuento si es en fin de semana...
si no es mucha molestia.....

saludos cordiales.....
  #4 (permalink)  
Antiguo 18/09/2008, 10:40
Avatar de antoniog  
Fecha de Ingreso: junio-2006
Mensajes: 118
Antigüedad: 17 años, 10 meses
Puntos: 4
Respuesta: Progama de descuentos

Hola,

Primero, no se para que pusiste un while en la ultima opcion :D

Bueno, y para saber que dia de la semana , usa la libreria time.h:
http://es.wikipedia.org/wiki/Time.h

Aqui un ejemplo de su uso:
Código:
#include<time.h>
#include<stdio.h>

int main(void)
{
  time_t timer;
  struct tm *time_struct;

  timer=time(NULL);

  time_struct=localtime(&timer);

  printf("El dia de la semana es %d.\n",time_struct->tm_wday);
  return 0;
}
1 es Lunes, 2 martes, 3 miercoles, etc, Entonces para saber si es fin de semana solo debes ver si time_struct->tm_wday es 6 o 7 (sabado o domingo).

Saludos
__________________
Mis pininos en blogs: prog en C, cursos

Última edición por antoniog; 25/10/2009 a las 13:18
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:52.