juegos

Juegos de terminal de Pancho: Catan (TUI, GUI, web, servidor, PicoCalc), ajedrez, calculadora y minijuegos
git clone https://git.lu3dhn.xyz/juegos.git
Log | Files | Refs

README.md (5723B)


      1 # Calculadora natural (estilo Casio fx-991)
      2 
      3 Calculadora científica para la terminal, una ventana SDL y la PicoCalc, con el mismo
      4 núcleo. La cuenta se ve como se escribe (fracciones apiladas, raíces, exponentes) y
      5 los resultados salen exactos cuando se puede: `1/3+1/6 = 1/2`, `√8 = 2√2`,
      6 `sin 60° = √3/2`, `asin(1/2) = π/6`. Tab (S⇔D) los pasa a decimal.
      7 
      8 ```sh
      9 make                 # ./calc (terminal) y ./calc-picosim
     10 ./calc               # terminal
     11 ./calc --gui         # ventana (la misma pantalla que la PicoCalc)
     12 ./calc --eval '\f{1}{3}+\r{8}'      # exacto y decimal en la consola
     13 make test            # ./calc --selftest (números, exactos, edición, modos)
     14 ./calc --selftest --deep            # 20 000 argumentos al azar por función
     15 make debug && make test             # con ASan/UBSan
     16 make check-arm       # que el núcleo compile para el RP2040, con tamaños
     17 make pico            # sd/firmware/Calculadora.bin, sd/pico1-apps/Calculadora.uf2, CALC.LOG/.SAV
     18 tools/shot.sh "1/3}+1/6~" f.png     # captura del simulador sin ventana
     19 ```
     20 
     21 ## Cómo se escribe
     22 
     23 Se tipea como en la compu y la forma natural se arma sola; también hay casillas
     24 vacías según el contexto, como en la Casio:
     25 
     26 | Tecla | Hace |
     27 |---|---|
     28 | `/` | fracción: toma lo de la izquierda como numerador (`12/3`, `(1+x)/2`); al principio o después de un operador, □/□ vacía |
     29 | `^` | exponente (`2^3`); `+ - × ÷ )` al final del exponente o denominador tipeado salen solos |
     30 | `#`, `$`, `\|`, `;` | √□, raíz n-ésima, valor absoluto, fracción mixta |
     31 | `sqrt(` `cbrt(` `abs(` `logb(` `exp(` | también arman la plantilla; `)` sale de ella |
     32 | `pi`, `ans`, `sin(`… | se convierten solos al tipear |
     33 | `integ(` `deriv(` `sum(` `prod(` | ∫ₐᵇ f dx, d/dx f en un punto, Σ y Π con la variable X; la `,` pasa al campo siguiente: `integ(0,1,x^2)`, `deriv(x^3,2)`, `sum(1,10,1/x^2)` |
     34 | `*` `:` `[` | ×, ÷, ×10ⁿ |
     35 | `A`-`F`, `M`, `X`, `Y` | variables; `x` minúscula también es X |
     36 | `>` y una letra | guarda el resultado en esa variable (STO) |
     37 | Enter / Esc / Retroceso / Supr | = / AC / borrar / borrar adelante |
     38 | Tab o F4 | S⇔D (en Programador: cambia la base) |
     39 | `@` o F2 | menú de modos;  `?` o F3: catálogo de funciones;  F5: ajustes;  `` ` `` o F1: SHIFT |
     40 | ↑ ↓ | se mueven por la fracción; si no hay fila, recorren el historial |
     41 
     42 SHIFT+Enter da el resultado en decimal; SHIFT+`#` pone ∛ y SHIFT+`^` pone x⁻¹.
     43 
     44 ## Modos
     45 
     46 1. **Calcular**: historial (se guarda), Ans, PreAns, variables, formatos Norm/Fix/Sci/Eng.
     47    Análisis como en la fx-991: integral definida (Gauss-Kronrod 7-15 adaptativo), derivada en
     48    un punto (diferencia central con extrapolación de Richardson), Σ y Π (exactas si los
     49    términos lo son; hasta 100 000 términos). Se pueden anidar hasta 3 niveles.
     50 2. **Ecuaciones**: sistemas 2×2 y 3×3 (exactos), polinomios de grado 2 y 3 (raíces
     51    racionales y con radicales exactas, complejas como a+bi, vértice) y SOLVE con X.
     52 3. **Tabla**: f(x) y g(x) con inicio, fin y paso (hasta 45 filas).
     53 4. **Gráfico**: f(x) y g(x), traza con ← →, zoom con + -, ventana con `w`, y automática.
     54    En la terminal se dibuja con medios bloques.
     55 5. **Programador**: entrada en DEC/HEX/BIN/OCT (Tab), 32 bits con signo, `and or xor xnor`,
     56    `not( neg(`; el resultado se ve en las cuatro bases.
     57 6. **Estadística**: 1 variable y regresiones lineal, cuadrática, logarítmica, exponencial,
     58    a·bˣ, potencia e inversa; x̂( e ŷ( en Calcular usan la última regresión.
     59 7. **Complejos**: `i` es la unidad imaginaria y `<` pone ∠ (forma polar r∠θ). Con un resultado
     60    en pantalla, `<` alterna a+bi ↔ r∠θ. √ de negativos, arg(, Conjg(, ReP(, ImP(, |z|, potencias;
     61    exacto cuando se puede (`2∠60 = 1+√3i`, `(2+i)⁻¹ = 2/5−1/5i`).
     62 8. **Matrices**: MatA-D (hasta 4×4) y VctA-D (2 o 3 elementos); `=` las define. En las cuentas,
     63    `A`-`D` escriben MatA-D y SHIFT + letra, VctA-D. Suma, producto (también matriz×vector),
     64    potencias, x⁻¹ (inversa), Det(, Trn(, Identity(, DotP(, CrossP(, Angle(, UnitV(, |v|.
     65    Con datos racionales el determinante y la inversa salen en fracciones exactas.
     66 
     67 En cualquier modo:
     68 - **Distribuciones** (catálogo `?`): NormPD(x,σ,μ), NormCD(a,b,σ,μ), InvN(área,σ,μ),
     69   BinomPD/CD(x,n,p), PoissPD/CD(x,λ).
     70 - **Sexagesimal**: `'` escribe ° (`12'30'45'` = 12°30′45″); con un resultado en pantalla, `'`
     71   lo muestra como grados, minutos y segundos.
     72 
     73 ## Arquitectura
     74 
     75 - `core/` (C99 sin malloc ni stdio ni float, como `catan/core`):
     76   - `dec.c`: decimal de 18 dígitos (15 que se muestran y 3 de guarda);
     77   - `dmath.c`: funciones, con reducción Cody-Waite y series;
     78   - `exact.c`: (a+b√r)/d·π^p en int64 con chequeo de desborde;
     79   - `num.c`: decimal + exacto;
     80   - `expr.c`: la expresión editable, tokens con plantillas, y su texto `\f{1}{3}`;
     81   - `compile.c` / `eval.c`: RPN con las precedencias de la Casio;
     82   - `fmt.c`: formato del resultado;
     83   - `layout.c`: disposición 2D con métrica de píxeles o de celdas;
     84   - `calc.c`: estado y teclas compartidas;
     85   - `modes.c`: los modos;
     86   - `persist.c`: guardado en texto.
     87 - `gfx/`: pantalla de 320x320 (PicoCalc, simulador y ventana) con la fuente propia `calcfont.c`
     88   (generada por `tools/mkcalcfont.py` desde misc-fixed ISO10646: trae π √ ≤ Σ, etc.).
     89 - `linux/`: terminal (`tui.c`, `tui_modes.c`), ventana (`gui.c`), guardado en
     90   `~/.local/share/calc/calc.sav`, selftest.
     91 - `pico/app.c`: bucle sobre `hal.h`; guarda en `CALC.SAV` 2 s después del último cambio.
     92   Pide las teclas extendidas (`hal_keys_ext`): Supr, F1-F10, Inicio/Fin. Los códigos del
     93   teclado de la PicoCalc no están confirmados: Ajustes → "Probar el teclado" los muestra.