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

متوسطات الطلاب

جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 24 من 64.

challenge icon

التحدي

سهل

أضف الأمر AVG. حافظ على عمل كل أمر من الخطوات السابقة تمامًا كما كان من قبل.

  • AVG <name>: أرجِع no student <name> للطالب غير المعروف، و<name>: no grades للطالب الذي لا يملك درجات، وإلا فأرجِع <name>: متبوعًا بمتوسط درجاته مقربًا إلى منزلة عشرية واحدة، مثل ada: 88.8.

ستكون دالة مساعدة تحوّل متجهًا من الدرجات إلى no grades أو إلى المتوسط المنسّق مفيدة مرة أخرى في الخطوة التالية.

يمرّر الكود المزوّد كل سطر إدخال إلى gradebook() باعتباره أمرًا واحدًا، ويطبع كل رد مُعاد في سطر مستقل. الاسم كلمة واحدة بأحرف لاتينية صغيرة، ويحتوي الإدخال فقط على الأوامر الموضحة حتى الآن.

جرّب بنفسك

gradebook <- function(commands) {
  grades <- list()
  replies <- c()
  for (cmd in commands) {
    parts <- strsplit(cmd, " ")[[1]]
    name <- parts[2]
    if (parts[1] == "ADD") {
      if (name %in% names(grades)) {
        replies <- c(replies, paste(name, "already exists"))
      } else {
        grades[[name]] <- numeric(0)
        replies <- c(replies, paste("added", name))
      }
    } else if (parts[1] == "GRADE") {
      if (!(name %in% names(grades))) {
        replies <- c(replies, paste("no student", name))
      } else {
        score <- as.numeric(parts[3])
        grades[[name]] <- c(grades[[name]], score)
        replies <- c(replies, paste("recorded", score, "for", name))
      }
    }
  }
  replies
}

# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")

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

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