Logică și structuri discrete - Tema 5

Tema se trimite prin Campus Virtual UPT până miercuri ora 22, împreună cu exercițiile date ca temă după laborator.

Exercițiul 1: În C, ML, ca și în alte limbaje, ordinea de evaluare a operanzilor e precizată pentru unii operatori (de exemplu, && și ||, de la stânga la dreapta), și neprecizată (poate fi oricare) pentru majoritatea operatorilor binari uzuali (aritmetici, comparație, etc.).
Fie următoarea expresie

 if x > 3 && x < 5 then (x + 1) * (x - 2) else (x - 4) * (x + 6)
Dați etichete distincte (de exemplu litere) tuturor operatorilor din expresie. Explicați care operatori sunt sigur produc rezultatul înaintea cărora, dacă a) x = 4; b) x = 6. Calculați în ambele cazuri închiderea tranzitivă a ordinii parțiale definite.

Exercițiul 2 Scrieți o funcție care ia o listă de caractere și produce un dicționar în care fiecare caracter e asociat cu numărul aparițiilor în listă.
Indicație: parcurgeți lista cu List.fold_left și actualizați dicționarul la fiecare pas. Distingeți cazurile când caracterul e nou în dicționar sau e întâlnit prima dată.
Pentru a crea ușor liste de caractere, puteți folosi următoarea funcție care creează o listă de caractere dintr-un șir:

let explode s =
  let rec expl i l =
    if i < 0 then l else
    expl (i - 1) (s.[i] :: l) in
  expl (String.length s - 1) [];;
explode "acesta este un sir";;	   


Marius Minea
Last modified: Mon Oct 24 15:30:00 EEST 2016