Convertir a romanos
Publicado por
Sergio Velasquez
en
19:44
lunes, 14 de diciembre de 2009
Etiquetas:
C++
,
Programación
/*roman_cy.cpp*/
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<ctype.h>
int r =0,c =0,j =0,i =0,acum=0,
mil =0,quini=0,cien=0,cinq=0,diez=0,
cinc=0,uno =0,s;
unsigned char cad[9000],op;
long num=0;
void romano(long n);
void anular();
void main()
{
do
{
i=0;
j=0;
anular();
textbackground(1);
textcolor(WHITE);
clrscr();
textcolor(15);
textbackground(0);
_setcursortype(2);
gotoxy(1,1);cprintf(" Make in Borland C++ 3.0 Model Compiler Small");
gotoxy(1,2);cprintf("ROMAN NUMBERS CALCULATOR ");
gotoxy(3,14);printf("Ingrese un n£mero cualquiera, debe ser entero puesto que");
gotoxy(3,15);printf("la numeraci¢n decimal en ROMANOS no existe: ");
scanf("%ld",&num);
romano(num);
_setcursortype(0);
textbackground(0);
textcolor(15);
gotoxy(1,50);cprintf(" Para efectuar otro c lculo presione S, para salir N ");
op=tolower(getche());
}
while (op!='n');
}//end of main
//***************************************************************************
void anular()
{
for(j=0;j<=9000;j++)/*initializing the vector with NULL characters*/
{
cad[j]=NULL;//deleting any garbage at memory
}
}
void romano(long n)
{
if (n<0)
{
s=1; //bander to activate the sign validation
n=abs(n); //converts to number without sign
}
else if (n>0)
{
s=0;
}
if (n<=15) n=n;
else
if (n>15) n++;
anular();
for(r=1;r<=n;r++)
{
acum=r;
i=0;
while (acum>0)
{
mil =(acum/1000);mil *=1000 ;acum-=mil ;
quini=(acum/500) ;quini*=500 ;acum-=quini;
cien =(acum/100) ;cien *=100 ;acum-=cien ;
cinq =(acum/50) ;cinq *=50 ;acum-=cinq ;
diez =(acum/10) ;diez *=10 ;acum-=diez ;
cinc =(acum/5) ;cinc *=5 ;acum-=cinc ;
uno =(acum/1) ;uno *=1 ;acum-=uno ;
}
acum=0;
anular();
while (mil>0) /*store at the vector the thousands*/
{
cad[i]='M'; i++ ;acum+=1000;
mil=mil-1000;
}
while (acum<r) /*store the rest numbers*/
{
if((quini==500)&&(cien==400))
{cad[i]='C';cad[i+1]='M'; i+=2;acum+=900;}
if((quini==500)&&(cien!=400))
{cad[i]='D'; i++ ;acum+=500;}
if((cien==400)&&(!quini))
{cad[i]='C';cad[i+1]='D'; i+=2;acum+=400;}
if(cien==300)
{cad[i]='C';cad[i+1]='C';cad[i+2]='C'; i+=3;acum+=300;}
if(cien==200)
{cad[i]='C';cad[i+1]='C'; i+=2;acum+=200;}
if(cien==100)
{cad[i]='C'; i++ ;acum+=100;}
if((diez==40)&&(cinq==50))
{cad[i]='X';cad[i+1]='C'; i+=2;acum+=90;}
if((cinq==50)&&(diez!=40))
{cad[i]='L'; i++;acum+=50;}
if((diez==40)&&(cinq!=50))
{cad[i]='X';cad[i+1]='L'; i+=2;acum+=40;}
if(diez==30)
{cad[i]='X';cad[i+1]='X';cad[i+2]='X'; i+=3;acum+=30;}
if(diez==20)
{cad[i]='X';cad[i+1]='X'; i+=2;acum+=20;}
if(diez==10)
{cad[i]='X'; i++;acum+=10;}
if((cinc==5)&&(uno==4))
{cad[i]='I';cad[i+1]='X'; i+=2;acum+=9;}
if((cinc)&&(uno!=4))
{cad[i]='V'; i++;acum+=5;}
if((uno==4)&&(cinc!=5))
{cad[i]='I';cad[i+1]='V' ;i+=2;acum+=4;}
if(uno==3)
{cad[i]='I';cad[i+1]='I';cad[i+2]='I'; i+=3;acum+=3;}
if(uno==2)
{cad[i]='I';cad[i+1]='I'; i+=2;acum+=2;}
if(uno==1)
{cad[i]='I' ; i++;acum+=1;}
}
c=i;
printf("\n\n");
textcolor(YELLOW);
textbackground(BLUE);
if (s==0) //case in that is positive
{
for(j=0;j<c;j++)
{
cprintf("%c",cad[j]);
}
}
else
if (s==1) //case in that is negative
{
cprintf("-");
for(j=0;j<c;j++)
{
cprintf("%c",cad[j]);
}
}
c=0;
i=0;
}
}//end function
Descarga





No response to “Convertir a romanos”
Publicar un comentario