Sunteți pe pagina 1din 21

STRUCTURI DE

DATE NEOMOGENE

Structuri
O structur este un ansamblu format din una sau mai

multe variabile grupate mpreun sub un singur nume.


Structurile se deosebesc de tablouri prin urmtoarele
aspecte:
(i) elementele unei structuri pot avea tipuri diferite, (ii)
structurile pot fi atribuite, (iii)
funciile pot returna structuri, (iv) elementele unui structuri
nu sunt variabile anonime ci au cte un nume, (v)
referirea unui element al unei structuri se realizeaz cu
operatorul de selecie ( . ) i nu cu operatorul de indexare
( [ ] ).

Tipul struct
Dac dorim s prelucrm date
referitoare la mai muli elevi, pentru
fiecare elev trebuie s cunoatem:
Numele char[20]
Prenumele char[20]
Nota matematic - float
Nota informatic - float
Vrsta - int

Tipul struct
n C++ exist un tip de date, numit struct,
care permite ca fiecrui elev s-i
corespund o singur nregistrare.
Forma general este:
struct [nume structura]
{
[<tip> <nume variabila [, nume variabila, ]>];
[<tip> <nume variabila [, nume variabila, ]>];

} [lista de variabile];

Tipul struct (C++)


Structura o denumim elev i este:
struct elev
{ char nume[20], prenume[20];
float nota_mate, nota_info;
int varsta;
};

Tipul struct
Exist dou posibiliti de declarare a variabilelor care
alctuiesc structura:
1.
Scriind la sfrit numele variabilelor:

struct elev
{ char nume[20], prenume[20];
float nota_mate, nota_info;
int varsta;
} inr1,inr2;
2.

Declarnd variabilele aa cum suntem obinuii:


elev inr1, inr2;

Tipul struct
Definiia structurii poate fi fcut:
n cadrul funciei main()
naintea funciei main() (caz
recomandat)
Pentru accesul la cmpurile unei variabile
de tip struct se folosete operatorul de
selecie direct, notat cu ., operator cu
prioritate maxim.

Tipul struct
Dac inr este o variabil de tipul elev.
Atunci:
inr.nume reprezint irul nume al
variabilei inr;
inr.nume[0] - reprezint primul caracter
al irului nume;
inr.nota_mate reprezint cmpul
nota_mate al variabilei inr.

Tipul struct
ntre dou variabile de acelai tip struct se
poate folosi atribuirea.
Dac inr1, inr2 sunt dou variabile de tip
elev, prin atribuirea inr1=inr2, variabila
inr1 ia aceeai valoare ca variabila inr2.
O astfel de atribuire se mai numete
copiere bit cu bit.

nregistrrile imbricate
Putem avea un tip structurat ce conine n

interiorul su un alt tip structurat.


struct elev
{ char nume[20], prenume[20];
struct
{ int clasa;
float note[20];
} situatie;
int varsta;
};

nregistrrile imbricate
Dac inr este o variabil de tipul elev.
Atunci accesarea elementelor situate n
interiorul structurii se face astfel:
inr.situatie.clasa se acceseaz cmpul
clasa al substructurii
inr.situatie.note[0] se acceseaz prima
not a vectorului inclus n substructur

nregistrrile imbricate
Dac avem
struct elev1
{ char nume[20], prenume[20];
struct
{ int clasa;
float note[20];
} situatie_1, situatie_2;
int varsta;
};

nregistrrile imbricate
Tipul structurat elev1, subordoneaz
structurile situatie_1 i situatie_2.
Dac una sau mai multe structuri sunt
incluse una n alta, acestea se numesc
structuri imbricate.

nregistrrile imbricate
Cele dou structuri sunt echivalente.

struct elev1
{ char nume[20],
prenume[20];
struct
{ int clasa;
float note[20];
} situatie_1,
situaie_2;
int varsta;
};

struct elev1
{ char nume[20],
prenume[20];
struct
{ int clasa;
float note[20];
} situatie_1;
struct
{ int clasa;
float note[20];
} situaie_2;
int varsta;
};

nregistrri cu structur
variabil
Variabila var este de tipul union.

# include <iostream.h>
Cmpurile subordonate ar trebui s
ocupe 2,10 i 8 octei dar toate
union test
variabilele ocup numrul de octei
{ int a;
necesari pentru memorarea
cmpului cel mai lung.
char b[10];
La un moment dat se poate memora
double c;
doar un singur cmp dintre cele
};
subordonate.
main()
{ test var; int i;
cin>>var.c; cout<<var.c<<endl;
cin>>var.b; cout<<var.b;
}

nregistrri cu structur
variabil
Forma general a unei uniuni este:
union [<numele uniunii>]
{ <tip> <nume variabila>;

} [lista de variabile] ;
La un moment dat numai un cmp poate fi
ocupat. nregistrrile pot avea structur
variabil.

nregistrri cu structur
variabil
Uniunile pot fi incluse n structuri.
Structurile pot fi incluse n uniuni.
nregistrarea are structur variabil dar
ocup un numr fix de octei.
Citirea i afiare nregistrrii se face, de
fiecare dat , sub switch, n funcie de
datele citite sau coninute.

Definirea
structurilor i uniunii
#include<iostream.h>
struct persoana
{ char nume[30], studii;
union
{ int nr_clase;
struct
{ int an_t;
char oras[20];
} liceu;
struct
{ char nume_f[30];
int nr_ani;
} facultate;
} std;
};

Citirea prii fixe a nregistrrii

main()
{ persoana pers;
cout<<Nume persoana ; cin.get(pers.nume,30);
cout<<Studii (f-fara, g-generala, l-liceu,
ssuperioare);
cin>>pers.studii;

Citirea prii variabile a


nregistrrii
switch(pers.studii)
{ case g: cout<< numar clase ;
cin>>pers.std.nr_clase; break;
case l: cout<< anul terminarii liceului ;
cin>>pers.std.liceu.an_t;
cout<< orasul ;
cin>>pers.std.liceu.oras; break;
case s: cout<< numele facultatii ; cin.get();
cin.get(pers.std.facultate.nume_f,30);
cout<< nr. Ani de studiu ;
cin>>pers.std.facultate.nr_ani;
}

Afiarea
nregistrrii
cout<<pers.nume<<endl;
switch(pers.studii)
{case f: cout<<n-are saracu studii ; break;
case g: cout<<numar clase<<pers.std.nr_clase;
break;
case l: cout<< a terminat liceul in
<<pers.std.liceu.an_t<< in orasul
<<pers.std.liceu.oras; break;
case s: cout<< A terminat facultatea
<<pers.std.facultate.nume_f<< de
<<pers.std.facultate.nr_ani<< ani ;
}

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