Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الطلاب المتفوقون

جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy. الدرس 53 من 56.

الطريقة الأخيرة، ابحث عن كل طالب يكون متوسط درجاته أعلى من حد معين.

هذا هو مسار بياناتك بكامل قوته: التكرار، والتصفية بناءً على قيمة مشتقة، وإرجاع الأسماء.

challenge icon

التحدي

متوسط

أضف طريقة top_students(threshold) التي تُرجع مصفوفة من الأسماء الذين يكون متوسط درجاتهم أكبر من threshold. أعد استخدام average_grade داخلياً، ولا تقم بإعادة حساب العمليات الحسابية. تخطَّ الطلاب الذين ليس لديهم درجات (متوسطهم هو 0 ولن يتجاوزوا أي عتبة موجبة).

يجب أن تظهر الأسماء بترتيب الإدخال؛ إذا لم يتأهل أحد، فقم بإرجاع [].

استبدل كتلة الاختبار بـ:

add_student("Alice", 20, ["Math"])
add_student("Bob",   22, ["Biology"])
add_student("Cara",  19, ["Physics"])
add_grade("Alice", 90)
add_grade("Alice", 85)
add_grade("Bob",   70)
add_grade("Cara",  60)
puts top_students(80).inspect
puts top_students(50).inspect
puts top_students(100).inspect

المخرجات المتوقعة تنتهي بـ:

["Alice"]
["Alice", "Bob", "Cara"]
[]

جرّب بنفسك

$student_records = {}

def add_student(name, age, courses)
  if $student_records.key?(name)
    puts "Student '#{name}' already exists."
    return
  end
  $student_records[name] = { age: age, grades: [], courses: courses }
  puts "Student '#{name}' added."
end

def add_grade(name, grade)
  unless $student_records.key?(name)
    puts "Student '#{name}' not found."
    return
  end
  $student_records[name][:grades] << grade
  puts "Grade #{grade} added for '#{name}'."
end

def average_grade(name)
  unless $student_records.key?(name)
    puts "Student '#{name}' not found."
    return nil
  end
  grades = $student_records[name][:grades]
  return 0 if grades.empty?
  grades.sum.to_f / grades.length
end

def list_by_course(course)
  $student_records.select { |_, info| info[:courses].include?(course) }.keys
end

# مهام: def top_students(threshold)، الأسماء التي يكون average_grade الخاص بها > threshold

add_student("Alice", 20, ["Math"])
add_student("Bob",   22, ["Biology"])
add_student("Cara",  19, ["Physics"])
add_grade("Alice", 90)
add_grade("Alice", 85)
add_grade("Bob",   70)
add_grade("Cara",  60)
puts top_students(80).inspect
puts top_students(50).inspect
puts top_students(100).inspect
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق العمليات

تدرّب بنفسك: مترجم Ruby عبر الإنترنت