Differences

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

Link to this comparison view

sd-ca:laboratoare:laborator-09 [2015/05/02 21:47]
cosmin_ioan.petrisor [Exerciții]
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 188: Line 187:
  
 2. [**3p**] Implementaţi (şi **compilaţi!**) următoarele funcţii pentru un arbore binar: 2. [**3p**] Implementaţi (şi **compilaţi!**) următoarele funcţii pentru un arbore binar:
-  *[**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**)
   *[**1p**] (BinaryTree.h) Calculaţi înălţimea arborelui în getTreeHeight. (**TODO 2.2**)   *[**1p**] (BinaryTree.h) Calculaţi înălţimea arborelui în getTreeHeight. (**TODO 2.2**)
   *[**1p**] (BinaryTree.h) Calculaţi numărul de noduri în getNumNodes. (**TODO 2.3**)   *[**1p**] (BinaryTree.h) Calculaţi numărul de noduri în getNumNodes. (**TODO 2.3**)
Line 201: Line 200:
   *[**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**)
   *[**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**)   *[**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
  
 4. [**4p**] (main.cpp) Implementați evaluarea unei expresii în evaluateAST() 4. [**4p**] (main.cpp) Implementați evaluarea unei expresii în evaluateAST()
  
-Pentru testarea acestui exercițiu, folosiți o expresie fără variabile, de exemplu: 0 & 1 | 1 & !0 | !1 | 1 & 1 & 1 
  
 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. ) 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.1430592475.txt.gz · Last modified: 2015/05/02 21:47 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