forum.rastrnet.ru

forum.rastrnet.ru (http://forum.rastrnet.ru/index.php)
-   Программируем (http://forum.rastrnet.ru/forumdisplay.php?f=35)
-   -   Сортировка в Perl (http://forum.rastrnet.ru/showthread.php?t=57783)

GreG 01.10.2011 19:53

Сортировка в Perl
 
только начал программировать на Perl, буквально недели две назад (изучаем по институтской методичке). задали задание: "дан массив имен и рост студентов. необходимо отсортировать и вывести по убыванию (по росту) этот список. я попробовал хэш массивом задать имена и значения роста, потом нашел простенький код сортировки и вставил в программу. но, как я понял, толком ничего не сортируется и вообще я не понимаю, как идет сортировка. просьба помочь кто в этом разбирается... если тут таковые есть.
Код:

#!/usr/bin/perl

my $i; # индекс в массиве
my $stud_name; # фамилия студента


# хеш-массив, в котором записаны сведения о росте студентов
my %rost = (
'Ivanov' => 176,
'Petrov' => 165,
'Sidorov' => 190,
'Razuvaev' => 186,
'Lebedev' => 174,
'Moroz' => 168,
'Vase4kin' => 182,
'Yudin' => 180
);

my @mas = sort by_rost keys %rost;
sub by_rost { $rost{$b} <=> $rost{$a} }

#my @mas = %rost;
#my @mas = sort by_rost values %rost;
#sub by_rost { $rost{$b} <=> $rost{$a} }

print "\nVivod hash-massiva\n";
# получить значения всех элементов хеш-массива можно так:
# ПРИМЕЧАНИЕ. В этом случае функция keys выбирает из
# хеш-массива значения всех ключей (т.е. фамилии
# студентов) и формирует из них массив,
# а конструкция foreach перебирает все элементы
# этого массива, присваивая поочередно их значения
# переменной $stud_name.
foreach $stud_name ( keys %rost )
{
print "Rost studenta $stud_name: $rost{ $stud_name }\n";
}
print "\nVivod hash-massiva s ispolzovaniem peremennoi \$_\n";
# получить значения всех элементов хеш-массива можно так:
# ПРИМЕЧАНИЕ. В этом случае функция keys выбирает
# из хеш-массива значения всех ключей
# (т.е. фамилии студентов) и формирует из них
# массив, а конструкция foreach перебирает все
# элементы этого массива, присваивая поочередно их
# значения "теневой" переменной $_.
foreach ( keys %rost )
{
# для сравнения на точное равенство числовых значений
# используется оператор "==", на неравенство: >, <, >=, <=
if ( $rost{ $_ } == 165 )
{
print "Student $_ imeet nizkui rost: $rost{ $_ }\n";
}
else
{
print "Student $_ imeet visokui rost: $rost{ $_ }\n";
}
}

sleep 20;

exit( 0 );


TTЛ 02.10.2011 02:04

Могу сказать одно: мы учимся в одном институте на одном потоке. У меня задание было реализовать алгоритм вычитания в столбик - выполнил, сдал, для себя сделал заключение: Perl - никчемный язык.

GreG 03.10.2011 17:06

Цитата:

Сообщение от TTЛ (Сообщение 802989)
Могу сказать одно: мы учимся в одном институте на одном потоке.

с чего, вдруг, такое умозаключение?
кстати говоря, может кому пригодиться, мне тут помогли, вроде заработало)
Код:

#!/usr/bin/perl
 
use 5.8.8; use strict; use warnings;
 
my ($key);
 
my %rost = (
    'Ivanov' => 176,
    'Petrov' => 165,
    'Sidorov' => 190,
    'Razuvaev' => 186,
    'Lebedev' => 174,
    'Moroz' => 168,
    'Vase4kin' => 182,
    'Yudin' => 180
);
 
foreach $key ( sort { $rost{$b} <=> $rost{$a} } keys %rost ) {
    print "$key $rost{$key}\n";
}

sleep 20;
 
exit 0;

Цитата:

Сообщение от TTЛ (Сообщение 802989)
для себя сделал заключение: Perl - никчемный язык.

у меня одногруппник так чуть ли не сразу сказал) и кстати тоже пришел к этому выводу, когда задание взялся делать)


Текущее время: 21:41. Часовой пояс GMT +7.

Powered by vBulletin® Version 3.8.4 Patch Level 5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot

Форум открыт в июле 2004 г.