User Tools

Site Tools


laboratoare:04-tipuri-de-date-abstracte

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:04-tipuri-de-date-abstracte [2016/03/20 23:36]
mihai.dumitru2201 Scop - Maybe
laboratoare:04-tipuri-de-date-abstracte [2016/03/24 14:54] (current)
mihai.dumitru2201 Correction
Line 7: Line 7:
 Scopul laboratorului:​ Scopul laboratorului:​
   * Recapitularea conceptului de TDA   * Recapitularea conceptului de TDA
-  * Definirea ​unor TDA-uri în Haskell+  * Definirea ​de TDA-uri în Haskell
   * Familiarizarea cu conceptul de TDA-uri polimorfice   * Familiarizarea cu conceptul de TDA-uri polimorfice
   * Introducerea tipului de date ''​Maybe''​   * Introducerea tipului de date ''​Maybe''​
Line 17: Line 17:
  
 Un TDA familiar este **list**. În primul laborator am lucrat cu liste de întregi, definind o listă ca fiind fie lista vidă, fie un întreg introdus în altă listă. Deasemena am definit o mulțime de operații posibile pe listă: ''​isEmpty'',​ ''​head'',​ ''​tail'',​ ''​add'',​ ''​get'',​ ''​ins'',​ ''​show''​.\\ Un TDA familiar este **list**. În primul laborator am lucrat cu liste de întregi, definind o listă ca fiind fie lista vidă, fie un întreg introdus în altă listă. Deasemena am definit o mulțime de operații posibile pe listă: ''​isEmpty'',​ ''​head'',​ ''​tail'',​ ''​add'',​ ''​get'',​ ''​ins'',​ ''​show''​.\\
-Pentru a lucra cu liste într-un limbaj ca C, am scris două //​implementări//​ distincte, și anume ''​LinkedList''​ și ''​ArrayList''​. Ambele implementări respectă specificațiile din primul paragraf.+Pentru a lucra cu liste într-un limbaj ca Java, am scris două //​implementări//​ distincte, și anume ''​LinkedList''​ și ''​ArrayList''​. Ambele implementări respectă specificațiile din primul paragraf.
  
 <note important>​ <note important>​
-Unii autori includ în descrierea TDA-urilor și complexități. Din acest punct de vedere, implementările ​pentru ​+Unii autori includ în descrierea TDA-urilor și complexități. Din acest punct de vedere, implementările ​
 ''​LinkedList''​ și ''​ArrayList''​ diferă. ''​LinkedList''​ și ''​ArrayList''​ diferă.
 </​note>​ </​note>​
Line 63: Line 63:
  
 Observăm prezența a două pattern-uri:​ unul pentru arborele vid, celălalt pentru un nod, într-un fel foarte asemănător cu modul în care lucram cu liste, făcând pattern matching pe ''​[]''​ și ''​(x:​xs)''​. Observăm prezența a două pattern-uri:​ unul pentru arborele vid, celălalt pentru un nod, într-un fel foarte asemănător cu modul în care lucram cu liste, făcând pattern matching pe ''​[]''​ și ''​(x:​xs)''​.
- 
- 
-==== Exerciții TDA ==== 
- 
-1. Implementați TDA-ul pentru propria voastră listă care poate conține doar numere întregi. 
  
 <note tip> <note tip>
Line 93: Line 88:
 </​code>​ </​code>​
 </​note>​ </​note>​
 +
 +==== Exerciții TDA ====
 +
 +1. Implementați TDA-ul pentru propria voastră listă care poate conține doar numere întregi.
  
 2. Scrieți o funcție care convertește valori ale TDA-ului vostru în liste din Haskell. 2. Scrieți o funcție care convertește valori ale TDA-ului vostru în liste din Haskell.
Line 278: Line 277:
  
 <code haskell> <code haskell>
-List a = Empty | Cons a (List a)+data List a = Empty | Cons a (List a)
 </​code>​ </​code>​
  
Line 289: Line 288:
  
 ==== Exerciții TDA-uri polimorfice ==== ==== Exerciții TDA-uri polimorfice ====
 +
 +<note important>​
 +Încercați să vă obișnuiți să scrieți explicit tipurile tuturor funcțiilor definite de voi în continuare.
 +</​note>​
  
 5. Pornind de la TDA-ul polimorfic ''​List a''​ definit mai sus: 5. Pornind de la TDA-ul polimorfic ''​List a''​ definit mai sus:
Line 295: Line 298:
 b) Implementați ''​foldl'',​ ''​foldr''​ și ''​map''​ pentru TDA-ul creat. b) Implementați ''​foldl'',​ ''​foldr''​ și ''​map''​ pentru TDA-ul creat.
  
-\\ 
 \\ \\
 6. a) Implementați TDA-ul pentru arbori polimorfici.\\ 6. a) Implementați TDA-ul pentru arbori polimorfici.\\
Line 305: Line 307:
 g) Implementați ''​tmap''​ pe baza ''​foldT''​.\\ g) Implementați ''​tmap''​ pe baza ''​foldT''​.\\
  
-\\ 
 \\ \\
 7. a) Implementați TDA-ul ''​Pereche'',​ care poate conține două valori de orice tip.\\ 7. a) Implementați TDA-ul ''​Pereche'',​ care poate conține două valori de orice tip.\\
Line 315: Line 316:
   * [[https://​wiki.haskell.org/​Maybe|Maybe - Haskell wiki]]   * [[https://​wiki.haskell.org/​Maybe|Maybe - Haskell wiki]]
  
-===== Solutii ​laborator =====+===== Soluții ​laborator =====
  
-  * [[https://​github.com/​Programming-Paradigms/​Labs/​archive/​master.zip|Rezolvari]]+  * [[https://​github.com/​Programming-Paradigms/​Labs/​archive/​master.zip|Rezolvări]]
laboratoare/04-tipuri-de-date-abstracte.1458509760.txt.gz · Last modified: 2016/03/20 23:36 by mihai.dumitru2201