18. C++ || Números romanos

Este es un ejercicio muy común que nos ponen en la universidad, hacer un programa en C++ que transforme de números decimales a romanos, vaya que es difícil para los que se están iniciando en la programación. Yo lo sé. Pero no se imaginan lo fácil y divertido que es este ejercicio en C++, como yo también sufrí mucho pensando en cómo resolverlo, les echo una mano resolviéndolo para ustedes, ¡sé que les encantará!





Tranformar números decimales a romanos en C++


#include <iostream> //  necesarios para el cin y cout 
using namespace std; 

int main () 
{
 int numero, unidades, decenas, centenas, millares;
 
 cout<< "Ingrese un numero"<<endl;
 cin>> numero;

 /*Esto se hace para separar el numero,
 tomen como ejemplo el numero 2103, a ese numero
 lo debemos transformar de la manera siguiente: 
 2 - 1 - 0 - 3 donde 3 va a ocupar la unidades, 
 0 las decenas, 1 las centenas y 2 los millares*/

 unidades = numero % 10; numero /= 10;
 decenas = numero % 10; numero /= 10;
 centenas = numero % 10; numero /= 10;
 millares = numero % 10; numero /= 10;

 switch (millares)
 {
  case 1: cout<<"M"; break;
  case 2: cout<<"MM"; break;
  case 3: cout<<"MMM"; break;
 }
 
 switch (centenas)
 {
  case 1: cout<<"C"; break;
  case 2: cout<<"CC"; break;
  case 3: cout<<"CCC"; break;
  case 4: cout<<"CD"; break;
  case 5: cout<<"D"; break;
  case 6: cout<<"DC"; break;
  case 7: cout<<"DCC"; break;
  case 8: cout<<"DCCC"; break;
  case 9: cout<<"CM"; break; 
 }
 
 switch (decenas)
 {
  case 1: cout<<"X"; break;
  case 2: cout<<"XX"; break;
  case 3: cout<<"XXX"; break;
  case 4: cout<<"XL"; break;
  case 5: cout<<"L"; break;
  case 6: cout<<"LX"; break;
  case 7: cout<<"LXX"; break;
  case 8: cout<<"LXXX"; break;
  case 9: cout<<"XC"; break; 
 }
 
 switch (unidades)
 {
  case 1: cout<<"I"; break;
  case 2: cout<<"II"; break;
  case 3: cout<<"III"; break;
  case 4: cout<<"IV"; break;
  case 5: cout<<"V"; break;
  case 6: cout<<"VI"; break;
  case 7: cout<<"VII"; break;
  case 8: cout<<"VIII"; break;
  case 9: cout<<"IX"; break;
 }

 return 0;
}



11 comentarios:

  1. me pueden ayudar con este ejecicio en C++:
    Diseñar el algoritmo que permita a dos personas que desean intercambiar sus identidades (nombre, dirección, teléfono, edad) siempre y cuando la edad del primero fuese mayor que la edad de segundo en no más de 4 años. Ingresar los datos de cada persona y mostrar sus nuevas identidades o un mensaje mostrando la diferencia de edades que impidiera el intercambio.

    ResponderEliminar
    Respuestas
    1. Ok, solo válidas la edad cuando la persona 2 es mayor que la uno al momento de mostrar la diferencia, espero que sí sea lo que ocupas.

      #include
      #include
      #include


      void ingresa();
      void intercambio();

      using namespace std;

      struct Persona1{
      char nom [40 ];
      char dir [ 20 ];
      int tel;
      int edad;
      }p1[2];

      struct Persona2{
      char nom [40 ];
      char dir [ 20 ];
      int tel;
      int edad;
      }p2;

      int i;

      int main()
      {
      cout<<"datos. "<>p1[i].tel;
      cout<<"edad: ";
      cin>>p1[i].edad;
      cout<0 && dif<=4 ){
      strcpy(p2.nom , p1[i+1].nom);
      strcpy(p1[i+1].nom , p1[i].nom);
      strcpy(p1[i].nom , p2.nom);

      strcpy(p2.dir , p1[i+1].dir);
      strcpy(p1[i+1].dir , p1[i].dir);
      strcpy(p1[i].dir , p2.dir);

      p2.tel = p1[i+1].tel;
      p1[i+1].tel = p1[i].tel;
      p1[i].tel = p2.tel;

      p2.edad =p1[i+1].edad;
      p1[i+1].edad = p1[i].edad;
      p1[i].edad = p2.edad;

      for(i=0; i<2; i++){
      cout<<i<<" nombre: "<<p1[i].nom<<endl;
      cout<<i<<" direccion: "<<p1[i].dir<<endl;
      cout<<i<<" telefono: "<<p1[i].tel<<endl;
      cout<<i<<" edad: "<<p1[i].edad<<endl<<endl;
      }
      }
      else{
      cout<<" no se puede cambiar la identidad hay una diferencia de "<<dif<<" años. ";
      }

      }

      Eliminar
  2. me podrían ayudar de transformar un numero a romano pero usando función

    ResponderEliminar
  3. hola! una pregunta, despues de eso como puede hacer para pasar ese numero romano pero a clave morse?

    ResponderEliminar
  4. Ok todo bien, el programa funciona pero no termino de entender cual es la función de

    unidades = numero % 10; numero /= 10;
    decenas = numero % 10; numero /= 10;
    centenas = numero % 10; numero /= 10;
    millares = numero % 10; numero /= 10;

    Me explicas?

    ResponderEliminar
    Respuestas
    1. yo tampoco lo entendi al principio pero aqui va:

      EJEMPLO:1512

      1512/10= cociente=151,residuo=2
      151/10= cociente=15;residuo=1
      15/10=cociente=1;residuo=5
      1/10=cociente=0;residuo=1

      el residuo es igual a la cantidad de cada elemento(unidad,decena,centena,millar)
      quedaria:

      2 unidades
      1 decena
      5 centenas
      1 millar


      de esa forma lo simplificas para que la maquina trabaje.

      Eliminar
  5. Me gustaría saber como hacer el ejercicio con un numero de 5 o mas cifras, ya que no encuentro la forma de escribir el numero 5000 en romano gracias.

    ResponderEliminar
    Respuestas
    1. se repiten los mismos numeros pero con una linea arriba de ellos por ello solo llega a 3000

      Eliminar
  6. Hey me podrían ayudar
    Realice un programa con Programación orientada a objetos en C++ con class: CON UN
    METODO HAGA LA Conversión de enteros, entre 1 y 3999 a números ROMANOS (con constructor
    copia);

    ResponderEliminar