Avaluar expressions binàries amb variables Z78925


Statement
 

pdf   zip   tar

thehtml

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.ccel programa principal
bintree.hhla classe BinTree
bintree-io.hhl’entrada/sortida de BinTree
util.hh i util.ccun 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.)

Public test cases
  • Input

    b
    
    b 5 .
    
    +
    |-- 6
    '-- -
        |-- h
        '-- 4
    
    h 5 .
    
    +
    |-- 4
    '-- -
        |-- f
        '-- a
    
    f 4 a 8 .
    
    *
    |-- +
    |   |-- 8
    |   '-- b
    '-- -
        |-- 6
        '-- g
    
    b 2 g 9 .
    
    +
    |-- -
    |   |-- 1
    |   '-- d
    '-- +
        |-- g
        '-- c
    
    d 6 g 6 c 7 .
    

    Output

    5
    7
    0
    -30
    8
    
  • Information
    Author
    PRO2
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++