typestar

grade_report.cpp en C++

Promedios y mejores notas por estudiante, impresos como una tabla alineada con std::format.

#include <algorithm>
#include <format>
#include <iostream>
#include <numeric>
#include <string>
#include <vector>

// grade_report: per-student averages in aligned columns

struct Student {
    std::string name;
    std::vector<int> scores;
};

int main() {
    const std::vector<Student> roster = {
        {"Ada", {92, 88, 95}},
        {"Grace", {85, 91, 89}},
        {"Alan", {78, 82, 80}},
        {"Edsger", {90, 94, 97}},
    };

    std::cout << std::format("{:<8} {:>7} {:>5}\n",
                             "name", "average", "best");
    std::cout << std::string(22, '-') << "\n";

    double class_total = 0.0;
    for (const auto &[name, scores] : roster) {
        double avg = std::accumulate(scores.begin(), scores.end(), 0.0)
                     / scores.size();
        int best = *std::ranges::max_element(scores);
        class_total += avg;
        std::cout << std::format("{:<8} {:>7.1f} {:>5}\n",
                                 name, avg, best);
    }

    std::cout << std::string(22, '-') << "\n";
    std::cout << std::format("class average: {:.1f}\n",
                             class_total / roster.size());
}

Cómo funciona

  1. Cada Student lleva un nombre y un vector de puntajes; la nómina se inicializa con llaves.
  2. Los enlaces estructurados desempacan cada estudiante; std::accumulate sobre 0.0 promedia los puntajes.
  3. {:<8} {:>7.1f} {:>5} mantiene cada fila en las mismas columnas que el encabezado.
  4. El class_total acumulado se divide al final en un promedio del grupo, bajo la línea de cierre.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
40
Caracteres a escribir
925
Tokens
306
Ritmo de tres estrellas
80 tpm

Al ritmo de tres estrellas de 80 tokens por minuto, este intento toma unos 230 segundos.

Escribe este fragmento

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

← Anterior Siguiente →