Differences

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

Link to this comparison view

sd-ca:laboratoare:laborator-09 [2015/04/27 15:15]
cosmin_ioan.petrisor [Interviu]
sd-ca:laboratoare:laborator-09 [2015/05/10 08:43] (current)
mihai.neacsu2901 [Exerciții] Update tasks solution file name
Line 7: Line 7:
  
 În urma parcurgerii laboratorului,​ studentul va fi capabil să: În urma parcurgerii laboratorului,​ studentul va fi capabil să:
-  *să înţeleagă noţiunea de arbore şi structura unui arbore binar +  *înţeleagă noţiunea de arbore şi structura unui arbore binar 
-  *să construiască,​ în limbajul C++, un arbore binar +  *construiască,​ în limbajul C++, un arbore binar 
-  *să realizeze o parcurgere a structurii de date prin mai multe moduri +  *realizeze o parcurgere a structurii de date prin mai multe moduri 
-  *să citească o expresie matematică şi să-i construiască arborele binar asociat +  *citească o expresie matematică şi să-i construiască arborele binar asociat 
-  *să evalueze o expresie matematică dată printr-un arbore binar.+  *evalueze o expresie matematică dată printr-un arbore binar.
 ===== Noțiuni teoretice ===== ===== Noțiuni teoretice =====
  
Line 145: Line 145:
         ​         ​
         // ... si combinam rezultatele aplicand operatorul         // ... si combinam rezultatele aplicand operatorul
-        return AplicaOperator(nod->​op, ​nod->​leftnod->​right);+        return AplicaOperator(nod->​op, ​res1res2);
    } else {    } else {
         // Daca nodul terminal contine o variabila, atunci intoarcem valoarea variabilei         // Daca nodul terminal contine o variabila, atunci intoarcem valoarea variabilei
Line 157: Line 157:
 ===== Exerciții ===== ===== Exerciții =====
  
- +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:​lab08-tasks.zip}}**+
  
 Î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 182: Line 181:
 Negarea este reținută direct în nodul literal, deci pentru a trata acest caz trebuie să verificați primul caracter al nodului.</​note>​ Negarea este reținută direct în nodul literal, deci pentru a trata acest caz trebuie să verificați primul caracter al nodului.</​note>​
  
-1. [**5p**] Implementați (și **compilați!**) următoarele funcții pentru un arbore binar:+1. [**4p**] Implementați (și **compilați!**) următoarele funcții pentru un arbore binar:
   *[**1p**] (BinaryTree.h) Constructor / Destructor (eliberați memorie doar dacă este cazul) (**TODO 1.1**)   *[**1p**] (BinaryTree.h) Constructor / Destructor (eliberați memorie doar dacă este cazul) (**TODO 1.1**)
   *[**1p**] (BinaryTree.h) Implementați metoda de a seta datele reținute de un nod, posibilitatea de a returna și a seta arborii. (**TODO 1.2**)   *[**1p**] (BinaryTree.h) Implementați metoda de a seta datele reținute de un nod, posibilitatea de a returna și a seta arborii. (**TODO 1.2**)
   *[**2p**] (BinaryTree.h) Implementați metodele de inserare recursivă într-un nod din arbore. Presupuneți că se înserează în subarborele stâng sau drept, în mod aleator. (**TODO 1.3**)   *[**2p**] (BinaryTree.h) Implementați metodele de inserare recursivă într-un nod din arbore. Presupuneți că se înserează în subarborele stâng sau drept, în mod aleator. (**TODO 1.3**)
-  *[**1p**] (BinaryTree.h) Realizați o parcurgere în inordine în displayTree. Puteți să folosiți sau nu variabila de indentare care este dată ca argument. (**TODO 1.4**) 
  
-2. [**3p**] (main.cpp) Terminațde implementat parser-ul, actualizând șpopulând conținutul nodurilor din arbore. +2. [**3p**] ​Implementaţi ​(ş**compilaţi!**) următoarele funcţii pentru un arbore ​binar: 
-  *[**1p**] ​Folosiți drept model parseExpression șterminați parseTerm ​(**TODO 2.1**)  +  *[**1p**] ​(BinaryTree.h) Realizați o parcurgere ''​inordine''​ în displayTree. Putețsă folosiți sau nu variabila de indentare care este dată ca argument. ​(**TODO 2.1**) 
-  *[**1p**] ​Folosițdrept model parseExpression și terminați parseLiteral ​(**TODO 2.2**) +  *[**1p**] ​(BinaryTree.h) Calculaţînălţimea arborelui în getTreeHeight. ​(**TODO 2.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 șfără indentare) ​(**TODO 2.3**)+  *[**1p**] (BinaryTree.h) Calculaţnumărul de noduri în getNumNodes. ​(**TODO 2.3**) 
 + 
 +<​note>​ 
 +Folosiţi-vă de proprietăţile de bază ale unui arbore (datele pe care le puteţi obţine de la subarborele stâng / drept). 
 +</​note>​
  
 <​hidden>​ <​hidden>​
-3. [**4p**] (main.cpp) ​Implementați evaluarea unei expresii ​în evaluateAST()+3. [**3p**] (main.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 parseLiteral (**TODO 3.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 3.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
  
-4. [**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. )+4. [**4p**] (main.cpp) Implementați evaluarea unei expresii în evaluateAST() 
 + 
 + 
 +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>​ </​hidden>​
 +<note tip>​**{{:​sd-ca:​laboratoare:​labbinarytree-sol.zip|Soluție laborator}}** </​note>​
 ===== Interviu ===== ===== Interviu =====
  
sd-ca/laboratoare/laborator-09.1430136922.txt.gz · Last modified: 2015/04/27 15:15 by cosmin_ioan.petrisor
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