Tengo un problema con eclipse

Iniciado por JackFiresoul, 2 Octubre 2011, 01:39 AM

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

JackFiresoul

bueno tngo un problema con la ejecucion de un programa que he echo y no consigo solucionarlo. Si alguien me puede ayudar se lo agradeceria mucho, llevo como una semana pensando en esto y no hay manera (tambien es cierto que llevo usando eclipse solo unas 2 semanas y que antes no he tocado programacion para nada).
Bueno aqui esta el codigo del programa:



/*Realizar un programa, que proporcionando una cantidad de euros, te diga cual es la menor cantidad de billetes y monedas que se debe usar para cubrir dicha cantidad de euros*/
public class ejercicio_1 {   

      public static void main(String[] args) {   
   
      double x = 888.88/*cantidad de euros proporcionada*/, z, e, c;
      z= x-(int)x;
      e = (int) x;
      c = z * 100;      
      
      int a1, a2, b1, b2, c1, c2, d1, d2, e1, e2, f1, f2, g1, g2, h1, h2, i1;
      a1 = (int) e / 500;
      a2 = (int) e % 500;
      b1 = a2 / 200;
      b2 = a2 % 200;
      c1 = b2 / 100;
      c2 = b2 % 100;
      d1 = c2 / 50;
      d2 = c2 % 50;
      e1 = d2 / 20;
      e2 = d2 % 20;
      f1 = e2 / 10;
      f2 = e2 % 10;
      g1 = f2 / 5;
      g2 = f2 % 5;
      h1 = g2 / 2;
      h2 = g2 % 2;
      i1 = h2 / 1;
     //billetes y monedas de euro

      int j1, j2, k1, k2, l1, l2, m1, m2, n1, n2, ñ;
      j1 = (int) c / 50;
      j2 = (int) c % 50;
      k1 = j2 / 20;
      k2 = j2 % 20;
      l1 = k2 / 10;
      l2 = k2 % 10;
      m1 = l2 / 5;
      m2 = l2 % 5;
      n1 = m2 / 2;
      n2 = m2 % 2;
      ñ = n2 / 1;
      //centimos

      System.out.println("en " + x + " euros hay:");
      System.out.println(a1 + " billetes de 500€");
      System.out.println(b1 + " billetes de 200€");
      System.out.println(c1 + " billetes de 100€");
      System.out.println(d1 + " billetes de 50€");
      System.out.println(e1 + " billetes de 20€");
      System.out.println(f1 + " billetes de 10€");
      System.out.println(g1 + " billetes de 5€");
      System.out.println(h1 + " monedas de 2€");
      System.out.println(i1 + " monedas de 1€");
      System.out.println(j1 + " monedas de 50 cent");
      System.out.println(k1 + " monedas de 20 cent");
      System.out.println(l1 + " monedas de 10 cent");
      System.out.println(m1 + " monedas de 5 cent");
      System.out.println(n1 + " monedas de 2 cent");
      System.out.println("y " +ñ +" monedas de 1 cent");
   }

}



y aqui esta el resultado:



en 888.88 euros hay:
1 billetes de 500€
1 billetes de 200€
1 billetes de 100€
1 billetes de 50€
1 billetes de 20€
1 billetes de 10€
1 billetes de 5€
1 monedas de 2€
1 monedas de 1€
1 monedas de 50 cent
1 monedas de 20 cent
1 monedas de 10 cent
1 monedas de 5 cent
1 monedas de 2 cent
y 0 monedas de 1 cent


como veis me quita un centimo, pero eso solo pasa con algunas cifras, por ejemplo, con 888,70, me lo da bien, y me gustaria solucionar el problema, por favor ayudarme o me volvere loco.

Pd: creo que el problema esta en el redondeo de decimales, que no lo haga bien tras la separacion de la parte entera y la decimal.

Muchas gracias por adelantado

JackFiresoul

una cosa, acabo de leer unos temas y me he dado cuenta que, no he puesto de mi parte al poner, por ejemplo "a1" en vez de "quinientos" en el "int" y en el resto de las cosas, y tambien siento no haber enmarcado los codigos y los resultados, pero es que no se como hacerlo y tampoco se como hacer que dandole por ejemplo pestaña (codigo) aparezca el codigo, (para asi reducir el tamaño del mensaje).

markosliveup

estoy tan aburrido que me puse a verlo jaja

mira el problema creo (pobre un solo numero) es que en la parte en que asignas el valor a n1, m2 vale 2. Entonces en la asinacion de n2 cuando calcula el resto da 0. tendrias que dividir..

JackFiresoul

El caso es que me da el mismo problema si pongo,por ejemplo: x=#.80

