Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 40

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(); // 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());
} 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 <mHasta; i+sizeIntervalo) { }
*/

return dblIntegral;
}

/**
* @return Returns the error.
*/
public String getError() {
return mError;
}
/**
* @param pError The error to set.
*/
public void setError(String pError) {
mError = pError;
}
/**
* @return Returns the result.
*/
public String getResult() {
return mResult;
}
/**
* @param pResult The result to set.
*/
public void setResult(String pResult) {
mResult = pResult;
}

/**
* @return Returns the myParser.
*/
public JEP getMyParser() {
return myParser;
}
/**
* @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 GridBagConstraints();
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: *

Contrasea: *

Crear cuenta nueva


Solicitar nueva contrasea

Navegacin

Blogs
o Categorias
Contenido
Foros de Discusin
Encuestas
Tips
Usuarios
Envos recientes

Temas nuevos

Inyeccin de dependencias y Composicin


automatizar proceso
Cmo validar datos de tipo int o String en Java usando Netbeans

more
En lnea
En este momento hay 0 usuarios y 145 invitados en lnea.

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
compartir
hace 19 horas 53 mins
Validar Int
hace 1 da 14 horas
Revisa el tuneo a nivel BD
hace 2 das 4 horas
Ya tengo el pool en JNDI
hace 6 das 2 horas
JNDI
hace 1 semana 1 hora
Cambie de pool
hace 1 semana 5 das

Encuesta
Qu lenguaje alternativo para la JVM te llama ms la atencin?:

Groovy

Scala

Clojure

JRuby

Jython

Otro... (menciona cul)

Contenido popular

Hoy:
//Cdigo 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 parmetros 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 convierta a binarios, para que en binario
realice la opcin 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 cdigo es el men de las opciones hasta
solicitar el ingreso de los nmeros en decimal, pero ya me atore, no encuentro ningun
ejemplo de cdigo que me ayude a entender como hacerlo, ya que la mayoria utiliza
funciones nativas de Java.
Pienso que una vez capturados los nmeros decimales, debo convertirlos a binario y luego
realizar la operacin seleccionada por el usuario.
Me podran ayudar, se que en este foro todos son expertos menos yo.......

Adjunto Tamao

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 sesin o regstrese para enviar comentarios

Opciones de visualizacin 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 que 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 representacin. Si tu
capturas un numero y lo muestras como binario an 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 ests considerando como "nativa" el usar la suma aritmtica 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 sesin o regstrese 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, tambin lo hice en excel pero en el codigo no puedo usar integer.parseInt ni
integer.tobinaryString.
Y la verdad he encontrado escasa informacin sobre como hacerlo sin usarlos, sobre todo
cuando el nmero decimal sea negativo.

Inicie sesin o regstrese para enviar comentarios

Sin String

Submitted by neko069 on Vie, 07/27/2012 - 14:31.

Si no puedes usar el mtodo que te dice Oscar, vas a tener que hacer las divisiones (en el
caso de la conversin de decimal a binario) y los residuos concatenarlos en un String, y
para la conversin de binario a decimal, vas a tener que usar el String resultante como
arreglo, y sumar las posiciones, o sea, lo ms cercano a hacerlo a lpiz y papel.
Inicie sesin o regstrese para enviar comentarios

Y como lo haces en lpiz y

Submitted by OscarRyz on Vie, 07/27/2012 - 19:54.

Y como lo haces en lpiz y papel?


Si escribes los pasos ac yo te puedo escribir el pseduo cdigo y luego impleemntarlo de
ah es fcil .

Saludos.

Inicie sesin o regstrese para enviar comentarios

Yo te ayudo con dos cosas

Submitted by Jose Manuel on Sb, 07/28/2012 - 19:36.

Yo te ayudo con dos cosas ;)


La conversin de decimal-binario y la suma de nmeros binarios.
Primero veamos que dice la teora sobre la conversin:
Se divide el nmero 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 nmero a dividir sea 1 finaliza la divisin.
Segn Wikipedia.

Y para realizar una suma binaria la teora 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 cdigo 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 nmeros binarios. Para ver el resultado
falta hacer el mtodo que convierta un numero binario a decimal ;) o puedes buscar paginas
web que hagan esto ultimo para verificar resultados. Ya solo faltan la resta, divisin,
multiplicacin y convertirlos a decimal >_<.
Lo esencial es comprender la teora despus puedes pasarlo a cdigo. Como ya dijo Oscar,
si se te dificulta puedes preguntar :)

Me gustara saber si alguien tiene alguna forma mas "pro" de hacer la suma. Yo estaba
intentando con una pero nomas no me salio.
Saludos!
Inicie sesin o regstrese para enviar comentarios

Binario a decimal

Submitted by Sr. Negativo on Sb, 07/28/2012 - 19:58.

Ya le ayudaste mucho JoseManuel asi que yo tambin (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("<html><font


color='red'><b>Nmero decimal:</b></font></html>");

txtDecimal=new JTextField(6);
txtDecimal.setToolTipText("introducir solo nmeros
enteros");
JPanel panel=new JPanel();
panel.add(lblImg);
panel.add(lblDecimal);
panel.add(txtDecimal);

btnActiva= new JButton("<html><font


color='white'><b>Convertir</b></font></html>",new
ImageIcon("SRN4.jpg"));
btnActiva.setToolTipText("obtener nmero binario");
btnActiva.setBackground(Color.blue);
btnActiva.addActionListener(new ActionListener()
{

public void actionPerformed(ActionEvent e) {

System.out.println("Nmero decimal
ledo:"+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," Nmero binario


obtenido:\n"+convertir(txtDecimal.getText()), "Resultado",
JOptionPane.WARNING_MESSAGE, new ImageIcon("SRN4.jpg"));
limpia();

});

btnSalir= new JButton("<html><font


color='yellow'><b>Salir</b></font></html>",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 ejecucin:

Inicie sesin o regstrese para enviar comentarios

Sr - pero el decimal-binario

Submitted by Jose Manuel on Sb, 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 conversin :O
Inicie sesin o regstrese para enviar comentarios

Era decimal a binario

Submitted by Sr. Negativo on Sb, 07/28/2012 - 20:12.

jajajaja
Ya lei bien el ttulo me confundi

Inicie sesin o regstrese 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<numero.length();i++)
{
tmpnumero
+=(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

Cdigo
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 nmero negativo, lo hacemos positivo y le restamos 1(*), */
/* adems 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 aadir (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 nmero positivo


*/
/* y con 1s si es un nmero negativo */
while (nBits>0)
binary[--nBits] = flag;

