This shows you the differences between two versions of the page.
sd-ca:2017:laboratoare:lab-08 [2018/01/12 15:08] cristian.creteanu [Exerciții] |
sd-ca:2017:laboratoare:lab-08 [2018/02/19 15:31] (current) cosmin_ioan.petrisor [Exerciții] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Lab 8 - Arbori si Arbori Binari ====== | ====== Lab 8 - Arbori si Arbori Binari ====== | ||
- | * Responsabil: [[mailto:cristiancreteanu06@gmail.com | Cristian Crețeanu]] | ||
- | * Data ultimei modificări: 12.01.2018 | ||
===== Obiective ===== | ===== Obiective ===== | ||
Line 155: | Line 153: | ||
</code> | </code> | ||
- | ==== Cel mai mic strămoș comun ==== | ||
- | O problemă importantă în analiza arborilor este determinarea celui mai mic strămoș comun (LCA - Lowest Common Ancestor). LCA-ul a două noduri, u si v, este nodul cel mai depărtat de rădăcină care îi are pe u și v ca descendenți. | ||
- | |||
- | {{ :sd-ca:2017:laboratoare:diagram1-2.png?200 |}} | ||
- | |||
- | Spre exemplu, cel mai mic straăoș comun al nodurilor 1 și 12 este 0, în timp ce pentru nodurile 4 și 7, acesta este 1. | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
+ | <hidden> | ||
Acest laborator se va realiza pornind de la **{{:sd-ca:laboratoare:labbinarytree-tasks.zip|scheletul de cod}}**. | Acest laborator se va realiza pornind de la **{{:sd-ca:laboratoare:labbinarytree-tasks.zip|scheletul de cod}}**. | ||
Line 202: | Line 195: | ||
</note> | </note> | ||
- | **BONUS** | ||
- | 3. [**4p**] Implementați (și **compilați!**) următoarele funcții pentru un arbore binar: | + | 3. [**3p**] (ast.cpp) Terminați de implementat parser-ul, actualizând și populând conținutul nodurilor din arbore. |
- | * [**2p**] (BinaryTree.h) Implementați una dintre cele 3 funcții: top/bottom/side view. | + | |
- | * [**2p**] (BinaryTree.h) Verificați dacă doi arbori sunt identici/simetrici. | + | |
- | + | ||
- | + | ||
- | 4. [**3p**] (ast.cpp) Terminați de implementat parser-ul, actualizând și populând conținutul nodurilor din arbore. | + | |
*[**1p**] Folosiți drept model parseExpression și terminați parseTerm (**TODO 3.1**) | *[**1p**] Folosiți drept model parseExpression și terminați parseTerm (**TODO 3.1**) | ||
*[**1p**] Folosiți drept model parseExpression și terminați parseLiteral (**TODO 3.2**) | *[**1p**] Folosiți drept model parseExpression și terminați parseLiteral (**TODO 3.2**) | ||
Line 217: | Line 204: | ||
- | 5. [**4p**] (ast.cpp) Implementați evaluarea unei expresii în evaluateAST() | + | 4. [**4p**] (ast.cpp) Implementați evaluarea unei expresii în evaluateAST() |
- | 6. [**2p**] Folosiți un hashtable pentru a ține evidența valorilor variabilelor. Variabilele sunt declarate la început, folosind atribuiri ''variabila = valoare''. Pentru fiecare astfel de linie citită, parsați-o și introduceți variabila împreună cu valoarea ei într-un hashtable (puteți folosi clasa [[http://www.cplusplus.com/reference/unordered_map/unordered_map/ | unordered_map]] din STL. ) | + | 5. [**2p**] Folosiți un hashtable pentru a ține evidența valorilor variabilelor. Variabilele sunt declarate la început, folosind atribuiri ''variabila = valoare''. Pentru fiecare astfel de linie citită, parsați-o și introduceți variabila împreună cu valoarea ei într-un hashtable (puteți folosi clasa [[http://www.cplusplus.com/reference/unordered_map/unordered_map/ | unordered_map]] din STL. ) |
Pentru evaluarea expresiei, de fiecare dată când intâlniți o variabilă, vedeți ce valoare îi este atribuită în hashtable și folosiți acea valoare pentru evaluarea expresiei. | Pentru evaluarea expresiei, de fiecare dată când intâlniți o variabilă, vedeți ce valoare îi este atribuită în hashtable și folosiți acea valoare pentru evaluarea expresiei. | ||
- | <hidden> | ||
Acest laborator se va realiza pornind de la **{{:sd-ca:laboratoare:labbinarytree-tasks.zip|scheletul de cod}}**. | Acest laborator se va realiza pornind de la **{{:sd-ca:laboratoare:labbinarytree-tasks.zip|scheletul de cod}}**. | ||