Pascal/Turbo Pascal - Ayuda urgente por favor!

   
Vista:

Ayuda urgente por favor!

Publicado por Matias T. (7 intervenciones) el 30/09/2007 21:39:17
Hola a todos, espero me puedan ayudar con este problema que me está poniendo loco...

Dice: " Dado un conjunto de sueldos a pagar (sin centavos) desarrollar un algoritmo y el programa que determine e imprima cuántos billetes de $100, $50, $20, $10, $5 y cuántas monedas de $1 son necesarios para pagar todos los sueldos y no tener dificultades con el cambio (usando la mínima cantidad de billetes de cada denominación posible).
Nota: El lote finaliza con un sueldo = 0. No se puede utilizar la estructura If..else en la resolución de este ejercicio. "
(Se que hay otros temas similares, pero encontre lo que quise, asi que por favor si me pueden ayudar se los agradezco)

Ahora bien, yo pense en ir sumando, por ejemplo, para un sueldo de $1000, primero 100, despues 50, 20... y asi, en el caso de que me pase del sueldo con un billete de 100, sigo con el de 50 y así hasta llegar a los $1000. ¿Está bien pensado? Si hago 1000 div 100 me dan 10 billetes de $100, pero no uso los otros y no cumplo con el problema...

POR FAVOR ya no se qué más hacer...
Muchas Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda urgente por favor!

Publicado por Alexis (44 intervenciones) el 30/09/2007 22:39:49
buenas tardes. Si sabes desarrollar lo que piensas cualquier cosa es bien pensada....Yo tu ve que hacer uno parecido pero en otro lenguaje...para determinar cuantos billetes de una denominacion necesitas puedes dividir el monto a pagar por la cantidad del billete.

Por ejemplo: si quieres pagar 15.000$ puedes dividir 15.000/5000 y asi obtienes 3...es decir tres billetes de 5.000; o bien divides 15.000/10.000 y eso da 1 o sea 1 billete de 10.000 y lo que te queda entre 5.000 (que es la cantidad menor que le sigue) lo que te va a dar 1 tambien, tendrias entonces 1 billete de 10.000 y uno de 5.000 que suma 15.000....

Para evitar el uso de if...else puedes usar un case () of que es lo mismo solo que con otra estructura mas facil de manejar...Espero haberte ayudado..

Exito
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda urgente por favor!

Publicado por Matias T. (7 intervenciones) el 30/09/2007 23:13:08
Te agradezco por la ayuda, lo que pasa es que tengo que usar si o sí todos los billetes en una mínima cantidad, porque si no en el ejemplo de los $1000, usaría 10 de $100 y problema resuelto, usando todos los billetes seria: 5 de $100, 6 de $50, 6 de $20, 5 de $10, 5 de $5 y 5 de $1, es por eso que pensé en ir sumando de 100, 50, 20 , 10, 5 y 1 y volver a empezar hasta llegar al numero pedido.
Más tarde pondre el código, que seguramente tendra sus errores.
Gracias por la pronta repuesta!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda urgente por favor!

Publicado por Mariano (57 intervenciones) el 30/09/2007 23:17:43
Buenas, mira, lo que planteabas vos esta bien, a lo que se refiere el enunciado con que uses la menor cantidad de billetes de cada denominacion, es que no pagues un sueldo de 1000 con 100 billetes de 10, es decir, que trates de usar la menor cantidad posible de billetes.
El bloque principal del algoritmos seria mas o menos asi:
Ingresar Sueldo
A eso lo dividis por 100 y sabes cuantos billetes de 100 tenes q usar, dps tomas el resto, y lo dividis por 50, y sabes cuantos billetes d 50, dps a ese nuevo resto lo diviids x 20 y asi sucesivamente hasta q lo dividas x 5, y el resto q te qda de dividir x 5, representa la cantidad de monedas de 1 peso que necesitas.
Espero haber sido claro :)

Un abrazoo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda urgente por favor!

