Algarismos Romanos e Indo-arábicos
/*Autor: Dante Cardoso Pinto de Almeida
Licenca: Dominio Publico - Public Domain*/
#include <stdio.h>
int main(int argc, char *argv[])
{
short int rodando;
do /*Este laco mantem o programa rodando enquanto o usuario desejar*/
{
unsigned int controle, controle2;
char rom[10];
short int opcao=0;
while(opcao!=1&&opcao!=2) /*Este laco forca o usuario a entrar com 1 ou 2*/
{
printf("\nTecle 1 para converter um numero em algarismos indo-arabicos para algarismos \nromanos.\n");
printf("Tecle 2 para converter um numero em algarismos romanos em numero para algarismos indo-arabicos. ");
scanf("%d", &opcao);
}
if(opcao==1)
{
int numero;
printf("\nVoce escolheu converter numeros em algarismos indo-arabicos para numeros em \nalgarismos romanos.\n");
printf("\nEntre com o numero. ");
scanf("%d", &numero);
printf("O numero representado em algarismos indo-arabico por %d, em agarismos romanos \neh representado por ", numero);
while(numero>0) /*Algoritmo para conversao de alg. indo-arabicos para romanos*/
{
while(numero-1000>-1)/*para cada milhar, imprimir um M*/
{
numero=numero-1000;
printf("M");
}
while(numero-900>-1)/*para cada 9 centenas, imprimir um CM*/
{
numero=numero-900;
printf("CM");
}
while(numero-500>-1) /*para cada 5 centenas, imprimir um D*/
{
numero=numero-500;
printf("D");
}
while(numero-400>-1) /*para cada 4 centenas, imprimir um CD*/
{
numero=numero-400;
printf("CD");
}
while(numero-100>-1)/*para cada centena, imprimir um C*/
{
numero=numero-100;
printf("C");
}
while(numero-90>-1)/*para cada 9 dezenas, imprimir um XC*/
{
numero=numero-90;
printf("XC");
}
while(numero-50>-1) /*para cada 5 dezenas, imprimir um L*/
{
numero=numero-50;
printf("L");
}
while(numero-40>-1)/*para cada 4 dezenas, imprimir um XL*/
{
numero=numero-40;
printf("XL");
}
while(numero-10>-1)/*para cada dezena, imprimir um X*/
{
numero=numero-10;
printf("X");
}
while(numero-9>-1)/*para cada 9 unidades, imprimir um IX*/
{
numero=numero-9;
printf("IX");
}
while(numero-5>-1)/*para cada 5 unidades, imprimir um V*/
{
numero=numero-5;
printf("V");
}
while(numero-4>-1) /*para cada 4 unidades, imprimir um IV*/
{
numero=numero-4;
printf("IV");
}
while(numero-1>-1)/*para cada unidade, imprimir um I*/
{
numero=numero-1;
printf("I");
}
}
}
if(opcao==2)
{
int numero=0;
printf("\nVoce escolheu converter numeros em algarismos romanos para numeros em algarismos indo-arabicos.\n");
printf("Entre com os algarismos romanos em letra maiuscula, lembrando que:\n");
printf("I=1, V=5, X=10, L=50, C=100, D=500 e M=100.\n");
scanf("%s", rom);
/*Algoritmo para conversao de alg. romanos para indo-arabicos*/
for(controle=0; rom[controle]!='\0'; controle++)
{
controle2=controle-1;
/*para cada M nao antecedido de C, somar 1000*/
if(rom[controle]=='M'&&rom[controle2]!='C')
{
numero=numero+1000;
}
/*para cada M antecedido de C, somar 800*/
if(rom[controle]=='M'&&rom[controle2]=='C')
{
numero=numero+800;
}
/*para cada D nao antecedido de C, somar 500*/
if(rom[controle]=='D'&&rom[controle2]!='C')
{
numero=numero+500;
}
/*para cada D antecedido de C, somar 300*/
if(rom[controle]=='D'&&rom[controle2]=='C')
{
numero=numero+300;
}
/*para cada C nao antecedido de X, somar 100*/
if(rom[controle]=='C'&&rom[controle2]!='X')
{
numero=numero+100;
}
/*para cada C antecedido de X, somar 80*/
if(rom[controle]=='C'&&rom[controle2]=='X')
{
numero=numero+80;
}
/*para cada L nao antecedido de X, somar 50*/
if(rom[controle]=='L'&&rom[controle2]!='X')
{
numero=numero+50;
}
/*para cada L antecedido de X, somar 30*/
if(rom[controle]=='L'&&rom[controle2]=='X')
{
numero=numero+30;
}
/*para cada X nao antecedido de I, somar 10*/
if(rom[controle]=='X'&&rom[controle2]!='I')
{
numero=numero+10;
}
/*para cada X antecedido de I, somar 8*/
if(rom[controle]=='X'&&rom[controle2]=='I')
{
numero=numero+8;
}
/*para cada V nao antecedido de I, somar 5*/
if(rom[controle]=='V'&&rom[controle2]!='I')
{
numero=numero+5;
}
/*para cada V antecedido de I, somar 3*/
if(rom[controle]=='V'&&rom[controle2]=='I')
{
numero=numero+3;
}
/*para cada I, somar 1*/
if(rom[controle]=='I')
{
numero++;
}
}
printf("O numero representado em algarismos romanos por ");
for(controle=0; rom[controle]!='\0'; controle++)
{
printf("%c", rom[controle]);
}
printf(" eh representado por \nalgarismos indo-arabicos na base decimal por ");
printf("%d .\n", numero);
}
printf("\nDigite 1 para manter o programa rodando. ");
scanf("%d", &rodando);
}while(rodando==1);
return 0;
}