-   
- #include<stdio.h> 
- #include<conio.h> 
- #include<string.h> 
- #include<stdlib.h> 
- #include<ctype.h> 
- #define MAX 100 
- int longitud;//LONGITUD DE LA CADENA ENTRADA 
- int salgo;//BANDERA Q HACE ACABAR EL PROGRAMA SI EL USUARIO HA INSERTADO UNA MALA ENTRADA 
- char entrada[MAX];//ENTRADA DEL USUARIO 
- char salida[MAX];//SALIDA YA CONVERTIDA A LETRAS 
- char actual[MAX];//VALOR DEL NUMERO ACTUAL 
- char actualposterior[MAX];//VALOR DEL NUMERO POSTERIOR 
- char revisada[MAX]; //LA ENTRADA UNA VEZ REVISADA PARA Q EL USUARIO NO ENTRE LETRAS 
- char opcio[MAX]; //OPCION SELECCIONADA 1 CASTELLANO 2 ROMANO 
- int p; 
- int aux; 
- int revisaelnumero(char a_revisar[]);//MIRA Q LA LONGITUD DEL TEXTO SEA MENOR DE 9 Y Q NO HAYAN LETRAS 
- void traduce_a_Cas(char revisada[]); //FUNCION Q "TRADUCE" AL CASTELLANO 
- void traduce_a_Rom(int); //FUNCION Q "TRADUCE" AL ROMANO 
- void interface(); //FUNCION Q PRINTA EL MENSAJE DE BIENVENIDA Y LAS OPCIONES 
- void Bienvenida(); //TAMBIEN ES LA Q SE ENCARGA DE RECOGER LA ENTRADA DEL USUARIO 
-   
- /*********************************MAIN DEL PROGRAMA**************************************/ 
- int main() 
- { 
-     while (salgo != 2)// 0. MIENTRAS NO DECIDAN SALIR... 
-     {                
-         Bienvenida();// LLAMA A LA FUNCION BIENBENIDA... 
-         getche();  
-         interface();//1. MUESTRA EL TEXTO EN PANTALLA Y ESPERA ENTRADA 
-         salgo = revisaelnumero(entrada);//2. REVISA Q LA ENTRADA ESTE BIEN 
-         if (salgo  == 0) 
-         {  
-             system("cls"); 
-             printf("n_______________________________________________________________nn");  
-             printf("La entrada ha sido erronea! Vuelva a intentarlo!n"); 
-             printf("nRecuerde que la longitud maxima son 3 numeros y no ponga letras!!"); 
-             printf("n_______________________________________________________________nn");  
-             getche(); 
-             main(); 
-         } 
-         if (salgo  == 3) 
-         {  
-             system("cls"); 
-             printf("n_______________________________________________________________nn");  
-             printf("La entrada ha sido erronea! Vuelva a intentarlo!n"); 
-             printf("nSolo el Numero 100 es soportado para 3 digitos!!"); 
-             printf("n_______________________________________________________________nn");  
-             getche(); 
-             main(); 
-         } 
-         if (salgo == 2) 
-         { 
-             printf("nAdios!!!n");//3.5 EL USUARIO HA DECIDIDO SALIR 
-         } 
-         else //4. SI LA ENTRADA ESTA BIEN LO TRADUCE AL IDIOMA SELECCIONADO 
-         {   
-              if (strcmp(opcio,"1") == 0) 
-             { 
-                 system("cls"); 
-                 printf("n__________________________________________________________nn");                      
-                 printf("nSU NUMERO EN PALABRAS:n"); 
-                 printf("n__________________________________________________________nn");    
-                 traduce_a_Cas(entrada); 
-             } 
-             else 
-             { 
-                 system("cls"); 
-                 printf("n__________________________________________________________nn");                      
-                 printf("nSU NUMERO EN ROMANO:n"); 
-                 printf("n__________________________________________________________nn");   
-                                traduce_a_Rom(p); 
-             } 
-                 printf("nn"); 
-                 printf("%sn  ",salida);//5. MUESTRA LA SALIDA 
-                 printf("nn"); 
-                 strcpy(salida,"");//6. VACIO LA SALIDA PARA NO CONCATENAR 
-                 getche(); 
-         } 
-     } 
- } 
- /*************************************FUNCIONES*******************************************/ 
- // FUNCION QUE "TRADUCE" EL NUMERO A EL CASTELLANO 
- void traduce_a_Cas(char revisada[]) 
- { 
-     char unidades[MAX][MAX]={"uno ","dos ","tres ","cuatro ","cinco ","seis ","siete ","ocho ","nueve "}; 
-     char decenas[MAX][MAX]={"diez ","veinte ","treinta ","cuarenta ","cincuenta ","sesenta ","setenta ","ochenta ","noventa "}; 
-     char centenas[MAX][MAX]={"ciento ","doscientos ","trescientos ","cuatrocientos ","quinientos ","seiscientos ","setecientos ","ochocientos ","novecientos "}; 
-     char decenasespeciales[MAX][MAX]={"diez ","once ","doce ","trece ","catorce ","quince ","dieciseis ","diecisiete ","dieciocho ","diecinueve "}; 
-     int numerito; 
-     int numeritoposterior; 
-     int i; 
-     int bandera; 
-     int posicionactual; 
-     longitud = strlen(revisada); 
-     for (i=longitud;i >= 1 ;i--) 
-     { 
-         bandera = longitud - i; 
-         posicionactual = longitud - bandera; 
-         switch(posicionactual) 
-         { 
-             case 1:case 4:case 7: //unidades 
-                 actual[0] = revisada[bandera];actual[1] = ' '; 
-                 numerito = atoi(actual); 
-                     if (numerito != 1) 
-                     { 
-                         strcat(salida,unidades[numerito-1]); 
-                     } 
-                     else 
-                     { 
-                         if (longitud == 4 && posicionactual == 4) 
-                         { 
-                         } 
-                         else if(longitud == 7 && posicionactual == 7) 
-                         { 
-                             strcat(salida,"un "); 
-                         } 
-                         else 
-                         { 
-                             strcat(salida,unidades[numerito-1]); 
-                         } 
-                     } 
-             break; 
-             case 2:case 5:case 8: //decenas 
-                 actual[0] = revisada[bandera];actual[1] = ' '; 
-                 numerito = atoi(actual); 
-                 actualposterior[0] = revisada[bandera+1];actualposterior[1] = ' '; 
-                 numeritoposterior = atoi(actualposterior); 
-                     if (numerito == 1) 
-                     { 
-                         if (numeritoposterior != 0) 
-                         { 
-                             strcat(salida,decenasespeciales[numeritoposterior]); 
-                             i--; 
-                         } 
-                         else 
-                         { 
-                             strcat(salida,decenas[numerito-1]); 
-                         } 
-                     } 
-                     else 
-                     { 
-                         strcat(salida,decenas[numerito-1]); 
-                         if (numeritoposterior !=0 && numerito != 0) strcat(salida,"y "); 
-                     } 
-             break; 
-             case 3:case 6: //centenas 
-                 actual[0] = revisada[bandera];actual[1] = ' '; 
-                 numerito = atoi(actual); 
-                 if (posicionactual == 6 && longitud > 6) 
-                 { 
-                     if (longitud == 7 && revisada[bandera-1] == '1') 
-                     { 
-                         strcat(salida,"millon "); 
-                     } 
-                     else 
-                     { 
-                         strcat(salida,"millones "); 
-                     } 
-                 } 
-                 else  
-                 if (posicionactual == 3 && longitud > 3) 
-                 { 
-                     if(revisada[bandera-1] =='0' && revisada[bandera-2] == '0' && revisada[bandera-3] == '0') 
-                     { 
-                     } 
-                     else 
-                     { 
-                         strcat(salida,"mil "); 
-                     } 
-                 } 
-                 if (numerito == 1 && revisada[bandera+1] == '0' && revisada[bandera+2] == '0') 
-                 { 
-                     strcat(salida,"cien "); 
-                 } 
-                 else 
-                 { 
-                     strcat(salida,centenas[numerito - 1]); 
-                 } 
-             break; 
-         }//fin del switch 
-     }//fin del for 
- } //fin de funcion 
-   
- /*******************************************/ 
- // FUNCION QUE "TRADUCE" EL NUMERO AL ROMANO  
- void traduce_a_Rom(int x) 
- { 
-     while(x>=1000){x-=1000;printf("M");} 
-     while(x>=900){x-=900;printf("CM");} 
-     while(x>=500){x-=500;printf("D");} 
-     while(x>=400){x-=400;printf("CD");} 
-     while(x>=100){x-=100;printf("C");} 
-     while(x>=90){x-=90;printf("XC");} 
-     while(x>=50){x-=50;printf("L");} 
-     while(x>=40){x-=40;printf("XL");} 
-     while(x>=10){x-=10;printf("X");} 
-     while(x>=9){x-=9;printf("IX");} 
-     while(x>=5){x-=5;printf("V");} 
-     while(x>=4){x-=4;printf("IV");} 
-     while(x>=1){x-=1;printf("I");} 
- } //fin de funcion 
-   
- /***********************/ 
- // FUNCION DE BIENVENIDA   
- void Bienvenida() 
- {  
-     system("cls");  
-     printf("n________________________________________________________________________________nn"); 
-     printf("BIENVENIDO SR USUARIOn"); 
-     printf("ESTA APLICACION LE PERMITE TRADUCIR NUMEROS A PALABRAS O NUMEROS ROMANOS.n"); 
-     printf("n________________________________________________________________________________nn"); 
-     printf("presione la tecla ENTERn"); 
- } 
-                
- /******************/ 
- //FUNCION  OPCIONES 
- void interface() 
- { 
-     system("cls");  
-     printf("n__________________________________________________________nn"); 
-     printf("  Digite un numero entre 1 y 100 , luego presione ENTER.n"); 
-     printf("   Si desea salir pulse * y ENTER.n"); 
-     printf("n__________________________________________________________nn"); 
-     printf("nNumero : "); 
-     scanf("%s",entrada); 
-     p=atoi(entrada);  
-     if (entrada[0] != '*') 
-     { 
-         system("cls");        
-         printf("n__________________________________________________________nn"); 
-         printf("nSELECCIONE UN TIPO DE TRADUCCION:n"); 
-         printf("n__________________________________________________________nn"); 
-         printf("nn"); 
-         printf("n[1] - TRADUCIR A PALABRAS.n"); 
-         printf("nn"); 
-         printf("n[2] - TRADUIR A NUMERO ROMANO.n"); 
-         printf("nn");  
-         printf("nOpcion : "); 
-         scanf("n%s",opcio); 
-     } 
- } 
-   
- /*********************************************************************************/ 
- //FUNCION Q REVISA EL NUMERO EN BUSCA DE UNA LONGITUD INCORRECTA O CARACTERES ALFA 
- int revisaelnumero(char a_revisar[]) 
- { 
-     int decision = 1; 
-     int largo; 
-     int i; 
-     largo = strlen(a_revisar); 
-     aux=atoi(a_revisar);  
-     if (aux>100) 
-     { 
-         decision = 3; 
-     } 
-         
-     if ((largo > 3) || (largo < 1)) //MIRO Q LA LONGITUD SEA CORRECTA 
-     {  
-         decision = 0; 
-     } 
-     else if(a_revisar[0] == '*') 
-     { 
-         decision = 2; 
-     } 
-     else 
-     { 
-         for(i=0;i<largo;i++) 
-         { 
-             if(isalpha(a_revisar[i]) != 0) //MIRO Q NO HAYA LETRAS INTRODUCIDAS 
-             {  
-                 decision = 0; 
-             } 
-         } 
-     } 
-     return decision; 
- } 
-   
-   
-