Laborator 3 - Funcții

Obiectivele laboratorului

În acest laborator vom studia:

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.

  1. 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?
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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