Convierte un numero arabigo en romano en el rango de 1 a 3000 (Ingles)

¿Has encontrado un error? ¿Tienes la solución? Deja tu correción ;-)

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 estudiante con únicamente conocimiento básico del lenguaje, no de programación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/********************************** A2R.C ***********************************/
/* Created by: Manuel F Martínez.                          manpaz@email.com */
/* Language:   C/C++                                                        */
/* Date:       Guatemala April 15, 2001                                     */
/* ************************************************************************ *//* Target: Convert an Arabical numeral to Roman, the input is any value in  */
/*         1 to 3000 range of integers.                                     */
/* Description:  The program take  the input  value and  the value of this  */
/*               position.                                                  */
/*                   e.g.:  int ArabicalNumeral = 3 7 5 9                   *//* The  number 3 to be in  the first position,  the number 7 in the second, */
/*                the number 5 ...   ;  to obtain the 3 do:                 */
/*                     result = ArabicalNumeral / 1000                      */
/*               Then result store the value of "thousands".                */
/*  After,  the function a2roman ( int, char, char, char ),  receive 1 int  *//*  parameter and 3 char, the char parameters indicates the three possible  */
/*  roman values to this  number and, the int indicates the value of  this  */
/*  position, the a2roman analizes the number and return a string with the  */
/*  equivalent  roman  number.  After , do  the  same  operation  for  the  */
/*  "hundreds", only that Result is equal to "Arabical % 100" and etc.      *//****************************************************************************/
/* NOTE:  IF YOU USE VISUAL C++, FIRST CREATE A WORKSPACE, SECOND CLEAR THE */
/*        LINE "clrscr();" THEN COMPILE THE PROGRAM.                        */
/****************************************************************************/
 /* HEADER FILES */
#include <stdio.h>
#include <conio.h>
#include <string.h>
 /* The char "c1" and "c2" are initialized in order that not affect the thousands */
char *a2roman (int value, char *c1, char *c2, char *c3);
 
int main (void)
{   int arabicalNumeral = 1; /* Initialization for read althought one time  */
   int result;              /* "result" store the position value           */
   char roman[15] = "";     /* "roman" contain the roman-numeral string    */
 
   /* This cicle allow to continue if "arabicalNumber" to be in the range */   do
   {
      /* Clear the screen */
      clrscr();
       /* Print a message to user */
      printf ("Enter a integer in 1 to 3000 range of integers: nt");
 
      /* Read the value */
      scanf ("%d", &arabicalNumeral);   }
   while ((arabicalNumeral < 1) || (arabicalNumeral > 3000));
 
   /* Obtain the value of thousands */
   if ((arabicalNumeral <= 3000) && (arabicalNumeral >= 1000))   {
      result = arabicalNumeral / 1000;
      strcat (roman, a2roman(result, "M", " ", " "));
      arabicalNumeral -= (result * 1000);
   } 
   /* Obtain the value of hundreds */
   if ((arabicalNumeral < 1000) && (arabicalNumeral >= 100))
   {
      result = arabicalNumeral / 100;      strcat (roman, a2roman(result, "C", "D", "M"));
      arabicalNumeral -= (result * 100);
   }
 
   /* Obtain the value of tens */   if ((arabicalNumeral < 100) && (arabicalNumeral >= 10))
   {
      result = arabicalNumeral / 10;
      strcat (roman, a2roman(result, "X", "L", "C"));
      arabicalNumeral -= (result * 10);   }
 
   /* Obtain the value of units */
   if ((arabicalNumeral < 10) && (arabicalNumeral >= 1))
   {      strcat (roman, a2roman(arabicalNumeral, "I", "V", "X"));
   }
 
   /* Display the Roman numeral */
   printf ("The Roman numeral is: nt%snn", roman);   printf ("tt      ...Press any key to exit.");
   getch();
 
   /* Succesfull return */
   return 0;}
 
char *a2roman (int value, char *c1, char *c2, char *c3)
{
   int i;   /* "i" is the index of the iteration */   char rRoman[15] = "";
 
   /* If value = 1, 2, 3 */
   if ((value >= 1) && (value <= 3))
   {      for (i = 0; i < value; i++)
         strcat (rRoman, c1);
   }
 
   /* If value = 5, 6, 7, 8 */   if ((value >= 5) && (value <= 8))
   {
      strcat (rRoman, c2);
 
      for (i = 0; i < (value - 5); i++)         strcat (rRoman, c1);
   }
 
   /* If value = 4 */
   if (value == 4)   {
      strcat (rRoman, c1);
      strcat (rRoman, c2);
   }
    /* If value = 9 */
   if (value == 9)
   {
      strcat (rRoman, c1);
      strcat (rRoman, c3);   }
 
   return (rRoman);
}

Punto importante: Si vas a sugerir un segmento de código en algún lenguaje debes hacerlo así:

  • Si es lenguaje C <code lang="c">Código en C</code>
  • Si es lenguaje Pascal <code lang="pascal">Aquí dentro el código de Pascal</code>.

De esta manera el código coloreas el código.

Deja un comentario

Suscribirse a los comentarios.