Advertisement
Wrenge

Untitled

Oct 21st, 2020
2,502
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.90 KB | None | 0 0
  1. #! /bin/usr/perl
  2.  
  3. #Разработать программу, которая во входном файле отыскивает последовательности символов (лексемы),
  4. #соответствующие записи чисел арабскими цифрами, и заменяет их последовательностями символов,
  5. # соответствующих записи чисел римскими цифрами. Имя входного файла вводится через командную строку
  6. #или с клавиатуры.
  7.  
  8. my %r = (
  9.     'M' => 1000,
  10.     'CM' => 900,
  11.     'D' => 500,
  12.     'CD' => 400,
  13.     'C' => 100,
  14.     'XC' => 90,
  15.     'L' => 50,
  16.     'XL' => 40,
  17.     'X' => 10,
  18.     'IX' => 9,
  19.     'V' => 5,
  20.     'IV' => 4,
  21.     'I' => 1
  22. );
  23.  
  24. open (my $IN, "in.txt")  or  die  ("Cant open file : $!");
  25.  
  26. @strings = <$IN>;
  27.  
  28. #$str =~s/(\d+)/a2r($&)/ge;
  29. #print $str;
  30.  
  31. foreach $line (@strings){
  32.     $line =~ s/([0-9]+)/a2r($&)/ge;;
  33.     print "$line";
  34.  
  35. }
  36. close($IN);
  37. open($OUT, ">out.txt") or  die  ("Cant open file : $!");
  38. foreach $line (@strings){
  39.         print $OUT "$line";
  40. }
  41.  
  42.  
  43. sub a2r {
  44.     my ($in) = @_;
  45.     my $result = "";
  46.     my @ra = ('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I');
  47.    
  48.     foreach my $i (@ra){
  49.         my $repeat = int($in / $r{$i});
  50.         $in -= $repeat * $r{$i};
  51.         $result .= $i x $repeat;
  52.     }
  53.     return $result
  54. }
  55.  
  56. sub r2a {
  57.     my ($in) = @_;
  58.     my $result = 0;
  59.     my @chars = split("", $in);
  60.     for (my $i=0; $i < @chars; $i++)
  61.     {
  62.         if($i + 1 < @chars && defined($r{$chars[$i] . $chars[$i + 1]}))
  63.         {
  64.             $result += $r{$chars[$i] . $chars[$i + 1]};
  65.             $i++;
  66.         }
  67.         else
  68.         {
  69.             $result += $r{$chars[$i]};
  70.         }
  71.     }
  72.     return $result;
  73. }
  74.  
  75.  
  76. #print(r2a("XCIX") ,"\n");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement