grade_report.zig en Zig
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.
const std = @import("std");
const Student = struct {
name: []const u8,
quizzes: [3]u32,
};
const roster = [_]Student{
.{ .name = "Imani", .quizzes = .{ 92, 88, 95 } },
.{ .name = "Theo", .quizzes = .{ 78, 83, 80 } },
.{ .name = "Sofia", .quizzes = .{ 85, 91, 89 } },
.{ .name = "Miles", .quizzes = .{ 62, 70, 68 } },
};
fn average(quizzes: [3]u32) f32 {
var sum: u32 = 0;
for (quizzes) |q| sum += q;
return @as(f32, @floatFromInt(sum)) / 3.0;
}
fn letter(avg: f32) []const u8 {
if (avg >= 90.0) return "A";
if (avg >= 80.0) return "B";
if (avg >= 70.0) return "C";
return "retake";
}
pub fn main() void {
std.debug.print("student avg grade\n", .{});
std.debug.print("---------------------\n", .{});
var class_sum: f32 = 0;
for (roster) |s| {
const avg = average(s.quizzes);
class_sum += avg;
std.debug.print("{s:<8} {d:>5.1} {s}\n", .{
s.name, avg, letter(avg),
});
}
std.debug.print("---------------------\n", .{});
std.debug.print("class avg {d:.1}\n", .{class_sum / roster.len});
std.debug.print("quizzes graded: {d}\n", .{roster.len * 3});
}
Cómo funciona
- La lista es un arreglo de structs armado con sintaxis de literal anónimo.
averagesuma un[3]u32y@floatFromIntvuelve honesta la división.{s:<8}y{d:>5.1}acolchan las columnas; el pie promedia los promedios.
Palabras clave y builtins usados aquí
constf32fnforifpubreturnstructu32u8varvoid
El intento, en números
- Líneas
- 45
- Caracteres a escribir
- 1127
- Tokens
- 385
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 355 segundos.
Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.