[ create a new paste ] login | about

Link: http://codepad.org/GL9UCc52    [ raw code | output | fork ]

vicenaf - C, pasted on Aug 19:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    /*Programa que convierte un número entero entre 1 y 2000 (ambos incluidos)
    a numeración romana.
    Realizado por: vicente Arosa de la Fuente
    curso: Programador de Aplicaciones Informáticas (pai-torneiros)
    */
    char unidades=1, decenas=2, centenas=3, millares=4;
    char dato_teclado [5], dato_auxiliar [5];

    printf("Introduce un numero entero, entre 1 y 2000 (ambos inclusive), y te lo mostrare en numeros romanos: ");
    //Se recoge el dato en una cadena de caracteres
    scanf ("%s", dato_auxiliar);

    //Inicializamos dato_teclado a una cadena vacia
    strcpy (dato_teclado, "");

    //Añadimos un cero por cada dígito que falte para tener 4 digitos en total
    if (strlen(dato_auxiliar)==3) strcat (dato_teclado, "0");
    if (strlen(dato_auxiliar)==2) strcat (dato_teclado, "00");
    if (strlen(dato_auxiliar)==1) strcat (dato_teclado, "000");

    //al llegar a este punto tenemos una cadena de caracteres con 4 caracteres
    //con las unidades de millar, centenas, decenas y unidades en sus posiciones
    strcat (dato_teclado, dato_auxiliar);

    //para pasar un caracter a numero, basta con restar el código ASCII del
    //caracter 0 al caracter deseado, '8' - '0' = '8' - 48 = 56 - 48 = 8
    millares = dato_teclado [0] - 48;
    centenas = dato_teclado [1] - 48;
    decenas = dato_teclado [2] - 48;
    unidades = dato_teclado [3] - 48;

    switch (millares)
    {
        case 1:
            printf("M");
            break;
        case 2:
            printf("MM");
            break;
        default:
            break;
    }

    switch (centenas)
    {
        case 1:
            printf("C");
            break;
        case 2:
            printf("CC");
            break;
        case 3:
            printf("CCC");
            break;
        case 4:
            printf("CD");
            break;
        case 5:
            printf("D");
            break;
        case 6:
            printf("DC");
            break;
        case 7:
            printf("DCC");
            break;
        case 8:
            printf("DCCC");
            break;
        case 9:
            printf("CM");
            break;
        default:
            break;
    }

    switch (decenas)
    {
        case 1:
            printf("X");
            break;
        case 2:
            printf("XX");
            break;
        case 3:
            printf("XXX");
            break;
        case 4:
            printf("XL");
            break;
        case 5:
            printf("L");
            break;
        case 6:
            printf("LX");
            break;
        case 7:
            printf("LXX");
            break;
        case 8:
            printf("LXX");
            break;
        case 9:
            printf("XC");
            break;
        default:
            break;
    }

    switch (unidades)
    {
        case 1:
            printf("I");
            break;
        case 2:
            printf("II");
            break;
        case 3:
            printf("III");
            break;
        case 4:
            printf("IV");
            break;
        case 5:
            printf("V");
            break;
        case 6:
            printf("VI");
            break;
        case 7:
            printf("VII");
            break;
        case 8:
            printf("VIII");
            break;
        case 9:
            printf("IX");
            break;
        default:
            break;
    }
    return 0;
}


Output:
1
Segmentation fault


Create a new paste based on this one


Comments: