پروژه: مدیریت نمرات
سیستم نمرات با هش، sort پیشرفته و گزارش فرمتبندیشده.
پروژه ۳: سیستم نمرات 📊
کد کامل
sub average {
my @nums = @_;
return 0 unless @nums;
my $sum = 0;
$sum += $_ foreach @nums;
return $sum / scalar @nums;
}
sub grade_letter {
my ($avg) = @_;
return "A" if $avg >= 17;
return "B" if $avg >= 14;
return "C" if $avg >= 10;
return "F";
}
# داده: هر دانشآموز چند نمره
my %grades = (
Ali => [18, 15, 20],
Sara => [12, 19, 16],
Reza => [9, 11, 8],
Neda => [20, 18, 19],
);
# گزارش مرتب بر اساس میانگین (نزولی)
say "=" x 40;
say "گزارش نمرات کلاس";
say "=" x 40;
printf("%-10s %8s %6s\n", "نام", "میانگین", "نمره");
say "-" x 40;
foreach my $name (sort { average(@{$grades{$b}}) <=> average(@{$grades{$a}}) } keys %grades) {
my $avg = average(@{$grades{$name}});
my $letter = grade_letter($avg);
printf("%-10s %8.2f %6s\n", $name, $avg, $letter);
}
# آمار کلاس
my @all_avgs;
push @all_avgs, average(@{$grades{$_}}) foreach keys %grades;
say "-" x 40;
printf("میانگین کلاس: %.2f\n", average(@all_avgs));
say "بهترین: " . (sort { $b <=> $a } @all_avgs)[0];
مفاهیم بهکاررفته
| مفهوم | کجا؟ |
|---|---|
| هش از آرایهها | %grades |
| sort با sub | مرتبسازی بر اساس average |
| printf | جدول مرتب |
| @{$grades{$name}} | دِرف آرایه داخل هش |
چالشهای تکمیلی
- هیستوگرام با ستاره
- بهترین نمره هر درس
- فیلتر قبول/مردود
این مبحث بخشی از دوره آموزش کامل پرل است.