Laborator 3 - Funcții
Obiectivele laboratorului
În acest laborator vom studia:
- funcții în C: declarare, apelare, valoare întoarsă, parametri
- reguli de vizibilitate pentru variabile
De asemenea, vom exersa lucrul cu instrucțiunile anterior studiate.
Materiale utile
Exerciții
HINT 1: Gândiți-vă cum organizați codul în fișiere diferite, astfel încât să reutilizați funcțiile implementate la exercițiile anterioare.
HINT 2: Alegeți tipuri de date potrivite pentru variabilele voastre.
-
Să se implementeze funcția de ridicare la putere n^k, unde n și k sunt numere naturale.
Exemplu:
// exemplu apelare int p = power(2, 3); // p == 8 int p = power(7, 3); // p = 343
Pentru exersarea lucrului cu funcții, veți implementa 3 variante:
-
power_iterative: o funcție nerecursivă (iterativă) care obține rezultatul prin k înmulțiri repetate cu n
-
power_recursive: o funcție recursivă care va realiza un număr echivalent de înmulțiri
-
[BONUS] power: se va folosi algoritmul de exponențiere logaritmică (explicat de către asistent).
- Cum implementăm? (recursiv/iterativ) Care sunt avantajele fiecărei abordări?
- Care este cea mai eficientă soluție de a calcula o putere?
-
-
Scrieți o funcție recursivă care să returneze numărul de cifre al unui număr natural.
Exemplu:
int cnt = count_digits(0); // cnt == 1 int cnt = count_digits(7); // cnt == 1 int cnt = count_digits(34); // cnt == 2 int cnt = count_digits(2533); // cnt == 4
-
Folosindu-vă de funcțiile scrise anterior, scrieți o funcție recursivă ce inversează ordinea cifrelor unui număr natural.
[BONUS] Testați acasă funcția pe LeetCode: Reverse Integer.
Exemplu:
int rev = reverse_number(123); // rev == 321 int rev = reverse_number(9); // rev == 9 int rev = reverse_number(3253); // rev == 3523 int rev = reverse_number(1230) // rev == 321
-
Folosind funcția de
reverse_number
, scrieți funcția care verifica că un număr natural n este palindrom.Exemplu:
int ok = is_palindrome(101); // ok == 1 int ok = is_palindrome(122331); // ok == 0
-
Pentru un număr natural dat, determinați cel mai mic număr natural palindrom mai mare sau egal decât acel număr. Un palindrom este un număr care citit de la stânga la dreapta sau de la dreapta la stânga rezultă același număr.
Exemplu:
int p = next_palindrome(120); // p == 121 int p = next_palindrome(121); // p == 121 int p = next_palindrome(122); // p == 131
-
Să se implementeze o funcție care să verifice în mod eficient dacă un număr întreg este prim.
Exemplu:
int ok = is_prime(-123); // ok == 0 int ok = is_prime(0); // ok == 0 int ok = is_prime(1); // ok == 0 int ok = is_prime(2); // ok == 1 int ok = is_prime(4); // ok == 0 int ok = is_prime(3); // ok == 1 int ok = is_prime(17); // ok == 1 int ok = is_prime(15); // ok == 0 int ok = is_prime(2147483647); // ok == 1