/**
* Conversor.java
* 1.0
*
* 12/10/2005
*
* Copyright 2005 Lisibeth Troconis. All rights reserved. Used by permission.
*
* Libreria para convertir números arabigos a números romanos y números
* romanos a números arabigos
*/
public class Conversor {
/**
* SIMBOLO_ROMANO[]: arrreglo que almacena los sinbolos correspondientes al
* alfabeto perteneciente a los números romanos
*/
private static final String SIMBOLO_ROMANO[] =
{ "M", "CM", "D", "CD", "C","XC", "L", "XL", "X", "IX", "V", "IV", "I" };
/**
* VALOR_ROMANO_ARABIGO[]: arrreglo que almacena valores arabigos que
* corresponden a cada símbolo romano
*/
private static final int VALOR_ROMANO_ARABIGO[] = { 1000, 900, 500, 400,
100, 90, 50, 40, 10, 9, 5, 4, 1, 0 };
/**
* Longitud de los arreglos SIMBOLO_ROMANO[]y VALOR_ROMANO_ARABIGO[]
*/
private static final int n = 13;
private static String tomarValorRomano(int cifra) {
if (cifra == 0){
return "";
}
int i;//indice posición del valor o simbolo romano
/**
* busco el simbolo que le corresponde
*/
for (i = 0; i < n; i++){
if (cifra >= VALOR_ROMANO_ARABIGO[i]){
break;
}
}
int v = VALOR_ROMANO_ARABIGO[i];
String valorRomano = SIMBOLO_ROMANO[i];
/**
* Se ve si es un simbolo prohibido y si lo es se busca el siguiente que
* no lo es
*/
for (; ((v < cifra) && ((SIMBOLO_ROMANO[i] == "V")
|| (SIMBOLO_ROMANO[i] == "L") || (SIMBOLO_ROMANO[i] == "D")
|| (SIMBOLO_ROMANO[i].length() > 1))); i++);
while (v < cifra) {
v = v + VALOR_ROMANO_ARABIGO[i];
valorRomano = valorRomano + SIMBOLO_ROMANO[i];
}
return valorRomano;
}
public static String aRomano(int nArabigo) {
/**
* Se verifica el rango y si es erroneo retorna vacio
*/
if (nArabigo > 3999 || nArabigo < 1) {
return null;
}
/**
* Se convierte el número a Romano
*/
String resultado = "";// acumulador
int base = 10; // posicion del número a convertir
do {
int cifra = nArabigo % base;
resultado = tomarValorRomano(cifra) + resultado;
nArabigo = nArabigo - cifra;
base = base * 10;
} while (nArabigo != 0);
return resultado;
}
private static int estadoSiguiente(int edoActual, char caracter) {
/**
* Se verifica el caracter y se busca su correspondiente indice en el
* automata Se inicializa a 7 para representar que el caracter es
* cualquier valor diferente del Alfabeto valido
*/
int posAlfabeto = 7;
switch (caracter) {
case 'I':
posAlfabeto = 0;
break;
case 'V':
posAlfabeto = 1;
break;
case 'X':
posAlfabeto = 2;
break;
case 'L':
posAlfabeto = 3;
break;
case 'C':
posAlfabeto = 4;
break;
case 'D':
posAlfabeto = 5;
break;
case 'M':
posAlfabeto = 6;
}
/**
* sintaxi: Automata de aceptación de la cadena de los números romanos
* Aceptación>0 y Rechazo = -1, Alfabeto = {I V X L C D M} Estados =
* 0..19
*/
int[][] sintaxi =
// I V X L C D M, OTRO /*estado*/
{{ 1, 4, 5, 8, 9, 12, 14, -1}, /* (0) */
{ 2, 3, 3, -1, -1, -1, -1, -1}, /* (1) */
{ 3, -1, -1, -1, -1, -1, -1, -1}, /* (2) */
{-1, -1, -1, -1, -1, -1, -1, -1}, /* (3) */
{16, -1, -1, -1, -1, -1, -1, -1}, /* (4) */
{ 1, 4, 6, 7, 7, -1, -1, -1}, /* (5) */
{ 1, 4, 7, -1, -1, -1, -1, -1}, /* (6) */
{ 1, 4, -1, -1, -1, -1, -1, -1}, /* (7) */
{ 1, 4, 18, -1, -1, -1, -1, -1}, /* (8) */
{ 1, 4, 5, 8, 10, 11, 19, -1}, /* (9) */
{ 1, 4, 5, 8, 11, -1, -1, -1}, /* (9) */
{ 1, 4, 5, 8, -1, -1, -1, -1}, /* (11)*/
{ 1, 4, 5, 8, 13, -1, -1, -1}, /* (12)*/
{ 1, 4, 5, 8, 10, -1, -1, -1}, /* (13)*/
{ 1, 4, 5, 8, 9, 12, 15, -1}, /* (14)*/
{ 1, 4, 5, 8, 9, 12, 16, -1}, /* (15)*/
{ 1, 4, 5, 8, 9, 12, -1, -1}, /* (16)*/
{ 2, -1, -1, -1, -1, -1, -1, -1}, /* (17)*/
{ 1, 4, 6, -1, -1, -1, -1, -1}, /* (18)*/
{ 1, 4, 5, 8, -1, -1, -1, -1}};/* (19)*/
/**
* retorna el estado siguiente en el automata
*/
return sintaxi[edoActual][posAlfabeto];
}
private static boolean validaRomano(String nRomano) {
int edo = 0; //se inicializa el estado
/**
* Se recorre el automata y se verifica que es correcta la sintaxi del
* romano
*/
for (int i = 0; edo >= 0 && i < nRomano.length(); i++) {
edo = estadoSiguiente(edo, nRomano.charAt(i));
}
/**
* se retorna la condición de aceptación o rechazo
*/
return ((edo < 0) ? false : true);
}
public static int aArabigo(String nRomano) {
/**
* Se verifica la sintaxi correcta de la cadena que se recive
*/
if (!validaRomano(nRomano)) {
return -1;
}
int valorArabigo = 0; // acumulador
int anterior; // indice del simbolo anterior en la cadena
int actual; // indice del simbolo actual en la cdena
/**
* Se toma el valor arbigo actual del final de la cadena que luego sera
* el valor anterior en la cadena
*/
for (actual = 0; actual < n; actual++)
if (SIMBOLO_ROMANO[actual].compareTo(nRomano.charAt(nRomano
.length() - 1)
+ "") == 0) {
valorArabigo = VALOR_ROMANO_ARABIGO[actual];
break;
}
anterior = actual;
/**
* Se convierte el romano a arabigo recorriendo desde el final hacia
* adelante la cadena, caracer por caracter Sumando su valor si el valor
* del caracter anterior es mayor o igual al valor del caracter actual y
* restando si el valor anterior es menor
*/
for (int i = nRomano.length() - 2, j = 0; i >= 0; i--) {
for (actual = 0; actual < n; actual++) {
if (SIMBOLO_ROMANO[actual].compareTo(nRomano.charAt(i) + "") == 0) {
break;
}
}
if (VALOR_ROMANO_ARABIGO[actual] < VALOR_ROMANO_ARABIGO[anterior]) {
valorArabigo = valorArabigo - VALOR_ROMANO_ARABIGO[actual];
} else {
valorArabigo = valorArabigo + VALOR_ROMANO_ARABIGO[actual];
}
anterior = actual;
}
return valorArabigo;
}
}
miércoles, 16 de febrero de 2011
Convertir números arabigos a números romanos y números romanos a números arabigos
sábado, 4 de septiembre de 2010
Manifest.MF - java.io.IOException: line too long
Al tratar de crear el jar de mi proyecto, especificando Main-Class y Class-Path me arrojaba el siguiente error
Pero al ejecutar el comando y pasarle el archivo para crear el manifest, me arrojaba el error anterior, busque en internet el error y no conseguí la solución, solo más personas con el mismo problema, pero por pura casualidad mis compañeros de trabajo y yo vimos como lo hace el Netbeas y notamos lo siguiente:
Las lineas donde se colocan los jar son de tamaño fijo, y la siguiente linea donde continua colocando los jar comienza con un espacio en blanco.
Como en el archivo siguiente "Manifest.txt"
jar -cfm programa.jar Manifest.txt java.io.IOException: line too long at java.util.jar.Attributes.read(Attributes.java:362) at java.util.jar.Manifest.read(Manifest.java:182) at java.util.jar.Manifest. <init> (Manifest.java:52) at sun.tools.jar.Main.run(Main.java:151) at sun.tools.jar.Main.main(Main.java:1149)En el campo Class-Path se colocan todos los jar que necesito, adicionales, para ejecutar mi programa, cada jar separados por espacio, pudiendo decir path_relacional/otrojar.jar, como lo dice la documentación de java.
Pero al ejecutar el comando y pasarle el archivo para crear el manifest, me arrojaba el error anterior, busque en internet el error y no conseguí la solución, solo más personas con el mismo problema, pero por pura casualidad mis compañeros de trabajo y yo vimos como lo hace el Netbeas y notamos lo siguiente:
Las lineas donde se colocan los jar son de tamaño fijo, y la siguiente linea donde continua colocando los jar comienza con un espacio en blanco.
Como en el archivo siguiente "Manifest.txt"
Manifest-Version: 1.0 Class-Path: lib/abeilleforms/formsrt.jar lib/apache-http-client/commonAl ejecutar nuevamente
s-codec-1.3.jar lib/apache-http-client/apache-mime4j-0.6.jar lib/apac he-http-client/commons-codec-1.3.jar lib/apache-http-client/commons-l ogging-1.1.1.jar lib/apache-http-client/httpclient-4.0.jar lib/apache -http-client/httpcore-4.0.1.jar lib/apache-http-client/httpmime-4.0.j ar lib/axis2/annogen-0.1.0.jar lib/axis2/axiom-api-1.2.7.jar lib/axis 2/axiom-impl-1.2.7.jar lib/axis2/axis2-adb-1.4.1.jar lib/axis2/axis2- java2wsdl-1.4.1.jar lib/axis2/axis2-kernel-1.4.1.jar lib/axis2/backpo rt-util-concurrent-3.1.jar lib/axis2/commons-codec-1.3.jar lib/axis2/ commons-httpclient-3.1.jar lib/axis2/commons-logging-1.1.1.jar lib/ax is2/log4j-1.2.15.jar lib/axis2/neethi-2.0.4.jar lib/axis2/wsdl4j-1.6. 2.jar lib/axis2/wstx-asl-3.2.4.jar lib/axis2/XmlSchema-1.4.2.jar lib/ hsqldb/hsqldb.jar lib/jcalendar/jcalendar-1.3.3.jar /lib/jcalendar/lo oks-2.0.1.jar lib/toplink/toplink-essentials.jar lib/toplink/toplink- essentials-agent.jar Created-By: 1.6.0_0 (Sun Microsystems Inc.) Main-Class: MiClaseMain
jar -cfm programa.jar Manifest.txtse creó el jar sin ningún problema
Error al depurar aplicaciones de eclipse en debian squeeze
FATAL ERROR in native method: JDWP No transports initialized, ERROR: transport error 202: connect failed: Conexión rehusada ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) JDWP exit erroEs un bug en debian en el archivo
/etc/sysctl.d/bindv6only.confDonde aparece
net.ipv6.bindv6only = 1Provoca que el jdk no pueda conectarse con el java debugger
Hay que setearlo a 0
Solución: como root escribir
sed -i 's/net.ipv6.bindv6only\ =\ 1/net.ipv6.bindv6only\ =\ 0/' \/etc/sysctl.d/bindv6only.conf && sudo invoke-rc.d procps restart
domingo, 15 de agosto de 2010
Usando HSQLDB
Conectar HSQLDB al administrador
cd ../data
Abrir administrador de la base de datos
java -classpath .../lib/hsqldb.jar org.hsqldb.util.DatabaseManager
java -classpath .../lib/hsqldb.jar org.hsqldb.util.DatabaseManager
Ejemplo de conector = jdbc:hsqldb:file:/home/lisibeth/workspace/proyecto/hsqldb/data/nombre_base_dato
Otras clases
org.hsqldb.util.DatabaseManager
org.hsqldb.util.DatabaseManagerSwing //Esta interfaz es mas amigable que la anterior
org.hsqldb.util.Transfer
org.hsqldb.util.QueryTool
org.hsqldb.util.SqlTool
HSQLDB Server
java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb
Más información aquí http://hsqldb.org/doc/guide/ch01.html
sábado, 14 de agosto de 2010
Instalar Virtualbox con soporte USB en Debian Lenny o Freeze
- Antes de comenzar debemos tener instalados los fuentes del kernell linux-header-NUESTRA VERSIÓN
Si no está instalado, para saber que versión instalar, en consola root escribir
uname -r
Que arroja la versión del kernell, luego instalamos
apt-get install linux-header-NUESTRA VERSIÓN
*Donde NUESTRA VERSIÓN = al valor dado por uname -r- El paquete build-essensial también tiene que estar instalado, este nos va permitir compilar el Virtualbox
apt-get install build-essential- Agregamos el repositorio para Virtualbox en consola root
gedit /etc/apt/sources.list
Agregar al archivo
deb http://download.virtualbox.org/virtualbox/debian lenny non-free- Descargar key de Oracle de aquí oracle_vbox.asc
Agregar Key
sudo apt-key add oracle_vbox.asc- Actualizamos repositorios
sudo apt-get update
Instalamos
apt-get install virtualbox-3.2- Agregamos nuestro usuario al grupo virtualbox
adduser lisibeth vboxusers- identificar grupo vboxusers
$ grep vbox /etc/group
vboxusers:x:120:lisibeth
en otro caso pudiera ser diferente.- Abrir archivo mountkernfs.sh
$gedit /etc/init.d/mountkernfs.sh
Ubicar
domount proc "" /proc proc -onodev,noexec,nosuid
Debajo de ésta agrega la siguiente línea...
domount usbfs usbdevfs /proc/bus/usb -onoexec,nosuid,nodev,devgid=120,devmode=664
El valor subrayado es el id del paso 7- Abrir archivo mountkernfs.sh
$ gedit /etc/fstab
Agregando al final las siguientes líneas
#usbfs
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0- Habilitar usb en la configuración de la maquina virtual y reiniciar los cambios
- El paquete build-essensial también tiene que estar instalado, este nos va permitir compilar el Virtualbox
Etiquetas:
programacion,
tecnologia
lunes, 26 de julio de 2010
Frases ... Pitágoras
“Dios habla a través de las matemáticas”
...Pitagoras...
Estoy jodía!! no entiendo nada, nada la vida! ... Esas matemáticas están fatales.... Seguiré haciendo demostraciones sobre lógica y teoría de conjunto, para mi examen... resultan más fácil de comprender....
...Pitagoras...
Estoy jodía!! no entiendo nada, nada la vida! ... Esas matemáticas están fatales.... Seguiré haciendo demostraciones sobre lógica y teoría de conjunto, para mi examen... resultan más fácil de comprender....
Etiquetas:
frases,
matematica,
pitagoras,
tristeza,
yo
lunes, 12 de julio de 2010
Apuntes - Teoría de conjuntos - Paradoja de Russell

Russell:"Me parece que una clase a veces es, y a veces no es, un miembro de sí misma. La clase de las cucharitas de té, por ejemplo, no es otra cucharita de té, pero la clase de cosas que no son cucharitas de té es una de las cosas que no son cucharitas... [esto] me condujo a considerar las clases que no son miembros de sí mismas; y estas, parecía, debían formar una clase. Me pregunté si esta clase es o no un miembro de sí misma. Si es un miembro de sí misma, debería poseer las propiedades que definen a dicha clase, que consisten en no ser miembros de sí mismas. Si no es un miembro de sí misma, no debe poseer la propiedad definitoria de la clase, y por tanto debe ser un miembro de sí misma. Así cada alternativa lleva a su opuesta y existe una contradicción."
Otra forma de exponer la misma idea:
Russell: en un pueblo había un barbero que afeitaba a todos aquellos que nunca se afeitaban a sí mismos, y solo a ellos. ¿Se afeitaba el barbero a sí mismo?
Etiquetas:
matematica,
paradoja de Roussell,
Roussell,
teoría de conjuntos
Suscribirse a:
Entradas (Atom)