This shows you the differences between two versions of the page.
programare:laboratoare:lab04 [2020/10/29 10:27] oana.balan [Exerciții Laborator CB/CD] |
programare:laboratoare:lab04 [2021/10/24 14:12] (current) andrei.traistaru99 [Referinţe] |
||
---|---|---|---|
Line 264: | Line 264: | ||
**Următoarele două probleme vă vor fi date de asistent în cadrul laboratorului.** | **Următoarele două probleme vă vor fi date de asistent în cadrul laboratorului.** | ||
- | [[https://drive.google.com/drive/folders/1wjFe8LLmYO-EESrboF-9dEm8vXYSKYVS|Checker si teste laborator 4]] | + | [[https://drive.google.com/file/d/1BH7Z__2eg5g5sIAMm5AETW4ityNexqk6/view?usp=sharing|Checker si teste laborator 4]] |
<spoiler Cum se foloseste checkerul> | <spoiler Cum se foloseste checkerul> | ||
Line 284: | Line 284: | ||
===== Exerciţii de Laborator ===== | ===== Exerciţii de Laborator ===== | ||
- | - [1p] Analizaţi programul de mai jos. Modificaţi sursa astfel încât programul să funcţioneze corect, fara a utiliza transmitere prin adresă de memorie. <code c> | + | - [2 pct]: Implementați o funcție **int factorial_iterativ(int n)** care returnează n! = 1 * 2 * 3 * … * (n – 1) * n calculat iterativ. Implementați funcția **int factorial_recursiv(int n)** care are același scop, dar implementarea este recursivă. |
- | #include<stdio.h> | + | - [2 pct]: Scrieți o funcție recursivă și una iterativă care returnează suma cifrelor unui număr natural **int suma_cifre_recursiv(int n);** respectiv **int suma_cifre_iterativ(int n);**. |
- | + | - [1 pct]: Scrieți o funcție care determină dacă un număr este prim sau nu (întoarce 1 dacă numărul este prim sau 0 în caz contrar): **int este_prim(int n);**. | |
- | void sum(int a, int b, int s) { | + | - [1.5 pct]: Scrieți o funcție care determină dacă un număr natural este palindrom sau nu (returnează 1 în cazul în care este palindrom sau 0 în caz contrar): **int este_palindrom(int n);** |
- | s = a + b; | + | - [1.5 pct]: Scrieți o funcție care citește de la tastatură un număr natural și calculează câți divizori sunt numere palindrom. Se va afișa la consolă divizorii care sunt palindrom, precum și numărul acestora. Alegeți un nume funcției implementate și apelați această funcție din main pentru a o testa. |
- | } | + | - [2 pct]: Scrieți o funcție recursivă care citește de la tastatură câte un număr natural (citirea unui număr negativ duce la ignorarea sa) și incrementează un contor de fiecare data când este tastat un număr prim. Citirea se încheie când se întâlnește numărul 0. Afișați contorul după finalizarea citirii de numere de la tastatură. |
- | + | ||
- | int main() { | + | |
- | int s; | + | |
- | sum(2, 3, s); | + | |
- | printf("Suma este %d\n", s); | + | |
- | + | ||
- | return 0; | + | |
- | } | + | |
- | </code> | + | |
- | - [1.5p] Scrieți o funcție recursivă care să ridice un număr ''x'' la o putere dată ''y'' pozitivă. <code c> | + | |
- | power(2, 3); // rezultat 8 | + | |
- | power(7, 3); // rezultat 343 | + | |
- | </code> | + | |
- | - [1.5p] Scrieți o funcție recursivă care să returneze numărul de cifre al unui numar întreg. <code c> | + | |
- | number_of_digits(34); // rezultat 2 | + | |
- | number_of_digits(2533); // rezultat 4 | + | |
- | </code> | + | |
- | - [2p] Folosindu-vă de funcțiile scrise anterior scrieți o funcție recursivă ce inversează ordinea cifrelor unui numar întreg pozitiv.<code c> | + | |
- | reverse_number(23); // rezultat 32 | + | |
- | reverse_number(3523); // rezultat 3253 | + | |
- | </code> | + | |
- | - [2p] Pentru un număr dat, determinați cel mai mic număr palindrom mai mare sau egal decât acel numar. 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.<code c> | + | |
- | next_palindrome(120); // rezultat 121 | + | |
- | </code> | + | |
- | - [2p] De la tastatură se citeşte o listă de numere pozitive. Pentru fiecare element citit se va afişa numărul prim cel mai apropiat de acesta. Dacă există două numere prime la fel de apropiate de elementul listei, se vor afişa amândouă. Dacă numărul este prim, nu se mai afişează nimic. Programul se încheie în momentul în care este citit un număr negativ. De exemplu: <code c> | + | |
- | 27 | + | |
- | * 29 | + | |
- | 13 | + | |
- | * | + | |
- | 68 | + | |
- | * 67 | + | |
- | 69 | + | |
- | * 67 71 | + | |
- | -1 | + | |
- | </code> | + | |
===Bonus=== | ===Bonus=== | ||
- | - [2p] Folosind declarații si definiri de variabile și funcții, creați două fișiere ''f1.c'' și ''f2.c'', și apleați din funcția ''main'' din fișierul ''f1.c'' o funcție ''f'' definită în ''f2.c'', iar în funcția ''f'' o variabilă ''g'' definită in fișierul ''f1.c''. Compilați fișierele împreună și executați programul rezultat. <code bash> | + | - [2 pct]: Folosind declarații si definiri de variabile și funcții, creați două fișiere main.c și autentificare.c, și apleați din funcția main din fișierul main.c o funcție void login(int username, int password) definită în autentificare.c. Funcția login va afișa mesajul “Autentificare cu success!”, respectiv “Autentificare esuata!” în urma verificării celor două argumente primite care trebuie să fie numere prime între ele, pentru ca autentificarea să aibă loc cu succes. De asemenea, sursa autentificare.c va cuprinde o variabilă numită status care va fi setată de funcția login cu 1 în cazul autentificării cu success, respective 0 în caz contrar. Afișați în main, valoarea acestei variabile. Compilați fișierele împreună și executați programul rezultat. Scriți fișierul autentificare.h cu antetul funcției implementată în autentificare.c și NU uitați să îl includeți în main.c. |
- | gcc f1.c f2.c; ./a.out | + | <code bash> |
+ | gcc main.c autentificare.c; ./a.out | ||
</code> | </code> | ||
- | |||
- | [[https://drive.google.com/file/d/10O8he377znoQlojR2p6UWKQCIIHv8FSz/view?usp=sharing|Probleme laborator cu checker]] | ||
===== Referinţe ===== | ===== Referinţe ===== | ||