miércoles, 18 de agosto de 2010

Números romanos

9 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. import javax.swing.JOptionPane;
    public class Romanos {

    public Romanos() {

    }

    public static void main(String[] args) {
    Romanos r= new Romanos();
    r.pedirValores();
    }
    public void pedirValores(){

    String val1=JOptionPane.showInputDialog("Digite el primer número");
    System.out.println("Dato1: "+val1);
    String val2=JOptionPane.showInputDialog("Digite el segundo número");
    System.out.println("Dato2: "+val2);
    char []numero1=val1.toCharArray();
    char []numero2=val2.toCharArray();
    sumar(numero1, numero2);

    }
    public int sumar(char[] num1, char[] num2){
    int dato1=0,dato2=0,suma;
    for (int i = 0; i < num1.length; i++) {
    int sumo=0;
    char pos = num1[i];
    char posi;
    boolean sigMayor=false;
    if(i<=num1.length-2){
    posi=num1[i+1];
    int y = this.validarDato(pos, posi);
    if(y==1){
    sigMayor=true;
    }
    }

    if(sigMayor==false){
    if(pos=='i'||pos=='I'){

    sumo=1;
    dato1=dato1+sumo;
    }
    if(pos=='x'||pos=='X'){

    sumo=10;
    dato1=dato1+sumo;
    }
    if(pos=='v'||pos=='V'){

    sumo=5;
    dato1=dato1+sumo;
    }
    if(pos=='l'||pos=='L'){

    sumo=50;
    dato1=dato1+sumo;
    }
    if(pos=='c'||pos=='C'){

    sumo=100;
    dato1=dato1+sumo;
    }
    if(pos=='d'||pos=='D'){

    sumo=500;
    dato1=dato1+sumo;
    }
    if(pos=='m'||pos=='M'){

    sumo=1000;
    dato1=dato1+sumo;
    }
    }else{
    if(pos=='i'||pos=='I'){

    sumo=1;
    dato1=dato1-sumo;
    }
    if(pos=='x'||pos=='X'){

    sumo=10;
    dato1=dato1-sumo;
    }
    if(pos=='v'||pos=='V'){

    sumo=5;
    dato1=dato1-sumo;
    }
    if(pos=='l'||pos=='L'){

    sumo=50;
    dato1=dato1-sumo;
    }
    if(pos=='c'||pos=='C'){

    sumo=100;
    dato1=dato1-sumo;
    }
    if(pos=='d'||pos=='D'){

    sumo=500;
    dato1=dato1-sumo;
    }
    if(pos=='m'||pos=='M'){

    sumo=1000;
    dato1=dato1-sumo;
    }
    }
    if(i3&&(num1[i]==num1[i+1])&&(num1[i+1]==num1[i+2])&&(num1[i+2]==num1[i+3])){
    System.out.println("Hay Error En El Numero");
    pedirValores();

    }
    }
    }
    System.out.println("El Equivalente del primer numero en enteros es: "+dato1);
    for (int i = 0; i < num2.length; i++) {

    int sumo=0;
    char pos = num2[i];
    char posi;
    boolean sigMayor=false;
    if(i<=num2.length-2){
    posi=num2[i+1];
    int y = this.validarDato(pos, posi);
    if(y==1){
    sigMayor=true;
    }
    }

    ResponderEliminar
  5. if(sigMayor==false){
    if(pos=='i'||pos=='I'){

    sumo=1;
    dato2=dato2+sumo;
    }
    if(pos=='x'||pos=='X'){

    sumo=10;
    dato2=dato2+sumo;
    }
    if(pos=='v'||pos=='V'){

    sumo=5;
    dato2=dato2+sumo;
    }
    if(pos=='l'||pos=='L'){

    sumo=50;
    dato2=dato2+sumo;
    }
    if(pos=='c'||pos=='C'){

    sumo=100;
    dato2=dato2+sumo;
    }
    if(pos=='d'||pos=='D'){

    sumo=500;
    dato2=dato2+sumo;
    }
    if(pos=='m'||pos=='M'){

    sumo=1000;
    dato2=dato2+sumo;
    }
    }else{
    if(pos=='i'||pos=='I'){

    sumo=1;
    dato2=dato2-sumo;
    }
    if(pos=='x'||pos=='X'){

    sumo=10;
    dato2=dato2-sumo;
    }
    if(pos=='v'||pos=='V'){

    sumo=5;
    dato2=dato2-sumo;
    }
    if(pos=='l'||pos=='L'){

    sumo=50;
    dato2=dato2-sumo;
    }
    if(pos=='c'||pos=='C'){

    sumo=100;
    dato2=dato2-sumo;
    }
    if(pos=='d'||pos=='D'){

    sumo=500;
    dato2=dato2-sumo;
    }
    if(pos=='m'||pos=='M'){

    sumo=1000;
    dato2=dato2-sumo;
    }
    }
    if(i3&&(num2[i]==num2[i+1])&&(num2[i+1]==num2[i+2])&&(num2[i+2]==num2[i+3])){
    System.out.println("Hay Error En El Numero");
    pedirValores();

    }
    }
    }
    System.out.println("El Equivalente del segundo numero en enteros es: "+dato2);
    suma=dato1+dato2;
    System.out.println("La suma es: "+ suma);
    convertirSumaARomano(suma);
    return suma;
    }
    public int validarDato(char a, char b){
    int sig = 0;
    int val1=0;
    int val2 = 0;
    if(a=='i'||a=='I'){
    val1=1;
    }
    if(a=='v'||a=='V'){
    val1=5;
    }
    if(a=='x'||a=='X'){
    val1=10;
    }
    if(a=='l'||a=='L'){
    val1=50;
    }
    if(a=='c'||a=='C'){
    val1=100;
    }
    if(a=='d'||a=='D'){
    val1=500;
    }
    if(a=='m'||a=='M'){
    val1=1000;
    }
    //segundoValor
    if(b=='i'||b=='I'){
    val2=1;
    }
    if(b=='v'||b=='V'){
    val2=5;
    }
    if(b=='x'||b=='X'){
    val2=10;
    }
    if(b=='l'||b=='L'){
    val2=50;
    }
    if(b=='c'||b=='C'){
    val2=100;
    }
    if(b=='d'||b=='D'){
    val2=500;
    }
    if(b=='m'||b=='M'){
    val2=1000;
    }
    if(val1<val2){
    sig=1;
    }
    return sig;
    }

    ResponderEliminar
  6. public void convertirSumaARomano(int c){
    if(c>=4000){
    System.out.println("La Suma Es Muy Grande Para La Capacidad De Los Numeros Romanos");
    System.exit(0);
    }
    Integer val=(Integer)c;
    String t= val.toString();
    String numfinal="";
    if(c>1000){
    int y=(int)c/1000;
    for (int i = 0; i =100){
    int yi=(int)c/100;
    if(yi<=3){
    for (int i = 0; i =5&&yi!=9){
    numfinal=numfinal+"D";
    yi=yi-5;
    for (int i = 0; i < yi; i++) {
    numfinal=numfinal+"C";
    }
    yi=yi+5;
    }
    if(yi==9){
    numfinal=numfinal+"CM";
    }
    c=c-100*yi;
    }
    if(c>=10){
    int yo=(int)c/10;
    if(yo<=3){
    for (int i = 0; i < yo; i++) {
    numfinal=numfinal+"X";
    }
    }
    if(yo==4){
    numfinal=numfinal+"XL";
    }
    if(yo>=5&&yo!=9){
    numfinal=numfinal+"L";
    yo=yo-5;
    for (int i = 0; i < yo; i++) {
    numfinal=numfinal+"X";
    }
    yo=yo+5;
    }
    if(yo==9){
    numfinal=numfinal+"XC";
    }
    c=c-10*yo;
    }
    if(c>=1){
    if(c==1){
    numfinal=numfinal+"I";
    }
    if(c==2){
    numfinal=numfinal+"II";
    }
    if(c==3){
    numfinal=numfinal+"III";
    }
    if(c==4){
    numfinal=numfinal+"IV";
    }
    if(c==5){
    numfinal=numfinal+"V";
    }
    if(c==6){
    numfinal=numfinal+"VI";
    }
    if(c==7){
    numfinal=numfinal+"VII";
    }
    if(c==8){
    numfinal=numfinal+"VIII";
    }
    if(c==9){
    numfinal=numfinal+"IX";
    }
    }
    System.out.println("Su Resultado Fue: " +numfinal);
    }
    }

    ResponderEliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  8. Propongo un codigo mas generalizado que el anterior.


    package Numeros_Romanos;

    import javax.swing.JOptionPane;


    public class NumerosRomanos {

    String unidades[], decenas[],centenas[];

    public NumerosRomanos(){

    unidades = new String[9];
    unidades[0] = "I";
    unidades[1] = "II";
    unidades[2] = "III";
    unidades[3] = "IV";
    unidades[4] = "V";
    unidades[5] = "VI";
    unidades[6] = "VII";
    unidades[7] = "VIII";
    unidades[8] = "IX";

    decenas = new String[9];
    decenas[0] = "X";
    decenas[1] = "XX";
    decenas[2] = "XXX";
    decenas[3] = "XL";
    decenas[4] = "L";
    decenas[5] = "LX";
    decenas[6] = "LXX";
    decenas[7] = "LXXX";
    decenas[8] = "XC";

    centenas = new String[2];
    centenas[0] = "C";
    centenas[1] = "CC";
    }

    public void numeroARomano(int numero){

    int numeroTemp = 0;
    String numeroRomano = "";
    if (numero < 10) {

    numeroRomano = unidades[numero-1];

    }else if (numero >= 10 && numero < 100){

    numeroTemp =(int) numero/10;
    numeroRomano = decenas[numeroTemp-1];
    numeroTemp = (int)numero%10;
    if (numeroTemp > 0) {
    numeroRomano += unidades[numeroTemp-1];
    }
    }else if(numero >= 100 && numero <= 200){

    numeroTemp = numero/100;
    numeroRomano = centenas[numeroTemp-1];
    numeroTemp = ((int)numero/10)%10;
    if (numeroTemp > 0) {
    numeroRomano += decenas[numeroTemp-1];
    }
    numeroTemp = numero%10;
    if (numeroTemp > 0) {
    numeroRomano += unidades[numeroTemp-1];
    }

    }
    System.out.print(numeroRomano);

    }

    ResponderEliminar
  9. public int romanoNumero(String romanoA, String romanoB){

    int multiplicador = 0,noArreglo = 0,posision = 0;// donde arreglo es el identificador de los arreglos unidades, decenas ycentenas
    String numeros[] = new String[romanoA.length()-1];

    for (int i = 0; i < numeros.length; i++) {

    numeros[i] = romanoA.charAt(i)+"";

    }
    int l = romanoA.length()-1,sumaRomanoA = 0,sumaRomanoB = 0,d = 0;
    while(l >= 0){


    for (int i = 0; i < unidades.length; i++) {//busca

    if (unidades[i].equals(romanoA.charAt(l)+"")) {

    noArreglo = 0;
    posision = i;
    break;
    }
    if (decenas[i].equals(romanoA.charAt(l)+"")) {

    noArreglo = 1;
    posision = i;
    break;
    }


    }


    if (centenas[0].equals(romanoA.charAt(l)+"")) {

    noArreglo = 2;
    posision = 0;

    }

    if (noArreglo == 0) {

    multiplicador = 1;

    }else if(noArreglo == 1){

    multiplicador = 10;

    }else if(noArreglo == 2){

    multiplicador = 100;

    }
    if (d > (posision+1)*multiplicador) {

    sumaRomanoA -= (posision+1)*multiplicador;

    }else{

    sumaRomanoA += (posision+1)*multiplicador;

    }

    d = (posision+1)*multiplicador;
    l--;
    }
    d = 0;
    l = romanoB.length()-1;
    while(l >= 0){


    for (int i = 0; i < unidades.length; i++) {//busca

    if (unidades[i].equals(romanoB.charAt(l)+"")) {

    noArreglo = 0;
    posision = i;
    break;
    }
    if (decenas[i].equals(romanoB.charAt(l)+"")) {

    noArreglo = 1;
    posision = i;
    break;
    }


    }


    if (centenas[0].equals(romanoB.charAt(l)+"")) {

    noArreglo = 2;
    posision = 0;

    }

    if (noArreglo == 0) {

    multiplicador = 1;

    }else if(noArreglo == 1){

    multiplicador = 10;

    }else if(noArreglo == 2){

    multiplicador = 100;

    }
    if (d > (posision+1)*multiplicador) {

    sumaRomanoB -= (posision+1)*multiplicador;

    }else{

    sumaRomanoB += (posision+1)*multiplicador;

    }

    d = (posision+1)*multiplicador;
    l--;
    }

    return sumaRomanoA+sumaRomanoB;

    }
    public static void main(String[] args){


    NumerosRomanos a = new NumerosRomanos();


    String numero1 = JOptionPane.showInputDialog("Ingrese un numero romano1");
    String numero2 = JOptionPane.showInputDialog("Ingrese un numero romano2");

    a.numeroARomano(a.romanoNumero(numero2, numero1));

    }

    }

    ResponderEliminar