CODIGO JAVA PARA CALCULAR INTEGRALES /* * Created on 27-feb-2005 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ package com.welsungo.math.integral; import org.nfunk.jep.JEP; /** * @author felipe * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class DefnIntegral { //private Evaluator mEvaluator; private String mFunction; private double mDesde; private double mHasta; private double mNumIntervalos; /** Parser */ private JEP myParser; /** Current xValue */ private double xValue; /* GUI components */ //private String mFunction; private String mError; private String mResult; public DefnIntegral() { myParser = new JEP(); myParser.initFunTab(); // clear the contents of the function table myParser.addStandardFunctions(); myParser.setTraverse(true); } public void parseExpression(String pFunction) {
myParser.initSymTab(); myParser.initSymTab(); // clear the contents of the symbol table myParser.addStandardConstants(); myParser.addComplex(); // among other things adds i to the symbol table myParser.addVariable("x", xValue); myParser.setImplicitMul(true); myParser.parseExpression(pFunction); } public void updateResult() { System.out.println("updateResult"); Object result = myParser.getValueAsObject(); String errorInfo = myParser.getErrorInfo(); //Is the result ok? if (result != null) { setResult(result.toString()); } else { setResult(""); } System.out.println(" errorInfo = ["+errorInfo+"]"); // Get the error information if (errorInfo != null) { setError(errorInfo); } else { setError(""); } } /** * @return Returns the desde. */ public double getDesde() { return mDesde; } /** * @param desde * The desde to set. */ public void setDesde(double desde) { mDesde = desde; } /** * @return Returns the function.
myParser.initSymTab(); myParser.initSymTab(); // clear the contents of the symbol table myParser.addStandardConstants(); myParser.addComplex(); // among other things adds i to the symbol table myParser.addVariable("x", xValue); myParser.setImplicitMul(true); myParser.parseExpression(pFunction); } public void updateResult() { System.out.println("updateResult"); Object result = myParser.getValueAsObject(); String errorInfo = myParser.getErrorInfo(); //Is the result ok? if (result != null) { setResult(result.toString()); } else { setResult(""); } System.out.println(" errorInfo = ["+errorInfo+"]"); // Get the error information if (errorInfo != null) { setError(errorInfo); } else { setError(""); } } /** * @return Returns the desde. */ public double getDesde() { return mDesde; } /** * @param desde * The desde to set. */ public void setDesde(double desde) { mDesde = desde; } /** * @return Returns the function.
*/ public String getFunction() { return mFunction; } /** * @param function * The function to set. */ public void setFunction(String function) { mFunction = function; } /** * @return Returns the hasta. */ public double getHasta() { return mHasta; } /** * @param hasta * The hasta to set. */ public void setHasta(double hasta) { mHasta = hasta; } /** * @return Returns the intervalo. */ public double getNumIntervalos() { return mNumIntervalos; } /** * @param intervalo * The intervalo to set. */ public void setNumIntervalos(double pNumIntervalos) { mNumIntervalos = pNumIntervalos; } /** * */ public double getIntegral() {
// TODO double sizeIntervalo = (mHasta - mDesde) / mNumIntervalos; System.out.println("sizeIntervalo="+sizeIntervalo); double aux = mDesde; double dblIntegral = 0; while (aux < mHasta) { //dblInt = dblInt + valor de la funcion this.setXValue(aux); //this.parseExpression(mEvaluator.getFunction()); this.parseExpression(this.getFunction()); this.updateResult(); String strRes = this.getResult(); double dblRes = 0; try { dblRes = Double.parseDouble(strRes.trim()); } catch (NumberFormatException e){e.printStackTrace();} System.out.println("f(x="+aux+") = "+dblRes); dblIntegral = dblIntegral + dblRes; aux = aux + sizeIntervalo; } //Compute Integral //Valor de la funcion en mDesde this.setXValue(mDesde); //this.parseExpression(mEvaluator.getFunction()); this.parseExpression(this.getFunction()); this.updateResult(); String strDesde = this.getResult(); double dblDesde = 0; try { dblDesde = Double.parseDouble(strDesde.trim()) Doub le.parseDouble(strDesde.trim());; } catch (NumberFormatException e){e.printStackTrace();} System.out.println("f(x="+mDesde+") = "+dblDesde); //Valor de la funcion en mHasta this.setXValue(mHasta); //this.parseExpression(mEvaluator.getFunction()); this.parseExpression(this.getFunction()); this.updateResult(); String strHasta = this.getResult();
double dblHasta = 0; try { dblHasta = Double.parseDouble(strHasta.trim()); } catch (NumberFormatException e){e.printStackTrace();} System.out.println("f(x="+mHasta+") = "+dblHasta); dblIntegral = (dblIntegral-(dblDesde+dblHasta)/2)* sizeIntervalo; /* * for(double i=mDesde; i
/** * @param pMyParser The myParser to set. */ public void setMyParser(JEP pMyParser) { myParser = pMyParser; } /** * @return Returns the xValue. */ public double getXValue() { return xValue; } /** * @param pValue The xValue to set. */ public void setXValue(double pValue) { xValue = pValue; } }
BINARIO
133 lines (120 sloc) 3.42 KB import java.util.Scanner; public class Calculadora { public String resolverOperacion(String operando, String numeroUno, String numeroDos){ String resultado = ""; if(numeroUno.length() < numeroDos.length() ){ String temp = numeroDos.substring(0 , numeroDos.length()-numeroUno.length()); temp = temp.replace('1','0'); numeroUno = temp = temp+numeroUno; }else{ String temp = numeroUno.substring(0 , numeroUno.length()-numeroDos.length()); temp = temp.replace('1','0'); numeroDos = temp = temp+numeroDos; }
if(operando.equals("+")){ resultado = sumarNumerosBinarios(numeroUno, numeroDos); }else if(operando.equals("-")){ resultado = restarNumerosBinarios(numeroUno, numeroDos); if(resultado .charAt(0)=='-') resultado = complementoADos(resultado); } return resultado; } public String sumarNumerosBinarios(String numeroUno, String numeroDos){ String resultado = ""; char acarreo = '0'; for(int i = numeroUno.length()-1; i>= 0; i--){ if(numeroUno.charAt(i) == '0' && numeroDos.charAt(i) == '0' ){ if(acarreo == '0'){ resultado = "0"+resultado; }else { resultado = "1"+resultado; } }else if((numeroUno.charAt(i) == '0' && numeroDos.charAt(i) == '1' )|| (numeroUno.charAt(i) == '1' && numeroDos.charAt(i) == '0')){ if(acarreo == '0'){ resultado = "1"+resultado; }else { acarreo = '1'; resultado = "0"+resultado; } }else if((numeroUno.charAt(i) == '1' && numeroDos.charAt(i) == '1' )){ if(acarreo == '0'){ acarreo = '1';
resultado = "0"+resultado; }else { resultado = "1"+resultado; } } } if(acarreo =='1'){ resultado = acarreo + resultado; } return resultado; } public String restarNumerosBinarios(String numeroUno, String numeroDos){ String resultado = ""; char debo = '0'; for(int i = numeroUno.length()-1; i>= 0; i--){ if((numeroUno.charAt(i) == '0' && debo == '0') || (numeroUno.charAt(i) == '1' && debo == '1')){ if(numeroDos.charAt(i) =='0'){ debo = '0'; resultado = "0"+resultado; }else { debo = '1'; resultado = "1"+resultado; } }else if(numeroUno.charAt(i) == '1' && debo == '0' ){ debo = '0'; if(numeroDos.charAt(i) =='0'){ resultado = "1"+resultado; }else { resultado = "0"+resultado;
} }else if(numeroUno.charAt(i) == '0' && debo == '1' ){ debo = '1'; if(numeroDos.charAt(i) =='0'){ resultado = "1"+resultado; }else { resultado = "0"+resultado; } } } if(debo == '1') resultado = "-"+resultado; return resultado; } public String complementoADos(String numero){ int indice = numero.length(); String nuevo = ""; for(int i = numero.length()-1; i>= 0; i--){ if(numero.charAt(i)=='1'){ nuevo = numero.charAt(i)+nuevo; indice = i-1; break; } nuevo = numero.charAt(i)+nuevo; } for(int i = indice; i>= 0; i--){ if(numero.charAt(i)=='1'){ nuevo = '0'+nuevo; }else if(numero.charAt(i)=='0'){ nuevo = '1'+nuevo;
}else{ nuevo = numero.charAt(i)+nuevo; } } return nuevo; }
public static void main(String[] args) { Calculadora calculadora = new Calculadora(); Scanner in = new Scanner (System.in); while(in.hasNextLine()){ String numeroUno = in.nextLine(); String operando = in.nextLine(); String numeroDos = in.nextLine(); System.out.println(calculadora.resolverOperacion(operando, numeroUno, numeroDos)); } } }
VENTANA import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import java.awt.GridBagLayout; import javax.swing.JLabel; import java.awt.GridBagConstraints;
import java.awt.Insets; import javax.swing.JTextField; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.SwingConstants; public class Ventana extends JFrame { private JPanel contentPane; private JTextField tfNumeroUno; private JTextField tfNumeroDos; private JTextField tfResultado; private Calculadora calculadora; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Ventana frame = new Ventana(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame.
*/ public Ventana() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 435, 241); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); GridBagLayout gbl_contentPane = new GridBagLayout(); gbl_contentPane.columnWidths = new int[]{0, 30, 0, 0, 0, 0}; gbl_contentPane.rowHeights = new int[]{30, 0, 0, 0, 0, 0, 0, 0, 0}; gbl_contentPane.columnWeights = new double[]{0.0, 1.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; contentPane.setLayout(gbl_contentPane); JLabel lblNewLabel = new JLabel("Numero uno"); GridBagConstraints gbc_lblNewLabel = new G ridBagConstraints(); gbc_lblNewLabel.anchor = GridBagConstraints.EAST; gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel.gridx = 0; gbc_lblNewLabel.gridy = 0; contentPane.add(lblNewLabel, gbc_lblNewLabel); tfNumeroUno = new JTextField(); tfNumeroUno.setHorizontalAlignment(SwingConstants.RIGHT); GridBagConstraints gbc_tfNumeroUno = new GridBagConstraints(); gbc_tfNumeroUno.fill = GridBagConstraints.HORIZONTAL; gbc_tfNumeroUno.anchor = GridBagConstraints.EAST; gbc_tfNumeroUno.gridwidth = 3; gbc_tfNumeroUno.insets = new Insets(0, 0, 5, 5); gbc_tfNumeroUno.gridx = 1;
gbc_tfNumeroUno.gridy = 0; contentPane.add(tfNumeroUno, gbc_tfNumeroUno); tfNumeroUno.setColumns(10); JLabel lblNewLabel_1 = new JLabel("Numero Dos"); GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints(); gbc_lblNewLabel_1.anchor = GridBagConstraints.EAST; gbc_lblNewLabel_1.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_1.gridx = 0; gbc_lblNewLabel_1.gridy = 2; contentPane.add(lblNewLabel_1, gbc_lblNewLabel_1); tfNumeroDos = new JTextField(); tfNumeroDos.setHorizontalAlignment(SwingConstants.RIGHT); GridBagConstraints gbc_tfNumeroDos = new GridBagConstraints(); gbc_tfNumeroDos.fill = GridBagConstraints.HORIZONTAL; gbc_tfNumeroDos.anchor = GridBagConstraints.EAST; gbc_tfNumeroDos.gridwidth = 3; gbc_tfNumeroDos.insets = new Insets(0, 0, 5, 5); gbc_tfNumeroDos.gridx = 1; gbc_tfNumeroDos.gridy = 2; contentPane.add(tfNumeroDos, gbc_tfNumeroDos); tfNumeroDos.setColumns(10); JButton btnMenos = new JButton("-"); btnMenos.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(calculadora == null) calculadora = new Calculadora(); if(!tfNumeroDos.equals("") && !tfNumeroUno.equals("")) tfResultado.setText(calculadora.resolverOperacion("-", tfNumeroUno.getText(), tfNumeroDos.getText()));
} }); GridBagConstraints gbc_btnMenos = new GridBagConstraints(); gbc_btnMenos.insets = new Insets(0, 0, 5, 5); gbc_btnMenos.gridx = 2; gbc_btnMenos.gridy = 4; contentPane.add(btnMenos, gbc_btnMenos); JButton btnMas = new JButton("+"); btnMas.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(calculadora == null) calculadora = new Calculadora(); if(!tfNumeroDos.equals("") && !tfNumeroUno.equals("")) tfResultado.setText(calculadora.resolverOperacion("+", tfNumeroUno.getText(), tfNumeroDos.getText())); } }); GridBagConstraints gbc_btnMas = new GridBagConstraints(); gbc_btnMas.insets = new Insets(0, 0, 5, 5); gbc_btnMas.gridx = 3; gbc_btnMas.gridy = 4; contentPane.add(btnMas, gbc_btnMas); JLabel lblNewLabel_2 = new JLabel("Resultado"); GridBagConstraints gbc_lblNewLabel_2 = new GridBagConstraints(); gbc_lblNewLabel_2.insets = new Insets(0, 0, 5, 5); gbc_lblNewLabel_2.anchor = GridBagConstraints.EAST; gbc_lblNewLabel_2.gridx = 0; gbc_lblNewLabel_2.gridy = 6; contentPane.add(lblNewLabel_2, gbc_lblNewLabel_2);
tfResultado = new JTextField(); tfResultado.setHorizontalAlignment(SwingConstants.RIGHT); GridBagConstraints gbc_tfResultado = new GridBagConstraints(); gbc_tfResultado.insets = new Insets(0, 0, 5, 5); gbc_tfResultado.fill = GridBagConstraints.HORIZONTAL; gbc_tfResultado.anchor = GridBagConstraints.EAST; gbc_tfResultado.gridwidth = 3; gbc_tfResultado.gridx = 1; gbc_tfResultado.gridy = 6; contentPane.add(tfResultado, gbc_tfResultado); tfResultado.setColumns(10); } Nombre de usuario: * Contraseña: *
Crear cuenta nueva Solicitar nueva contraseña
Navegación
Blogs o Categorias Contenido Foros de Discusión Encuestas Tips Usuarios Envíos recientes
Temas nuevos
more
Inyección de dependencias y Composición automatizar proceso Cómo validar datos de tipo int o String e n Java usando Netbeans
En línea En este momento hay 0 usuarios y 145 invitados en línea.
Comentarios recientes
keep alive hace 2 horas 2 mins wat hace 2 horas 7 mins JSR250 hace 2 horas 19 mins GIST hace 2 horas 19 mins compñartir hace 19 horas 53 mins Validar Int hace 1 día 14 horas Revisa el tuneo a nivel BD hace 2 días 4 horas Ya tengo el pool en JNDI hace 6 días 2 horas JNDI hace 1 semana 1 hora Cambie de pool hace 1 semana 5 días
Encuesta ¿Qué lenguaje alternativo para la JVM te llama más la atención?: Groovy Scala Clojure JRuby Jython Otro... (menciona cuál)
Contenido popular
Hoy:
//Código para el juego... el Ahorcado// Manejo de XML ¿Que formato usar para 2 decimales o ninguno? Recoger valor de JComboBox llamar a un metodo que esta en una clase hacia otra clase
Siempre:
Estructura de datos java (Listas simplemente enlazadas) Primer aporte Como programar en java Deitel & Deitel 7ma Edicion Cargar una imagen en un JPanel en netbeans como generar un archivo txt en java Problema para comparar valores null, vacio o "" de un h:inputtext
Últimas impresiones:
Juego de mesa para aprender a programar Gestion de Errores (Exception) en java Paso de parámetros en Java Determinar el biotipo de una persona en Java De C# a Java
Agradecemos el apoyo de:
Calculadora Binaria Submitted by Grillitos on Jue, 07/26/2012 - 19:12
Java Standard Edition
Necesito hacer un menú que de las opciones suma, resta, and, or y salir, que permita ingresar por teclado dos numeros decimales y los co nvierta a binarios, para que en binario realice la opción seleccionada del menu anterior y mostrar en pantalla el resultado en binario. No debo utilizar funciones nativas de Java. Soy nueva programando y lo único que llevo de código es el menú de las opciones hasta solicitar el ingreso de los números en decimal, pero ya me atore, no encuentro ningun ejemplo de código que me ayude a entender como hacerlo, ya que la mayoria utiliza funciones nativas de Java. Pienso que una vez capturados los números decimales, debo convertirlos a bina rio y luego realizar la operación seleccionada por el usuario. Me podrían ayudar, se que en este foro todos son expertos menos yo....... Adjunto
Tamaño
Dudas.pptx 222.84 KB ‹ Conexion dbf por ODBC me pueden ayudar a hacerle zoom a un archivo pdf desde netbeans y es una aplicacion de escritorio huso JFrame ›
Inicie sesión o regístrese para enviar comentarios
Opciones de visualización de comentarios Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Sabes hacerlo con papel y Submitted by OscarRyz on Jue, 07/26/2012 - 19:34.
Sabes hacerlo con papel y lapiz? Es decir si tienes: 0111 + 0001 -------????
Si no lo sabes, empieza por ahí. Si lo sabes trata de describir los pasos qu e necesitas dar. Forma un algoritmo con eso y luego lo implementas.
No está claro que tanto tienes que hace pero lo "binario" es solo una representación. Si tu capturas un numero y lo muestras como binario a ún puedes hacer operaciones dentro del programa: int a = Integer.parseInt( "0111", 2 ); int b = Integer.parseInt("0001", 2); int c = a + b; String resultado = Integer.toString( c, 2 );
Pero no sé si estás considerando como "nativa" el usar la suma aritmética o no. Saludos. p.d. Ahí tienes ya dos muy buenos "hints" para transformar de y hacia binario en Java y no es necesario que subas todo un powerpoint para el screenshot, puedes subir el png directamente
Inicie sesión o regístrese para enviar comentarios
Gracias por tu respuesta Submitted by Grillitos on Vie, 07/27/2012 - 13:19.
Gracias por tomarte la molestia de contestarme, ya leí sobre como hacerlo con papel y lapiz, también lo hice en excel pero en el codigo no puedo usar integer.parseInt ni integer.tobinaryString. Y la verdad he encontrado escasa información sobre como hacerlo sin usarlos, sobre todo cuando el número decimal sea negativo.
Inicie sesión o regístrese para enviar comentarios
Sin String Submitted by neko069 on Vie, 07/27/2012 - 14:31.
Si no puedes usar el método que te dice Oscar, vas a tener que hacer las divisiones (en el caso de la conversión de decimal a binario) y los residuos concatenarlos en un String, y para la conversión de binario a decimal, vas a tener que usar el String resultante como arreglo, y sumar las posiciones, o sea, lo más cercano a hacerlo a lápiz y papel.
Inicie sesión o regístrese para enviar comentarios
Y como lo haces en lápiz y Submitted by OscarRyz on Vie, 07/27/2012 - 19:54.
Y como lo haces en lápiz y papel? Si escribes los pasos acá yo te puedo escribir el pseduo código y luego impleemntarlo de ahí es fácil . Saludos.
Inicie sesión o regístrese para enviar comentarios
Yo te ayudo con dos cosas Submitted by Jose Manuel on Sáb, 07/28/2012 - 19:36.
Yo te ayudo con dos cosas ;) La conversión de decimal-binario y la suma de números binarios. Primero veamos que dice la teoría sobre la conversión:
Se divide el número del sistema decimal entre 2, cuyo resultado entero se vuelve a dividir entre 2, y así sucesivamente hasta que el dividendo sea menor que el divisor, 2. Es decir, cuando el número a dividir sea 1 finaliza la división. Según Wikipedia. Y para realizar una suma binaria la teoría dice que hay que basarnos en la siguiente tabla:
Tabla para sumar:
0+0=0 0+1=1 1+0=1 1 + 1 = 10
Entonces, el código resultante puede ser: /** *
* @author Kalt Wulx */
public class ConversorBinario {
public static void main(String args[]) { System .out.println("Convertir a binarios" ); int[] test1 = decimalToBinary (4444); int[] test2 = decimalToBinary (36843); System .out.println("Valores convertidos y rellenados:"); for (int item : test1) { System .out.print(item); } System .out.println(); for (int item : test2) { System .out.print(item); } System .out.println(); System .out.println("Resultado de la suma binaria" ); int res[] = sumBinAndBin(test1, test2); for(int i = 0; i < res.length; i++) { System .out.print(res[i]); } System .out.println(); } public static int[] decimalToBinary(int numeroDecimal) { //Variables locales int residuo = 0; String res = "";
//mientras el resultado de la division sea mayor que 0 while (numeroDecimal > 0) { residuo = numeroDecimal % 2;//obtener el residuo numeroDecimal = numeroDecimal / 2;//realizar la siguiente division //En el orden natural de la operacion los valores estan invertidos //por eso aqui los volvemos a invertir :) res = residuo + res ; } System .out.println(res); //El contenido maximo en una variable de tipo entero es 2**31-1 //Por eso es logico que el max numero binario en un entero sea 2**31-1 = 2147483647
int resultado [] = new int[31]; //Para que la manipulacion del numero binario sea mas
simple //lo convertimos en un arreglo. Pero, como el maximo valor esta dado //por 2**31-1 y eso son 31 posiciones debemos introducir ceros a la izq del valor binario for(int i = resultado.length -1, j=0, k=0; i > -1; i-, j++) {//Recorremos el arreglo //Si el valor de i(indice inverso) es mayor o igual a la longitud de //la cadena (la que contiene el numero binario). //Entonces aun no llegamos a las posiciones para la cadena. if(i >= res.length()) { resultado[j] = 0;//Y rellenamos esos espacios con 0 } else { //Cuando lleguemos a los espacios que ocupa la cadena //los agregamos en orden inverso con la ayuda de k //mientras los parseamos a enteros ;) resultado[j] = Integer.parseInt(res.charAt(k)+""); k++;//incrementamos k } } return resultado;//Al finalizar el ciclo retornamos el arreglo. } /* * Suma dos numeros binarios. * Recibe dos arreglos de tipo entero y retorna un * arreglo de tipo entero con el resultado de la suma. */ public static int[] sumBinAndBin(int a[], int b[]) { int acarreo = 0;//variable de control. int[] c = new int[a.length];//Arreglo a retornar. //Se recorre el arreglo a de manera inversa. for (int i = a.length - 1; i > -1; i--) { int suma = a[i] + b[i]; //Se realiza la suma una vez por ciclo if(suma == 2) {//Si la suma da 2 los elementos en el arreglo son 1 y 1.
c[i] = 0;//Por lo tanto debe ir como resultado un 0 acarreo = 1;//Y se lleva un acarreo } //Si por el contrario la suma es 0 quiere decir que los elementos //eran 0 y 0. else if(suma == 0) { c[i] = 0;//Entonces debe ir 0 como resultado } //Si por el contrario la suma es 1, entonces los elementos //eran 0 y 1 o viceversa. else if(suma == 1) { c[i] = 1;//Y debe ir como resultado un 1. } if(acarreo == 1) {//Si existe un acarreo en este ciclo //Se comprueba si la suma del elemento siguiente del //arreglo "a" mas el acarreo es igual a 2. if(a[i-1] + 1 == 2) { a[i-1] = 0;//Si lo es, se asigna un 0 a "a". acarreo = 1;//Y se sigue llevando un acarreo. } else {//Si la suma no da 2, solo puede dar 1. a[i-1] = 1;//Y entonces se asigna 1 a "a". acarreo = 0;//Y el acarreo desaparece. } } } return c;//Se regresa el arreglo. } } Y con eso obtienes el resultado de la suma de dos números binarios. Para ver el resultado falta hacer el método que convierta un numero binario a decimal ;) o puedes buscar paginas web que hagan esto ultimo para verificar resultados. Ya solo faltan la resta, división, multiplicación y convertirlos a decimal >_<. Lo esencial es comprender la teoría después puedes pasarlo a código. Como ya dijo Oscar, si se te dificulta puedes preguntar :) Me gustaría saber si alguien tiene alguna forma m as "pro" de hacer la suma. Yo estaba intentando con una pero nomas no me salio. Saludos!
Inicie sesión o regístrese para enviar comentarios
Binario a decimal Submitted by Sr. Negativo on Sáb, 07/28/2012 - 19:58.
Ya le ayudaste mucho JoseManuel asi que yo también (jeje) aqui va el de decimal a binario.
Prog03.java /* Decimal a binario*/
import javax.swing.JFrame ; import javax.swing.JLabel ; import javax.swing.JPanel ; import javax.swing.JOptionPane ; import javax.swing.JButton ; import javax.swing.JTextField ; import java.awt.event.*; import javax.swing.*; import java.lang.String.* ; import java.awt.Color; //import java.net.URL; public class Prog03 extends JFrame{ final private JTextField txtDecimal; private JButton btnActiva; private JButton btnSalir; public Prog03(){
JLabel lblImg= new JLabel(new ImageIcon(Prog03. class.getResource("SRN4.jpg"))); JLabel lblDecimal= new JLabel("Número decimal:" ); txtDecimal=new JTextField(6); txtDecimal.setToolTipText("introducir solo números enteros");
JPanel panel=new JPanel(); panel.add(lblImg); panel.add(lblDecimal); panel.add(txtDecimal); btnActiva= new JButton("Convertir" ,new ImageIcon("SRN4.jpg")); btnActiva.setToolTipText("obtener número binario" ); btnActiva.setBackground(Color.blue); btnActiva.addActionListener (new ActionListener() { public void actionPerformed(ActionEvent e) {
System.out.println("Número decimal leído:"+txtDecimal.getText()+" Numero binario obtenido :"+convertir(txtDecimal.getText())); //JOptionPane.showMessageDialog(null,"Numero binario obtenido:"+convertir(txtDecimal.getText()),JOptionPane.INFORM ATION_MESSAGE,new ImageIcon("SRN4.jpg");); JOptionPane.showMessageDialog (null," Número binario obtenido: \n"+convertir(txtDecimal.getText()), "Resultado", JOptionPane.WARNING_MESSAGE, new ImageIcon("SRN4.jpg")); limpia(); } }); btnSalir= new JButton("Salir" ,new ImageIcon("SRN4.jpg")); btnSalir.setToolTipText("quitar ahora"); btnSalir.setBackground(Color.red); btnSalir.addActionListener (new ActionListener() { public void actionPerformed(ActionEvent e) {
System.exit(0); }
}); panel.add(btnActiva);panel.add(btnSalir); setTitle("[Decimal a Binario]" ); setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); setDefaultLookAndFeelDecorated (true); setSize(600,230); setVisible(true); add(panel); } public static void main(String ... args)throws Exception{
for(UIManager.LookAndFeelInfo laf:UIManager.getInstalledLookAndFeels ()){ if("Nimbus".equals(laf.getName())) try { UIManager.setLookAndFeel(laf.getClassName()); //UIManager.setLookAndFeel("com.sun.j ava.swing.plaf.nimbus.NimbusLookAndFeel" ) ; //UIManager.setLookAndFeel(UIManager.getS ystemLookAndFeelClassName()); new Prog03();
} catch (ClassNotFoundException e) { System.out.println("[Main.main:ClassN otFoundException]" + e.getMessage()); } catch (InstantiationException e) { System.out.println("[Main.main:Instan tiationException]" + e.getMessage()); } }
}
// limpiar public void limpia(){ txtDecimal.setText(""); } public StringBuffer convertir(String cade){ int resto=0; int numeroDecimal=Integer.parseInt(cade); String numeroBinario=""; while(numeroDecimal>=2){ resto=numeroDecimal%2; numeroDecimal=(int)numeroDecimal/2; numeroBinario+=String.valueOf(resto); } numeroBinario+=numeroDecimal; StringBuffer sb = new StringBuffer(numeroBinario); return sb.reverse();
} } En ejecución:
Inicie sesión o regístrese para enviar comentarios
Sr - pero el decimal-binario Submitted by Jose Manuel on Sáb, 07/28/2012 - 20:09.
Sr - pero el decimal-binario ya lo puse :P bueno seria poner el binario-decimal. Y por el titulo de tu mensaje creo que si pensabas hacer el binario a decimal. Creo que al ultimo confundiste la conversión :O
Inicie sesión o regístrese para enviar comentarios
Era decimal a binario Submitted by Sr. Negativo on Sáb, 07/28/2012 - 20:12.
jajajaja Ya lei bien el título me confundi
Inicie sesión o regístrese para enviar comentarios
que ondas como ya vi los Submitted by genitalico on Mar, 07/31/2012 - 18:32.
que ondas como ya vi los codigos arriba me anime hacer uno.. es una clase con dos metodos.. un convierte de Decimal a binario, octal y hexadecimal y el otro metodo convierte de binario a decimal, aun que con algunos ajustes que haber si hago despues podra convertir de cualquier base a decimal.. tiene algunos bugs, el metodo que convierte decimal a X base se le ponen en el metodo una base mayor a 16 sacara las letras de los hexadecimal al encontrar residuos de 10, 11, 12,13,14,15 y el otro metodo solo convierte binario a decimal, aun que como dije con algunos ajustes podra con cualquier base.. haber si luego hago las sumas binarias. pero ya le dejamos bastante ayuda a grillitos public class ConversionBases { private String conversion; private String conversion2;
public void setDecimalBase(int numero,int base) { StringBuilder btemp = new StringBuilder(); int residuo = 0; conversion = ""; boolean detec = true; String[] hex = new String[]{"A","B","C","E","F"};
while(numero !=0) { detec = true; residuo = (numero%base); for(int i=10;i<16;i++) { if(residuo==i) { btemp.append(hex[i-10]); detec = false; break; } } if(detec) { btemp.append(residuo); } numero = (int)(numero/base); } conversion = btemp.reverse().toString(); }
public void setBaseDecimal(String numero,int base) { conversion2 = ""; int tmpnumero = 0; StringBuilder tmp = new StringBuilder(); tmp.append(numero); numero = tmp.reverse().toString(); for(int i=0;i
+=(Integer.parseInt(String.valueOf(numero.charAt(i)))* (int)( Math.pow(base,i))); } conversion2 += tmpnumero; } public String getDecimalBase() { return conversion; } public String getBaseDecimal() { return conversion2; }
} Aqui esta la prueba.. public class Main { public static void main(String[]args) { ConversionBases d = new ConversionBases(); int numero = 255; d.setDecimalBase(numero,2); System .out.println(d.getDecimalBase());
d.setBaseDecimal(d.getDecimalBase(), 2); System .out.println(d.getBaseDecimal()); }
}
codigo conversion decimal a binario y complemento a dos « en: 15 Diciembre 2011, 19:20 » Código
1.
int binario(int num); int invertir(int num); int main() { int num,complemento,res; printf("Bits en la RAM\n\n"); printf("Dame un valor entero: "); scanf("%d",&num); if(num>0) binario(num); else if(num<0) { complemento=binario(num); res=complemento_a_dos(complemento); } return 0; } int binario(int num) { if(num>1) { binario(num/2); num%=2; printf("%d",num); } else { printf("%d",num); return num; } return 0; } int complemento_a_dos(int complemento) { int res; while((complemento%=10)!=1){ complemento/=10; } res=~(complemento%=10);
return res; } tengo un problema con este codigo, hasta la funcion que convierte decimal en binario esta bien, pero despues cuando ingrese un numero negativo me tiene que dar el complemento a dos, y ahí fue donde me perdi completamente. Estaba pensando que tal vez con divisiones sucesivas hasta que me aparezca un 1 de derecha a izquierda y despues los digitos que le siguen cambiar los 0 por unos y viceversa
int *decToBin(int decimal, int nBits, int binary[]) { int i; int flag = 0; /* Si es un número negativo, lo hacemos positivo y le restamos 1(*), */ /* además activamos el flag para saber que es negativo */ /* (*) El complemento a 2 es igual que el complemento a 1, que es cambiar */ /* 1->0, 0->1, y luego sumando 1 en binario. Aquí restamos 1 en decimal y */ /* luego pasamos a binario. */ if (decimal < 0) { flag = 1; decimal = -decimal-1; } /* Pasamos a binario, atendiendo a lo que vale flag, en lugar de añadir (decimal%2) */ /* como es normal, le hacemos un XOR con flag, vemos la tabla de verdad de XOR */ /* | A (xor) B = X | */ /* | 0 | 0 | 0 | */ /* | 0 | 1 | 1 | */ /* | 1 | 0 | 1 | */ /* | 1 | 1 | 0 | */ /* ------------------------------ */ /* Por tanto, cuando flag vale 0, al encontrar un 0, pondremos un 0, y al encontrar un 1, ponemos un 1 */ /* Pero cuando flag vale 1, al encontrar un 0, pondremos un 1, y al encontrar un 1, ponemos un 0 */ while (decimal > 0) { binary[--nBits] = flag^(decimal%2); decimal/=2; } /* Con esto terminamos de llenar el array, con 0 a la izquierda si es un número positivo
*/ /* y con 1s si es un número negativo */ while (nBits>0) binary[--nBits] = flag; /* Devolvemos el array */ return binary; }
Publicado: Viernes 23 Dic 2011 18:45
Título del mensaje: Re: complemento a dos Código:
int binario(int num); int invertir(int num); int complemento(int num_bin); int main() { int num,num_bin,complemento_a_dos
; printf("Bits en la RAM\n\n"); printf("Dame un valor entero: "); scanf("%d",&num); if(num>0) binario(num); else if(num<0) { num=-num-1; num_bin=binario(num); complemento_a_dos=comple mento(num_bin); } printf("\nPresione una tecla para continuar...\n"); getch(); return 0; } int binario(int num) { if(num>1) { binario(num/2); num%=2; printf("%d",num); return num; } else { printf("%d",num); return num; } return 0; } int complemento(int num_bin) { int complemento_a_dos; complemento_a_dos=~num_bin; return (complemento_a_dos);
} en la penultima linea de codigo trate de usar el operador ~ para invertir los numeros pero no compila correctamente Volver arriba
Publicado: Viernes 23 Dic 2011 22:49
WhiteSkull
CoAdmin
Título del mensaje: Re: complemento a dos
Registrado: 20 Mar 2009 Mensajes: 3136 Ubicación: y*width+x
...que raro que no lo soporte el compilador que tienes... bueno, bien pensao creo que soporta el operador lógico NOT solamente para uso condicional, cierre de exclamación. Código:
... if (!true) // si no es verdad entonces .... ...
.. pero el operador de bits, yo creo que si... que alguien me saque de dudas eduard801289138938 !!!! ...de todas formas puedes suplirlo así de sencillo Código:
int complemento(int num) { return ++num*(-1); }
Total, para lo que se consigue, es para cambiarle de signo... para algo valieron las clases de matemáticas de primaria, más por menos, menos, menos por menos,
más... todavía resuena en mi cabeza esa maldita cancioncilla Oye y ese código para qué es?
Ultima edición por WhiteSkull el Martes 27 Dic 2011 20:08; editado 1 vez Volver arriba
marcela
Publicado: Sábado 24 Dic 2011 03:43
Usuario Activo
Título del mensaje: Re: complemento a dos Registrado: 13 Dic 2011 Mensajes: 253
Es para convertir de decimal a binario, incluyendo los numeros negativos(con complemento a dos) pero cuando le ingreso por ejemplo -127 me sale 1111110, cuando deberia de ser 0000001
Volver arriba
eduar2083
Publicado: Sábado 24 Dic 2011 07:08
Usuario Activo
Título del mensaje: Re: complemento a dos
Registrado: 14 Nov 2008 Mensajes: 238 Ubicación: Lima - Perú
Hola. - Es preferible postear el programa completo, incluído los headers. - En la medida de lo posible, trata de escribir código estándar (Ansi C), si el programa no lo requiere (como en tu caso), no hay necesidad de utilizar el header conio.h de los arcaicos compiladores Borland. El operador a nivel de bits complemento a uno ~ , cambia el estado de cada bit en la variable afectada. O sea, los 1 se ponen a 0 y los 0 a 1. n = -n - 1 equivale a hacer complemento a 1: n = ~n ~(-127) -------> 126
que convertido a binario sería: 1111110 Por tanto la salida es correcta. Código:
#include int binario(int num) { int digito = num % 2; int resto = num / 2; return resto > 0 ? binario(resto) * 10 + digito : digito; } int main(void) { int num, b; printf("Deme numero decimal: "); scanf("%d", &num); if (num >= 0) { b = binario(num); printf("--> %d\n", b); } else { num = ~num; /* num = ~num + 1; Complemento a 2 */ b = binario(num); printf("--> %d\n", b); } return 0; }
Un saludo. Volver arriba
Publicado: Lunes 26 Dic 2011 16:21
WhiteSkull
CoAdmin
Título del mensaje: Re: complemento a dos marcela escribió:
...pero cuando le ingreso por ejemplo -127 me sale Registrado: 20 Mar 2009 Mensajes: 3136
1111110, cuando deberia de ser 0000001
Ubicación: y*width+x
vale... pero el resultado correcto, representado en complemento dos, es 10000001 que corresponde al valor decimal de 129. Pero según observo en el código, tu idea es que cuando recibe un valor negativo, le realizas un complemento a dos para pasarlo a positivo, 127, en binario 011111111, pero en verdad no estás interpretando correctamente los números negativos en complemento dos, entiendes? Por lo que la forma correcta, es representar el número tal cual, usando otro método que convierta a binario. Como cité al principio del hilo, utilizar los operadores bitwise te podría valer, ya que es una forma de trabajar directamente a nivel de bits, pero para ello hay que estudiarlos y entender su funcionamiento. Mira te propongo esta alternativa a tu función binario() y a la que muestra generosamente nuestro compañero eduar: Código:
#include #include void binario(char num); //void invertir(int num); int complemento(int num_bin); int main() {
char num; // recuerda que un entero, normalmente son 32 bits y un char son 8 printf("Trabajando con Bits\n\n"); printf("Dame un valor de 8 bits con signo (-127 a 127): "); scanf("%d",&num); printf("\nNumero binario de %d = ",num); binario(num); // if(num>0) //
binario(num);
//
else if(num<=0)
//
{
//
num=-num-1;
//
num_bin=binario(num);
//
complemento_a_dos=complemento(num_bin);
//
} printf("\n\n\nPresione una tecla para continuar...\n"); getch(); return 0;
} void binario(char num) { for (unsigned char posBit=8;posBit>0;posBit--) printf("%d", (1/*El uno hace de mascara para comprobar el bit más a la izquierda, */ & (num >> (posBit-1) /* que es desplazado en cada pase */))); /* Esta misma operacion también puede ser realizada al reves(hacia la derecha), pero con 128 */ // if(num!=0) //
{
//
binario(num/2);
//
num%=2;
//
printf("%d",num);
//
return num;