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, /* n - lungimea sirului a */
4. double *impar, double *par)
{
5. . . . . .
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. 6 1 8
22. 7 5 3
23. 2 9 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.