Avaluar expressions binàries amb variables

En aquest exercici considerarem arbres que representen expressions sobre
els operadors +, -, *, i sobre operands naturals i variables (una
variable serà una seqüència no buida de lletres minúscules).

Per exemple, el següent arbre representa l’expressió (3 + x * 2) - y

    -
    |-- +
    |   |-- 3
    |   '-- *
    |       |-- x
    |       '-- 2
    '-- y

Per avaluar una expressió com aquesta, necessitarem un diccionari que
relaciona cada variable amb el valor que conté (un map<string, int>).

Implementeu, doncs, la funció següent:

    /**
     * @brief Avalua una expressió binària amb variables
     *
     * L'expressió és sobre els naturals i els operadors `+`, `-`, i `*`.
     * A més, hi ha un diccionari `env` que conté parelles amb cada 
     * variable i el seu valor per a un conjunt de variables que poden 
     * aparèixer a l'arbre.
     *
     * @param t Arbre amb l'expressió binària.
     * @param env Diccionari amb parelles (nom de variable, valor). Aquest 
     *            diccionari no es pot modificar.
     *
     * @pre `t` és no buit. Totes les variables que apareixen a `t`
     *       estan definides a `env`. Les operacions expressades per
     *       l'arbre no produeixen errors d'_overflow_
     **/
    int tree_eval_env(BinTree<string> t, const map<string, int>& env);

Observació

Els fitxers públics (icona del gatet) contenen:

  ------------------- --------------------------------------------------------------
  main.cc             el programa principal
  bintree.hh          la classe BinTree
  bintree-io.hh       l’entrada/sortida de BinTree
  util.hh i util.cc   un mòdul d’utilitats: is_number, is_var_name i string_to_int
  ------------------- --------------------------------------------------------------

També hi ha un Makefile i el directori .vscode que té la configuració
per compilar i depurar amb VSCode.

Cal implementar tree_eval_env en un fitxer .cc nou, compilar, i
finalment enviar només el fitxer amb la funció.

Entrada

L’entrada consisteix en una seqüència de parelles d’arbres i
assignacions de variables. Cada grup d’assignacions de variables
simplement és una línea amb parelles amb el nom d’una variable i el seu
valor, separat per espais. (D’això se n’encarrega el programa principal
ja disponible als fitxer públics.)

Sortida

Per a cada cas, la sortida és el resultat d’avaluar l’expressió, cada
resultat en una línia separada. (Això també ho fa el programa
principal.)

Informació del problema

Autoria: PRO2

Generació: 2026-01-25T21:40:45.341Z

© Jutge.org, 2006–2026.
https://jutge.org
