Sunteți pe pagina 1din 3

Set 3

(laboratoarele 7, 8 si 9)
______________________________________________________________________________________________________________________________________________________________________

Operatii cu pointeri, pointeri si tablouri


Tablouri de pointeri, pointeri la functii

1. Sa se scrie o functie care primeste ca argument un pointer la o variabila de tip unsigned long. Afisati
fiecare octet al acesteia. Afisati toata valoarea variabilei de tip unsigned long. Ce observati ?

NOTA: Pentru afisarea ficarui octet din numar folositi pointeri si NU operatii pe biti !

2. Se da o variabila FLASH_BIUCR pe 16 biti (unsigned short) care impacheteaza urmatoarele campuri


(valori pozitive): APC, WWSC, RWSC, DPFEN, IPFEN, PFLIM si BFEN ( vezi figura de mai jos ).
Sa se scrie o functie cu parametri care primeste ca prim argument un pointer la variabila
FLASH_BIUCR.
Functia va initializa campurile variabilei cu valori prin intermediul argumentelor. Valorile vor fi citite de la
tastatura si transmise ca parametri functiei. Pentru initializarea campurilor, functia va utiliza operatii pe
biti.
Sa se scrie o functie de afisare care primeste ca argument un pointer la variabila FLASH_BIUCR.

15

3. Sa se scrie o functie “calcul” care primeste prin argument un tablou si returneaza minimul din tablou,
maximul din tablou si suma tuturor elementelor din tablou.
Cum ar putea functia sa afle dimensiunea tabloului fara a folosi un argument suplimentar, variabila
globala sau directiva de preprocesare ?

void calcul (char *ptablou, long *min, long *max, long *sum);

4. Sa se scrie o functie care copiaza primele ‘n’ caractere dintr-un buffer sursa intr-un buffer destinatie.
Buffer-ul sursa va fi initializat cu un sir de caractere.
Continutul buffer-ului sursa si valoarea lui ‘n’ se vor citit de la tastatura.

NOTA: Programul trebuie sa functioneze CORECT si atunci cand dimensiunea buffer-ului sursa este
mai mica decat ‘n’.

my_strncpy (char *destinatie, char *sursa, unsigned int n);

1/2 vladimir.milosev@continental-corporation.com | CETP 10 | Laboratoare C - Set 3


5. Sa se scrie definitiile urmatoarelor functii intr-un fisier sursa separat ( ex. array_proc.c ):
“min(...)” - pentru calcularea celui mai mic element dintr-un tablou
“max(...)” - pentru calcularea celui mai mare element dintr-un tablou
“sum(...)" - pentru calcularea sumei tuturor elementelor dintr-un tablou

Functiile vor primi tabloul ca si parametru.

NOTA 1: prototipurile functiilor cat si alte informatii necesare ( declarari de variabile globale, macro-uri,
etc ) se vor scrie intr-un fisier header ( ex. array_proc.h ).

Sa se scrie un program care, la alegerea utilizatorului, va executa o anumita functie din cele 3,
intorcand rezultatul corespunzator ( minimul, maximul sau suma ).
Executia functiei dorite se va realiza prin intermediul unei functii “handler(…)” care primeste 2
parametri: un pointer la o functie si un tablou de elemente.
La apelarea functiei “handler(...)” se dau ca argumente functia ce va fi folosita (min(), max() sau sum())
si tabloul de elemente.

NOTA 2: Pentru tabloul de elemente se va folosi o variabila locala functiei main(). Tabloul va fi
initializat cu valori citite de la tastatura.

6. Sa se scrie un program care sorteaza crescator elementele de pe fiecare linie a unei matrici.
Sortarea va fi facuta cu ajutorul unei functii ce primeste ca parametru o matrice de N linii si M coloane.
Cu ajutorul altei functii, se va afisa la consola continutul matricii inainte si dupa sortare. Matricea va fi
transmisa ca parametru functiei de afisare.
Se vor folosi matrici de diverse dimensiuni, selectarea unei anumite matrici realizandu-se cu ajutorul
directivelor de preprocesare.

NOTA 1: Se vor folosi fisiere header pentru declararea variaiblelor globale folosite, directive de
preprocesare, prototipuri de functii etc.
NOTA 2: Procesarea matricii ( sortare, afisare etc ) se va face folosind pointeri.
NOTA 3: Pentru sortare folositi metoda bubble-sort. Se va scrie si folosi o functie “swap()” pentru
interschimbarea a doua elemente.

7. Sa se scrie definitiile urmatoarelor functii intr-un fisier sursa separat ( ex. array_proc.c ):
- afisarea unei matrici
- incrementarea fiecarui numar aflat pe diagonala principala a unei matrici
- interschimbarea elementelor aflate deasupra diagonalei principale cu elementele aflate sub diagonala
principala: a[x][y] ↔ a[y][x]

Functiile vor primi matricea ca si paremetru.

NOTA 1: prototipurile functiilor cat si alte informatii necesare ( declarari de variabile globale, macro-uri,
etc ) se vor scrie intr-un fisier header ( ex. array_proc.h ).
NOTA 2: Procesarea matricii ( incrementare, afisare etc ) se va face folosind pointeri.

2/2 vladimir.milosev@continental-corporation.com | CETP 10 | Laboratoare C - Set 3


8. Avand urmatorul text scris pe mai multe randuri :

“C is a general purpose programming language initially”


“developed by Dennis Ritchie between”
“1969 and 1973 at Bell Labs”

Stocati acest text folosind array de pointeri (fiecare pointer indica spre un sir de caractere).

Sa se scrie o functie care primeste ca argument acest text stocat, si un cuvant pe care sa-l caute in tot
textul. Functia returneaza TRUE daca cuvantul a fost gasit in text sau FALSE daca nu a fost gasit.

NOTA 1: Pentru usurinta, cuvintele din text sunt delimitate prin spatii sau inceput/sfarsit de rand. Nu se
vor folosi semne de punctuatie sau caractere speciale ( ^, &, etc )
NOTA 2: Functia de cautare nu este case-sensitive, astfel incat daca se cauta cuvantul “bell” in textul
dat ca exemplu, functia va returna TRUE.
NOTA 3: NU folositi functii din string.h (sau alte biblioteci similare)

3/2 vladimir.milosev@continental-corporation.com | CETP 10 | Laboratoare C - Set 3

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