Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Legnak en 23 Julio 2013, 17:44 pm



Título: Ayuda con algoritmo de suma de octales
Publicado por: Legnak en 23 Julio 2013, 17:44 pm
Hola, me han mandado a hacer un algoritmo de suma de octales, sé que en Java simplemente con el Integer.parseInt todo se hace muy fácil, pero el profesor me ha dicho que quiere todo a pie ._., por tanto no puedo usar esa función, esto es lo que llevo hecho de ese algoritmo, pero de momento solo me suma pequeñas cifras, espero puedan ayudarme a mejorar este código

Código
  1. package programa;
  2.  
  3. import java.util.Scanner;
  4.  
  5.  
  6. public class Programa {
  7.  
  8.  
  9.    static int a, b;
  10.    public static void main(String[] args)
  11.    {  
  12.       Scanner leer = new Scanner(System.in);
  13.  
  14.       System.out.println("Introduzca el primer octal");
  15.       String valor = leer.nextLine();
  16.       try
  17.       {
  18.            int valord = Integer.parseInt(valor, 8 );
  19.       }
  20.       catch (NumberFormatException e)
  21.       {
  22.           System.out.println("El primer número debe ser octal");
  23.       }
  24.  
  25.       System.out.println("Introduzca el segundo octal");
  26.       String valorb = leer.nextLine();
  27.  
  28.       try
  29.       {
  30.  
  31.            int valordb = Integer.parseInt(valorb, 8 );
  32.       }
  33.       catch (NumberFormatException e)
  34.       {
  35.           System.out.println("El segundo número debe ser octal");
  36.       }
  37.       String res = "";
  38.       int val;
  39.       int mayor = valor.length() >  valorb.length() ? valor.length() : valorb.length();
  40.       int acarreo = 0;
  41.       boolean seguir = true;
  42.       for (int cont = mayor-1; cont >= 0; cont--)
  43.       {
  44.           val = 0;
  45.           try
  46.           {
  47.               a = Character.getNumericValue(valor.charAt(cont));
  48.  
  49.           }
  50.           catch (StringIndexOutOfBoundsException e)
  51.           {  
  52.                a  = 0;
  53.                seguir = false;
  54.  
  55.           }
  56.  
  57.           try
  58.           {
  59.  
  60.               b = Character.getNumericValue(valorb.charAt(cont));
  61.  
  62.  
  63.            }
  64.           catch (StringIndexOutOfBoundsException e)
  65.           {  
  66.                b = 0;
  67.                seguir = false;
  68.  
  69.           }
  70.  
  71.  
  72.  
  73.               val = a + b;
  74.               if (acarreo > 0)
  75.               {  
  76.                  val += acarreo;
  77.                  acarreo = 0;
  78.               }
  79.               if (val >= 10)
  80.                  acarreo =  val/10;
  81.  
  82.               if (val > 7)
  83.  
  84.                      val -= 8;
  85.  
  86.                 res += val;
  87.  
  88.  
  89.  
  90.               if (!seguir)
  91.               {
  92.                   if (val > 0) res += val;
  93.                   else if (acarreo > 0) res += val;
  94.               }
  95.  
  96.  
  97.       }    
  98.  
  99.  
  100.       res = new StringBuffer(res).reverse().toString();
  101.       System.out.println(res);
  102.  
  103.    }
  104. }
  105.  

Saludos y gracias de antemano


Título: Re: Ayuda con algoritmo de suma de octales
Publicado por: Slider324 en 24 Julio 2013, 02:54 am
puedes cambiar:

Código:
leer.nextLine();

Código:
por alguna de esta para ya no necesitar convertir a integer, double etc.. y no usar parse para convertir, para usar numeros grandes te recomiendo double saludos

Código:
leer.nextDouble();
leer.nextInt();
leer.nextFloat();


Título: Re: Ayuda con algoritmo de suma de octales
Publicado por: Legnak en 24 Julio 2013, 03:11 am
hermano lo que pasa es que para validar que sean enteros de 8 bits uso la función Integer.parseInt y esa usa como parámetro un String, así que no tengo opción :xD
gracias por comentar ;D


Título: Re: Ayuda con algoritmo de suma de octales
Publicado por: ~ Yoya ~ en 24 Julio 2013, 18:18 pm
En vez de hacer un código modo hacker, simplemente enfocate en crear dos funciónes. Una que convierta de octal a decimal y otra a decimal a octal. Luego de esos sumar, multiplicar y dividir con octal seria muy facil...

También tienes el método estático valueOf de la clase Integer que hace exactamente lo mismo que parseInt, excepto que este retorna un Wrapper. Pero utilizarlo seria un insulto hacia al profesor jejeje, seguro te hecha xD.

Saludos.


Título: Re: Ayuda con algoritmo de suma de octales
Publicado por: Legnak en 27 Julio 2013, 04:09 am
el problema es que el profesor quiere que la suma sea "a pie", con el asunto del acarreo y eso D:


Título: Re: Ayuda con algoritmo de suma de octales
Publicado por: Legnak en 27 Julio 2013, 04:24 am
ya le he avanzado, el bug que tiene por el momento es que no puedo sumar dos números de distintas cifras, acá lo dejo por si alguien me quiere ayudar  :silbar:


Código
  1. public String sumar(String valor, String valorb)
  2.    {
  3.  
  4.        int a, b;
  5.        String res = "";
  6.       int val = 0;
  7.       int recorrido = valor.length() >  valorb.length() ? valor.length() : valorb.length();
  8.  
  9.       int acarreo = 0;
  10.  
  11.       for (int cont = recorrido-1; cont >= 0; cont--)
  12.       {
  13.  
  14.           val = 0;
  15.           try
  16.           {
  17.               a = Character.getNumericValue(valor.charAt(cont));
  18.  
  19.           }
  20.           catch (StringIndexOutOfBoundsException e)
  21.           {  
  22.  
  23.                a  = 0;
  24.  
  25.  
  26.           }
  27.  
  28.           try
  29.           {
  30.  
  31.               b = Character.getNumericValue(valorb.charAt(cont));
  32.  
  33.  
  34.            }
  35.           catch (StringIndexOutOfBoundsException e)
  36.           {  
  37.                b = 0;
  38.  
  39.           }
  40.  
  41.  
  42.               val = a + b;
  43.  
  44.  
  45.               if (acarreo > 0)
  46.               {
  47.                   val += acarreo;
  48.                   acarreo = 0;
  49.               }
  50.  
  51.  
  52.  
  53.               if (val > 7)
  54.               {
  55.                  acarreo = 1;
  56.                   val -= 8 ;
  57.               }
  58.  
  59.                 res += val;
  60.  
  61.  
  62.       }    
  63.  
  64.  
  65.       if (acarreo > 0)
  66.       {
  67.            res = res + "" + acarreo ;
  68.       }
  69.  
  70.     res  = new StringBuffer(res).reverse().toString();
  71.        return res;
  72.    }


Título: Re: Ayuda con algoritmo de suma de octales
Publicado por: Legnak en 27 Julio 2013, 05:36 am
listo, ya lo terminé  >:D