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
- Cada
Studentlleva un nombre y un vector de puntajes; la nómina se inicializa con llaves. - Los enlaces estructurados desempacan cada estudiante;
std::accumulatesobre0.0promedia los puntajes. {:<8} {:>7.1f} {:>5}mantiene cada fila en las mismas columnas que el encabezado.- El
class_totalacumulado se divide al final en un promedio del grupo, bajo la línea de cierre.
Palabras clave y builtins usados aquí
autoconstdoubleforintstruct
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.
Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.