(Pongo # porque la parte euro no me da errores sin importar la cifra)

En el caso de #.80, me pone una de 50 cent, una de 20 cent, (se salta la de 10 cent) y me pone una de 5 cent y 2 de 2 cent
En total 79 cent en vez de 80, y hay el resto no llega a ser igual a 2, y de todos modos m2 en el caso anterior valia 3, el resto de 8/5 es 3 o al menos eso deberia dar si hacemos todas las cuentas a mano, con esas mismas variables, asi que creo que el problema esta en z=x-(int)x, que no da los decimales que aparecen sino por ejemplo, 0.87999999955, en ese caso la variable c es 87 en vez de 88 como deberia ser y hay esta la raiz del problema, creo, pero el caso es que no se como solucionarlo si me podeis ayudar a solucionarlo estaria eternamente

agradecido con el que me haya ayudado

de todas formas muchas gracias por el intento XD

s00rk

#4
Bueno aqui te dejo un codigo que hice hace tiempo para esto, llamado morraya o asi le decimos aca jeje

Código (java) [Seleccionar]

public class MORRAYA
{
public static void main(String[] args)
{
  String nombre = read.data("Empleado:");
  int pago = read.dataInt("Total a Pagar:");
  String [] m = morraya0(pago);
  imprimir(nombre,pago,m);
}
 
private static String[] morraya0(int pago)
{
  int[] c = {1000,500,200,100,50,20,10,5,2,1};
  String[] m = new String[c.length];
  int resto = 0;
  for(int d=0;d<c.length;d++)
  {
   resto = (int)pago/c[d];
   m[d] = resto + " Billetes de $" + c[d] + ".00";
   pago = pago-(resto*c[d]);
  }
  return m;
}
 
private static void imprimir(String nombre,int pago,String[] m)
{
  System.out.println("PARA PAGARLE A " + nombre + " $" + pago + " SE NECESITA:");
  for(String s:m)
   System.out.println(s);
}
}


Espero te sirva si aun no logras darte de una idea de como adaptarlo a tu codigo ahi avisas y te hecho una mano n_n

Saludos!

P.D. En mi codigo puse que todos son billetes, aunque claro no hay billetes de 10,5,2,1 xD ahi solo hacemos una comprobacion antes de agregar el mensaje al vector jeej y ya ponemos moneda en vez de billetes xD

JackFiresoul

muchas gracias, s00rk
no se si el codigo me funcionara, pues antes de mirar el foro de nuevo se me ha ocurrido una forma usando las pocas herramientas que aunque seguramente mi codigo sea mucho mas largo que el tuyo XD

bueno aqui esta ( he cambiado las variables para que sean mas facieles de entender XD):
Citar
/*Realizar un programa, que proporcionando una cantidad de euros, te diga cual es la menor cantidad de billetes y monedas que se debe usar para cubrir dicha cantidad de euros*/

public class ejercicio_1 {
   
      public static void main(String[] args) {
      
      double x = 888.88, z, e, c;
      z= x-(int)x;
      e = (int) x;
      c = z * 100;
      
      
      int quinientos1, quinientos2, doscientos1, doscientos2, cien1, cien2, cincuenta1, cincuenta2, veinte1, veinte2, diez1, diez2, cinco1, cinco2, dos1, dos2, uno1;
      quinientos1 = (int) e / 500;
      quinientos2 = (int) e % 500;
      doscientos1 = quinientos2 / 200;
      doscientos2 = quinientos2 % 200;
      cien1 = doscientos2 / 100;
      cien2 = doscientos2 % 100;
      cincuenta1 = cien2 / 50;
      cincuenta2 = cien2 % 50;
      veinte1 = cincuenta2 / 20;
      veinte2 = cincuenta2 % 20;
      diez1 = veinte2 / 10;
      diez2 = veinte2 % 10;
      cinco1 = diez2 / 5;
      cinco2 = diez2 % 5;
      dos1 = cinco2 / 2;
      dos2 = cinco2 % 2;
      uno1 = dos2 / 1;
      int cincuenta3, cincuenta4, veinte3, veinte4, diez3, diez4, cinco3, cinco4, dos3, dos4, uno2;
      
      cincuenta3 = (int) c / 50;
      cincuenta4 = (int) c % 50;
      veinte3 = cincuenta4 / 20;
      veinte4 = cincuenta4 % 20;
      diez3 = veinte4 / 10;
      diez4 = veinte4 % 10;
      cinco3 = diez4 / 5;
      cinco4 = diez4 % 5;
      dos3 = cinco4 / 2;
      dos4 = cinco4 % 2;
      uno2= dos4/ 1;
      System.out.println("en " + x + " euros hay:");
      double j3,k3,l3,m3,n3,ñ2, ñ1;
      j3=cincuenta3;k3=veinte3;l3=diez3;m3=cinco3;n3=dos3;ñ2=uno2;
      ñ1=((j3*50)+(k3*20)+(l3*10)+(m3*5)+(n3*2)+(ñ2*1))/100;
      if ((ñ1+e)<x){
         x=x+0.01;
         z= x-(int)x;
         c = z * 100;
            
         cincuenta3 = (int) c / 50;
         cincuenta4 = (int) c % 50;
         veinte3 = cincuenta4 / 20;
         veinte4 = cincuenta4 % 20;
         diez3 = veinte4 / 10;
         diez4 = veinte4 % 10;
         cinco3 = diez4 / 5;
         cinco4 = diez4 % 5;
         dos3 = cinco4 / 2;
         dos4 = cinco4 % 2;
         uno2 = dos4 / 1;
         }
      else{}
      
      System.out.println(quinientos1 + " billetes de 500€");
      System.out.println(doscientos1 + " billetes de 200€");
      System.out.println(cien1 + " billetes de 100€");
      System.out.println(cincuenta1 + " billetes de 50€");
      System.out.println(veinte1 + " billetes de 20€");
      System.out.println(diez1 + " billetes de 10€");
      System.out.println(cinco1 + " billetes de 5€");
      System.out.println(dos1 + " monedas de 2€");
      System.out.println(uno1 + " monedas de 1€");
      System.out.println(cincuenta3 + " monedas de 50 cent");
      System.out.println(veinte3 + " monedas de 20 cent");
      System.out.println(diez3 + " monedas de 10 cent");
      System.out.println(cinco3 + " monedas de 5 cent");
      System.out.println(dos3 + " monedas de 2 cent");
      System.out.println("y " +uno2+" monedas de 1 cent");
   }

}
el resultado de esta forma ya me da bien, he posteado para agradecer la ayuda y para proporcionar alguna ayuda a algun novato como yo que no entienda para que sirven la mitad de las cosas XD