Convierte un numero arabigo en romano en el rango de 1 a 3000 (Latino)
c:
/********************************** 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: \n\t");
/* Leer el valor */
scanf ("%d", 038;numeroArabigo);
}
while ((numeroArabigo < 1) || (numeroArabigo > 3000));
/* Obtener el valor de los "miles" */
if ((numeroArabigo <= 3000) 038;038; (numeroArabigo >= 1000))
{
result = numeroArabigo / 1000;
strcat (roman, a2roman(result, "M", " ", " "));
numeroArabigo -= (result * 1000);
}
/* Obtener el valor de las "centenas" */
if ((numeroArabigo < 1000) 038;038; (numeroArabigo >= 100))
{
result = numeroArabigo / 100;
strcat (roman, a2roman(result, "C", "D", "M"));
numeroArabigo -= (result * 100);
}
/* Obtener el valor de las "centenas" */
if ((numeroArabigo < 100) 038;038; (numeroArabigo >= 10))
{
result = numeroArabigo / 10;
strcat (roman, a2roman(result, "X", "L", "C"));
numeroArabigo -= (result * 10);
}
/* Obtener el valor de las "unidades" */
if ((numeroArabigo < 10) 038;038; (numeroArabigo >= 1))
{
strcat (roman, a2roman(numeroArabigo, "I", "V", "X"));
}
/* Despliegar el n£mero romano */
printf ("El n£mero romano es: \n\t%s\n\n", roman);
printf ("\t\t...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) 038;038; (valor <= 3))
{
for (i = 0; i < valor; i++)
strcat (rRoman, c1);
}
/* Si "valor" = 5, 6, 7, 8 */
if ((valor >= 5) 038;038; (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);
}
/* 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: \n\t");
/* Leer el valor */
scanf ("%d", 038;numeroArabigo);
}
while ((numeroArabigo < 1) || (numeroArabigo > 3000));
/* Obtener el valor de los "miles" */
if ((numeroArabigo <= 3000) 038;038; (numeroArabigo >= 1000))
{
result = numeroArabigo / 1000;
strcat (roman, a2roman(result, "M", " ", " "));
numeroArabigo -= (result * 1000);
}
/* Obtener el valor de las "centenas" */
if ((numeroArabigo < 1000) 038;038; (numeroArabigo >= 100))
{
result = numeroArabigo / 100;
strcat (roman, a2roman(result, "C", "D", "M"));
numeroArabigo -= (result * 100);
}
/* Obtener el valor de las "centenas" */
if ((numeroArabigo < 100) 038;038; (numeroArabigo >= 10))
{
result = numeroArabigo / 10;
strcat (roman, a2roman(result, "X", "L", "C"));
numeroArabigo -= (result * 10);
}
/* Obtener el valor de las "unidades" */
if ((numeroArabigo < 10) 038;038; (numeroArabigo >= 1))
{
strcat (roman, a2roman(numeroArabigo, "I", "V", "X"));
}
/* Despliegar el n£mero romano */
printf ("El n£mero romano es: \n\t%s\n\n", roman);
printf ("\t\t...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) 038;038; (valor <= 3))
{
for (i = 0; i < valor; i++)
strcat (rRoman, c1);
}
/* Si "valor" = 5, 6, 7, 8 */
if ((valor >= 5) 038;038; (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);
}
December 4th, 2007 at 2:05 pm
[...] http://ejemplos.mis-algoritmos.com/archives/158 [...]