01.10.2011, 19:53 | #1 |
что бы тут написать?
Регистрация: 18.04.2007
Сообщений: 93
|
Сортировка в 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 );
__________________
Как ты к человеку, так и он к тебе... |
02.10.2011, 02:04 | #2 |
Новичок
|
Могу сказать одно: мы учимся в одном институте на одном потоке. У меня задание было реализовать алгоритм вычитания в столбик - выполнил, сдал, для себя сделал заключение: Perl - никчемный язык.
|
03.10.2011, 17:06 | #3 |
что бы тут написать?
Регистрация: 18.04.2007
Сообщений: 93
|
с чего, вдруг, такое умозаключение?
кстати говоря, может кому пригодиться, мне тут помогли, вроде заработало) Код:
#!/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;
__________________
Как ты к человеку, так и он к тебе... |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
perl и MySQL на freebsd | m`ax | Программируем | 3 | 04.09.2008 23:43 |
|