![]() |
|
|
#1 |
|
что бы тут написать?
Регистрация: 18.04.2007
Сообщений: 93
|
только начал программировать на 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 );
__________________
Как ты к человеку, так и он к тебе... |
|
|
|
|
|
#2 |
|
Новичок
|
Могу сказать одно: мы учимся в одном институте на одном потоке. У меня задание было реализовать алгоритм вычитания в столбик - выполнил, сдал, для себя сделал заключение: Perl - никчемный язык.
|
|
|
|
|
|
#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 |
|
|