home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / qtawk / romn.exp < prev    next >
Text File  |  1990-04-23  |  2KB  |  96 lines

  1. # QTAwk utility to convert integers from 1 to 50 to roman numerals
  2. #
  3. BEGIN {
  4.     for ( i = 10 ; i < 50 ; i += 1 ) {
  5.     rmn = roman_numeral(i);
  6.     alp = d_to_alpha(i);
  7.     print i " : " rmn " : " strupr(rmn) " : " alp " : " strupr(alp);
  8.     }
  9. }
  10.  
  11. # function to convert decimal number to roman numeral
  12. function roman_numeral(num) {
  13.       # pwr_ten ==> maximum integer representable as roman numeral
  14.     local i, pwr_ten = 10000;
  15.     local frst_sym = '?', secd_sym = 'm', thrd_sym = '?';
  16.     local num_str = "";
  17.     local three_sym;
  18.  
  19.     num = int(num);
  20.     if ( num <= pwr_ten )
  21.     do {
  22.         pwr_ten /= 10;
  23.         i = num / pwr_ten;
  24.         num -= i * pwr_ten;
  25.         three_sym = "";
  26.         switch ( i ) {
  27.         case 3:
  28.             num_str ∩= secd_sym;
  29.         case 2:
  30.             num_str ∩= secd_sym;
  31.         case 1:
  32.             num_str ∩= secd_sym;
  33.             break;
  34.         case 4:
  35.             num_str ∩= secd_sym;
  36.             num_str ∩= thrd_sym;
  37.             break;
  38.         case 5:
  39.             num_str ∩= thrd_sym;
  40.             break;
  41.         case 8:
  42.             three_sym ∩= secd_sym;
  43.         case 7:
  44.             three_sym ∩= secd_sym;
  45.         case 6:
  46.             three_sym ∩= secd_sym;
  47.             num_str ∩= thrd_sym three_sym;
  48.             break;
  49.         case 9:
  50.             num_str ∩= secd_sym;
  51.             num_str ∩= frst_sym;
  52.             break;
  53.         case 0:
  54.             break;
  55.         }
  56.         switch ( frst_sym = secd_sym ) {
  57.         case 'm':
  58.             secd_sym = 'c';
  59.             thrd_sym = 'd';
  60.             break;
  61.         case 'c':
  62.             secd_sym = 'x';
  63.             thrd_sym = 'l';
  64.             break;
  65.         case 'x':
  66.             secd_sym = 'i';
  67.             thrd_sym = 'v';
  68.             break;
  69.         }
  70.     } while ( pwr_ten && num );
  71.     return num_str;
  72. }
  73.  
  74. # convert decimal number to alphabetic number - useful if alphabetic page
  75. # numbering wanted
  76. function d_to_alpha(num) {
  77.     local num_str = "";
  78.     local k;
  79.     local alphabet = "abcdefghijklmnopqrstuvwxyz ";
  80.  
  81.     num = int(num);
  82.     if ( num > 0 && num <= 308915776 ) { # test for maximum number convertable
  83.     while ( num > 26 ) {
  84.         k = num % 26;
  85.         num /= 26;
  86.         if ( !k ) {
  87.         k = 26;
  88.         num--;
  89.         }
  90.         num_str = substr(alphabet,k,1) num_str;
  91.     }
  92.     num_str = substr(alphabet,num,1) num_str;
  93.     }
  94.     return num_str;
  95. }
  96.