Forum Webscript.Ru
Программирование => Perl => Тема начата: Alniger от 16 Мая 2006, 11:13:25
-
Здравствуйте, программеры на Perl.
Пишу программку на Perl по расчету, и возник вопросик:
существует массив, допустим
@mass=(2.1,2.8,3.6,4.8,5.2) #определенного шага нет
есть $num=3.7; (который я могу менять!!!)
то его крайние максимум 4.8, минимум 3.6
Как возможно нахождение их:
$nummax #соответственно по примеру 4.8
$nummin #соответственно по примеру 3.6
Подскажите как такое реализовать
Заранее огромное Вам спасибо!
-
1. (sort { $a <=> $b } grep { $_ >= $min } @mass)[0]
2. (sort { $b <=> $a } grep { $_ <= $max } @mass)[0]
-
А где здесь прописывается $num для сравнения в массиве.
Попробывал, не проходит:
#!/usr/bin/perl -w
@mass=(2.1,2.8,3.6,4.8,5.2);
$num=3.7;
(sort { $a <=> $b } grep { $num >= $min } @mass)[0]; #попробывал заменить $_ на $num, тоже не проходит
print "Content-Type: text/html\\n\\n";
print "Min: $min<\\html>";
-
тогда непонятна задача. как зависят nummax и nummin от num?
-
DB<1> @mass=(2.1,2.8,3.6,4.8,5.2)
DB<2> $num=3.7
DB<3> $min = (sort { $a <=> $b } grep { $_ >= $num } @mass)[0]
DB<4> p $min
4.8
-
Спасибо друзья, все получилось.
Вообще $num, $max, $min нужны для нахождения интерполяции, так требует СНиП в таблицах.
А с вычислением интерполяции буду париться дальше,
если что-нибудь посоветуете (по интерполяции) на Perl,
буду только рад.
Спасибо Вам еще раз.
-
Только что-то идет, сразу наступают проблемы.
Не могу разобраться со следующей проблемой:
Существует массив
@var1=(2000,6000,9000,12000);
есть переменная $mas1=6000;
соответсвенно есть элемент в массиве @var1 равный $mas1 => он же @var1[1];
Каким образом можно определить этот номер элемента в массиве и записать его в переменную $nomelem (должно получиться $nomelem=1;)
-
foreach (@var1) { ++$i; if ($var1[$i-1] == $_) { $nomelem = $i-1 }}
На перле тока так. Ибо не питон.
-
Спасибо Вам огромнейшее!!!
-
# perl -MBenchmark=timethese -de0
DB<1> @var1=(2000,6000,9000,12000);
DB<2> timethese (10_000_000,{\'A\' => q|$i = 0;foreach (@var1) { ++$i; if ($var1[$i-1] == $_) { $nomelem = $i-1 }}|,\'B\' => q|$nomelem = 0;map { $_ == 6000 ? last : $nomelem++ } @var1;|})
Benchmark: timing 10000000 iterations of A, B...
A: 40 wallclock secs (38.48 usr + 0.02 sys = 38.50 CPU) @ 259740.26/s (n=10000000)
B: -2 wallclock secs (-2.21 usr + 0.00 sys = -2.21 CPU) @ -4524886.88/s (n=10000000)
(warning: too few iterations for a reliable count)
DB<3> $nomelem = 0;map { $_ == 6000 ? last : $nomelem++ } @var1
DB<4> print $nomelem
1
DB<5>