Foros del Web » Programación para mayores de 30 ;) » Java »

Transformacion de numero binario a decimal

Estas en el tema de Transformacion de numero binario a decimal en el foro de Java en Foros del Web. Muy Buenas noches! El dia de Hoy he querido compartir con ustedes el codigo de mi sencillo pero util applet en Java! el programa convierte ...
  #1 (permalink)  
Antiguo 25/06/2011, 17:04
 
Fecha de Ingreso: junio-2011
Mensajes: 4
Antigüedad: 12 años, 10 meses
Puntos: 3
Transformacion de numero binario a decimal

Muy Buenas noches!

El dia de Hoy he querido compartir con ustedes el codigo de mi sencillo pero util applet en Java!

el programa convierte un numero binario a decimal como bien dice el titulo, solo que solo es factible de 4 bits, no obstante si se logra entender la idea del programa se puede ampliar hasta 8 bits que seria mucho mas util.

He aqui el Codigo!

Código HTML:
Ver original
  1. import java.awt.*;
  2. import java.applet.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5.  
  6. public class TransBinDec extends Applet implements ActionListener{
  7.    
  8.     private Button A,B,C,D;
  9.     private Color C1 = new Color(198,226,255);
  10.     private Color C2 = new Color(255,255,255);
  11.     private TextField t1;
  12.     private Font TL = new Font("Default",Font.PLAIN,20);
  13.     private String frase1 ="Presione en los botones binarios",frase2="El valor en decimal es";
  14.     private String a1,b1,c1,d1;
  15.     private int bin1,bin2,bin3,bin4,bin5;
  16.    
  17.     public void init(){
  18.        
  19.         t1 = new TextField("0",10);
  20.         t1.setBounds(170,200,150,40);
  21.         t1.setEditable(false);
  22.         t1.setBackground(Color.white);
  23.         t1.setFont( TL );
  24.         add(t1);
  25.         this.setLayout(null);
  26.         this.setSize(500,500);
  27.         setBackground(C1);                          
  28.         A=new Button ("0");          
  29.         A.setBounds(150,100,40,60);                
  30.         A.addActionListener(this);              
  31.         A.setBackground(C2);                    
  32.         add(A);
  33.         a1="0";
  34.         B=new Button("0");                
  35.         B.setBounds(200,100,40,60);          
  36.         B.addActionListener(this);          
  37.         B.setBackground(C2);                
  38.         add(B);
  39.         b1="0";
  40.         C=new Button("0");                
  41.         C.setBounds(250,100,40,60);          
  42.         C.addActionListener(this);          
  43.         C.setBackground(C2);                
  44.         add(C);
  45.         c1="0";
  46.         D=new Button("0");                
  47.         D.setBounds(300,100,40,60);          
  48.         D.addActionListener(this);          
  49.         D.setBackground(C2);
  50.         add(D);
  51.         d1="0";
  52.    
  53.     }
  54.    
  55.     public void paint (Graphics g){
  56.         g.setFont(new Font("TimesRoman", Font.PLAIN, 20));
  57.         g.setColor(Color.black);
  58.         g.drawString(frase1,120,90);
  59.         g.drawString(frase2,150,190);
  60.     }
  61.    
  62.     public void actionPerformed( ActionEvent e){
  63.         if(e.getSource() == A){
  64.             String E=e.getActionCommand();
  65.             if(E.equals("0") ){
  66.                 A.setLabel("1");
  67.                 a1="1";
  68.             }
  69.            
  70.             if(E.equals("1")){
  71.                 A.setLabel("0");
  72.                 a1="0";
  73.             }
  74.         }
  75.        
  76.         if(e.getSource() == B){
  77.             String E=e.getActionCommand();
  78.             if(E.equals("0") ){
  79.                 B.setLabel("1");
  80.                 b1="1";
  81.             }
  82.            
  83.             if(E.equals("1")){
  84.                 B.setLabel("0");
  85.                 b1="0";
  86.             }
  87.         }
  88.        
  89.         if(e.getSource() == C){
  90.             String E=e.getActionCommand();
  91.             if(E.equals("0") ){
  92.                 C.setLabel("1");
  93.                 c1="1";
  94.             }
  95.            
  96.             if(E.equals("1")){
  97.                 C.setLabel("0");
  98.                 c1="0";
  99.             }
  100.         }
  101.        
  102.         if(e.getSource() == D){
  103.             String E=e.getActionCommand();
  104.             if(E.equals("0") ){
  105.                 D.setLabel("1");
  106.                 d1="1";
  107.             }
  108.            
  109.             if(E.equals("1")){
  110.                 D.setLabel("0");
  111.                 d1="0";
  112.             }
  113.         }
  114.         convierte();
  115.     }
  116.    
  117.     public void convierte(){
  118.        
  119.         bin1 = Integer.parseInt(a1)*8;
  120.         bin2 = Integer.parseInt(b1)*4;
  121.         bin3 = Integer.parseInt(c1)*2;
  122.         bin4 = Integer.parseInt(d1)*1;
  123.         bin5=0;
  124.         bin5 = bin1+bin2+bin3+bin4;
  125.         t1.setText(Integer.toString(bin5));
  126.         repaint();
  127.     }
  128. }

Espero poder seguir subiendo nuevos aportes proximamente asiesque esten atentos amigos del web!

Saludos!
  #2 (permalink)  
Antiguo 26/06/2011, 13:31
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Transformacion de numero binario a decimal

