typestar

grade_report.odin en Odin

Los puntajes de quiz se pliegan en promedios y calificaciones, y luego en un reporte.

// Average quiz scores into letter grades and print the class report.
package main

import "core:fmt"

Student :: struct {
    name:    string,
    quizzes: [3]int,
}

roster := [4]Student{
    {"Imani", {92, 88, 95}},
    {"Theo", {78, 83, 80}},
    {"Sofia", {85, 91, 89}},
    {"Miles", {62, 70, 68}},
}

average :: proc(quizzes: [3]int) -> f32 {
    sum := 0
    for q in quizzes do sum += q
    return f32(sum) / 3.0
}

letter :: proc(avg: f32) -> string {
    switch {
    case avg >= 90.0: return "A"
    case avg >= 80.0: return "B"
    case avg >= 70.0: return "C"
    }
    return "retake"
}

main :: proc() {
    fmt.println("student    avg  grade")
    fmt.println("---------------------")

    class_sum: f32 = 0
    for s in roster {
        avg := average(s.quizzes)
        class_sum += avg
        fmt.printfln("%-8s %5.1f  %s", s.name, avg, letter(avg))
    }

    fmt.println("---------------------")
    fmt.printfln("class avg %.1f", class_sum / len(roster))
    fmt.println("quizzes graded:", len(roster) * 3)
}

Cómo funciona

  1. La lista es un arreglo de structs armado con literales posicionales.
  2. average suma un [3]int y f32(sum) vuelve honesta la división.
  3. %-8s y %5.1f acolchan las columnas; un switch pelado mapea las bandas.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
47
Caracteres a escribir
917
Tokens
271
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 250 segundos.

Escribe este fragmento

Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →