ayuda soy nuevo en esto me podrian ayudar nc como comenzar este problema

Iniciado por estebanxdx, 23 Noviembre 2017, 04:35 AM

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

estebanxdx

Promoción con descuento desarrollo en C 
El supermercado Pitón Market ha lanzado una promoción para todos sus clientes que posean la tarjeta Raw Input. La promoción consiste en aplicar un descuento por cada n productos que pasan por caja.
El primer descuento es de 20%, y se aplica sobre los primeros n productos ingresados. Luego, cada descuento es la mitad del anterior, y es aplicado sobre los siguientes n productos.
Por ejemplo, si n = 3 y la compra es de 11 productos, entonces los tres primeros tienen 20% de descuento, los tres siguientes 10%, los tres siguientes 5%, y los dos últimos no tienen descuento.
Escriba un programa que pida al usuario ingresar n y la cantidad de productos, y luego los precios de cada producto. Al final, el programa debe entregar el precio total, el descuento total y el precio final después de aplicar el descuento.
Si al aplicar el descuento el precio queda con decimales, redondee el valor hacia abajo.
n: 3
Cantidad productos: 8
Precio producto 1: 400
Precio producto 2: 800
Precio producto 3: 500
Precio producto 4: 100
Precio producto 5: 400
Precio producto 6: 300
Precio producto 7: 200
Precio producto 8: 500
Total: 3200
Descuento: 420
Por pagar: 2780

estebanxdx

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

float Compra, Descuento, Resultado;

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

if (Compra100)
{
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>=100)&&(Compra<=200))
{
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>=300)&&(Compra<=400))
{
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>=500)&&(Compra<=800));
{
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);
}
{
while (Compra>800)
{
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;

}

dijsktra

Un problema bonito, si señor...7 variables! 3 entrada, 2 de salida, y dos locales...

La clave está en como formalizamos en aritmética, que "si tengo 5 productos" y me exigen lotes de 3 para aplicar el descuento, el 4 o el 5 no tienen descuento. Eso es lo que hace con el chorizo :xD de


\chi((i+(pck-1)-i%pck))<N)

Si voy por el 5 producto (i=4), con lotes de 3  (pck=3) entonces 4+(3-1)-(4%3) = 6 -1 >= 5=N , o sea, "se sale del array"...

Por otro lado, hay que ir actualizando el descuento cada "pack" unidades a la mitad, de ahi que multipliquemos por 2 a disc cada "pack" veces en el cuerpo del for.



#include <iostream>

using namespace std;
/*

 let \chi(true)=1 \chi(false)=0

 P : V[0..N) of nat  0<pck
 Q : T = \sum i : 0 <= i < N : V[i]
     D = \sum i : 0 <= i < N  : \chi((i+(pck-1)-i%pck))<N)*V[i]/(5*2^(i/pck)) *

     * Informaly,
        chunk \chi(...) expresses condition
        for applying discount 0 or 1

  I  : Q[N/n] and 0 <= n <= N and
       disc = (5*2^n)  (efficiency reasons.)
  B  : n < N
  C(N-n) = N-n >= 0

*/

void discount(const int V[], const int N, const int pck,
             int &T, int &D)
{
 int n,disc;
 for(n=T=D=0, disc=5;n<N;n++)
   {
     T += V[n];
     D += ((n+(pck-1)-(n%pck))<N)*V[n]/disc;
     disc *=((n+1)%pck)?1:2;
   }
 return;
}

#define MAX 1000
int main()
{
 int V[MAX] ;
 int n,N ;
 int pck;
 int T,D;
 cin >> pck;
 cin >> N;
 for(int n=0; n<N; n++) cin >> V[n];
 discount(V,N,pck,T,D);
 cout << T << " " << D << " " << (T-D) << endl;
 return 0;
}


El ejemplo reproducido que se daba

3
8
400 800 500 100 400 300 200 500


Da como salida

3200 420 2780

Si en cambio, decidimos que hay que tener un minimo de 9 productos para aplicar el descuento...


9
8
400 800 500 100 400 300 200 500


Entonces, no hay descuento, como era de esperar

3200 0 3200

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)