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

تقرير الصف

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

challenge icon

التحدي

سهل

أضف الأمر REPORT. أبقِ كل أمر من الخطوات السابقة يعمل تمامًا كما كان من قبل.

  • REPORT: أجب بسطر واحد لكل طالب مخزَّن بالترتيب الأبجدي، وبالتنسيق نفسه المستخدم في الرد على AVG (ada: 88.8 أو bo: no grades). ثم أضف السطر Class average: متبوعًا بمتوسط جميع الدرجات المسجَّلة لكل الطلاب، مع منزلة عشرية واحدة، أو no grades عندما لا تكون هناك أي درجات مسجَّلة.

ينتج عن أمر REPORT واحد عدة ردود، ويُطبع كل رد في سطر مستقل.

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

جرّب بنفسك

average_text <- function(scores) {
  if (length(scores) == 0) "no grades" else sprintf("%.1f", mean(scores))
}

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))
      }
    } else if (parts[1] == "AVG") {
      if (!(name %in% names(grades))) {
        replies <- c(replies, paste("no student", name))
      } else {
        replies <- c(replies, paste0(name, ": ", average_text(grades[[name]])))
      }
    }
  }
  replies
}

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

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

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