Sunteți pe pagina 1din 22

STRUCTURI DE

DATE NEOMOGENE

Prezentare adaptata

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
Exemplu: 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;
} e1,e2;
2.

Declarnd variabilele aa cum suntem obinuii:


elev e1, e2;

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
Fie e o variabil de tipul elev. Atunci:
e.nume reprezint irul nume al
variabilei inr;
e.nume[0] - reprezint primul caracter al
irului nume;
e.nota_mate reprezint cmpul
nota_mate al variabilei inr.

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

Exemplu
Se considera tipul elev descris mai sus.
Sa se citeasca 2 variabile de tip elev,

numite e1 si e2, folosind o functie de


citire cu tipul elev;
Sa se afiseze variabiele folosind o
functie de afisare de tip void;
Sa se ordoneze variabilele e1 si e2 in
functie de nume.

Functia de citire:
elev citire()
{elev e;
cout<<"nume=";cin>>e.nume;
cout<<"prenume=";cin>>e.prenume;
cout<<"nota mate=";cin>>e.nota_mate;
cout<<"nota info=";cin>>e.nota_info;
cout<<"varsta=";cin>>e.varsta;
return e;
}

Functia de afisare:
void afisare(elev e)
{cout<<e.nume<<" "<<e.prenume;
cout<<" are "<<e.nota_mate<<" la mate si ";
cout<<e.nota_info<<" la info "<<endl;
}

Functia main:
int main()
{elev e1,e2,aux;
e1=citire(); e2=citire();
system("cls");
cout<<"In ordinea citirii:";
afisare(e1); afisare(e2);
if(strcmp(e1.nume,e2.nume)>0)
aux=e1,e1=e2,e2=aux;
cout<<"\n\nIn ordine lexicografica:";
afisare(e1); afisare(e2);
}

Aplicatii
In majoritatea aplicatiilor se folosesc vectori de

structuri (vectori cu tipul de baza struct);


Acest lucru nu contravine caracteristicii
vectorului variabila structurata omogena
deoarece elementele sale au toate acelasi tip,
desi fiecare element este o variabila structurata
neomogena;
Declararea unui vector de structuri:
<nume_struct> <nume_vector>[<dimensiune>]

Exemplu
Sa se citeasca si sa se afiseze

informatiile considerate in exemplul


anterior pentru toti elevii unei clase.
Aceste informatii se retin intr-un vector
de structuri.
Declararea vectorului:
elev clasa[35];

Exemplu
Citirea (folosind functia descrisa anterior):

void citire_clasa(elev clasa[35], int &n)


{int i;
cout<<"Numarul de elevi:";cin>>n;
for(i=0;i<n;i++)
clasa[i]=citire();
}

Exemplu
Afisarea (folosind functia descrisa anterior):

void afisare_clasa(elev clasa[35], int n)


{int i;
cout<<"Elevii clasei:\n";
for(i=0;i<n;i++)
afisare(clasa[i]);
}

1. Agenda
Se citesc din fisierul de intrare agenda.in un

numar natural (n<200), apoi numarul de telefon


si numele a n persoane. Programul va crea o
agenda telefonica in care va retine informatiile
citite in ordinea alfabetica a numelor
persoanelor. Dupa crearea agendei telefonice,
se va citi de la tastatura numele unei persoane.
Daca persoana e gasita atunci se va afisa in
fisierul de iesire agenda.out numarul sau de
telefon altfel mesaj de eroare.

2. Elevi
Se considera o lista formata din date referitoare

la n elevi. Fiecarui elev i se cunoaste numele si


prenumele, media notelor de la oral la disciplina
Informatica si nota la teza. Realizati un program
care afiseaza pentru fiecare litera a alfabetului
numele si prenumle elevului care a obtinut cea
mai mare medie dintre cei a caror nume de
familie incepe cu acea litera. Datele de intrare
se citesc din fisierul elevi.in iar rezultatele se
scriu in fisierul elevi.out.

3. Intervale
Se considera n intervale inchise [a,b], a

si b fiind numere intregi. Determinati


reuniunea acestora.
Datele de intrare se citesc din fisierul
intervale.in iar rezultatul in fisierul
intervale.out.

4. Fractii
Se considera un sir de n fractii identificate prin

numarator si numitor. Datele de inrare se citesc


din fisierul fractii.in.
Sa se stearga din sir toate fractiile ireductibile.
Fractiile reductibile vor fi afisate in fisierul
fractii.out in ordinea crescatoare a valorilor. In
fisierul in. txt se va citi de pe fiecare linie
perechea: numarator, numitor. Fractiile rezultate
vor fi afisate in acelasi format in fisierul text
out.txt.

5. Puncte
Se considera un sir de n puncte in plan,

pentru fiecare cunoscindu-se


coordonatele intregi (x,y).
Datele de inrare se citesc din fisierul
puncte.in.
Realizati un program care determina si
afiseaza in fisierul de iesire puncte.out
numarul maxim de puncte coliniare
situate pe o dreapta paralela cu axa OX.

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