Ayuda programa c++

Iniciado por mikemikemike, 5 Mayo 2010, 08:12 AM

0 Miembros y 2 Visitantes están viendo este tema.

mikemikemike

Hola, el ejercico es este:

3.   La empresa "QQ S.A." le contrato para desarrollar una aplicación, que despliegue por pantalla el detalle de billetes que tiene que dar un establecimiento comercial a un cliente cuando este llega a cambiar un monto dado, la denominación de los billetes es (35 pts):

•   Billete de 20.000
•   Billete de 10.000
•   Billete de 5.000
•   Billete de 2.000
•   Billete de 1.000

Por lo tanto le módulo deberá de leer por pantalla  un monto múltiplo de 1.000, por ejemplo si se lee por pantalla 46.000, debe de desplegar:

•   2 billetes de 20.000
•   1 billete de 5.000
•   1 billete de 1.000

este es mi humilde avance, pero a la hora de correrlo, no me realiza ningun calculo...

#include "conio.h"
#include "stdio.h"
void main()
{
int b1,b2,b5,b10,b20,m,a,b,c,d,e;
clrscr();
while (m%1000==0);
printf("DIGITE EL MONTO: ");
scanf("%d",&m);
do
{
b20=20000;
b10=10000;
b5=5000;
b2=2000;
b1=1000;
a==m%b20;
b==m%b10;
c==m%b5;
d==m%b2;
e==m%b1;
}
while (m==0);
printf("El total de billetes de 20.000 :\n", a );
printf("El total de billetes de 10.000 :\n", b );
printf("El total de billetes de 5.000 :\n", c );
printf("El total de billetes de 2.000 :\n", d );
printf("El total de billetes de 1.000 :\n", e );

getch();
}

y este es otro con cambios, pero el problema persiste...


#include "conio.h"
#include "stdio.h"
void main()
{
int b1,b2,b5,b10,b20,m,a,b,c,d,e;
clrscr();
while (m%1000==0);
printf("DIGITE EL MONTO: ");
scanf("%d",&m);
do
{
b20=20000;
b10=10000;
b5=5000;
b2=2000;
b1=1000;
m%b20==a;
m%b10==b;
m%b5==c;
m%b2==d;
m%b1==e;
}
while (m==0);
printf("El total de billetes de 20.000 :\n", a );
printf("El total de billetes de 10.000 :\n", b );
printf("El total de billetes de 5.000 :\n", c );
printf("El total de billetes de 2.000 :\n", d );
printf("El total de billetes de 1.000 :\n", e );

getch();
}


Agradezco me expliquen por que no sirve el codigo, gracias!!!!!!






mikemikemike

Este es el codigo que voy depurando... pero igual esta malo, por favor ayuda!!

#include "conio.h"
#include "stdio.h"

void main()
{
int b1,b2,b5,b10,b20,m,a,b,c,d,e;
clrscr();

printf("DIGITE EL MONTO: ");
scanf("%d",&m);

a=m%20000;
b=m%10000;
c=m%5000;
d=m%2000;
e=m%1000;

printf("El total de billetes de 20.000 :%d", a );
printf("\n");
printf("El total de billetes de 10.000 :%d", b );
printf("\n");
printf("El total de billetes de 5.000 :%d", c );
printf("\n");
printf("El total de billetes de 2.000 :%d", d );
printf("\n");
printf("El total de billetes de 1.000 :%d", e );

getch();
}






Akai

En el primero que pusiste, tenias mal las asignaciones.

En C se asigna de la siguiente manera
variable= operación

es decir a= 2+3, no 2+3 =a

Por otro lado, el programa realiza cálculos errones, Me explico:
la operación % te devuelve el resto de a/b, no el cociente. Para ello, al tratarse de enteros, deberías usar la división, no el modulo (%).

comentarios a parte: las librerias como conio y stdio, se incluyen con <> no con " ". Void main es una mala costumbre, lo mismo que usar conio.h

Además en el programa no queda demasiado claro si lo que quieres es uqe te muestre cuantos billetes necesitas para X cantidad segun el billete (teniendo siempre la misma cantidad), o la distribución en billetes de esa cantidad de forma que cuando distribuyas el billete anterior, el "monto" disminuya, me explicaré con un ejemplo:

a)

330 en billetes de 500 =0
330 en billetes de 200 =1
330 en billetes de 100 =3
330 en billetes de 50 =6
330 en billetes de 20 =16
330 en billetes de 10 =33

o por el contrario:

b)
330 dividido en:
1 billete de 200
1 billete de 100
1 billete de 20
1 billete de 30.

ambos se hacen cosas muy distintas.

mikemikemike

#3
gracias, voy a hacer algunas de las correcciones, como puedes ver soy muy novato...  Sin embargo, seguire avanzando!!

