Logică și structuri discrete - Exerciții simple

Funcții recursive

Numărat în sus și în jos Scrieți o funcție care primește un întreg n și dacă e pozitiv tipărește descrescător numerele de la n la 1.
Scrieți apoi o funcție care tipărește numerele crescător de la 1 la n (folosiți încă un parametru care ține minte numărul curent).

Cel mai mare divizor comun Scrieți o funcție care calculează cel mai mare divizor comun a două numere pozitive scăzând repetat pe cel mai mic din cel mai mare până când devin egale, și afișând numerele la fiecare pas.
De exemplu, pentru 7 și 5, funcția va afișa
7 5
2 5
2 3
2 1
1 1 și va returna 1.
Puteți scrie o funcție care face mai multe operații scriindu-le succesiv separate cu punct-virgulă. De exemplu let f n = print_int n; n + 1 tipărește pe n și apoi returnează n + 1.
Grupați expresiile între paranteze dacă sintaxa limbajului cere o singură expresie în acel loc, de exemplu: let f n = if n < 0 then (print_string "negativ"; -n) else (print_string "nenegativ"; n)

Fibonacci iterativ Șirul lui Fibonacci e definit cu relațiile F0 = 0, F1 = 1, Fn = Fn-1 + Fn-2. Scrieți o funcție care calculează Fn prin adunări succesive pornind de la termenul inițial. Folosiți ca parametri ultima și penultima valoare calculată și numărul de adunări care mai trebuie făcut (pentru Fn cu n >= 2 sunt necesare n-1 adunări.

Liste

Numărat în sus și în jos Scrieți o funcție care produce lista numerelor de la 1 la n în ordine crescătoare (respectiv descrescătoare).

Repetiție de n ori Scrieți o funcție care creează lista care conține un element x de n ori: [x;x;...;x].

Repetiție în repetiție Scrieți o funcție care ia ca parametru un întreg n și returnează o listă de n liste (fiecare de lungime n) cu numerele de la n2 în ordine inversă. De exemplu, pentru n=3 funcția va returna [[9;8;7];[6;5;4];[3;2;1]].

Selectați din n în n Scrieți o funcție care ia ca parametru o listă și un număr n și retunează lista care conține tot al n-lea element din lista inițială. De exemplu, pentru lista ["ia";"tot";"al";"treilea";"cuvânt";"din";"lista"] și n=3 funcția va returna ["al";"din"].
Scrieți variante cu numărătoarea pornind de la început (ca mai sus) sau de la sfârșit. Încercați să scrieți funcția direct sau cu List.fold_left / List.fold_right, folosind ca rezultat parțial o pereche cu lista acumulată și un contor care scade de la n.


Marius Minea
Last modified: Sat Oct 24 10:30:00 EEST 2015