Sunteți pe pagina 1din 10

Tipul inregistrare

Inregistrarea = structura de date formata dintrun ansamblu de date neomogene intre care exista o legatura de continut. Elementele structurii se numesc campuri si pot fi identificate dupa un nume.
Struct [<nume_structura>] {<tip_data1> <nume11>, <nume12><nume1n>; <tip_data2> <nume21>, <nume22><nume2n>; ..}

Pentru a folosi in program o variabila de memorie de acest tip, ea trebuie declarata: <nume_structura> <nume_variabila>; Exemplu:
struct <nume_structura> { <descriere_campuri>}; struct <nume_structura> {<descriere_campuri>} <nume_variabila>;

struct {<descriere_campuri>} <nume_variabila>; Obs: In ultima varianta, nu s-a atribuit un nume structurii definite. De aceea, nu se va putea defini ulterior o alta variabila de memorie cu acest tip.

Exemplu
struct adresa {char nume[20],pren[20],adr[40], loc[20],jud[20]; unsigned long cod_p;}; adresa adr_pers;

struct adresa {char nume[20],pren[20],adr[40], loc[20],jud[20]; unsigned long cod_p;} adr_pers; struct {char nume[20],pren[20],adr[40], loc[20],jud[20]; unsigned long cod_p;} adr_pers;

Accesul la campurile inregistrarii


<nume_variabila_inregistrare>.<nume_camp> Obs: unei inregistrari i se poate atribui valoarea unei alte inregistrari de acelasi tip. Ex: struct punct {int x,y;}; punct a, b; a.x=10; a.y=20; b=a; cout<<b.x<< <<b.y;

Inregistrari imbricate
Varianta 1 struct data {unsigned zi, luna, an;}; struct persoana {char nume[20], pren[20]; data data_n; unsigned varsta;}; persoana pers; // pers.data_n.zi Varianta 2 struct persoana {char nume[20], pren[20]; struct {unsigned zi, luna, an;} data_n; unsigned varsta;}; persoana pers; // pers.data_n.zi

Tablouri de inregistrari
Intr-o clasa sunt maxim 30 de elevi, fiecare elev fiind identificat prin nume si prenume. Elevul poate primi maxim 5 note la o disciplina, pe semestru. Se citesc de la tastatura: numarul de elevi din clasa si, pentru fiecare elev, numele, prenumele si notele. Daca are mai putin de 5 note, notelor lipsa li se va atribui valoarea 0, iar in calculul mediei se vor lua numai notele diferite de 0. Sa se calculeze si sa se afiseze mediile elevilor din clasa la acea disciplina.

#include <iostream.h> #include <math.h> void main() {struct elev {char nume[20], pren[20]; unsigned nota[5]; float media;}; elev clasa[30]; int n,I,j,s,k; cout<<nr elevi:; cin>> n;

for (i=0; i<n; i++) {cin.get(); cout<<elevul<<i+1<<endl; cout<<nume;cin.get(clasa[i].nume,20);cin.get(); cout<<prenume;cin.get(clasa[i].pren,20); cin.get(); for (j=0;j<5;j++) {cout<<nota<<j+1<< ; cin>>clasa[i].nota[j];}} for (i=0; i<n; i++) {s=0; k=0; for (j=0;j<5;j++) if (clasa[i].nota[j]!=0){s+=clasa[i].nota[j]; k++;} clasa[i].media=(float)s/k;}

for (i=0; i<n; i++) {cout<<clasa[i].nume<< <<clasa[i].pren<< ; cout<<clasa[i].media<<endl;}}