Una pregunta, ¿por qué esa manía de reinventar la rueda?¿os parece de ignorantes usar las APIs?

Cita:
Integer.valueOf("111",2)
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 27/06/2011, 14:08
 
Fecha de Ingreso: junio-2011
Mensajes: 4
Antigüedad: 12 años, 10 meses
Puntos: 3
Respuesta: Transformacion de numero binario a decimal

Cita:
Iniciado por Xerelo Ver Mensaje
Una pregunta, ¿por qué esa manía de reinventar la rueda?¿os parece de ignorantes usar las APIs?
La verdad es solo una aplicación sencilla donde mostrar el funcionamiento de metodos para la conversion de numeros binarios a decimales, no es de ignorante, es solo brindar ayuda al que quiere aprender y no tiene una idea clara, pero piensa... que tal si una persona desea inventar su propio codigo alfanumerico por ejemplo... deberia crear sus propios metodos para convertir a otros sistemas ya existentes, entonces esto le sirve como ejemplo o le generara una idea de como hacerlo. Quizas para ti no sea un aporte ya que tienes experiencia, pero hay gente que recien se esta iniciando en el tema y le resultara muy util.

Saludos!
  #4 (permalink)  
Antiguo 28/06/2011, 01:16
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Transformacion de numero binario a decimal

Es estupendo que quieras compartir lo que vas desarrollando, pero en este caso, la verdad, no le veo ninguna utilidad.

No sé, imagínate que a todos nos da por subir trozos de código que hemos hecho, al final esto sería un lío con trozos de código de distintos niveles mezclado con preguntas y dudas. Piensa en compartir aquello que la gente suele preguntar, y cómo convertir a binario con tu método (muy limitado por cierto) no lo es, y más teniendo en cuenta que existe un método que ya lo hace.

Cita:
que tal si una persona desea inventar su propio codigo alfanumerico por ejemplo
Pues que tu método sería completamente ineficiente, por ponerte un ejemplo, para hexadecimal (que también se puede hacer con el método que he puesto) necesitarías 16 if.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 28/06/2011, 22:25
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Transformacion de numero binario a decimal

Hola,

Cita:
Iniciado por Xerelo Ver Mensaje
... Pues que tu método sería completamente ineficiente, por ponerte un ejemplo, para hexadecimal (que también se puede hacer con el método que he puesto) necesitarías 16 if. ...
Exactamente, y agregando algo más, la programación en Java es muy diferente a otros lenguajes, está orientada a objetos, por lo que los métodos son mucho más eficientes que la programación procedural y secuencial. Por ejemplo, el mismo programa pero usando las herramientas que te provee Java,

Código Java:
Ver original
  1. import java.awt.Component;
  2. import java.awt.FlowLayout;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5.  
  6. import javax.swing.JApplet;
  7. import javax.swing.JButton;
  8. import javax.swing.JPanel;
  9. import javax.swing.JTextField;
  10.  
  11. public class TransBinDec extends JApplet implements ActionListener {
  12.  
  13.     private static final long serialVersionUID = 1L;
  14.  
  15.     private String text = "Presione en los botones binarios.";
  16.     private JTextField field;
  17.     private JPanel panel;
  18.    
  19.     @Override
  20.     public void init() {
  21.         panel = new JPanel();
  22.         panel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
  23.  
  24.         JButton button;
  25.         for (int i = 0; i < 16; i++) {
  26.             button = new JButton("0");
  27.             button.addActionListener(this);
  28.             panel.add(button);
  29.         }
  30.  
  31.         field = new JTextField(text);
  32.  
  33.         getContentPane().removeAll();
  34.         getContentPane().add(panel, java.awt.BorderLayout.CENTER);
  35.         getContentPane().add(field, java.awt.BorderLayout.PAGE_END);
  36.     }
  37.  
  38.     @Override
  39.     public void actionPerformed(ActionEvent e) {
  40.         if (e.getSource() instanceof JButton) {
  41.             JButton f = (JButton)e.getSource();
  42.             f.setText(f.getText().equals("0") ? "1" : "0");
  43.             calc();
  44.         }
  45.     }
  46.  
  47.     private void calc() {
  48.         StringBuilder builder = new StringBuilder();
  49.         for (Component component : panel.getComponents())
  50.             if (component instanceof JButton)
  51.                 builder.append(((JButton)component).getText());
  52.  
  53.         Integer bin = Integer.parseInt(builder.toString(), 2);
  54.         field.setText(String.format("%s. El valor binario %s en decimal es %d.",
  55.                 text, builder.toString(), bin));
  56.     }
  57.  
  58. }
Aunque contraviniendo las instrucciones de Xerelo, pero creo que ElMeoS necesita mas ejemplos en Java puro, puro Java, que según lo que observo tiene ya experiencia en C y similares.

Si observas bien no necesité 16 variables diferentes para los botones, simplemente están contenidos en una Collection de Component, los cuales puedo accesar por medio del panel.getComponents(). Así también no necesito accesar 16 variables en el ActionListener puesto que comparten el mismo código, la única diferencia es que estoy usando 'Objetos' diferentes que me entrega el getSource().

Saludos,

ps:

Olvidaba lo mas importante, para que funcione con 24 digitos solamente tienes que cambiar esta línea, lo cual hace que el código sea muy versátil, extensible y escalable. (No lo probé con más digitos).

Código Java:
Ver original
  1. for (int i = 0; i < 24; i++) {

Última edición por HackmanC; 28/06/2011 a las 22:45

Etiquetas: applet
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 06:04.