"""Serie "Automatizar el cálculo" · Parte 1
Viga simplemente apoyada con carga repartida w y carga puntual P al centro.

Unidades: kN, m  (momentos en kN·m, rigidez EI en kN·m²)
Autor: Yordan Rocio Maldonado · notas-yarm.pages.dev
"""


def viga_simple(L, w, P, EI):
    """Devuelve momento máximo, cortante máximo y flecha al centro."""
    M = w * L**2 / 8 + P * L / 4                                  # kN·m
    V = w * L / 2 + P / 2                                         # kN
    flecha = 5 * w * L**4 / (384 * EI) + P * L**3 / (48 * EI)     # m
    return M, V, flecha


# --- Datos del ejemplo -------------------------------------------------------
w = 20.0              # carga repartida, kN/m
P = 30.0              # carga puntual al centro, kN
b, h = 0.30, 0.60     # sección de concreto, m
E = 25_000_000        # módulo de elasticidad, kPa (= 25 000 MPa)
I = b * h**3 / 12     # inercia, m⁴
EI = E * I            # kN·m²

# --- Una viga ----------------------------------------------------------------
M, V, f = viga_simple(6.0, w, P, EI)
print(f"L = 6 m  ->  M = {M:.0f} kN·m,  V = {V:.0f} kN,  flecha = {f*1000:.1f} mm  (L/{6/f:.0f})")

# --- Muchas vigas: lo que una calculadora no hace ----------------------------
print("\n  L (m)   M (kN·m)   V (kN)   flecha (mm)   L/flecha")
for L in [4, 5, 6, 7, 8]:
    M, V, f = viga_simple(L, w, P, EI)
    print(f"  {L:5.0f}   {M:8.0f}   {V:6.0f}   {f*1000:11.1f}   {L/f:8.0f}")
