Sunteți pe pagina 1din 3

PROGRAMAREA CALCULATOARELOR - LABORATOARELE 8,9,10 Tablouri si pointeri

OBIECTIVE 1. declarare si atribuire pointeri; 2. adresare si indirectare; 3. pointeri catre void; 4. apel prin referinta; 5. clase de memorare: auto, extern, register, static 6. siruri (tablouri, vectori) unidimensionali: index, initializare 7. relatia dintre pointeri si vectori 8. trimiterea sirurilor ca argumente pentru functii 9. siruri cu 2, 3 dimensiuni 10. alocarea dinamica a memoriei: malloc, calloc, free 11. siruri de caractere: marcatorul '\0' 12. folosirea pointerilor pentru procesarea unui sir de caractere 13. trimiterea sirurilor ca argumente pentru main(): argc, argv 14. lucrul cu siruri din biblioteca : strcat, strcmp, strcpy, strlen

CERINTE 1. 8 probleme din primele 10 pentru nota 8; 2. suplimentar inca 5 probleme din 11, 12, ..., 17 pentru nota 10. EXERCITII 1. Scrieti o functie care insumeaza elementele de rang (index) impar, respectiv par, ale unui vector cu elemente de tip "double". Sugestie: functia poate incepe cam asa
2. void suma(double a[], 3. int n, 4. double *impar, { 5. . . . . . /* n - lungimea sirului a */ double *par)

6. Folosind "argc" si "argv" (si eventual optiunea -c) tipariti cu litere majuscule argumentele din "argv". 7. Calculati valoarea unui determinant asociat unei matrice patratice. In cazul in care determinantul este nenul, calculati inversa matricei. 8. (Puncte sa) Fie a un tablou bidimensional (mXn). Un punct sa al acestui tablou este un element a[i0,j0] cu proprietatea: a[i0,j0] = min{a[i0,j] : 0<=j<=n-1} = max{a[i,j0] : 0<=i<=m-1}

Scrieti un program care determina punctele sa (daca exista) ale unui tablou bidimensional. 9. Utilizand in mod repetat schema lui Horner, sa se calculeze valoarea unui polinom si a derivatelor sale intr-un punct dat. 10. Fie un tablou unidimensional cu elemente 0 si 1. Determinati subtablourile sale maximale care au toate elementele nule. 11. Aceeasi problema pentru tablouri bidimensionale. Un subtablou este bine specificat, in acest caz, prin coordonatele colturilor din stanga sus, respectiv dreapta jos. 12. Sa se rearanjeze elementele unui vector de numere intregi, astfel incat cele pare sa apara inaintea celor impare. In cadrul subsecventei de numere pare, respectiv impare, elementele trebuie sa apara in ordinea in care erau in vectorul initial. 13. Fiind dat un numar intreg n > 0, sa se afiseze toate numerele naturale formate cu cifrele sale. 14. Scrieti un program C care arata pe cati octeti sunt memorati pointerii catre tipurile fundamentale de date. Ce observati ? 15. (*) Se da un tablou de numere reale. Sa se determine, printr-o singura parcurgere a sa, pozitia de inceput si lungimea celei mai lungi secvente de elemente egale. 16. (*) Se da o matrice patratica. Sa se ordoneze crescator fiecare linie a matricii, apoi sa se rearanjeze liniile astfel incat suma elementelor de pe diagonala sa fie minima. 17. (*) O grila cu patrate albe si negre este corecta daca: o exista doua patrate negre alaturate o exista mai mult de 4 patrate negre pe orice diagonala o punctele negre reprezinta mai mult de 20% din totalul de puncte Scrieti un program care verifica daca o grila data, de dimensiuni mXn este corecta. 18. (*) (Codificarea si decodificarea permutarilor) Consideram tabloul x de dimensiune n, continand o permutare a elementelor 1..n. Se defineste un alt tablou xcod, tot de dimensiune n, astfel: xcod[i] = |{j : j<i si x[j]<x[i]}| . o Scrieti un program care construieste tabloul xcod corespunzator unui tablou dat x. o Scrieti un program care decide, pentru un tablou dat xcod cu valori intregi, daca exista o permutare a carei codificare este xcod si, in caz afirmativ, o construieste. Obs. Programul poate utiliza alte variabile simple, dar nu si alte tablouri. 19. (*) Calculati inversa unei permutari cu un numar constant de variabile suplimentare.

20. (*) Un patrat magic (de latura n) are proprietatea ca include in locatiile sale toate numerele intregi din intervalul 1, ..., n^2 si sumele numerelor de pe fiecare linie, fiecare coloana sau fiecare diagonala sunt egale. De exemplu:
21. 22. 23. 6 7 2 1 5 9 8 3 4

este un patrat magic de dimensiune 3. Sa se scrie un program C care testeaza daca un patrat este magic sau nu. De asemenea, incercati sa generati toate patratele magice de ordin n. 24. (*) (Jocul vietii) Se considera o populatie de virusi care se afla in anumite noduri ale unei retele n X n. Un virus traieste daca are 2 sau 3 vecini, altfel moare (sufocat sau de singuratate). Intr-un nod liber cu 2 sau 3 vecini, se naste un virus. Scrieti un program care vizualizeaza evolutia populatiei de virusi.

S-ar putea să vă placă și