This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
laboratoare:04-tipuri-de-date-abstracte [2016/03/20 23:39] mihai.dumitru2201 [Tipuri de date abstracte (TDA)] |
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> | ||
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]] |