Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sd-ca:2017:laboratoare:lab-08 [2018/01/12 17:26]
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 =====
  
-Acest laborator se va realiza pornind de la **{{:sd-ca:2017:​laboratoare:​lab8-schelet.rar|scheletul de cod}}**.+<​hidden>​ 
 +Acest laborator se va realiza pornind de la **{{:​sd-ca:​laboratoare:​labbinarytree-tasks.zip|scheletul de cod}}**.
  
 În cadrul arhivei, aveți la dispoziție un parser pentru expresii logice sub **forma normal disjunctivă - DNF**: În cadrul arhivei, aveți la dispoziție un parser pentru expresii logice sub **forma normal disjunctivă - DNF**:
Line 196: Line 189:
   *[**1p**] (BinaryTree.h) Realizați o parcurgere ''​inordine''​ în displayTree. Puteți să folosiți sau nu variabila de indentare care este dată ca argument. (**TODO 2.1**)   *[**1p**] (BinaryTree.h) Realizați o parcurgere ''​inordine''​ în displayTree. Puteți să folosiți sau nu variabila de indentare care este dată ca argument. (**TODO 2.1**)
   *[**2p**] (BinaryTree.h) Calculaţi înălţimea arborelui în getTreeHeight. (**TODO 2.2**)   *[**2p**] (BinaryTree.h) Calculaţi înălţimea arborelui în getTreeHeight. (**TODO 2.2**)
-  *[**2p**] (BinaryTree.h) ​GăsițLCA-ul a două noduri. (**TODO 2.3**)+  *[**2p**] (BinaryTree.h) ​Calculaţnumărul de noduri ​în getNumNodes. (**TODO 2.3**)
  
 <​note>​ <​note>​
Line 202: Line 195:
 </​note>​ </​note>​
  
-**BONUS** 
  
-3. [**6p**] 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. (**TODO 3.1**) +  *[**1p**] Folosiți drept model parseExpression și terminați parseTerm (**TODO ​3.1**)  
-  * [**2p**] (BinaryTree.h) Verificați dacă doi arbori sunt identici/​simetrici. (**TODO 3.2**) +  *[**1p**] Folosiți drept model parseExpression și terminați parseLiteral (**TODO ​3.2**) 
-  * [**2p**] (BinaryTree.h) Afișați un anumit nivel al arborelui. (**TODO 3.3**) +  *[**1p**] Verificați că expresia afișată este chiar cea pe care ați dat-o ca parametru (trebuie să faceți parcurgere în inordine și fără indentare) (**TODO ​3.3**)
- +
- +
-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 ​4.1**)  +
-  *[**1p**] Folosiți drept model parseExpression și terminați parseLiteral (**TODO ​4.2**) +
-  *[**1p**] Verificați că expresia afișată este chiar cea pe care ați dat-o ca parametru (trebuie să faceți parcurgere în inordine și fără indentare) (**TODO ​4.3**)+
  
 Pentru testarea acestui exercițiu, folosiți o expresie fără variabile, de exemplu: 0 & 1 | 1 & !0 | !1 | 1 & 1 & 1 Pentru testarea acestui exercițiu, folosiți o expresie fără variabile, de exemplu: 0 & 1 | 1 & !0 | !1 | 1 & 1 & 1
  
  
-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:2017:​laboratoare:​lab8-schelet.rar|scheletul de cod}}**.+
  
 În cadrul arhivei, aveți la dispoziție un parser pentru expresii logice sub **forma normal disjunctivă - DNF**: În cadrul arhivei, aveți la dispoziție un parser pentru expresii logice sub **forma normal disjunctivă - DNF**:
sd-ca/2017/laboratoare/lab-08.1515770766.txt.gz · Last modified: 2018/01/12 17:26 by cristian.creteanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0