Lo que necesito es que el programa me indique que billetes debo utilizar, para no utilizar todos los billetes de un mismo tipo.

Por ejemplo; si me despliega la suma de 57.000, el programa deberia desplegar:

2 billetes de 20.000
1 billete de 10.000
1 billete de 5.000
1 billete de 2.000
1 billete de 1.000

la suma de lo anterior seria 57.000, eso es lo que necesito!

gracias y ahi seguire enviando los avances...

mikemikemike

#4
el programa coreecto queda asi!!!!!!!

Muchas gracias por la ayuda!!!

#include "conio.h"
#include "stdio.h"
void main()
{
int m, b1,b2,b5,b10,b20,a,b,c,d,e;
clrscr();

printf("DIGITE EL MONTO EN MULTIPLOS DE 1000: ");
scanf("%d",&m);


b20=20000;
a=m/b20;
if (m%b20==0)
printf("El total de billetes de 20.000 :%d", a );
m=m-a*b20;
printf("\n");

b10=10000;
b=m/b10;
if (m%b10==0)
printf("El total de billetes de 10.000 :%d", b );
m=m-b*b10;
printf("\n");

b5=5000;
c=m/b5;
if (m%b10==0)
printf("El total de billetes de 5.000 :%d", c );
m=m-c*b5;
printf("\n");

b2=2000;
d=m/b2;
if (m%b10==0)
printf("El total de billetes de 2.000 :%d", d );
m=m-d*b2;
printf("\n");

b1=1000;
e=m/b1;
if (m%b10==0)
printf("El total de billetes de 20.000 :%d", e );
m=m-e*b1;
printf("\n");

printf("El total de billetes de 20.000 :%d", a );
printf("\n");
printf("El total de billetes de 10.000 :%d", b );
printf("\n");
printf("El total de billetes de 5.000 : %d", c );
printf("\n");
printf("El total de billetes de 2.000 : %d", d );
printf("\n");
printf("El total de billetes de 1.000 : %d", e );
printf("\n");

getch();
}






Akai

utiliza el boton editar en vez de doble post

Volviendo a tu problema.

No se trata de calcular todos los billetes, se trata de calcular el primero, y segun el numero de billetes que has calculado de esa cantidad, restas el dinero que representan esos billetes, y luego lo mismo con la siguiente cantidad, y así...

Mr.Blue

#6
sabes usar digrama de flujo ? talves asi lo entiendas mejor para empezar
lo q haces mal ahi es que en los if estas calculando m por separado, entonces el programa lo que hace es calcular por separado 25000 (m) de a billetes de 20000
(25000)m de a billetes de 10000 etc,
igualmente esta mal pensado aca
Código (cpp) [Seleccionar]
a=m/b20;
if (m%b20==0)
printf("El total de billetes de 20.000 :%d", a );
printf("\n");
        (usa para poner codigo c++ asi vemos bien el codigo)

ahi lo q hace es:  25000/20000= 20*1=20 --> resto=5
haces un if (m%b20==0)  --> //calculas el resto y preguntas si es igual a cero como ves arriba el resto es igual a 5 que bueno en la divicion simplificas los ceros no, osea q 5 es igual a 5000 y 20*1 te esta indicando que es uno de 20000 y q sobran 5=5000//
como la condicion ==0 no se cumple sale del if entonces no hay billetes de 20000
y ahi ya tenemos un error si seguimos para abajo pasa lo mismo

para q no te pase de q te calcula por separado
una pista es usar if anidados
if (condicon)
  if (condicion)
  else
else
    if (condicion)
    else

Mr.Blue

Código (cpp) [Seleccionar]
#include "conio.h"
#include "stdio.h"
void main()
{
int m, b1,b2,b5,b10,b20,a,b,c,d,e;
clrscr();
b10=10000;
b20=20000;
b5=5000;
b2=2000;
b1=1000;

printf("DIGITE EL MONTO EN MULTIPLOS DE 1000: ");
scanf("%d",&m);

if (m%1000==0) {
a=m/b20;
b=m%b20;
printf ("\ncant 20000=%d",a);
if (b>=10000){
b=b/b10;
c=b%b10;
printf ("\ncant de 10000=%d",b);
}
if (b>=5000||c>=5000){
b=c/b5;
d=b%b5;
printf ("\ncant de 5000=%d", b);
}
if (b>=2000||d>=2000){
b=d/b2;
e=b%b2;
printf ("\ncant de 2000=%d",b);
}
if(b>=1000||e>=1000) {
b=e/b1;
printf ("\ncant de 1000=%d",b);
}
}else printf ("\nel valor ingresado no es multiplo de 1000:");
getch();
}




aca te dejo una posible solucion por ahi tiene algunos errores Acepto comentarios :xD