Sunteți pe pagina 1din 5

Limbaje de Programare

Laboratorul 11: Structuri


Dan Novischi, Valentin Lungu
19 mai 2016
1. Introducere
Scopul acestui laborator este familiarizarea cu definirea s, i utilizarea structurilor n limbajul
C/C++ n vederea creerii unor tipuri de date agregate.
Structurile n limbajul C reprezinta modalitatea prin care un programator poate sa s, i defineasca s, i sa utilizeze tipuri de date proprii. Acestea reprezentand un tip de date agregat mai
complex realizat pe baza tipurilor de date deja definite (cele cont, inute n limbaj precum:
int, char*... sau alte tipuri de date definite anterior de utilizator). Sintaxa generica pentru
definirea unei structuri este urmatoarea:
1
2
3
4
5
6

struct nume_structura{
tip_camp1 nume_camp1;
tip_camp2 nume_camp2;
...
tip_campn nume_campn;
};

unde definit, ia structurii ncepe ntodeauna folosind cuvantul cheie struct urmat de un nume
pentru structura. Un nume valid de structura, ca s, i n cazul numelor de variabile reprezinta
orice nume care ncepe cu o litera sau caracterul s, i poate cont, ine cifre. Dupa cum se
paote observa, corpul definit, iei unei structuri este delimitat de acolade s, i cont, ine cel put, in
unul sau mai multe campuri. Fiecare camp este o declarat, ie de variabila (cu tip s, i nume) s, i
reprezinta unul din atributele (sau proprietat, ile) structurii.
Declarat, ia unei variabile de tip structura se realizeaza dupa cum urmeaza:
1

struct nume_structura a;

unde struct nume structura reprezinta tipul de date anterior definit, iar a reprezita numele variabilei.
Totodata, n momentul definit, iei unei structuri se pot declara s, i variabile de tipul structurii
folosind urmatoarea sintaxa:
1

1
2
3
4
5
6

struct nume_structura{
tip_camp1 nume_camp1;
tip_camp2 nume_camp2;
...
tip_campn nume_campn;
} x,y;

unde x s, i y reprezinta doua variabile de tipului structurii definite, analoage cu variabila a din
expemplul anterior. O particularitate legata de declarat, ia de variabile n momentul definit, iei
unei structuri este aceea ca numele structuri se poate omite folosind sitaxa de mai jos:
1

struct{
tip_camp1 nume_camp1;
tip_camp2 nume_camp2;
...
tip_campn nume_campn;

2
3
4
5
6

} x,y;

unde variabilele x s, i y au aceasi contat, ie ca s, i cazul anterior, numai ca n acest caz structura
se numes, te anonima deoarce nu are nume. Astfel, o consecinta pentru definit, ia unei structuri
anomime este ca declarat, iile de variabile trebuie relizate n momentul definit, iei structurii.
Orice declarat, ie de varibile ulterioara, n acest caz, nefiind posibila deoarce numele structurii
nu exista.
O simplificare a declarat, iilor de variabile de tip structura se poate realiza folosind cuvantul
cheie typedef cu sintaxa urmatoare:
1
2
3
4
5
6

typedef struct nume_structura{


tip_camp1 nume_camp1;
tip_camp2 nume_camp2;
...
tip_campn nume_campn;
} nume_tip_stucura;

aici nume tip structura nu mai reprezinta o variabila, ci un tip de date datorita folosirii
cuvantului cheie typedef. Altfel spus, folosind typedef se realizeaza o re-definit, ie a tipului
struct nume structura la tipul nume tip structura. Totodata, typedef se poate utiliza
pentru re-defint, ia tipului unei structuri anonime:
1
2
3
4
5
6

typedef sturct{
tip_camp1 nume_camp1;
tip_camp2 nume_camp2;
...
tip_campn nume_campn;
} nume_tip_stucura;
2

In ambele cazuri (structuri cu nume sau anonime) declarat, ia de variabile ulterioara se poate
face folosind sintaxa:
1

nume_tip_structura a,b;

unde a s, i b reprezinta declarat, ia a doua variabile de tipul structurii re-definit prin utlizarea
cuvatului cheie typedef.
Init, ializarea campurilor unei structuri se poate realiza (in place) n momentul declaratiei
variabilelor prin:
1
2

// daca am folosit typedef in definitia stucturii


nume_tip_structura a = {val_camp1,val_camp2,...,val_campn};

3
4
5

// daca am folosit doar declaratia uzuala a unei sturcturi


struct nume_structura a = {val_camp1,val_camp2,...,val_campn};

similara cu sintaxa utilizata la init, ializarea (in place) a vectorilor; sau ulterior prin accesul
la capurile structurii:
1
2
3
4
5
6

// daca am folosit typedef in definitia stucturii


nume_tip_structura a;
a.camp1 = val_camp1;
a.camp2 = val_camp2;
...
a.campn = val_campn;

unde campurile au fost accesate prin folosirea variabilei a s, i punct pentru accesul unui anumit camp.
In cazul utilizarii pointerilor la structuri alocarea s, i accesul la elementele individuale se poate
realiza folosind urmatoarea sintaxa:
1
2
3
4
5
6
7
8
9

// daca am folosit typedef in definitia stucturii


nume_tip_structura* a;
a = (nume_tip_structura*) malloc(sizeof(nume_tip_structura));
a->camp1 = val_camp1;
a->camp2 = val_camp2;
...
a->campn = val_campn;
...
free(a);

2. Exemplu de program
1
2
3
4
5

/* Creearea si utilizarea unui tip care reprezinta


o data clendaristica.
*/
#include <stdio.h>
#include <stdlib.h>

6
7
8
9
10
11

typedef struct Date{


int zi;
int luna;
int an;
}Date;

12
13
14
15

void printDate(Data* date){


printf("%d-%d-%d",date->zi,date->luna,date->an);
}

16
17
18
19

int main(void){
// Declaratie si intializare var locala (in place)
Date x = {25,12,1989};

20

// Declaratie si alcoare dinamica folosind pointer


Date* y = (Date*) malloc(sizeof(Date));

21
22
23

y->zi = 25;
y->luna = 12;
y->an = 1989;

24
25
26
27

printDate(&x);
printf("\n");
printDate(y);

28
29
30
31

free(y);
return 0;

32
33
34

3. Cerint, e
Cerint, a 1 Sa se defineasca un tip structura pentru un numar complex format din doua
numere reale (de tip float). Implementat, i cateva funct, ii pentru cateva operatii cu numere
complexe reprezentate prin structuri: afisarea unui numar complex, adunarea a doua numere
complexe, inmult, irea a 2 numere complexe, ridicarea la o putere intreaga a unui numar
complex. Se va scrie s, i funct, ia main pentru verificarea acestor funct, ii.

Cerint, a 2 Sa se defineasca o structura care cont, ine un vector de intregi s, i dimensiunea sa.
Implementat, i doua funct, ii pentru afis, area unui vector s, i pentru citirea unui vector, avand ca
parametru o variabila sructura s, i respectiv un pointer la structura vector. Sa se verifice cele
doua funct, ii prin apelarea lor n funct, ia principala main.
Cerint, a 3 Sa se defineasca o structura care contine un nume (s, ir de max. 20 de caractere)
s, i un numar real. Sa se scrie un program care cites, te o lista de nume de student, i s, i medii
(introduse de la tastatura) ntr-un vector de structuri (de tipul definit) s, i apoi calculeaza s, i
afis, eaza media globala a tuturor student, ilor.

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