Convierte un numero arabigo en romano en el rango de 1 a 3000 (Latino)
/********************************** A2R.C ***********************************/ /* Creado por: Manuel F Mart¡nez. manpaz@email.com */ /* Lenguaje: C/C++ */ /* Fecha: Guatemala Abril 15, 2001 */ /* ************************************************************************ */ /* Objetivo: Convierte un n£mero ar bigo a romano, la entrada puede ser un */ /* n£mero entero en el rango de 1 a 3000. */ /* Descripci¢n: El programa toma el valor de entrada y el valor de esa */ /* posici¢n. */ /* p.e.: int numeroArabigo = 3 7 5 9 */ /* El n£mero 3 est en la primera posici¢n, el n£mero 7 en la segunda, */ /* El n£mero 5 ... ; para obtener el 3 hacemos: */ /* result = numeroArabigo / 1000 */ /* Entonces "result" almacena el valor en "miles". */ /* Despu‚s, la funci¢n a2roman (int, int, char, char), recive un par metro */ /* entero y tres caracteres, los par metros "char" indican los tres valores */ /* romanos posibles para este n£mero y, el entero indica el valor de esta */ /* posici¢n, la funci¢n a2roman analiza el n£mero y retorna un "string" con */ /* el equivalente en n£mero romano. Despu‚s, hace la misma operaci¢n para */ /* "centenas", solo que el resultado es igual a "numeroArabigo/100" y etc. */ /****************************************************************************/ /* NOTA: SI UTILIZA VISUAL C++ PRIMERO CREE UN ESPACIO DE TRABAJO, SEGUNDO */ /* ELIMINE LA LINEA "clrscr();" ENTONCES COMPILE EL PROGRAMA. */ /****************************************************************************/ /* Archivos de cabecera */ #include <stdio.h> #include <conio.h> #include <string.h> /* Los caracteres "c1" y "c2" son inicializados en orden que no afecten a los "miles". */ char *a2roman (int valor, char *c1, char *c2, char *c3); int main (void) { int numeroArabigo = 1; /* Inicializaci¢n para leer al menos una vez */ int result; /* "result" almacena el valor de la posici¢n */ char roman[15] = ""; /* "roman" contiene la cadena "ar bigo-romano */ /* Este ciclo perminte continuar si "numeroArabigo" ar bigo se encuentra en el rango */ do { /* Limpiar la pantalla */ clrscr(); /* Imprimir un mensaje al usuario */ printf ("Ingrese un entero en el rango de 1 a 3000: nt"); /* Leer el valor */ scanf ("%d", &numeroArabigo); } while ((numeroArabigo < 1) || (numeroArabigo > 3000)); /* Obtener el valor de los "miles" */ if ((numeroArabigo <= 3000) && (numeroArabigo >= 1000)) { result = numeroArabigo / 1000; strcat (roman, a2roman(result, "M", " ", " ")); numeroArabigo -= (result * 1000); } /* Obtener el valor de las "centenas" */ if ((numeroArabigo < 1000) && (numeroArabigo >= 100)) { result = numeroArabigo / 100; strcat (roman, a2roman(result, "C", "D", "M")); numeroArabigo -= (result * 100); } /* Obtener el valor de las "centenas" */ if ((numeroArabigo < 100) && (numeroArabigo >= 10)) { result = numeroArabigo / 10; strcat (roman, a2roman(result, "X", "L", "C")); numeroArabigo -= (result * 10); } /* Obtener el valor de las "unidades" */ if ((numeroArabigo < 10) && (numeroArabigo >= 1)) { strcat (roman, a2roman(numeroArabigo, "I", "V", "X")); } /* Despliegar el n£mero romano */ printf ("El n£mero romano es: nt%snn", roman); printf ("tt...Presione cualquier tecla para terminar."); getch(); /* Retorno exitoso */ return 0; } char *a2roman (int valor, char *c1, char *c2, char *c3) { int i; /* "i" es el ¡ndice de iteraciones */ char rRoman[15] = ""; /* Si "valor" = 1, 2, 3 */ if ((valor >= 1) && (valor <= 3)) { for (i = 0; i < valor; i++) strcat (rRoman, c1); } /* Si "valor" = 5, 6, 7, 8 */ if ((valor >= 5) && (valor <= 8)) { strcat (rRoman, c2); for (i = 0; i < (valor - 5); i++) strcat (rRoman, c1); } /* Si "valor" = 4 */ if (valor == 4) { strcat (rRoman, c1); strcat (rRoman, c2); } /* Si "valor" = 9 */ if (valor == 9) { strcat (rRoman, c1); strcat (rRoman, c3); } return (rRoman); }
Antes de comentar: Gran parte de los ejercicios propuestos no tienen librerías debido a que Wordpress las eliminó al verlas como etiquetas HTML. Si sabes/tienes/conoces las librerías que hacen falta, déjalo en los comentarios. Y lo mas importante: Todos los ejemplos fueron realizados por personas con únicamente conocimiento básico del lenguaje, no de programación.
Otro punto importante: Si vas a sugerir un segmento de código en algún lenguaje debes hacerlo así:
- Si es lenguaje C [c]Código en C[/c]
- Si es lenguaje Pascal [pascal]Aquí dentro el código de Pascal[/pascal].
De esta manera el código coloreas el código.
Otro punto importante para muchos que sienten que se les ignora: Todos los comentarios los reviso y en su debido momento los apruebo, pero ojo con el con lo siguiente:Me reservo el derecho de alterar, publicar o no los comentarios as´ como cambiar mis condiciones en el momento que así lo requiera.
¿estas de acuerdo? entonces adelante que ya te he quitado bastante tiempo leyendo esta basura de advertencias :)
[...] http://ejemplos.mis-algoritmos.com/archives/158 [...]