===== Examen PP 2022 ===== * Examenul la PP va consta in implementarea unor functii, **in stil functional**, in limbajul **Haskell**. * Examenul se va desfasura **exclusiv fizic**. * Folosirea laptopului va fi **obligatorie** la examen. * Rezolvarea va consta intr-o **submisie** realizata pe Moodle, care va fi corectata folosind un tester automat. Cel putin unul din teste va fi parte din enuntul fiecarui exercitiu. Restul testelor nu va fi public. * Fiecare implementare va fi punctata **binar**. * Vor fi un numar de ''X'' exercitii propuse, dintre care ''X-Y'' vor fi necesare pentru obtinerea notei 10 la examen (si ''X-Y/2'', pentru promovare). ''X'' si ''Y'', precum si durata examenului vor fi anuntate in ziua examenului. ===== Reguli de desfasurare ===== Urmatoarele sunt reguli **OBLIGATORII** pentru examen. Veti descarca un schelet de cod ce va contine enuntul exercitiilor precum si signaturile functiilor ce trebuie implementate. Exemplu: module Examen where tokenId :: String tokenId = undefined -- daca x = 0, f intoarce 1, altfel, intoarce 0 f :: Int -> Int f = undefined -- verifica daca doua numere produc suma 2 -- Exemplu: g 1 2 = False, g 1 1 = True g :: Int -> Int -> Int g = undefined * Pentru a rezolva un exercitiu, inlocuiti definitiile ''f = undefined'' si ''g = undefined'' cu definitiile voastre. * Puteti folosi orice editor pt Haskell, si puteti include alte definitii ale voastre, pentru testare. * **NU FOLOSITI DEFINITII TOP-LEVEL CARE INCEP CU:** ''test'' (scriptul de testare foloseste astfel de nume). * **Daca nu doriti sa rezolvati un exercitiu, PASTRATI DEFINITIA (undefined) DIN SCHELET**. * Pentru ca examenul sa fie notat, **solutia/fisierul vostru TREBUIE SA COMPILEZE**. Daca o solutie nu functioneaza, inlocuiti-o cu ''undefined'' inainte de a o trimite. * **NU MODIFICATI NUMELE MODULULUI SAU AL SIGNATURILOR CERUTE IN ENUNT**. * **NU UITATI SA COMPLETATI TOKEN ID-UL VOSTRU IN SOLUTIE** (testerul nu va rula daca acesta lipseste). * **Orice solutie care trece accidental testele, dar nu rezolva exercitiul in spiritul in care a fost propus, nu va fi punctata.** * **In timpul examenului, singurele aplicatii permise sunt: (i) browser cu moodle, (ii) editor, (iii) consola cu ghci.** Nu aveti voie sa aveti **ORICE** alta aplicatie deschisa. * **Comunicarea, prin orice mijloace, este interzisa in timpul examenului.** * **Nu puteti folosi google sau alte resurse pentru a va documenta asupra functiilor disponibile in Haskell** (Aveti insa voie sa folositi orice informatie ce este furnizata de ghci). * **Nu puteti folosi alte resurse scrise, sau rezolvari, scrise sau electronice, ale altor exercitii**. ===== Sfaturi utile pentru examen ===== * Timpul este o componenta importanta a examenului. Pe langa abilitatea de a produce o implementare ce trece testele, **modul** si viteza cu care o realizati sunt cel putin la fel de importante - ele atesta nivelul de skill de programare dobandit la acest curs, precum si stapanirea elementelor de **programare functionala**, care sunt focusul principal al cursului. * Incercati sa rezolvati acele exercitii care vi se par confortabile intai, apoi abordati-le pe cele mai grele. * Evitati solutiile care folosesc recursie simpla, si exploatati maxim functiile //standard// de ordin superior (''foldl, foldr, map, zipWith, filter, compunere, etc.''). Acest lucru va ajuta in special la viteza de rezolvare si la testare. * Majoritatea exercitiilor se rezolva in maxim 2-3 linii de cod, in functie si de stilul de formatare preferat de voi. Evitati solutii cu numar mare de linii de cod, si orientati-va spre a **descopune functional** problema in sub-probleme. * Puteti folosi orice functie disponibila in Prelude. * Cele mai bune exemple de exercitii asemanatoare celor pe care le veti intalni la examen sunt cele din laborator.