پروژه: مدیریت نمرات

سیستم نمرات با هش، 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}}دِرف آرایه داخل هش

چالش‌های تکمیلی

  1. هیستوگرام با ستاره
  2. بهترین نمره هر درس
  3. فیلتر قبول/مردود

این مبحث بخشی از دوره آموزش کامل پرل است.

ابزارهای مرتبط