This shows you the differences between two versions of the page.
|
pp:24:laboratoare:tda [2026/02/12 14:56] mihaela.balint [Exemple de gândire] |
pp:24:laboratoare:tda [2026/02/12 15:20] (current) mihaela.balint [Exerciții] |
||
|---|---|---|---|
| Line 87: | Line 87: | ||
| ==== Exemple de gândire ==== | ==== Exemple de gândire ==== | ||
| - | ''nth'' (al n-lea element din listă) \\ | + | <code haskell> |
| - | **Întrebare**: \\ Pe ce variabile fac recursivitate? | + | nth (al n-lea element din listă) |
| - | **Raționament**: \\ A identifica al ''n''-lea element din ''L'' înseamnă a identifica al ''(n-1)''-lea element din ''tail(L)''. | + | </code> |
| - | **Concluzie**: \\ Pe numărul $n$ și pe lista $L$. | + | |
| - | **Axiome (Cod): | + | **Întrebare**: Pe ce variabile fac recursivitate? \\ |
| + | **Raționament**: A identifica al ''n''-lea element din ''L'' înseamnă a identifica al ''(n-1)''-lea element din ''tail(L)''. \\ | ||
| + | **Concluzie**: Pe numărul ''n'' și pe lista ''L''. | ||
| <code haskell> | <code haskell> | ||
| - | nth(null, n) = eroare (Lista nu are suficiente elemente). | + | -- Axiome (cod) |
| - | nth(cons(x, L), zero) = x (Dacă am ajuns la indexul zero, rezultatul este primul element din listă). | + | nth(null, n) = eroare |
| - | nth(cons(x, L), succ(n)) = nth(L, n) (Al n+1-lea element din lista curentă este al n-lea element din restul listei). | + | nth(cons(x, L), zero) = x |
| + | nth(cons(x, L), succ(n)) = nth(L, n) | ||
| </code> | </code> | ||
| - | ''duplicate'' (duplicarea fiecărui element al listei) | ||
| - | * **Notă**: \\ Există un singur parametru (''L''), deci o singură variabilă pe care pot face recursivitate. | ||
| - | * **Întrebare**: \\ Cum transform rezultatul pentru ''tail(L)''? | ||
| - | * **Raționament**: \\ Dacă am duplicat toate elementele din ''tail(L)'', trebuie doar să adaug de două ori ''head(L)'' la început. | ||
| - | * **Axiome (Cod):** \\ ''duplicate(null) = null'' (Cazul de bază). \\ ''duplicate(cons(x, L)) = cons(x, cons(x, duplicate(L)))'' (Implementarea raționamentului anterior). | ||
| + | <code haskell> | ||
| + | duplicate (duplicarea fiecărui element al listei) | ||
| + | </code> | ||
| + | |||
| + | **Notă**: Există un singur parametru (''L''), deci o singură variabilă pe care pot face recursivitate. \\ | ||
| + | **Întrebare**: Cum transform rezultatul pentru ''tail(L)''? \\ | ||
| + | **Raționament**: Dacă am duplicat toate elementele din ''tail(L)'', trebuie doar să adaug de două ori ''head(L)'' la început. | ||
| + | |||
| + | <code haskell> | ||
| + | -- Axiome (cod) | ||
| + | duplicate(null) = null | ||
| + | duplicate(cons(x, L)) = cons(x, cons(x, duplicate(L))) | ||
| + | </code> | ||
| ===== Exerciții ===== | ===== Exerciții ===== | ||
| * Demonstrați prin inducție structurală proprietatea ''len(app(A, B)) = add(len(A), len(B))''. | * Demonstrați prin inducție structurală proprietatea ''len(app(A, B)) = add(len(A), len(B))''. | ||
| Line 113: | Line 124: | ||
| * **Ștergerea** elementului de la poziția ''n'' din listă (ex: ștergerea celui de-al treilea element din $[a, b, c, d, e, f, g]$ produce $[a, b, d, e, f, g]$). | * **Ștergerea** elementului de la poziția ''n'' din listă (ex: ștergerea celui de-al treilea element din $[a, b, c, d, e, f, g]$ produce $[a, b, d, e, f, g]$). | ||
| * **Simetria structurală**: Verificați dacă doi arbori binari sunt simetrici (ex: un arbore cu structura ''node(empty, x, node(empty, y, empty))'' este simetric cu unul de forma ''node(node(empty, z, empty), w, empty)''). | * **Simetria structurală**: Verificați dacă doi arbori binari sunt simetrici (ex: un arbore cu structura ''node(empty, x, node(empty, y, empty))'' este simetric cu unul de forma ''node(node(empty, z, empty), w, empty)''). | ||
| - | * [[https://ocw.cs.pub.ro/courses/_media/pp/24/laboratoare/tda/tda-sol.zip|Soluții]] | + | |
| ===== Referințe ===== | ===== Referințe ===== | ||
| * [[https://www.ic.unicamp.br/~meidanis/courses/mc336/problemas-lisp/L-99_Ninety-Nine_Lisp_Problems.html|Probleme de programare funcțională]] | * [[https://www.ic.unicamp.br/~meidanis/courses/mc336/problemas-lisp/L-99_Ninety-Nine_Lisp_Problems.html|Probleme de programare funcțională]] | ||