from pyscript import document import math def log_base(value, base): return math.log(value) / math.log(base) def show_fields(fields_to_show): all_fields = [ "field_g", "field_a", "field_b", "field_n", "field_p", "field_y", ] for field_id in all_fields: el = document.getElementById(field_id) if field_id in fields_to_show: el.classList.add("show") else: el.classList.remove("show") def on_rule_change(event=None): rule = document.getElementById("rule_select").value if rule in ("1", "2"): show_fields({"field_g", "field_a", "field_b"}) elif rule == "3": show_fields({"field_g", "field_a", "field_n"}) elif rule == "4": show_fields({"field_g", "field_y"}) elif rule in ("5"): show_fields({"field_g", "field_a"}) document.getElementById("formula").innerText = "Kies een regel en vul de waarden in." document.getElementById("output").innerText = "" def read_float(input_id, label): raw = document.getElementById(input_id).value if raw is None or raw == "": raise ValueError(f"Vul {label} in.") try: return float(raw) except ValueError as exc: raise ValueError(f"{label} moet een getal zijn.") from exc def set_result(formula_html, output_text): document.getElementById("formula").innerHTML = formula_html document.getElementById("output").innerText = output_text def bereken(event): rule = document.getElementById("rule_select").value try: if rule == "1": g = read_float("g_input", "g") a = read_float("a_input", "a") b = read_float("b_input", "b") if g <= 0 or g == 1 or a <= 0 or b <= 0: raise ValueError("g > 0 en g ≠ 1, a > 0, b > 0.") lhs = log_base(a, g) + log_base(b, g) rhs = log_base(a * b, g) set_result( f"logg({a}) + logg({b}) = logg({a * b})", f"Links = {lhs:.6g}, rechts = {rhs:.6g}", ) elif rule == "2": g = read_float("g_input", "g") a = read_float("a_input", "a") b = read_float("b_input", "b") if g <= 0 or g == 1 or a <= 0 or b <= 0: raise ValueError("g > 0 en g ≠ 1, a > 0, b > 0.") lhs = log_base(a, g) - log_base(b, g) rhs = log_base(a / b, g) set_result( f"logg({a}) - logg({b}) = logg({a / b})", f"Links = {lhs:.6g}, rechts = {rhs:.6g}", ) elif rule == "3": g = read_float("g_input", "g") a = read_float("a_input", "a") n = read_float("n_input", "n") if g <= 0 or g == 1 or a <= 0: raise ValueError("g > 0 en g ≠ 1, a > 0.") lhs = log_base(a ** n, g) rhs = n * log_base(a, g) set_result( f"logg({a}{n}) = {n} · logg({a})", f"Links = {lhs:.6g}, rechts = {rhs:.6g}", ) elif rule == "4": g = read_float("g_input", "g") y = read_float("y_input", "y") if g <= 0 or g == 1: raise ValueError("g > 0 en g ≠ 1.") x = g ** y set_result( f"logg(x) = {y} geeft x = {g}{y}", f"x = {x:.6g}", ) elif rule == "5": g = read_float("g_input", "g") a = read_float("a_input", "a") if g <= 0 or g == 1: raise ValueError("g > 0 en g ≠ 1.") value = log_base(g ** a, g) set_result( f"logg({g}{a}) = {a}", f"Uitkomst = {value:.6g}", ) except ValueError as exc: document.getElementById("formula").innerText = "Controleer je invoer." document.getElementById("output").innerText = str(exc) on_rule_change()