Exercițiul 1: Rotunjirea numerelor
Ocaml dispune de funcția standard truncate : float -> int (nume echivalent: int_of_float) care trunchiază partea zecimală a unui număr real.
Există de asemenea funcția de conversie float_of_int (echivalent mai scurt: float) care convertește un întreg la real (utilă pentru a face aritmetică între întregi și reali).
a) Scrieți o funcție round : float -> int care rotunjește un real la cel mai apropiat întreg.
Dacă partea zecimală e 0.5, rotunjiți numărul în direcția opusă lui zero: round (-. 0.5) = -1, round 1.5 = 2.
Atenție, funcția trebuie să funcționeze corect pentru numere pozitive și negative.
Operatorii pentru numere reale se scriu cu punct: +. -. *. /. (ca și constantele reale).
(opțional) b) Scrieți o funcție care rotunjește un număr real la două
zecimale, folosind definiția de mai sus.
Exercițiul 2
Câte funcții de pe o mulțime cu 3 elemente pe o mulțime cu 3 elemente
nu sunt injective ? Argumentați cât mai simplu răspunsul.
Exercițiul 3
a) Compunerea a două funcții injective e injectivă? Demonstrați.
b) Invers, dacă f ⚪ g e injectivă, rezultă că f și g sunt injective?
Demonstrați sau dați un contraexemplu.
Indicație: E util să faceți o figură cu compunerea (v. curs p.27).
Pot exista puncte neacoperite în codomeniul uneia din funcții? Cum pot influența ele răspunsul?
Exercițiul 4: Compunerea funcțiilor
La curs, am definit
let comp f g x = f (g x) (* compunerea functiilor *) let appl2 f = comp f f (* f compusă cu ea însăși *)sau în notație matematică: appl2 f = f ⚪ f
Considerați următoarele definiții:
let appl3 f = comp f (appl2 f) let appl23c f = comp appl2 appl3 f let appl32c f = comp appl3 appl2 fExplicați, expandând definițiile (pe hârtie) ce reprezintă fiecare din funcțiile definite.