Автор Тема: Помогите с нахождением в массиве max и min  (Прочитано 4897 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Alniger

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 24
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Здравствуйте, программеры на 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

Подскажите как такое реализовать
Заранее огромное Вам спасибо!

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Помогите с нахождением в массиве max и min
« Ответ #1 : 16 Мая 2006, 12:05:32 »
1. (sort { $a <=> $b } grep { $_ >= $min } @mass)[0]
2. (sort { $b <=> $a } grep { $_ <= $max } @mass)[0]

Оффлайн Alniger

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 24
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с нахождением в массиве max и min
« Ответ #2 : 16 Мая 2006, 12:29:02 »
А где здесь прописывается $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>";

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Помогите с нахождением в массиве max и min
« Ответ #3 : 16 Мая 2006, 12:34:04 »
тогда непонятна задача. как зависят nummax и nummin от num?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Помогите с нахождением в массиве max и min
« Ответ #4 : 16 Мая 2006, 12:34:26 »
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
The documentations is your friend

Оффлайн Alniger

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 24
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с нахождением в массиве max и min
« Ответ #5 : 16 Мая 2006, 12:45:26 »
Спасибо друзья, все получилось.

Вообще $num, $max, $min нужны для нахождения интерполяции, так требует СНиП в таблицах.

А с вычислением интерполяции буду париться дальше,
если что-нибудь посоветуете (по интерполяции) на Perl,
буду только рад.

Спасибо Вам еще раз.

Оффлайн Alniger

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 24
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с нахождением в массиве max и min
« Ответ #6 : 17 Мая 2006, 10:52:42 »
Только что-то идет, сразу наступают проблемы.
Не могу разобраться со следующей проблемой:

Существует массив
@var1=(2000,6000,9000,12000);
есть переменная $mas1=6000;
соответсвенно есть элемент в массиве @var1 равный $mas1 => он же @var1[1];
Каким образом можно определить этот номер элемента в массиве и записать его в переменную $nomelem (должно получиться $nomelem=1;)

Оффлайн Zerokool

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 22
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с нахождением в массиве max и min
« Ответ #7 : 17 Мая 2006, 14:46:19 »
foreach (@var1) { ++$i; if ($var1[$i-1] == $_) { $nomelem = $i-1 }}
На перле тока так. Ибо не питон.

Оффлайн Alniger

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 24
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Помогите с нахождением в массиве max и min
« Ответ #8 : 17 Мая 2006, 15:00:49 »
Спасибо Вам огромнейшее!!!

Оффлайн arto

  • Ветеран
  • *****
  • Сообщений: 699
  • +0/-0
  • 2
    • Просмотр профиля
Помогите с нахождением в массиве max и min
« Ответ #9 : 17 Мая 2006, 15:15:24 »
# 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>

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28