Sunteți pe pagina 1din 10

CAPITOLUL 7

Tipuri de date definite de utilizator

TIPURI DE DATE DEFINITE DE UTILIZATOR


7.1. Tipuri definite de utilizator 7.#. $tru turi 7.&. '()puri de *i!i 7.5. De lara!ii t"pedef 7.%. Uniuni 7.+. Enu)er,ri

7.1. TIPURI DEFINITE DE UTILIZATOR


Limbajele de programare de nivel nalt ofer utilizatorului facilit i de a prelucra at!t datele "ingulare #izolate$% c!t &i pe cele grupate' Un e(emplu de grupare a datelor ) de acela&i tip ) l con"tituie tablourile' *atele predefinite &i tablourile #prezentate n capitolele anterioare$ nu "unt n" "uficiente' Informa ia prelucrat n programe e"te organizat% n general n an"ambluri de date% de diferite tipuri' Pentru a putea de"crie ace"te an"ambluri #"tructuri$ de date% limbajele de programare de nivel nalt permit programatorului ")&i definea"c propriile tipuri de date' Limbajul C ofer po"ibilit i de definire a unor tipurilor de date% cu ajutorul+ structurilor ) permit gruparea unor obiecte #date$ de tipuri diferite% referite printr)un nume comun, cmpurilor de bii ) membri ai unei "tructuri pentru care "e aloc un grup de bi i% n interiorul unui cuv!nt de memorie, uniunilor ) permit utilizarea n comun a unei zone de memorie de ctre mai multe obiecte de diferite tipuri, declara iilor typedef ) a"ociaz nume tipurilor noi de date, enumerrilor ) "unt li"te de identificatori cu valori con"tante% ntregi'

7.#. $TRU'TURI
-tructurile grupeaz date de tipuri diferite% con"tituind defini ii ale unor noi tipuri de date' Componentele unei "tructuri "e nume"c membrii (cmpurile) "tructurii' La declararea unei "tructuri "e pot preciza tipurile% identificatorii elementelor componente &i numele "tructurii' .orma general de declarare a unei "tructuri+ struct identificator_tip_structura { lista_de_declaratii_membrii; } lista_identificatori_variabile;

n care+

struct e"te un cuv!nt c/eie #obligatoriu$ identificator_tip_structura reprezint numele noului tip #poate lip"i$ lista_de_declaratii_membri e"te o li"t n care apar tipurile &i identificatorii membrilor "tructurii lista_identificatori_variabile e"te o li"t cu identificatorii variabilelor de tipul declarat'

