home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Assembler / dse-src5.dms / in.adf / Roman.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-07  |  1.4 KB  |  82 lines

  1. #include <stdio.h>
  2.  
  3. int ara=0;
  4. char rom[20];
  5.  
  6. static int  aratab[] = {0,1,5,10,50,100,500,1000};
  7. static char romtab[] = "0IVXLCDM";
  8.  
  9. int addrom (siffra)
  10.    int siffra;
  11. {
  12.    static int r;
  13.  
  14.    rom[r]=romtab[siffra];
  15.       rom[r+1]='\0';
  16.    r++;
  17.    return(aratab[siffra]);
  18. }
  19.  
  20. ararom()
  21. {
  22.    int i, g=7, h, flag=0, dec=ara;
  23.  
  24.    do
  25.       if (aratab[g]<=dec)
  26.          dec=dec-addrom(g);
  27.       else
  28.       {
  29.          for (i=6 ; i>1 ; i=i-2)
  30.             if (g>i-1)
  31.             {
  32.                h=(g-i)|1;
  33.                if (aratab[g]-aratab[h]<=dec)
  34.                {
  35.                   dec=dec+addrom(h);
  36.                   dec=dec-addrom(g);
  37.                   flag=1;
  38.                }
  39.             }
  40.          flag ? flag=0 : g--;
  41.       }
  42.    while (dec>0);   
  43. }
  44.  
  45. romara()
  46. {
  47.    int i, j, g=0;
  48.  
  49.    for (i=18 ; i>(-1) ; i--)
  50.       for (j=1 ; j<8 ; j++)
  51.          if (romtab[j]==rom[i])
  52.          {
  53.             if (j<g)
  54.                ara=ara-aratab[j];
  55.             else
  56.                ara=ara+aratab[j];
  57.             g=j;
  58.          }
  59. }
  60.  
  61. main()
  62. {
  63.    printf("\n1. Arabiska till romerska siffror");
  64.    printf("\n2. Romerska till arabiska siffror");
  65.    printf("\nAnge procedur: ");
  66.  
  67.    if (getchar()=='1')
  68.    {
  69.       printf("\nArabiska siffror: ");
  70.       scanf("%d",&ara);
  71.       ararom();
  72.    }
  73.    else
  74.    {
  75.       printf("\nRomerska siffror: ");
  76.       scanf("%s",&rom);
  77.       romara();
  78.    }   
  79.    printf("  Arabisk: %d\n  Romersk: %s\n\n",ara,rom);
  80. }
  81.  
  82.