Tipul Struct

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();
}

Fisa de lucru_tipul_struct.pdf

</div>