O structura este o colectie de valori eterogene, stocate intr-o zona compacta de memorie.
Componentele unei structuri, denumite campuri, sunt identificate prin nume simbolice, denumite selectori.
Campurile unei structuri pot fi de orice tip, simplu sau derivat, dar nu void sau functie.
Declararea structurilor se face folosind cuvantul cheie
struct:
struct [nume_structura]{
tip1 membrii;
tip2 membrii;
…………….
tipn membrii;
}[lista_declaratori];
variabile de tip structura
nume_structura saulista_declaratori pot lipsi, dar nu simultan.
Daca se precizeaza nume_structura, atunci inseamna ca se face definirea tipului struct nume_structura, care poate fi apoi folosit pentru declararea de variabile, ca tip de parametri formali sau ca tip de rezultat returnat de functii:
Exemplu1:
struct persoana{ se declara tipul struct persoana
char nume[20];
int varsta;
};
lipseste lista_declaratori
Exemplu2:
struct{ lipseste nume_struct
char titlu[20],autor[15],editura[12];
int an_aparitie;
}carte,biblioteca[1000];
nu se declara un tip, deci
doar aici pot fi facute declaratiile de variabile
Un camp al unei structuri poate fi de tip structura, dar nu aceeasi cu cea definita.
Exemplu3:
struct persoana{
se declara tipul struct persoana
char nume[20];
struct
{int zi,an,luna;
} datan; camp de tip structura
}p;
Exemplu4:
struct data{
int zi,luna,an;};
struct persoana{
char nume[30];
data datan;} p;
Folosind cuvantul cheie
typedef se pot defini tipuri utilizator echivalente pentru cele structura.
Selectarea unui camp al unei variabile structura se realizeaza folosind operatorul de selectie .
.
Campul selectat se comporta ca o variabila de acelasi tip, deci i se pot aplica aceleasi prelucrari ca oricarei variabile de tipul respectiv.
variabila_structura.nume_camp
Exemplu:
persoana p; //se declara variabila p de tip persoana
p.nume - campul nume din structura persoana
p.datan.an - campul an din data nasterii
p.datan.luna - campul luna din data nasterii
p.datan.zi - campul zi din data nasterii
APLICATII
Probleme rezolvate
1.Se citesc de la tastatură două numere complexe. Să se efectueze operaţiile de adunare, scadere, înmulţire şi împărţire cu aceste numere complexe.
Vom defini tipul structurat
complex, care conţine partea reală şi partea imaginară a numărului.
#include OPERATII CU NUMERE COMPLEXE
#include
struct complex
x-partea reala , y-partea imaginara
{float x,y;
};
complex a,b,c;
void afisare(complex e) afisarea unui numar complex
{if(e.y>=0)
cout<
else
cout<
}
void adunare() adunarea a doua numere complexe
{c.x=a.x+b.x;
c.y=a.y+b.y;
}
void scadere() scaderea a doua numere complexe
{c.x=a.x-b.x;
c.y=a.y-b.y;
}
void inmultire() inmultirea a doua nume
re complexe
{c.x=a.x*b.y-a.y*b.x;
c.y=a.x*b.y+a.y*b.x;
}
void impartire() //impartirea a doua numere complexe
{c.x=(a.x*b.x+a.y*b.y)/(b.x*b.x+b.y*b.y);
c.y=(a.y*b.x-a.x*b.y)/(b.x*b.x+b.y*b.y);
}
void main()
{cout<<“primul numar:“; cin>>a.x>>a.y;
cout<<“al doilea numar:“; cin>>b.x>>b.y;
cout<<“a=”; afisare(a);
cout<<“b=”; afisare(b);
adunare();
cout<<“suma=”;
afisare©;
scadere();
cout<<“diferenta=”;
afisare©;
inmultire();
cout<<“produsul=”;
afisare©;
impartire();
cout<<“impartire=”;
afisare©;
getch();
}
2. Pentru n elevi se citesc: numele şi două note la informatică. Să se calculeze media fiecărui elev. Să se afişeze elevii în ordinea descrescătoare a mediilor, iar pentru medii egale, în ordine alfabetică.
#include
#include
#define MAX 30
struct elev definirea structurii de date elev
{char nume[MAX];
int n1,n2;
float media;
};
elev a[MAX]; a-tabl
oul pentru memorarea elevilor
int n;
void citire() citire date
{int i;
clrscr();
for(i=1; i<=n; i++)
{cout<<“numele persoanei:“; cin.get();cin.get(a[i].nume,20,’\n’); citeste numele
cout<<“nota1: “; cin>>a[i].n1; citeste notele
cout<<“nota2: “; cin>>a[i].n2;
a[i].media=(((float)a[i].n1+a[i].n2)/2); calculeaza media
}
}
void afisare() afiseaza datele elevilor
{int i;
for(i=1; i<=n; i++)
cout<
getch();
}
void ordonare() ordoneaza elevii descrescator după medii, iar la medii egale alfabetic
{int i,sw;
elev aux;
do{
sw=1;
for(i=1; i
if((a[i+1].media>a[i].media)||(a[i+1].media==a[i].media && strcmp(a[i+1].nume,a[i].nume)<0))
{aux=a[i+1]; a[i+1]=a[i]; a[i]=aux; sw=0; }
} while(!sw);
}
void main()
{ clrscr();
cout<<“n=”;cin>>n; n-nr.elevi
citire(); clrscr(); afisare(); citeste datele elevilor
ordonare(); ordoneaza elevii
cout<<“Elevii in ordinea descrescatoare a mediilor”<
afisare(); afiseaza datele elevilor
getch();
}
</div>