/* Devolvemos el array */
return binary;
}

Publicado: Viernes 23 Dic 2011


18:45

Ttulo del mensaje: Re:


complemento a dos
Cdigo:

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

WhiteSkull Publicado: Viernes 23 Dic 2011 22:49


CoAdmin
Ttulo del mensaje: Re: complemento
a dos
...que raro que no lo soporte el compilador que tienes...
bueno, bien pensao creo que soporta el operador lgico
NOT solamente para uso condicional, cierre de
exclamacin.
Registrado: 20 Mar 2009
Mensajes: 3136
Cdigo:
Ubicacin: y*width+x

...
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

Cdigo:

int complemento(int num)


{
return ++num*(-1);
}

Total, para lo que se consigue, es para cambiarle de


signo... para algo valieron las clases de matemticas de
primaria, ms por menos, menos, menos por menos,
ms... todava resuena en mi cabeza esa maldita
cancioncilla

Oye y ese cdigo para qu es?

Ultima edicin por WhiteSkull el Martes 27 Dic 2011 20:08;


editado 1 vez

Volver arriba

marcela Publicado: Sbado 24 Dic 2011 03:43


Usuario Activo
Ttulo del mensaje: Re: complemento
a dos
Registrado: 13 Dic 2011 Es para convertir de decimal a binario, incluyendo los
Mensajes: 253 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: Sbado 24 Dic 2011 07:08


Usuario Activo
Ttulo del mensaje: Re: complemento
a dos
Hola.
- Es preferible postear el programa completo, includo
los headers.
- En la medida de lo posible, trata de escribir cdigo
estndar (Ansi C), si el programa no lo requiere (como
Registrado: 14 Nov 2008
en tu caso), no hay necesidad de utilizar el header
Mensajes: 238 conio.h de los arcaicos compiladores Borland.
Ubicacin: Lima - Per
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 sera: 1111110
Por tanto la salida es correcta.

Cdigo:

#include <stdio.h>

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
WhiteSkull Publicado: Lunes 26 Dic 2011 16:21
CoAdmin
Ttulo 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
Ubicacin: y*width+x

vale... pero el resultado correcto, representado en


complemento dos, es 10000001 que corresponde al
valor decimal de 129. Pero segn observo en el cdigo,
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 ests
interpretando correctamente los nmeros negativos en
complemento dos, entiendes? Por lo que la forma
correcta, es representar el nmero tal cual, usando otro
mtodo que convierta a binario. Como cit al principio
del hilo, utilizar los operadores bitwise te podra 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 funcin binario()


y a la que muestra generosamente nuestro compaero
eduar:

Cdigo:

#include <stdio.h>
#include <conio.h>

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 ms a la izquierda, */
& (num >> (posBit-1) /* que es desplazado en
cada pase */)));
/* Esta misma operacion tambin puede ser realizada
al reves(hacia la derecha), pero con 128 */

// if(num!=0)
// {
// binario(num/2);
// num%=2;
// printf("%d",num);
// return num;
// }

//return 0;
}

int complemento(int num)


{
return ++num*(-1);
}

Ah!, otra cosa, si queremos trabajar con registros de 8


bits para no llenar la pantalla de ceros, lo aconsejable
sera trabajar con un char, que normalmente equivale a
un byte, pero hay que tener en cuenta que los rangos de
trabajo ,para nmeros con signos, son de -127 a 127,
por eso hice esa pequea modificacin en tu cdigo.

Ah! me olvidaba, esa ser la representacin del


compilador, la forma que tiene de trabajar con los
datos, esa interpretacin puede variar con otros
compiladores, esto es un problema que no solamente
pasa con nmeros decimales, si no tambin con
flotantes o reales.

Ah! ms cosas. Si quieres que el resultado sea


representacin a complemento a dos, indiferentemente
de como lo interprete el compilador. Puedes coger el
nmero negativo y le sumas 256, pero recuerda trabajar
con registros de 8 bits. El resultado se ajustar a una
representacin a complemento dos. Por ejemplo, si a -
127 le sumamos 256, obtenemos 129.

Esto es todo, suerte


Referencias:
http://es.wikipedia.org/wiki/Representaci%C3%B3n_de
_n%C3%BAmeros_con_signo
http://en.wikipedia.org/wiki/Bit_manipulation
http://www.blah-blah.ch/it/programming/cpp-read-bits/

También podría gustarte