0embrii unei "tructuri pot fi de orice tip% cu e(cep ia tipului "tructur care "e declar' -e admit n"% pointeri ctre tipul "tructur' Identificator_tip_structura poate lip"i din declara ie% n" n ace"t caz% n lista_identificatori_variabile trebuie " fie prezent cel pu in un identificator_varabila' Lista_identificatori_variabile poate lip"i% n"% n ace"t caz% e"te obigatorie prezen a unui identificator_tip_structura' Exemplu: -e define&te noul tip de date numit data% cu membrii zi% luna% an' Identificatorii variabilelor de tipul data "unt data_naterii% data_angajrii'
struct data { int zi;

123

CAPITOLUL 7 char luna[ !; int an; } data_naterii" data_angajrii;

Tipuri de date definite de utilizator

*eclara ia de mai "u" poate apare "ub forma+


struct data { int zi; char luna[ !; int an; }; struct data data_nasterii" data_angajarii;

/*4ariabilele data5na"terii &i data5angajarii "unt date de tipul data 67 -e poate omite numele noului tip de date+
struct { int zi; char luna[ !; int an; } data_naterii" data_angajrii;

Ini ializarea variabilelor de tip nou% definit prin "tructur% "e poate realiza prin enumerarea valorilor membrilor% n ordinea n care ace&tia apar n declara ia "tructurii' 8eferirea unui membru al "tructurii "e realizeaz cu ajutorul unui operator de baz% numit operator de selecie% "imbolizat prin . 'Operatorul are prioritate ma(im' 0embrul "t!ng al operatorului de "elec ie precizeaz numele variabilei de tipul introdu" prin "tructur% iar membrul drept)numele membrului "tructurii% ca n e(emplul urmtor+ Exemplu:
struct angajat{ char nume[#$!" prenume[#$!; int nr_copii; double salariu; char loc_nastere[#$!; }; struct angajat a1= {"Popescu", "Vlad", 2, 2900200, "Galati"}; a1.nr_copii = ; strcp%&a

'nume"

()opesco(*;

4ariabilele de acela&i tip pot apare ca operanzi ai operatorului de atribuire' 9n ace"t caz atribuirile "e fac membru cu membru' 9n e(emplul anterior am declarat &i ini ializat variabila a1% de tip angajat' *eclarm &i variabila a#% de acela&i tip' *ac dorim ca membrii variabilei a: " con in acelea&i valori ca membrii variabilei a1 #a1 "i a: de tip angajat$% putem folo"i operatorul de atribuire% ca n e(emplul urmtor+
struct angajat a#; a2=a1;

A&a cum ")a ob"ervat din e(emplul anterior% "tructurile pot avea ca membri tablouri #"tructura angajat are ca membrii tablourile de caractere loc_natere[#$!% nume[#$!% prenume[#$!$' *ea"emenea% variabilele de tip definit prin "tructur pot fi grupate n tablouri' Exemplu:
struct persoana{ char nume[#$!" prenume[#$!; int nr_copii; double salariu; char loc_nastere[#$!; }angajati[ $$!; 76 -)au declarat noul tip numit persoana &i variabila numit angajati% care e"te un vector #cu ma(im 122 de elemente$% ale crui elemente "unt de tipul persoana 67

77Ini ializarea elementelor vectorului angaja i;122<


for &int i+$; i, $$; i--*{ cout,,(Intruduceti datele pentru angajatul (,,i- ,,./n.; 12=

CAPITOLUL 7

Tipuri de date definite de utilizator cout,,(0umele 1(; cin22angajati[i!'nume; cout,,()renumele 1(; cin22angaja3i[i!'prenume; cout,,(0r' copii1(; cin22 angaja3i[i!'nr_copii; cout,,(Locul naterii1(; cin22 angaja3i[i!'loc_natere;

Limbajul C permite definirea de "tructuri ale cror membri "unt tot "tructuri+ Exemplu:
struct data{ int zi; char luna[ !; int an; }; struct persoana{ char nume[#$!" prenume[#$!; int nr_copii; double salariu; char loc_natere[#$!; struct data data_na!terii; }; struct persoana p +{()opescu("(4asile(" "5$$$$$$"(6alati(" {##"(7ai(" 89:}};

//Modificarea membrului data_naterii pentru variabila p1 de tip persoana:


p 'data_nateri'zi+#;; strcp%&p 'data_nateri'luna" (<ebruarie(*; p 'data_nasteri'an+ 8:$;

*ac "e dore&te tran"miterea ca parametri ai unor func ii a datelor de tip definit de utilizator prin "tructuri% ace"t lucru "e realizeaz nu)ai cu ajutorul pointerilor "pre noul tipi' *e e(emplu% e"te nece"ar ca variabila p % de tip persoana% " fie prelucrat n func ia f% 9n ace"t caz% func ia va primi ca parametru un pointer "pre tipul per"oana' .unc ia va avea prototipul+
void f&struct persoana "#*;

Apelul func iei "e realizeaz a"tfel+ f&=p *; 9n corpul func iei f% acce"ul la membrii varibilei >% de tip persoana% "e realizeaz a"tfel+ % etc' Pentru a "implifica con"truc iile anterioare% "e folo"e"te operatorul de selecie indirect #$%$+
?@2nume; ?@2prenume; ?@2data_naterii'an &>?*'nume; &>?*'prenume; &>?*'data_naterii'an;

% etc'

-tructurile "unt utilizate n mod frecvent la definirea unor tipuri de date recur"ive #n implementarea li"telor% arborilor% etc'$' Un tip de date e"te direct recur"iv dac are cel pu in un membru care e"te de tip pointer "pre el n"u&i' Exemplu:
struct nod{ char nume[100]; int an; struct nod *urmator; };

Exerciiu: - "e citea"c informa iile de"pre angaja ii unei ntreprinderi% folo"ind o func ie de citire' - "e afi&eze apoi informa iile de"pre angaja i'
Ainclude ,stdio'h2 Ainclude ,conio'h2 struct persoana{ char nume[#$!;int varsta;int salariu; }; &oid cit_pers'struct persoana *ptr_pers( {printf&(0ume angajat1(*; scanf&(Bs("ptr_pers$%nu)e*; 12?

CAPITOLUL 7 Tipuri de date definite de utilizator printf&(4arsta angajat1(*; scanf&(Bd(" =ptr_pers$%varsta*; printf&(Calariu angajat1(*; scanf&(Bd(" *ptr_pers$%salariu*; } &oid )ain'( {struct persoana "p; 77pointer catre date de tip per"oana int nr_ang; clrscr&*; printf&(0r' angajati1(*;scanf&(Bd(" =nr_ang*; p=ne+ persoana,nr_ang-; 77alocare dinamica a memoriei pentru cei nr_ang angajati for &int i+$; i,nr_ang; i--* cit_pers&=p[i!*; printf&(/n/n Datele despre angajati1/n/n(*; for &i+$; i,nr_ang; i--*{ printf&(Engajatul Bd/n 0F7G1 Bs/n 4EHCIE1 Bd/n . 77continuare "ir CELEHIFL1 B'd/n(" i- "p[i!'nume"p[i!'varsta" p[i!'salariu*; printf&(/n/n Epasa o tasta''''/n(*; getch&*; } } A&a cum "e ob"erv din e(emplu% func ia cit_pers prime&te ca parametru pointerul ptr_pers% ctre tipul persoana' Pentru a ace"a membri "tructurii% n corpul func iei% "e folo"e&te operatorul de "elec ie indirect # $' 9n func ia main% "e aloc memorie dinamic #cu ajutorul operatorului neJ$' La afi&are% n func ia printf%

&irul "pecificator de format "e continu pe r!ndul urmtor #folo"irea caracterului @ pentru continuare$'

7.&. '-.PURI DE /I0I


Limbajul C ofer po"ibilitatea de prelucrare a datelor la nivel de bit' *e multe ori "e utilizeaz date care pot avea doar : valori #2 "au 1$% cum ar fi datele pentru controlul unor di"pozitive periferice% "au datele de valori mici' *eclar!nd ace"te date de tip int "au short int% n memorie "e rezerv 1A bi i' Alocarea unui numr at!t de mare de loca ii de memorie nu e"te ju"tificat% de aceea% limbajul C ofer po"ibilitatea declarrii unor date pentru care " "e aloce un numr "pecificat de bi i #alocare pe bi i$' Definiie: Un &ir de bi i adiacen i formeaza un cmp de bii' C!mpurile de bi i "e pot declara ca membri ai unei "tructuri% a"tfel+
struct identificator_tip_struct { tip_elem_ identificator_elem_ 1lungime ; tip_elem_# identificator_elem_#1lungime#; ' ' ' tip_elem_; identificator_elem_;1lungime;; } lista_identif_var_struct; Lungime % lungime#% etc' reprezint lungimea fiecrui c!mp de bi i% rezervat pentru memorarea

membrilor' C!mpurile "e aloc de la bi ii de ordin inferior ai unui cuv!nt #: octe i$% ctre cei de ordin "uperior #figura 7'1$' Exemplu:
struct { int unsigned int int } K" %; ' ' ' a1 b1 c1 #; ; ;; ' ' ' c b a

.igura 7'1' C!mpurile de bi i a% b% c

C!mpurile "e refer ca orice membru al unei "tructuri% prin nume calificate+ Exemplu:
K'a + @ ; K'b + ;; K'c + 5;

Utilizarea c!mpurilor de bi i impune urmtoarele re"tric ii+ Tipul membrilor poate fi int "au unsigened int'
12A

CAPITOLUL 7

Tipuri de date definite de utilizator

Lungime e"te o con"tant ntreag din intervalul ;2% 31<, Un c!mp de bi i nu poate fi operandul unui operator de referen iere' Bu "e pot organiza tablouri de c!mpuri de bi i'

*atorit re"tric iilor pe care le impune folo"irea c!mpurilor de bi i% c!t &i datorit faptului c aplica iile care folo"e"c a"tfel de "tructuri de date au o portabilitate e(trem de redu" #organizarea memoriei depinz!nd de "i"temul de calcul$% "e recomand folo"irea c!mpurilor de bi i cu precau ie% doar n "itua iile n care "e face o economie "ub"tan ial de memorie'

7.%. DE'LARA0II DE TIP


Limbajul C permite atribuirea unui nume pentru un tip #predefinit "au utilizator$ de date' Pentru acea"ta "e folo"e"c delcara iile de tip' .orma general a ace"tora e"te+ t/pede0 tip nume_tip; 0ume_tip poate fi folo"it la declararea datelor n mod "imilar cuvintelor c/eie pentru tipurile predefinite' Exemplu: 771
t%pedef int I0IHG6; I0IHG6 K" %; I0IHG6 z+5;

77:
t%pedef struct{ double parte_real; double parte_imaginar; } LM7)LGN; LM7)LGN K" %;

7.5. UNIUNI
Aceea&i zon de memorie poate fi utilizat pentru p"trarea unor obiecte #date$ de diferite tipuri% prin declararea uniunilor' Uniunile "unt "imilare cu "tructurile% "ingura diferen con"t!nd n modul de memorare' *eclararea uniunilor+ union identificator_tip_uniune { lista de declaratii_membrii; } lista_identificatori_variabile; -pa iul de memorie alocat core"punde tipului membrului de dimen"iune ma(im' Tipul uniune folo"e&te aceea&i zon de memorie% care va con ine informa ii organizate n mai multe moduri% core"punztor tipurilor membrilor' Exemplu:
union numeric{ int i; float f; double d; } num; num'i + #$; num'f + O':$; cout,,sizeof&num*,,./n.; num'i num'f num'd

:2

?'C2 nu)

77C

.igura 7':' 0odul de alocare a memoriei pentru variabila num #uniune$ ) C octe i

Pentru variabile num "e rezerv C octe i de memorie% dimen"iunea ma(im a zonei de memorie alocate membrilor #pentru int ")ar fi rezervat : octe i% pentru float =% iar pentru double C$' 9n e(emplul anterior% n aceea&i zon de memorie "e p"treaz fie o valoare ntreag # num'i+#$$% fie o valoare real% dubl precizie #num'f+O':$$'

127

CAPITOLUL 7

Tipuri de date definite de utilizator

*ac pentru definirea tipului numeric ")ar fi folo"it o "tructur% modul de alocare a memoriei ar fi fo"t cel din figura 7'3'
struct numeric{ int i; float f; double d; } num; num'i + #$; num'f + O':$; cout,,sizeof&num*,,./n.; num'd num'f num'i ?'C2 :2 nu)

771=

.igura 7'3' 0odul de alocare a memoriei pentru variabila num #"tructur$ ) 1= octe i

7.+. ENU.ER1RI
Tipul enumerare a"ociaz fiecrui identificator o con"atant ntreag' -inta(a declara iei+ enum identificator_tip_enumerare { identif_elem + const " ' ' ' } lista_identif_variabile; *in declara ie pot lip"i fie identificator_tip_enumerare% fie lista_identif_variabile' Pentru fiecare element al enumerrii% con"tanta poate fi a"ociat n mod e(plicit #ca n declara ia anterioar$% fie implicit' 9n modul implicit nu "e "pecific nici o con"tant% iar valoarea implicit e"te 2 pentru primul element% iar pentru re"tul elementelor% valoarea precedent incrementat cu 1' Dnumerrile "e folo"e"c n "itua iile n care variabilele pot avea un numr mic de valori ntregi% a"ociind un nume "uge"tiv pentru fiecare valoare' Exemplu: 771 enum boolean {<ELCG" IHFG}; 77definirea tipului boolean cu elementele .AL-D "i T8UD 77declaratie ec/ivalenta cu enum boolean {<ELCG+$" IHFG+ };
cout,,(<ELCG este (,,<ELCG,,./n.; 77.AL-D e"te 2

77:
t%pedef enum temperatura {mica+@ $" medie+ $" mare+:$}; 77tipul enumerare temperatura% cu elementele mica #de valoare )12$% medie #valoare 12$% mare

#valoare C2$
temperatura t " t#; t +medie; cout,,(t +(,,t ,,./n.;

77declararea variabilelor t1% t: de tip enumerare temperatura 77t1E12

Exerciiu: - "e citea"c #cu ajutorul unei func ii de citire$ urmtoarele informa ii de"pre elevii participan i la un concur" de admitere+ nume% numrul de n"criere &i cele trei note ob inute' - "e afi&eze% printr)o func ie% informa iile citite' - "e afi&eze o li"t cu elevii participan i la concur"% ordona i alfabetic% notele &i media ob inut #func ie de ordonare% func ie de calculare a mediei$' - "e afi&eze li"ta elevilor n"cri&i la concur"% n ordinea de"cre"ctoare a mediilor' -unt prezentate c!teva modalit i de implementare' 9n ace"te variante apar doar func ia cit_elev #de citire$ &i main' -)a definit tipul elev' -e lucreaz cu vectori de tip elev' 9n func ia cit_elev "e valideaz fiecare not' -e va ob"erva modul de acce" la membri "tructurii n func ia cit_elev' *ezavantajul principal al ace"tui mod de implementare l con"tituie ri"ipa de memorie% deoarece n func ia main "e rezerv o zon de memorie continu% pentru 122 de elemente de tip elev #1226"izeof#elev$$'
Ainclude ,iostream'h2 Ainclude ,conio'h2 t/pede0 struct ele&{ char nume[#$!;int nr_matr;int note[;!; }; 77definirea tipului elev &oid cit_ele&i'ele& a,-, int n( 12C

CAPITOLUL 7 Tipuri de date definite de utilizator {for &int i+$; i,n; i--*{ cout,,(0ume elev1(; cin22a,i-.nu)e; 77citirea numelui unui elev cout,,(0r' insriere1(; cin22a,i-.nr_)atr; for &int j+$; j,;; j--*{ 77 citirea notelor obtinute do{ cout,,(0ota 1(,,j- ,,( +(; cin22a,i-.note,j-; if &a[i!'note[j!,$ PP a[i!'note[j!2 $* 77validarea notei cout,,(0ota incorectaQ''''HepetaQ/n(; }Jhile &a[i!'note[j!,$ PP a[i!'note[j!2 $*; } } } void main&* { int nr_elevi; clrscr&*; cout,,(0r' elevi1(;cin22nr_elevi; ele& p,100-; 77declararea tabloului p% de tip elev cit_elevi&p" nr_elevi*; 77apel functie }

9n varianta urmtoare% "e lucreaz cu pointeri ctre tipul elev% iar memoria e"te alocat dinamic'
t/pede0 struct ele&{ char nume[#$!;int nr_matr;int note[;!; }; 77definirea tipului elev &oid cit_ele&i'ele& "a, int n( { for &int i+$; i,n; i--*{ cout,,(0ume elev1(; cin%%'a1i($%nu)e; 77"au cin%%'"'a1i((.nu)e; cout,,(0r' insriere1(; cin22&a1i($%nr_)atr; for &int j+$; j,;; j--*{ do{ cout,,(0ota 1(,,j- ,,( +(; cin22&a-i*@2note[j!; if &&a-i*@2note[j!,$ PP &a-i*@2note[j!2 $* cout,,(0ota incorectaQ''''HepetaQ/n(; }Jhile &&a-i*@2note[j!,$ PP &a-i*@2note[j!2 $*; } } } &oid )ain'( { int nr_elevi; clrscr&*; cout,,(0r' elevi1(;cin22nr_elevi; ele& "p; 77declararea pointerului p% ctre tipul elev p=ne+ ele&,nr_ele&i-; 77alocarea dinamic a memoriei% pentru un tablou cu nr_elevi elemente cit_elevi&p" nr_elevi*; 77apel functie }

Implementarea tuturor func iilor+


Ainclude ,stdio'h2 Ainclude ,string'h2 Adefine DI7_)E6 #5 77dimen"iunea paginii de afi"are Adefine <ELCG $ Adefine IHFG &oid ord_)edii'ele& "a, int n( { int gata +<ELCG;int i;double med " med#;elev auK; Jhile &Qgata*{ gata+IHFG; for &i+$; i,+n@#; i--*{ med +$;med#+$; 12F

CAPITOLUL 7

Tipuri de date definite de utilizator for &int j+$; j,;; j--*{ med -+&a-i*@2note[j!; med#-+&a-i- *@2note[j!;

77calculul mediilor pentru elementele vecine


} med R+;; med#R+;; if &med ,med#*{ auK+>&a-i*; >&a-i*+>&a-i- *;>&a-i- *+auK; gata+<ELCG; } } } } &oid ord_al0'ele& "a, int n( { int gata +<ELCG;int i;double med " med#;elev auK; Jhile &Qgata*{ gata+IHFG; for &i+$; i,+n@#; i--*{ if &strc)p' 'a1i($%nu)e,'a1i11($%nu)e* 2$*{ auK+>&a-i*; >&a-i*+>&a-i- *;>&a-i- *+auK; gata+<ELCG;} } } } &oid cit_ele&i'ele& "a, int n(;

77 functie implementata anterior


&oid antet_a0is'const c2ar "s( {printf&(Bs/n(" s*; } &oid a0is_ele&'ele& "a, int n, c2ar c( {clrscr&*; if &c++.E.* antet_afis&( LICIE I0CLHICILMH /n(*; if &c++.M.* antet_afis&( LICIE EL<ESGIILE /n(*; if &c++.H.* antet_afis&( LICIE 7GDII /n(*; printf&(0r'crt'P0r' 7atricolP 0F7G P0ota P0ota#P0ota;P 7GDIE/ P/n(*; printf&(@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ /n(*; int lin+;; for &int i+$; i,n; i--*{ printf&(B9dPB #dPB@#$sP("i- "&a-i*@2nr_matr"&a-i*@2nume*; double med+$; for &int j+$; j,;; j--*{ printf&(B@OdP(" &a-i*@2note[j!*; med-+&a-i*@2note[j!; } medR+;;printf&(B@8'#fP/n(" med*;lin--; if &lin++&DI7_)E6@ **{ printf&( Epasa o tasta''''(*; getch&*; clrscr&*; if &c++.E.* antet_afis&( LICIE I0CLHICILMH /n(*; if &c++.M.* antet_afis&( LICIE EL<ESGIILE /n(*; if &c++.H.* antet_afis&( LICIE 7GDII /n(*; printf&(0r'crt'P 0F7G P0ota P0ota#P0ota;P 7GDIE/ P/n(*; printf&(@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ /n(*; int lin+;; } } 112

CAPITOLUL 7

Tipuri de date definite de utilizator

printf&( Epasa o tasta''''(*; getch&*; } &oid )ain'( { int nr_elevi; clrscr&*; cout,,(0r' elevi1(;cin22nr_elevi; elev >p; p+neJ elev[nr_elevi!; cit_elevi&p" nr_elevi*; afis_elev&p" nr_elevi" .E.*;RRafisarea inscrisilor ord_medii&p" nr_elevi*; afis_elev&p" nr_elevi" .H.*;RRafisarea in ordinea mediilor ord_alf&p" nr_elevi*; RRordonare alfabetica afis_elev&p" nr_elevi" .M.*;RRafisarea in ordinea mediilor }

descrescatoare descrescatoare

a a

-)au implementet urmtoarele func ii+ cit_elevi ) cite&te informa iile de"pre elevii n"cri&i' afis_elevi ) afi&eaz informa iile de"pre elevi' Acea"t func ie e"te folo"it pentru cele trei afi&ri #li"ta n"cri&ilor% li"ta alfabetic &i cla"amentul n ordinea de"cre"ctoare a mediilor$' Afi&area "e realizeaz cu ajutorul func iei printf% care permite formatarea datelor afi&ate' Afi&area "e realizeaz ecran cu ecran #"e folo"e&te variabila lin care contorizeaz numrul de linii afi&ate$% cu pauz dup fiecare ecran' La nceputul fiecrei pagini "e afi&eaz titlul li"tei ) core"punztor caracterului tran"mi" ca parametru func iei ) &i capul de tabel' *ea"emenea% pentru fiecare elev n"cri" "e calculeaz media ob inut #variabila med$' ord_medii ) ordoneaz vectorul de elevi #tran"mi" ca parametru% pointer la tipul elev$% de"cre"ctor% dup medii' -e aplic metoda Gubble-ort% compar!ndu)"e mediile elementelor vecine # med reprezint media elementului de indice i% iar med# ) a celui de indice i- $ ale vectorului' ord_alf ) ordoneaz vectorul de elevi #tran"mi" ca parametru% pointer la tipul elev$% cre"ctor% dup informa ia con inut de membrul nume' Pentru compararea numelor "e folo"e&te func ia strcmp' *eoarece e"te foarte probabil ca vectorul n"cri&ilor " aib multe elemente% pentru ordonri% ar fi fo"t mai eficient metoda TuicUCort, ")a folo"it Gubble-ort pentru a nu complica prea mult problema'

2NTRE/1RI 3I E4ER'I0II '5e6tiuni teoreti e


1' 4ariabilele tablou &i variabilele de tip definit de utilizator "unt e(emple de variabile compu"e #reprezint date "tructurate$' Care e"te% totu&i% deo"ebirea dintre eleH :' Ce po"ibilit i de definire a unor noi tipuri de date v ofer limbajul C7CIIH 3' 9n ce con"t diferen a dintre "tructuri &i uniuniH =' Cum "e nume"c componentele unei "tructuriH ?' Ce re"tric ii impune folo"irea c!mpurilor de bi iH A' D(i"t vreo re"tric ie referitoare la tipul membrilor unei "tructuriH *ac da% care e"te acea"taH

'5e6tiuni pra ti e
1' :' 3' a$ - "e implementeze programele cu e(emplele prezentate' - "e "crie programele pentru e(erci iile rezolvate care au fo"t prezentate' 8ealiza i urmtoarele modificri la e(erci iul prezentat la "f!r&itul capitolului+ Completa i cu o func ie de calcul &i afi&are a mediei notelor tuturor candida ilor pentru fiecare prob #media tuturor elevilor la proba1% media la proba:% etc$' b$ 0odifica i li"ta alfabetic% a"tfel nc!t la elevii cu medie pe"te ?% " apar #alturi de medie$ me"ajul JPromovatJ% iar la ceilal i% me"ajul JBepromovatJ'

111

CAPITOLUL 7

Tipuri de date definite de utilizator

c$ Con"ider!nd c rezultatelor ob inute "unt utilizate la un concur" de admitere% la care e(i"t B locuri #B introdu" de la ta"tatur$% &i de faptul c pentru a fi admi" media trebuie " fie cel pu in ?% " "e afi&eze li"ta admi&ilor &i li"ta re"pin&ilor% n ordinea de"cre"ctoare a mediilor% n limita locurilor di"ponibile' :' - "e "crie un program care " permit memorarea datelor privitoare la angaja ii unei firme mici+ nume angajat% adre"% numr copii% "e(% data na&terii% data angajrii% calificare% "alariul brut' -e vor implementa urmtoarele func ii+ a$ Citirea informa iilor de"pre cei B angaja i #B introdu" de la ta"tatur$, b$ Cutarea ) dup nume ) a unui angajat &i afi&area informa iilor de"pre ace"ta, c$ 0odificarea informa iilor de"pre un anumit angajat, d$ Li"ta alfabetic a angaja ilor% n care vor apare+ nume% adre"% data angajrii% calificare% "alariu, e$ Li"ta angaja ilor n ordone de"cre"ctoare a vec/imii, f$ Li"ta angajatilor cu un anumit numar de copii% C% introdu" de la ta"tatur, g$ Li"ta angaja ilor cu v!r"ta mai mare dec!t 4 #4 introdu" de la ta"tatur$, /$ -alariul minim% "alariul mediu &i cel ma(im din firm, i$ Li"ta de "alarii% n care vor apare+ numele% calificarea% "alariul brut &i "alariul net' La "f!r&itul li"tei vor apare totalurile pentru "alariile brute% impozite% "alarii nete' Pentru calculul "alariului net "e aplic urmtoarele reguli de impozitare+ i'1$ I=15% pentru "alariul brut #-G$KA22222 i':$ I=50000 !0% pentru A22222KE-GK1?22222 #:2L din ceea ce dep&e&te A22222$ i'3$ I=100000 "0% pentru 1?22222KE-GK3222222 i'=$ I=!50000 #0% pentru 3222222KE-GK1?222222 i'?$ I=#5% pentru -GME1?22222

11:

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