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

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,  câmpurilor de biţi ) 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 către mai multe obiecte de diferite tipuri,  declara iilor typedef ) a"ociază nume tipurilor noi de date,  enumerărilor ) "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 (câmpurile) "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 către 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_naşterii% data_angajării'
struct data { int zi;

123

char loc_nastere[#$!. a1. 2900200. 76 -)au declarat noul tip numit persoana &i variabila numită angajati% care e"te un vector #cu ma(im 122 de elemente$% ale cărui elemente "unt de tipul persoana 67 77Ini ializarea elementelor vectorului angaja i. double salariu. "Galati"}. 2. int an. 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 selecţie% "imbolizat prin . Tipuri de date definite de utilizator *eclara ia de mai "u" poate apare "ub forma+ struct data { int zi.i. struct data data_nasterii" data_angajarii. '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 următor+ Exemplu: struct angajat{ char nume[#$!" prenume[#$!. /*4ariabilele data5na"terii &i data5angajarii "unt date de tipul data 67 -e poate omite numele noului tip de date+ struct { int zi.CAPITOLUL 7 char luna[ !.. char luna[ !. }angajati[ $$!... char loc_nastere[#$!. i. char luna[ !. } data_naşterii" data_angajării. i--*{ cout. struct angajat a1= {"Popescu". $$.. 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_naştere[#$!% nume[#$!% prenume[#$!$' *ea"emenea% variabilele de tip definit prin "tructură pot fi grupate în tablouri' Exemplu: struct persoana{ char nume[#$!" prenume[#$!.. double salariu.nr_copii = . 12= . int an. }../n. "Vlad". 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' *eclarăm &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 următor+ struct angajat a#. int nr_copii. int an.122< for &int i+$. } data_naşterii" data_angajării.(Intruduceti datele pentru angajatul (. strcp%&a 'nume" ()opesco(*. int nr_copii. }. a2=a1.

int varsta.unc ia va avea prototipul+ void f&struct persoana "#*. int an.stdio'h2 Ainclude .(Locul naşterii1(. double salariu. Apelul func iei "e realizează a"tfel+ f&=p *. int an.. cout. p 'data_nasteri'an+ 8:$..(0r' copii1(. struct persoana p +{()opescu("(4asile(" "5$$$$$$"(6alati(" {##"(7ai(" 89:}}.conio'h2 struct persoana{ char nume[#$!..CAPITOLUL 7 Tipuri de date definite de utilizator cout. &oid cit_pers'struct persoana *ptr_pers( {printf&(0ume angajat1(*. char loc_naştere[#$!. % 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]. cin22angaja3i[i!'prenume. 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 selecţie indirectă #$%$+ ?@2nume. struct data data_na!terii. ?@2prenume. }. int nr_copii.int salariu. }.(0umele 1(. struct persoana{ char nume[#$!" prenume[#$!. Exerciţiu: -ă "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 . char luna[ !. //Modificarea membrului data_naşterii pentru variabila p1 de tip persoana: p 'data_naşteri'zi+#. *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' . } Limbajul C permite definirea de "tructuri ale căror membri "unt tot "tructuri+ Exemplu: struct data{ int zi. cin22 angaja3i[i!'loc_naştere. cout. strcp%&p 'data_naşteri'luna" (<ebruarie(*..()renumele 1(. &>?*'data_naşterii'an. 12? . cin22angajati[i!'nume. }. ?@2data_naşterii'an &>?*'nume. scanf&(Bs("ptr_pers$%nu)e*. }. struct nod *urmator. &>?*'prenume.. cout. cin22 angaja3i[i!'nr_copii.

clrscr&*. 77pointer catre date de tip per"oana int nr_ang.. printf&(0r' angajati1(*. printf&(/n/n Epasa o tasta''''/n(*. printf&(Calariu angajat1(*. 77alocare dinamica a memoriei pentru cei nr_ang angajati for &int i+$. p=ne+ persoana. ' ' ' a1 b1 c1 #. } lista_identif_var_struct. scanf&(Bd(" *ptr_pers$%salariu*. tip_elem_# identificator_elem_#1lungime#.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 + @ . i--* cit_pers&=p[i!*. K'b + . getch&*.CAPITOLUL 7 Tipuri de date definite de utilizator printf&(4arsta angajat1(*. i. } } A&a cum "e ob"ervă din e(emplu% func ia cit_pers prime&te ca parametru pointerul ptr_pers% către 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 următor #folo"irea caracterului @ pentru continuare$' 7. '-. i--*{ printf&(Engajatul Bd/n 0F7G1 Bs/n 4EHCIE1 Bd/n .nr_ang. K'c + 5. printf&(/n/n Datele despre angajati1/n/n(*.scanf&(Bd(" =nr_ang*.&. . ' ' ' c b a . Lungime % lungime#% etc' reprezintă lungimea fiecărui 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$% către cei de ordin "uperior #figura 7'1$' Exemplu: struct { int unsigned int int } K" %.nr_ang. scanf&(Bd(" =ptr_pers$%varsta*.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 număr at!t de mare de loca ii de memorie nu e"te ju"tificată% de aceea% limbajul C oferă po"ibilitatea declarării unor date pentru care "ă "e aloce un număr "pecificat de bi i #alocare pe bi i$' Definiţie: Un &ir de bi i adiacen i formeaza un câmp de biţi' 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_.1lungime. identificator_elem_. for &i+$.. 77continuare "ir CELEHIFL1 B'd/n(" i. ."p[i!'nume"p[i!'varsta" p[i!'salariu*. Utilizarea c!mpurilor de bi i impune următoarele re"tric ii+  Tipul membrilor poate fi int "au unsigened int' 12A . i..nr_ang-. } &oid )ain'( {struct persoana "p.

%.sizeof&num*. num'i + #$. cout. } lista_identificatori_variabile.2% 31<.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 . 7.5. num'f + O':$. 0ume_tip poate fi folo"it la declararea datelor în mod "imilar cuvintelor c/eie pentru tipurile predefinite' Exemplu: 771 t%pedef int I0IHG6.CAPITOLUL 7    Tipuri de date definite de utilizator Lungime e"te o con"tantă întreagă din intervalul . } LM7)LGN. 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. -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"punzător tipurilor membrilor' Exemplu: union numeric{ int i. LM7)LGN K" %. I0IHG6 z+5. } num.orma generală a ace"tora e"te+ t/pede0 tip nume_tip.. 77: t%pedef struct{ double parte_reală.. 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' . double parte_imaginară. double d. num'i num'f num'd :2 ?'C2 nu) 77C . 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.. I0IHG6 K" %./n.. float f.

int nr_matr. } num.iostream'h2 Ainclude ... *in declara ie pot lip"i fie identificator_tip_enumerare% fie lista_identif_variabile' Pentru fiecare element al enumerării% 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' Dnumerările "e folo"e"c în "itua iile în care variabilele pot avea un număr mic de valori întregi% a"ociind un nume "uge"tiv pentru fiecare valoare' Exemplu: 771 enum boolean {<ELCG" IHFG}. cout. float f.AL-D "i T8UD 77declaratie ec/ivalenta cu enum boolean {<ELCG+$" IHFG+ }.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.. num'f + O':$. cout. ENU.<ELCG.(t +(. 77.. 77declararea variabilelor t1% t: de tip enumerare temperatura 77t1E12 Exerciţiu: -ă "e citea"că #cu ajutorul unei func ii de citire$ următoarele informa ii de"pre elevii participan i la un concur" de admitere+ nume% numărul 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"cătoare 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 ...igura 7'3' 0odul de alocare a memoriei pentru variabila num #"tructură$ ) 1= octe i 7. num'd num'f num'i ?'C2 :2 nu) 771= .!..(<ELCG este (. 77definirea tipului boolean cu elementele ..int note[.. cout. }.. double d.sizeof&num*.conio'h2 t/pede0 struct ele&{ char nume[#$!../n. 77definirea tipului elev &oid cit_ele&i'ele& a.AL-D e"te 2 77: t%pedef enum temperatura {mica+@ $" medie+ $" mare+:$}.t . int n( 12C ./n...ER1RI Tipul enumerare a"ociază fiecărui identificator o con"atantă întreagă' -inta(a declara iei+ enum identificator_tip_enumerare { identif_elem + const " ' ' ' } lista_identif_variabile../n.-. 77tipul enumerare temperatura% cu elementele mica #de valoare )12$% medie #valoare 12$% mare #valoare C2$ temperatura t " t#.+. t +medie. num'i + #$.

(0ume elev1(.nr_ele&i-.(0r' elevi1(.$ PP a[i!'note[j!2 $*..med#+$.(0ota 1(.$ PP &a-i*@2note[j!2 $* cout.(0ota 1(...(0r' elevi1(.cin22nr_elevi.( +(. 77definirea tipului elev &oid cit_ele&i'ele& "a..j-. i.i-.nr_)atr.note.. cin22a.j. cin22a.(0r' insriere1(. Jhile &Qgata*{ gata+IHFG.nu)e. 77apel functie } Implementarea tuturor func iilor+ Ainclude . clrscr&*.CAPITOLUL 7 Tipuri de date definite de utilizator {for &int i+$. cin22a.100-.$ PP a[i!'note[j!2 $* 77validarea notei cout. }. 77"au cin%%'"'a1i((.int note[... i--*{ cout... cin22&a1i($%nr_)atr. clrscr&*. i--*{ med +$. for &int j+$.cin22nr_elevi. ele& "p. 77declararea tabloului p% de tip elev cit_elevi&p" nr_elevi*. 77alocarea dinamică a memoriei% pentru un tablou cu nr_elevi elemente cit_elevi&p" nr_elevi*.(0ota incorectaQ''''HepetaQ/n(... i. cout.j. for &int j+$. cin%%'a1i($%nu)e. ele& p. cin22&a-i*@2note[j!.n.int nr_matr..(0ota incorectaQ''''HepetaQ/n(. i--*{ cout.nu)e. }Jhile &a[i!'note[j!. } } } void main&* { int nr_elevi.double med " med#.string'h2 Adefine DI7_)E6 #5 77dimen"iunea paginii de afi"are Adefine <ELCG $ Adefine IHFG &oid ord_)edii'ele& "a. }Jhile &&a-i*@2note[j!. j.!.. 77apel functie } 9n varianta următoare% "e lucrează cu pointeri către tipul elev% iar memoria e"te alocată dinamic' t/pede0 struct ele&{ char nume[#$!. j--*{ 77 citirea notelor obtinute do{ cout. i.n.elev auK.int i.. j. 12F . int n( { int gata +<ELCG. } } } &oid )ain'( { int nr_elevi.i-.$ PP &a-i*@2note[j!2 $*.. cout.. int n( { for &int i+$. if &a[i!'note[j!.(0ume elev1(...( +(. 77declararea pointerului p% către tipul elev p=ne+ ele&.. if &&a-i*@2note[j!.(0r' insriere1(.stdio'h2 Ainclude .i-. for &i+$.+n@#. j--*{ do{ cout. cout. 77citirea numelui unui elev cout..

if &c++. printf&(@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ /n(*. int lin+.. i. i--*{ printf&(B9dPB #dPB@#$sP("i. int n... double med+$.M. >&a-i*+>&a-i. j--*{ printf&(B@OdP(" &a-i*@2note[j!*.* antet_afis&( LICIE 7GDII /n(*.. if &c++.int i.*+auK. clrscr&*. if &c++. for &int i+$...*+auK.double med " med#. j.+n@#.med#*{ auK+>&a-i*. med-+&a-i*@2note[j!. } } } } &oid ord_al0'ele& "a. if &c++.>&a-i. } &oid a0is_ele&'ele& "a.* antet_afis&( LICIE 7GDII /n(*. int n(.. gata+<ELCG.M.n.>&a-i.* antet_afis&( LICIE EL<ESGIILE /n(*.P 7GDIE/ P/n(*. for &int j+$.H. } } 112 .* antet_afis&( LICIE I0CLHICILMH /n(*.'a1i11($%nu)e* 2$*{ auK+>&a-i*.*@2note[j!. c2ar c( {clrscr&*.elev auK. j. if &c++.lin--. Jhile &Qgata*{ gata+IHFG. for &i+$.E. int n( { int gata +<ELCG. getch&*. int lin+.H. printf&(0r'crt'P0r' 7atricolP 0F7G P0ota P0ota#P0ota. if &med . gata+<ELCG.} } } } &oid cit_ele&i'ele& "a. >&a-i*+>&a-i.. } medR+. j--*{ med -+&a-i*@2note[j!. 77 functie implementata anterior &oid antet_a0is'const c2ar "s( {printf&(Bs/n(" s*.* antet_afis&( LICIE EL<ESGIILE /n(*."&a-i*@2nr_matr"&a-i*@2nume*.CAPITOLUL 7 Tipuri de date definite de utilizator for &int j+$.*. i--*{ if &strc)p' 'a1i($%nu)e.printf&(B@8'#fP/n(" med*. if &lin++&DI7_)E6@ **{ printf&( Epasa o tasta''''(*.E. i.P 7GDIE/ P/n(*. med#-+&a-i. if &c++.* antet_afis&( LICIE I0CLHICILMH /n(*.*. med#R+.. printf&(@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ /n(*. 77calculul mediilor pentru elementele vecine } med R+. printf&(0r'crt'P 0F7G P0ota P0ota#P0ota.

RRordonare alfabetica afis_elev&p" nr_elevi" . } &oid )ain'( { int nr_elevi.H.cin22nr_elevi. getch&*.RRafisarea in ordinea mediilor } descrescatoare descrescatoare a a -)au implementet următoarele 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"cătoare 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ă numărul de linii afi&ate$% cu pauză după fiecare ecran' La începutul fiecărei pagini "e afi&ează titlul li"tei ) core"punzător 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"cător% 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.*. ")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 următoarele modificări 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ă #alături de medie$ me"ajul JPromovatJ% iar la ceilal i% me"ajul JBepromovatJ' 111 . p+neJ elev[nr_elevi!.*.M. cout.*.$ ale vectorului' ord_alf ) ordonează vectorul de elevi #tran"mi" ca parametru% pointer la tipul elev$% cre"cător% 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 ordonări% ar fi fo"t mai eficientă metoda TuicUCort.RRafisarea in ordinea mediilor ord_alf&p" nr_elevi*.(0r' elevi1(. afis_elev&p" nr_elevi" .. afis_elev&p" nr_elevi" . elev >p.CAPITOLUL 7 Tipuri de date definite de utilizator printf&( Epasa o tasta''''(*.E. clrscr&*.RRafisarea inscrisilor ord_medii&p" nr_elevi*. cit_elevi&p" nr_elevi*.

/$ -alariul minim% "alariul mediu &i cel ma(im din firmă. c$ 0odificarea informa iilor de"pre un anumit angajat.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"cătoare 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"ă% număr copii% "e(% data na&terii% data angajării% calificare% "alariul brut' -e vor implementa următoarele func ii+ a$ Citirea informa iilor de"pre cei B angaja i #B introdu" de la ta"tatură$. 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ă$. e$ Li"ta angaja ilor în ordone de"cre"cătoare a vec/imii. b$ Căutarea ) după nume ) a unui angajat &i afi&area informa iilor de"pre ace"ta. 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ă următoarele 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: . d$ Li"ta alfabetică a angaja ilor% în care vor apare+ nume% adre"ă% data angajării% calificare% "alariu.