2014-10-21 5 views
0

У меня есть два файла myresult и аннотация. Подробности этих файлов следующие. myresult:цикл не работает после выполнения условия

288..639 1.13075739182609-6.20035408429888i 
300..651 1.90372125344918-6.09008858828515i 
312..663 1.6908117147722-5.67058877579329i 
324..675 0.644484787809351-5.54571698740166i 
336..687 1.21850904281332-5.47700589647424i 

аннотация:

272..1042 
1649..2629 

Для цикла выполняется только один раз после того, как удовлетворяющих условию If. Он не входит снова в цикл даже после выполнения условия. например, в файле myresult 2-я строка удовлетворяет условию, то есть числа 300..651 находятся в диапазоне 1-й строки аннотации файла, поэтому он печатает все значения от 300 до 651. Но когда ему нужно идти в следующий раунд (3-я строка) т.е. 312..663, он не входит в этот цикл, так как этот диапазон также лежит в 1-й строке аннотации файла. , поэтому выход должен быть от 300 до 663, но он печатает только от 300 до 651. Код:

#!/usr/bin/perl 
use Math::Complex; 

open($inp0, "<myresult") or die "not found"; 
open($inp2, "<annotation") or die "not found"; 

my @arr2 = <$inp0>; 
my @arr4 = <$inp2>; 
my @result; 

foreach my $line1 (@arr2) { 
    my ($col1, $col2) = split(/\s/, $line1); 
    if ($col2 > 1.60) { 
     my ($from1, $to1) = split(/\.\./, $col1); 

     foreach my $line2 (@arr4) { 
      my ($from2, $to2) = split(/\.\./, $line2); 

      for (my $i = $from1; $i <= $to1; $i++) { 
       for (my $j = $from2; $j <= $to2; $j++) { 

        $res = grep(/$i/, @result); 
        if ($i == $j && $res == 0) { 
         print "$i \n"; 
         push(@result, $i); 
        } 
       } 
      } 
     } 
    } 
} 

ответ

2

Второй столбцы файла «myresult» содержит комплексные числа, как «1.13075739182609-6.20035408429888i», например.

Невозможно сравнить два комплексных номера. (Комплексное число представляет собой вектор комплексной плоскости с вещественной осью и мнимой осью. Два вектора нельзя сравнивать как целое.)

'($ col2> 1.60)' будет ложным для всех ваших данных в файле " myresult». Вот почему цикл не выполняется.

0

Как сказал Фуму, нельзя сравнивать два комплексных номера.

Если вам нужна помощь с комплексными номерами в Perl, то ознакомьтесь с модулем Math::Complex.

Смежные вопросы