Publicado por Matias T. (7 intervenciones) el 01/10/2007 00:19:07
Gracias a ambos por la ayuda, pero saben qué pasa? Si yo divido 1000 por 100 me dan 10 billetes se $100, y listo, me quedo sin usar los otros billetes =(.
Por eso, sumando de a uno llego a que para $1000 necesito 5 billetes de $100, $10, $5 y $1, y 6 de $50 y $20. Se entiende?
Con respecto al código, pense algo asi (sé que está mal pero ¿estoy cerca?):

PROGRAM PagoSueldos;
USES crt;
VAR
S, Suma, C100, C50, C20, C10, C5, C1: integer;

BEGIN
Suma := 0;
C100 := 0;
C50 := 0;
C20 := 0;
C10 := 0;
C5 := 0;
C1 := 0;
REPEAT
WRITE ('Ingrese un sueldo: ');
READ (Sueldo);

WHILE Suma < Sueldo DO
BEGIN
Suma := Suma+100;
C100 := C100+1;
Suma := Suma+50;
C50 := C50+1;
Suma := Suma+20;
C20 := C20+1;
Suma := Suma+10;
C10 := C10+1;
Suma := Suma+5;
C5 := C5+1;
Suma := Suma+1;
C1 := C1+1;
END;

UNTIL Sueldo = 0;
WRITELN('Cantidad de billetes necesarios para pagar los sueldos');
WRITELN('Billetes de $100: ',C100);
WRITELN('Billetes de $ 50: ',C50);
WRITELN('Billetes de $ 20: ',C20);
WRITELN('Billetes de $ 10: ',C10);
WRITELN('Billetes de $ 5: ',C5);
WRITELN('Monedas de $ 1: ',C1);

READKEY;
END.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda urgente por favor!

Publicado por Mariano (57 intervenciones) el 01/10/2007 01:22:08
Ahh, ya entendi lo que necesitas, aca te paso el codigo del programa completo!
Funciona todo bien
Avisame cualquier cosa si tenes algun problema o si te sirvio :)

Program Billetes;
Uses
crt;

Procedure ObtDat(var x:word);
begin
writeln('Ingrese el sueldo: ');
readln(x)
end;

Procedure Emitir(a,b,c,d,e,f:word);
begin
Writeln('La cantidad de billetes de 100 son: ',a);
Writeln('La cantidad de billetes de 50 son: ',b);
Writeln('La cantidad de billetes de 20 son: ',c);
Writeln('La cantidad de billetes de 10 son: ',d);
Writeln('La cantidad de billetes de 5 son: ',e);
Writeln('La cantidad de monedas de 1 son: ',f)
end;

var
Sueldo,c100,c50,c20,c10,c5,c1:word;

begin {bloque principal}
clrscr;
c100:=0;
c50:=0;
c20:=0;
c10:=0;
c5:=0;
c1:=0;
ObtDat(sueldo);
while sueldo >0 do begin
if sueldo div 100 <> 0 then begin
inc(c100);
sueldo:=sueldo - 100
end; {if}
if sueldo div 50 <> 0 then begin
inc(c50);
sueldo:=sueldo-50
end; {if2}
if sueldo div 20 <> 0 then begin
inc(c20);
sueldo:=sueldo-20
end;{if3}
if sueldo div 10 <> 0 then begin
inc(c10);
sueldo:=sueldo-10
end;{if4}
if sueldo div 5 <> 0 then begin
inc(c5);
sueldo:=sueldo-5
end;{if5}
if sueldo div 1 <> 0 then begin
inc(c1);
sueldo:=sueldo-1
end;{if6}
end; {if while}
Emitir(c100,c50,c20,c10,c5,c1);
readln
end.

Un Abrazoo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda urgente por favor!

Publicado por Matias T. (7 intervenciones) el 01/10/2007 01:31:55
Buenisimo! Ahora me fijo si me sirve, cualquier cosa aviso.
Muchas Gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda urgente por favor!

Publicado por Matias T. (7 intervenciones) el 01/10/2007 02:45:35
Mmm, ahora que me fijo... no me sirve, o sea, anda y todo pero... el problema pide resolverlo sin If... ni else =S (que ganas de complicarlo....)
Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda urgente por favor!

Publicado por Matias T. (7 intervenciones) el 01/10/2007 03:03:23
Mmm, ahora que me fijo... no me sirve, o sea, anda y todo pero... el problema pide resolverlo sin If... ni else =S (que ganas de complicarlo....)
Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda urgente por favor!

Publicado por Matias T. (7 intervenciones) el 01/10/2007 04:37:28
Mmm, ahora que me fijo... no me sirve, o sea, anda y todo pero... el problema pide resolverlo sin If... ni else =S (que ganas de complicarlo....)
Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar