Documente Academic
Documente Profesional
Documente Cultură
Inregistrare
Prof. Daniela Stratulat
1. Notiuni Introductive
In practica, apar situatii in care toate tipurile de date
invatate pana in prezent nu ne sunt de mare folos. Pentru a
intelege aceasta vom porni de la un exemplu. Presupunem ca
dorim sa prelucram date referitoare la mai multi elevi. Pentru
fiecare elev cunoastem:
1.
2.
3.
4.
5.
Numele- char[20] ;
Prenume- char[20] ;
Nota matematica- float ;
Nota informatica- float ;
Varsta- int ;
} [lista de variabile];
Pentru exemplul dat, structura este:
struct elev
{char nume[20], prenume[20];
float nota_mate,nota_info;
int varsta ;
};
si se numeste elev.
sfarsit numele
Aplicatie:
Referitor la fiecare elev din clasa XI I se cunosc
numele si nota obtinuta la testul de informatica.
Scrieti un program care sa citeasca de la tastatura
numarul n de elevi din clasa XI I impreuna cu
informatiile referitoare la acestia si sa se afiseze:
Tema
Pentru fiecare produs dintr-un depozit
se cunosc numele, cantitatea disponibila si
pretul de vanzare. Scrieti un program care
sa citeasca de la tastatura numarul n<100
de produse disponibile, impreuna cu
informatiile referitoare la acestea si un alt
numar natural k<n. Sa se afiseze numele
si pretul pentru primele k produse, in
ordinea crescatoare a pretului. (pentru 2
produse cu acelasi pret vor fi ordonate
crescator dupa nume)
2. Inregistrari imbricate
Exista situatii cand un tip structurat contine in interiorul sau
un alt tip structurat. Priviti tipul urmator:
struct elev
{char nume[20], prenume[20];
struct
{int clasa ;
float note[20];
}situatie;
int varsta;
};
Structura de baza este elev. In interiorul sau se gaseste o alta
structura, de aceasta data fara nume, dar pentru care exista declarata
o variabila numita situatie.In realitate nu este vorba de o variabila, ci
de un nume prin intermediul caruia poate fi accesat un element al
structurii. Am vazut ca, in general, elementele structurii se acceseaza
prin numele variabilei de tipul structurii respective.
Exemplu:
Fie inr o inregistrare de tipul elev. In
aceste conditii accesarea elementelor situate
in interiorul substructurii se face ca mai jos:
inr.situatie.clasa se acceseaza campul
clasa al substructurii;
inr.situatie.note[0] - se acceseaza prima
nota a vectorului inclus in substructura.
3. Inregistrari cu structura
variabila
Pentru inceput, vom studia un tip aparte de
structurata, numit union. Analizati programul urmator:
#include<iostream>
using namespace std;
union test
{
int a;
char b[10];
double c;
};
int main()
{
test var;
cin >>var.c; cout<<var.c<<endl;
cin >>var.b; cout<<var.b;
return 0;
}
data
}[lista de variabile] ;
Cu exceptia faptului ca numai un camp poate fi ocupat la un
moment dat, toate celelalte reguli sunt identice cu cele de la
structuri. Bine, veti intreba, dar la ce folosesc uniunile?
Sunt situatii in care inregistrarile nu au format fix, ci
variabil.
Exemplu:
#include<iostream>
using namespace std;
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;
};
Int main()
{ persoana pers;
cout<<nume persoana ; cin.get(pers.nume,30);
cout<<Studii (f-fara studii, g-generala, l-liceu, s-superioare) ;
cin>>pers.studii;
switch (pers.studii)
{
case g: cout<<nr. clase;
cin>>pers.std.nr_clase;
break;
// afisez inregistrarea
cout<<pers.nume<<endl;
switch (pers.studii)
{ case f: cout<<n-are saracu studii; break;
case g: cout<<nr 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<<numele facultatii <<pers.std.facultate.nume_f<<
<<nr ani de studiu <<pers.std.facultate.nr_ani;
}
return 0;
}