Menu

Convertidor a números romanos en pseint

2023-04-13
2023-04-16
  • Julio sturati

    Julio sturati - 2023-04-13

    hola a todos.... comparto este codigo para convertir números del 1 al 3999 en números romanos

    maneja solo ese rango por un problema con la tipografía que no me permite de mas salvo que me invente mi propios carácteres.

    Algoritmo romanos
        /// define variables
        Definir num Como Entero;
        Definir busca Como Entero;
        Definir cont Como Entero;
        Definir m Como Entero;///millar
        Definir c Como Entero;///centena
        Definir d Como Entero;///decena
        Definir u Como Entero;///unidad
        Definir mil Como Caracter;
        Definir cien Como Caracter;
        Definir diez Como Caracter;
        Definir unid Como Caracter;
        Definir resultado Como Caracter;
        Definir termina Como Logico;
        Definir correcto Como Logico;
        /// asigna vectores a las variables
        mil = "M,MM,MMM";
        cien = "C,CC,CCC,CD,D,DC,DCC,DCCC,CM";
        diez = "X,XX,XXX,XL,L,LX,LXX,LXXX,XC";
        unid = "I,II,III,IV,V,VI,VII,VIII,IX";
        ///varibles
        termina = Falso;
        Repetir 
            correcto = Falso;
            Mientras !correcto Hacer
                Borrar Pantalla;
                resultado ="";
                Escribir " ";
                Escribir " CONVERTIDOR DE NUMEROS ROMANOS ";
                Escribir " ";
                /// numero maximo es el 3999
                Escribir Sin Saltar " Escriba un numero de 4 cifras (3999 - para salir):  ";
                leer num;
                /// controla que este dentro del rango
                si num == 3999 Entonces
                    correcto = Verdadero;
                    termina = Verdadero;
                FinSi
                si num >= 1 & num <= 3999  Entonces
                    correcto = Verdadero;
                SiNo
                    Escribir " Numero no valido, intente nuevamente ";
                    Escribir " toque una tecla para continuar ";
                    Esperar Tecla;
                FinSi
            FinMientras
            /// separa por millar,centena,decena,unidad
            m=(num%10000-num%1000)/1000;
            c=(num%1000-num%100)/100;
            d=(num%100-num%10)/10;
            u=num%10;
            ///busca dentro de los vectores
            ///millar
            cont = 1 ;
            para busca = 1 Hasta Longitud(mil) Con Paso 1 Hacer
                si Subcadena(mil,busca,busca) == "," Entonces
                    cont = cont + 1;
                SiNo
                    si cont == m Entonces
                        resultado = resultado + Subcadena(mil,busca,busca);
                    FinSi
                FinSi
            FinPara
            ///centena
            cont = 1 ;
            para busca = 1 Hasta Longitud(cien) Con Paso 1 Hacer
                si Subcadena(cien,busca,busca) == "," Entonces
                    cont = cont + 1;
                SiNo
                    si cont == c Entonces
                        resultado = resultado + Subcadena(cien,busca,busca);
                    FinSi
                FinSi
            FinPara
            ///decena
            cont = 1 ;
            para busca = 1 Hasta Longitud(diez) Con Paso 1 Hacer
                si Subcadena(diez,busca,busca) == "," Entonces
                    cont = cont + 1;
                SiNo
                    si cont == d Entonces
                        resultado = resultado + Subcadena(diez,busca,busca);
                    FinSi
                FinSi
            FinPara
            ///unidad
            cont = 1 ;
            para busca = 1 Hasta Longitud(unid) Con Paso 1 Hacer
                si Subcadena(unid,busca,busca) == "," Entonces
                    cont = cont + 1;
                SiNo
                    si cont == u Entonces
                        resultado = resultado + Subcadena(unid,busca,busca);
                    FinSi
                FinSi
            FinPara
            ///imprime
            Escribir " EN NUMEROS ROMANOS SERIA ",resultado;
            Escribir " Toque una tecla para continuar ";
            Esperar Tecla;
        Mientras Que !termina
        Escribir " Gracias por jugar con CoDo&CoDo.";
    FinAlgoritmo
    
     
  • Anonymous

    Anonymous - 2023-04-16

    Hola, Muy interesante, no conocía que solo se puede con los caracteres latinos estándares codificar hasta el 3999, pero se puede utilizar caracteres latinos extendidos, esto es con tildes para representar los faltantes y mejorar el algoritmo anterior

    Romano Decimal Nominación
    (miles)
    Ѷ 5000 cinco mil
    Ӝ 10 000 diez mil
    Ĺ 50 000 cincuenta mil
    Ć 100 000 cien mil
    Ď 500 000 quinientos mil
    Ḿ 1 000 000 un millón

    En unicode también se definen algunos números romanos como un único símbolo, pero creo que el editor de texto de PSeInt aun no soporta UNICODE SYMBOLS, esperemos que en próximas actualizaciones se actualice scintilla





















     

Anonymous
Anonymous

Add attachments
Cancel