Sunteți pe pagina 1din 116

P R E F A

Algoritmul este un concept folosit pentru a desemna o mulime


finit de operaii, complet ordonat n timp, care pornind de la date de
intrare produce ntr-un timp finit date de ieire. Cu alte cuvinte, algoritmul
red metoda de rezolvare a unei probleme ntr-un numr finit de pai.
Programul este reprezentarea unui algoritm ntr-un limbaj de
programare. Sunt cunoscute mai multe limbaje de programare, dezvoltate
odat cu evoluia calculatoarelor. O anumit problem poate fi mai uor sau
mai dificil de codificat ntr-un anumit limbaj de programare, ntruct multe
din limbajele de programare de nivel nalt sunt orientate pe probleme.
Programarea este activitatea de elaborare a unui produs program.
!a are dou ramuri importante"
a# descrierea algoritmilor$
b# codificarea algoritmilor ntr-un anumit limbaj de programare.
%escrierea unui algoritm pentru rezolvarea unei probleme se poate face prin
sc&eme logice sau ntr-un limbaj de descriere a algoritmilor, numit i
pseudocod.
'a disciplina de ()rogramarea calculatoarelor( s-a adoptat descrierea
algoritmilor n pseudocod, iar ca limbaj de programare se utilizeaz C*C++.
,n ntreaga activitate legat de aceast disciplin, se insist asupra
respectrii urmtoarelor etape de rezolvare a unei probleme"
a# -naliza problemei, care const n enunul clar, precis al problemei
de rezolvat, specificarea datelor de intrare i ieire.
b# )roiectarea programului, care const n stabilirea metodei de
rezolvare i ntocmirea proiectului logic.
c# ,mplementarea programului, care const n codificarea ntr-un
limbaj de programare, editarea fiierului surs, compilarea, editarea de
legturi, e.ecuia i testarea.
d# /ntocmirea documentaiei. ,n cadrul seminarului, fiecare student
primete o tem din domeniile generrii de submulimi, calculului numeric,
algoritmilor de sortare etc. %ocumentaia va conine urmtoarele piese"
0
- enunul problemei$
- lista variabilelor de intrare i ieire i modul de
reprezentare a lor pe suportul e.tern$
- prezentarea n limbaj natural a metodei de rezolvare$
- proiectul logic$
- listingul programului surs$
- rezultatele testrii e.perimentale$
- instruciuni de operare.
e# /ntreinerea programului.
1espectarea acestor etape conduce la obinerea unor performane
legate de productivitatea programrii i de calitatea produsului program.
%e asemenea, att la curs, ct i la seminar i laborator, se urmrete
nsuirea unui stil de programare, caracterizat prin atribute care confer unui
program o anumit personalitate"
- evidenierea structurii programului$
- modularizarea programului$
- abstractizarea datelor$
- claritatea programului$
- posibilitatea de modificare ulterioar cu efort mic$
- tratarea erorilor$
- generalitatea soluiei.
/n acest sens, la codificare, se recomand urmtoarele"
- alegerea unor nume simbolice care s reflecte
semnificaia obiectelor pe care le reprezint$
- folosirea indentrii pentru scoaterea n relief a
structurilor de control$
- documentarea programului$
- scrierea unor funcii de nalt generalitate pentru utilizri
ulterioare$
- protecia la erori datorit depirii dimensiunii tablourilor,
a domeniului de valori pentru tipurile de date numerice etc.$
- folosirea variabilelor globale s se fac ct mai puin
posibil.
)rezentul ndrumtor conine 22 lucrri de laborator, n care sunt
tratate fundamentele limbajului C*C++. 3iecare lucrare conine prezentarea
unor noiuni teoretice cu e.emple rulate n 4O1'-5% C*C++ versiunea
6.7. i propuneri de probleme adecvate noiunilor tratate n lucrare.
6
/ndrumtorul se adreseaz studenilor din anul , , secia 89tiina
sistemelor i calculatoarelor( pentru pregtirea i efectuarea lucrrilor de
laborator la disciplina de 8)rogramarea calculatoarelor(, dar este util i celor
interesai de perfecionarea n programare i obinerea unui stil de a scrie
programe n mod profesionist.
%isciplina de 8)rogramarea calculatoarelor( st la baza
disciplinei 8Structuri de date i algoritmi(, unde se trateaz listele, arborii,
grafurile, tabelele de dispersie i metodele generale de elaborare a
algoritmilor.
:enionm faptul c nsuirea gndirii algoritmice i obinerea
ndemnrii de a scrie programe performante necesit mult munc
individual. %e aceea, se pretinde pregtirea teoretic a lucrrilor de
laborator i rezolvarea de ctre fiecare student acas a problemelor propuse,
iar la orele de laborator numai s se implementeze cteva programe
semnificative.
-utorul aduce mulumiri d-lui :i&ai ;intiloiu, d-lui ing. Crian
;aler--lin i d-lui ing. Coroian-;lad 1zvan pentru ajutorul dat la editarea
lucrrilor de laborator. %e asemenea, autorul mulumete editurii <.=.
)1!SS pentru publicarea lucrrii ntr-o inut grafic corespunztoare.

Cluj-5apoca, >? iulie >??2
)rof. dr. ing. ,@5-= ,OS,3

7
A
C U P R I N S
1. FUNCII DE INTRARE/IEIRE STANDARD 9
2. EPRESII 1!
". INSTRUCIUNI 22
#. FUNCII "$
$. PR%&RA'AREA '%DU(AR #$
). P%INTERI $#
!. RECURSI*ITATE )!
+. IRURI DE CARACTERE !#
9. TIPURI(E DE DATE STRUCTUR, UNIUNE I
ENU'ERARE +2
1-. PRE(UCRAREA FIIERE(%R DE CTRE
NI*E(U( INFERI%R A( S.&.F. 9"
11. PRE(UCRAREA FIIERE(%R DE CTRE
NI*E(U( SUPERI%R A( S.&.F. 1-$
.I.(I%&RAFIE 11$
B
C
Lucrarea de laborator nr. 1
FUNCII DE INTRARE/IEIRE STANDARD
1. Co/0i/utul lu1r2rii
/n lucrare sunt prezentate funciile ,*! standard, adic funciile din
biblioteca compilatorului C*C++, care realizeaz citirea*scrierea din*n
fiierele standard de ,*!.
1. Co/3i4era0ii teoreti1e
=erminalul standard este terminalul de la care s-a lansat programul.
=erminalului standard i sunt ataate dou fiiere" de intrare Dstdin# i de
ieire Dstdout#. !le sunt fiiere secveniale.
3unciile din biblioteca compilatorului C*C++ utilizate mai frecvent
pentru operaiile de ,*! sunt"
- pentru intrare" get15, get15e, get3, 31a/6, 331a/6 7
- pentru ieire" 8ut15, 8ut3, 8ri/t6, 38ri/t6.
la care se mai adaug macrourile get15ar pentru intrare i 8ut15ar pentru
ieire.
>.2. Fu/10iile get15, get15e i 8ut15
3uncia get15 citete fr ecou un caracter prin apsarea unei taste.
=asta poate avea un corespondent -SC,, sau o funcie special. /n primul
caz funcia returneaz codul -SC,, al caracterului. /n al doilea caz, funcia
se apeleaz de dou ori" prima dat returneaz valoarea zero, iar a doua oar
returneaz o valoare specific tastei acionate.
3uncia get15e este analog cu funcia get15, realiznd ns citirea
cu ecou.
E
-pelul funciilor get15 i get15e conduce la ateptarea apsrii unei
taste.
3uncia 8ut15 afieaz pe ecranul terminalului un caracter
corespunztor codului -SC,, transmis ca parametru. Caracterele
imprimabile au codul -SC,, n intervalul F0>,2>AG. )entru coduri n afara
acestui interval se afieaz diferite imagini. 3uncia returneaz valoarea
parametrului de la apel.
)rototipurile acestor trei funcii se gsesc n fiierul 1o/io.5 i sunt"
i/t get159:oi4;7
i/t get15e9:oi4;7
i/t 8ut159i/t 15;7
!.emplu de utilizare"

/< Programul (1E=1.188 </
>i/1lu4e ?1o/io.5@
mai/9;
A
8ut159get159;;7
get159;7
B
2.2. Fu/10iile get3 i 8ut3
3uncia get3 citete cu ecou de la terminalul standard un ir de
caractere ale codului -SC,,, la adresa specificat drept parametru al
funciei. %in funcie se revine la"
- citirea caracterului HInH DneJline#, caracter care este transformat
n caracterul KI?H Dnull#. /n acest caz funcia returneaz adresa de
nceput a zonei de memorie n care se pstreaz caracterele$
- citirea sfritului de fiier DC=1'*L#, funcia returnnd valoarea
zero.
3uncia 8ut3 afieaz la terminalul standard un ir de caractere
corespunznd codului -SC,, de la adresa transmis ca parametru.
2?
Caracterul KI?H este interpretat ca KInH. 3uncia returneaz codul ultimului
caracter afiat sau M2 n caz de eroare.
)rototipurile funciilor se gsesc n fiierul 3t4io.5 i sunt"
15ar <get3 915ar <3;7
i/t 8ut3 91o/3t 15ar <3;7
!.emplu de utilizare"
/< Programul (1E=2.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
mai/9;
A
15ar 3C2--D7
8ri/t69EF/I/tro4u1e0i u/ Gir 4e 1ara1tere urmat 4e
ENTERF/H;7
get393;7
8ri/t69EF/Sirul 4e 1ara1tere i/tro4u3F/H;7
8ut393;7
get159;7
B

2.". Fu/10iile 31a/6 Gi 8ri/t6
3uncia 31a/6 are rolul de a introduce date tastate de la terminalul
standard sub controlul unor formate. %atele introduse sunt convertite din
formatele lor e.terne n formate interne i sunt pstrate la adresele
specificate la apel. %atele introduse se termin cu apsarea tastei !5=!1.
)rototipul funciei 31a/6 se gsete n fiierul 3t4io.5 i este"
i/t 31a/691o/3t 15ar <6ormat C,a4re3a,..D;7
!a returneaz numrul de cmpuri de la intrare introduse corect sau
valoarea !O3D-2# n cazul ntlnirii sfritului de fiier DC=1'*L#.
22
3ormatul este specificat ca un ir de caractere. !l conine
specificatorii de format, care definesc conversiile din formate e.terne n
formate interne. <n specificator de format este alctuit din"
- caracterul N$
- opional caracterul O, care indic faptul c data prezent la intrare
nu se atribuie nici unei variabile$
- opional un numr zecimal, care definete lungimea ma.im a
cmpului controlat de format$
- 2 sau > litere, care definesc tipul conversiei.
Cmpul controlat de format ncepe cu primul caracter curent care nu
este alb i se termin, dup caz"
a# la caracterul dup care urmeaz un caracter alb$
b# la caracterul care nu corespunde tipului de conversie$
c# la caracterul la care se ajunge la lungimea ma.im a cmpului.
%atele se citesc efectiv dup apsarea tastei !5=!1. -dresa unei
variabile se specific prin I/umeJ:ariaKil2.
'iterele care definesc tipul conversiei sunt"
(itera Ti8ul 4atei 1itite
c c&ar
s ir de caractere
d ntreg zecimal
o ntreg octal
x, X ntreg &e.azecimal
u unsigned
f float
ld, lo, lx, lX long
lu unsigned long
lf/ Lf double*long double
3uncia 8ri/t6 este folosit pentru afiarea unor date pe ecranul
terminalului standard sub controlul unor formate. %atele sunt convertite din
format intern n formatul e.tern specificat.
)rototipul funciei printf se gsete n fiierul 3t4io.5 i este"
2>
i/t 8ri/t691o/3t 15ar <6ormat C,e=8re3ie, LD;7
3ormatul este dat ca un ir de caractere. !l are n structura sa
succesiuni de caractere Dcare se afieaz# i specificatori de format.
<n specificator de format conine"
- caracterul N$
- opional caracterul minus -, care specific cadrarea datei n
stnga cmpului Dimplicit cadrarea se face n dreapta#$
- opional un numr zecimal, care definete dimensiunea minim a
cmpului n care se afieaz data$
- opional un punct urmat de un numr zecimal, care specific
precizia de afiare a datei$
- una sau dou litere, care definesc tipul conversiei. 3a de literele
prezentate la scanf apar literele e i ! pentru afiarea datelor float
sau double sub form de e.ponent, g i @ pentru afiarea datelor
sub forma de e.ponent sau nu, astfel ca data afiat s ocupe un
numr minim de caractere.
3uncia returneaz numrul de caractere Doctei# afiate la terminal
sau M2 n caz de eroare.
!.emple de folosire"
/< Programul (1E=".188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
mai/9 ;
A
i/t a7
6loat K,17
8ri/t69EF/I/tro4u1e0i o :aloare M/treag2 aNH;7
31a/69EO$4H,Ia;7
8ri/t69EF/I/tro4u1e0i o :aloare real2 KNH;7
31a/69EO$6H,IK;7
20
1NaPK7
8ri/t69EF/*aloarea 1NaPK e3teQ O)."6F/H,1;7
get159;7
B
2.#. Fu/10iile 331a/6 Gi 38ri/t6
3a de funciile 31a/6 i 8ri/t6, funciile 331a/6 i 38ri/t6 au n plus
ca prim parametru adresa unei zone de memorie care conine caractere
-SC,,. 3uncia 331a/6 citete caracterele din aceast zon de memorie n loc
de zona tampon corespunztoare fiierului standard de intrare Dtastaturii#.
3uncia 38ri/t6 depune caracterele n aceast zon de memorie n loc de a fi
afiate pe ecran.
)rototipurile acestor funcii se gsesc n fiierul 3t4io.5 i sunt"
i/t 31a/6 91o/3t 15ar <Ku66er, 1o/3t 15ar <6ormat C,a4re3a, ..D;7
i/t 38ri/t6 915ar <Ku66er, 1o/3t 15ar <6ormat C,a4re3a, L;7
!.emplu de folosire"
/< Programul (1E=#.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
mai/ 9 ;
A
15ar 3C1--D, RC1--D7
i/t a,K7
6loat 1,47
8ri/t6 9EF/I/tro4u1eti M/ a1elaGi rS/4 :aloareaF/F
lui a Gi K 4e3820ite M/tre ele 8ri/ Kla/1F/F
urmate 4e ENTERF/H;7
get393;7
331a/693,HO4 O6H, Ia, I1;7
8ri/t69EF/ aNO#4 1NO+."6F/H,a,1;7
38ri/t69R,HO#4 O+."6F/H,a,1;7
331a/69R,EO4 O6H,IK,I4;7
8ri/t69EF/ KNO$4 4NO9.#6F/H,K,4;7
get159;7
26
B
2.$. 'a1rourile get15ar Gi 8ut15ar
:acroul get15ar permite citirea cu ecou a caracterelor codului
-SC,,, deci nu a celor corespunztoare tastelor speciale. Caracterele tastate
se introduc ntr-o zon tampon pn la acionarea tastei !5=!1. 'a
revenire, se returneaz codul -SC,, al primului caracter introdus, iar la un
nou apel, al urmtorului caracter introdus .a.m.d. 'a ntlnirea sfritului de
fiier DC=1'*L# se returneaz valoare !O3D-2#.
:acroul 8ut15ar afieaz caracterul al crui cod -SC,, s-a
transmis.
:acrourile get15ar i 8ut15ar sunt definite n fiierul 3t4io.5 i au
formatele"
i/t get15ar9:oi4;7
i/t 8ut15ar 9i/t 1;7
i se apeleaz e.act ca funciile get15 i 8ut15.
!.emplu de utilizare"
/< Programul (1E=$.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
mai/9 ;
A
8ut15ar9get15ar;9; 7
8ut15ar9TF/U;7
get159;7
B
". 'er3ul lu1r2rii
0.2. Se vor e.ecuta programele date ca e.emplu n lucrare i se vor
analiza rezultatele obinute.
27
0.>. Scriei un program pentru a verifica modul de e.ecuie a funciei
getc& cnd se apas o tast care corespunde unei funcii speciale.
0.0. Scriei un program pentru a verifica ce se afieaz de ctre
funcia putc& atunci cnd parametrul su este o valoare n afara intervalului
F0>,2>AG.
0.6. Scriei un program care afieaz codurile -SC,, ale caracterelor
corespunztoare tastaturii.
0.7. Scriei un program care afieaz caracterele corespunztoare
codurilor -SC,, din intervalul F0>,2>AG.
0.A. Scriei un program care s conin apelul getsDs#, unde s a fost
definit ca un tablou.
;erificai ce conine fiecare element al tabloului. %e ce
caracterul KInH a fost nlocuit cu KI?HP
0.B. Scriei un program care citete un ir de litere mici i le afieaz
sub form de litere mari.
0.C. Scriei un program care citete un ir de litere mari i le afieaz
sub form de litere mici.
0.E. Scriei un program care realizeaz suma, diferena, produsul i
mprirea a dou numere reale. -fiarea se va face sub form tabelar"
= V = P V = W V = < V = / V
0.2?. Scriei un program pentru a verifica modul de afiare a valorii
lui Q R 0.2627E>A7 cu diferii descriptori de format.
0.22. Scriei un program pentru afiarea unui ntreg citit de la
tastatur n octal i &e.azecimal.
2A
Lucrarea de laborator nr. 2
EPRESII
1. Co/0i/utul lu1r2rii
Scopul lucrrii este prezentarea noiunii de e.presie n limbajul
C*C++, a operatorilor i a modului de evaluare a unei e.presii.
2. Co/3i4era0ii teoreti1e
2.1 De6i/irea e=8re3iei
O e.presie este format dintr-un operand sau mai muli operanzi
legai prin operatori.
<n operand poate fi"
- o constant$
- o constant simbolic$
- numele unei variabile simple$
- numele unui tablou$
- numele unei structuri$
- numele unui tip$
- o variabil inde.at$
- numele unei funcii$
- referina la elementul unei structuri$
- apelul unei funcii$
- e.presie inclus n paranteze rotunde.
<nui operand i corespunde o valoare i un tip.
Operatorii pot fi unari sau binari.
'a evaluarea unei e.presii trebuie s se in seama de"
- prioritile operatorilor$
2B
- asociativitatea operatorilor de aceeai prioritate$
- regula conversiilor implicite.
2.2 %8eratori
Operatorii limbajului C*C++ sunt mprii n urmtoarele clase"
- operatori aritmetici"
- operatori unari" +, X
- operatori binari multiplicativi" O, *, N
- operatori binari aditivi" +, -
- operatori relaionali" S, SR, T, TR
- operatori de egalitate" R R, UR
- operatori logici" U, VV, WW
- operatori logici pe bii" X, SS, TT, V, Y, W
- operatori de atribuire" R, *R, OR, NR, +R, -R, SSR, TTR, VR, YR,
WR
- operatori de incrementare" ++, --
- operatori de forare tip" Dtip# operand
- operatori dimensiune" sizeof
- operatori adres" V
- operatori parantez" D #, F G
- operatori condiionali" P, "
- operatorul virgul" ,
- operatorul de derefereniere" O
- operatorul de acces la componenta unei structuri" . , ->
Observaie" /n limbajul C++ s-au mai introdus civa operatori"
- operatorul de rezoluie" ""
- operatorul pentru tipul referin" V
- operatorul de alocare*dealocare dimensiune a memoriei &eap"
neJ*delete
)rioritile operatorilor, n ordine descresctoare, sunt prezentate n
tabelul de mai jos"
2C
Priorit20ile %8eratori
1 9 ; C D Y X@
2 P9u/ar; X9u/ar; I9u/ar; <9u/ar; PP XX 9ti8; 3iZeo6
[ \
" <9Ki/ar; / O
# P9Ki/ar; X9Ki/ar;
$ ?? @@
) ? ?N @ @N
! N N [N
+ I9Ki/ar;
9 ]
1- ^
11 II
12 ^^
1" _ Q
1# N ??N @@N PN XN <N /N ON IN ]N ^N
1$ ,
Operatorii din aceeai linie au aceeai prioritate.
/n ceea ce privete asociativitatea operatorilor, se precizeaz c ei se
asociaz de la stnga la dreapta cu e.cepia operatorilor unari, condiionali
i de atribuire, care se asociaz de la dreapta la stnga.
2.". Regula 1o/:er3iilor im8li1ite
1egula conversiilor implicite const n urmtoarele"
- dac un operator binar se aplic la operanzi de acelai tip, atunci
rezultatul va avea tipul comun al operanzilor$
- dac un operator binar se aplic la doi operanzi de tipuri diferite,
atunci operandul de tip inferior se convertete implicit spre tipul
superior al celuilalt operand, iar rezultatul va avea tipul superior.
2E
Ordinea descresctoare a prioritii tipurilor este urmtoarea"

- long double$
- double$
- float$
- unsigned long$
- long$
- int.
". 'er3ul lu1r2rii
0.2. S se scrie un program pentru calculul valorii zR .OOZ, . i Z
fiind de tipul double.
0.>. !.plicai deosebirea ntre mprirea real i cea ntreag.
0.0. S se scrie un program care citete un ung&i n grade
se.agesimale i calculeaz valoarea funciei sinus, cosinus i tangent.
0.6. S se scrie un program care citete un numr natural n
intervalul F2A??, 6E??G ce reprezint un an i verific dac este bisect sau
nu.
0.7. 3olosind e.presii condiionale, s se scrie un program care
citete valoarea real a lui . i calculeaz valoarea funciei"
>
?
>
7
?
6 6
# D
>
>
>

<

'

+
+ +

x daca
x daca
x daca
x x
x x
x f
0.A. S se scrie un program care citete un numr real ., ce
reprezint msura unui ung&i n radiani, i l transform n grade, minute i
secunde se.agesimale.
0.B. S se scrie un program care simuleaz funcionarea unui
numrtor de tip ceas Dse indic ora, minutul i secunda#.
>?
0.C. Scriei un program pentru a indica numrul de octei ocupai n
memorie de tipurile de date din limbajul C*C++.
>2
0.E. Convertii n binar, prin calcul, anul naterii i anul curent.
-rtai cum se reprezint ca o dat de tip int. !fectuai operaiile de
deplasare stnga cu 6 bii, dreapta cu > bii, complement fa de 2 asupra lor,
precum i operaiile pe bii V, Y, W , avnd ca operanzi cele dou date. Scriei
un program pentru a verifica corectitudinea calculelor dumneavoastr.
0.2?. Scriei un program ce efectueaz operaii aritmetice asupra a
dou date de tip ntreg i real. !.ecutai-l pentru valori care conduc la
rezultat n afara limitelor de reprezentare intern. Ce se ntmpl n acest
cazP
>>
Lucrarea de laborator nr. 3
INSTRUCIUNI

1. Co/0i/utul lu1r2rii
/n lucrare sunt prezentate principalele instruciuni simple i
structurate din limbajul C*C++" instruciunea e.presie, instruciunea vid,
instruciunea compus, instruciunea i6, instruciunea 3`it15 i instruciunile
repetitive.

2. Co/3i4era0ii teoreti1e
)rogramul structurat este un program care are o structur de control
realizat numai cu"
- structura secvenial$
- structura alternativ i selectiv$
- structura repetitiv.
/n limbajul C*C++ mai e.ist instruciunile retur/, Kreaa, 1o/ti/ue
i goto, care asigur o fle.ibilitate mare n scrierea de programe.
2.1. I/3tru10iu/ea e=8re3ie
,nstruciunea e.presie are formatul"
e=8re3ie7
adic dup e.presie se scrie 87(.
!a se utilizeaz ca instruciune de atribuire sau ca instruciune de
apel a unei funcii.
!.emplu de utilizare"
>0
/< Programul ("E=1.188 </
/< Programul a6i3eaZa ma=imul 4i/tre 2 i/tregi </
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3t4io.5@
mai/9;
A
i/t a,K,17
8ri/t69bF/I/tro4u1eti 4oi i/tregi a 3i KF/b;7
31a/69bO4 O4b,Ia,IK;7
1Na@K_aQK7
8ri/t69bF/'a=imul 4i/tre aNO4 3i KNO4 e3te 1NO4F/b,a,K,1;7
get159;7
B
2.2. I/3tru10iu/ea :i42
,nstruciunea vid se reduce la punct i virgul, fr a avea vreun
efect. !a se utilizeaz acolo unde se cere prezena unei instruciuni, dar de
fapt nu trebuie s se e.ecute ceva Dde e.emplu n instruciunile repetitive#.
!.emplu de utilizare"
6or9i N -, 3 N -7 i ? /7 3 N 3 P aCiD, PPi;7
2.". I/3tru10iu/ea 1om8u32
,nstruciunea compus este o succesiune de instruciuni incluse ntre
acolade, eventual precedate de declaraii Dvalabile numai n acest loc#"
A
4e1lara0ii7
i/3tru10iu/i7
B
,nstruciunea compus se utilizeaz acolo unde este nevoie conform
sinta.ei de o singur instruciune, dar procesul de calcul necesit mai multe
instruciuni.
!.emplu de utilizare este dat n programul '0!.>.cpp "
>6
/< Programul ("E=2.188 </
/< Cal1ulul ra4a1i/ilor e1uatiei a<=]2 PK<= P1 N- </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>i/1lu4e ?mat5.5
mai/9;
A
6loat a,K,1,4elta,=1,=27
8ri/t69bF/I/tro4u1eti a,K,1F/b;7
31a/69bO6 O6 O6b,Ia,IK,I1;7
i6 9a[N-;
A
4eltaNK<KX#<a<17
i6 94elta @N -; A
=1N9XKX3Rrt94elta;;/92<a;7
=2N9XKP3Rrt94elta;;/92<a;7
8ri/t69bF/E1uatia are ra4a1i/ile =1NOg 3i
=2NOgF/b,=1,=2;7
B
el3e A
=1NXK/92<a;7
=2N3Rrt9X4elta;/92<a;7
8ri/t69bF/E1uatia are ra4a1i/ile 1om8le= 1o/cugateQF
=1NOg X c<Og 3i =2N OgP c<OgF/b,=1,=2,=1,=2;7
B
B
el3e 8ri/t69bF/E1uatia /u e3te 4e or4i/ul 2 9aN-;F/b;7
get159;7
B
2.# I/3tru10iu/ea i6
,nstruciunea if are dou formate"
a; i6 9 e=8re3ie ;
i/3tru10iu/e
>7
K; i6 9 e=8re3ie ;
i/3tru10iu/eJ1
el3e i/3tru10iu/eJ2
!fectul ei este urmtorul"
Se evalueaz e.presia 8e.presie(.
%ac rezultatul e.presiei este true se e.ecut n cazul a#
instruciunea 8instruciune( i n cazul b# 8instruciune[2( i apoi se trece la
instruciunea imediat urmtoare instruciunii i6.
%ac rezultatul e.presiei este 6al3e se trece n cazul a# la
instruciunea imediat urmtoare instruciunii if, iar n cazul b# se trece la
e.ecuia 8instruciune[>( i apoi se trece la instruciunea imediat urmtoare
instruciunii structurate i6.
Observaii"
a# instruciunile 8instruciune(, 8instruciune[2(,
8instruciune[>( pot conine instruciuni de salt la alte instruciuni
dect cea urmtoare instruciunii i6.
b# instruciunea if poate conine alte instruciuni if. =rebuie
atenie la mbinarea lui el3e, n sensul de a ti la care i6 aparine.
!.emplu de utilizare" )rogramul '0!.>.cpp Da se vedea punctul
>.0#.
2.$ I/3tru10iu/ea 3`it15
,nstruciunea 3`it15 are urmtoarea sinta."
3`it15 9 e=8re3ie ;
A
1a3e C1Q 3irJi/3tru10iu/iJ17
Kreaa7
1a3e C2Q 3irJi/3tru10iu/iJ27
Kreaa7
L...........................................
1a3e C/Q 3irJi/3tru10iu/iJ/7
Kreaa7
4e6aultQ 3irJi/3tru10iu/i
B
>A
!fectul instruciunii 3`it15 este urmtorul"
a# se evalueaz 8e.presie($
b# se compar pe rnd rezultatul evalurii cu constantele C2, C>,
\, Cn. %ac rezultatul evalurii coincide cu constanta Ci se e.ecuta
instruciunile 8sir[instruciuni[i( i apoi se trece la instruciunea
imediat urmtoare 3`it15-ului. %aca rezultatul evalurii nu coincide
cu nici una din constantele C2, C>, \, Cn se e.ecut instruciunile
8sir[instruciuni( aflate dup 84e6ault(.
Observaii"
a# -lternativa 4e6ault este opional. %ac nu este prezent, n
cazul n care rezultatul e.presiei 8e.presie( nu coincide cu nici o
constant Ci, instruciunea 3`it15 nu are nici un efect.
b# %ac Kreaa nu este prezent, atunci se e.ecut i irurile de
instruciuni imediat urmtoare, pn la ntlnirea unei instruciuni
Kreaa sau pn la terminarea instruciunii 3`it15.
c# ,nstruciunea structurata 3`it15 poate fi nlocuit prin
instruciuni i6 imbricate.
!.emplu de utilizare"
/< Programul ("E=".188 </
/< %8eratii 1u /umere i/tregi 4e 6orma
%PERAND1o8erator%PERAND2 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3t4liK.5@
>4e6i/e INFINIT -=!666
mai/9;
A
i/t o8era/41,o8era/42,reZultat7
15ar o8eratie7
8ri/t69bF/S1rieti e=8re3ia 6ara 38atii i/tre o8era/Zi GiF
o8eratorF/b;7
31a/69bO4O1O4b,Io8era/41,Io8eratie,Io8era/42;7
3`it159o8eratie;
A
1a3e dPdQ reZultatNo8era/41Po8era/427
Kreaa7
>B
1a3e dXdQ reZultatNo8era/41Xo8era/427
Kreaa7
1a3e d<dQ reZultatNo8era/41<o8era/427
Kreaa7
1a3e d/dQ i6 9o8era/42[N-; reZultat N
o8era/41/o8era/427
el3e i6 9o8era/41 @-; reZultatNINFINIT7
el3e reZultatNXINFINIT7
Kreaa7
4e6aultQ e=it91;7
B7
8ri/t69bF/O4 O1 O4 N O4F/b, o8era/41, o8eratie,
o8era/42, reZultat;7
get159;7
B
2.) I/3tru10iu/ea `5ile
3ormatul instruciunii `5ile este urmtorul"
`5ile 9 e=8re3ie ;
i/3tru10iu/e
!fectul instruciunii `5ile este urmtorul"
a# se evalueaz 8e.presie($
b# dac rezultatul este true se e.ecut corpul su D8instruciune(# i
se revine la pasul a#. %aca rezultatul este 6al3e se trece la
e.ecuia instruciunii imediat urmtoare instruciunii `5ile.
Observaii"
a# /n cazul n care e.presie este 6al3e de la nceput, atunci
8instruciune( nu se e.ecut niciodat.
b# /n cadrul corpului instruciunii `5ile este nevoie de e.istena
unor instruciuni de modificare a variabilelor care intr n
8e.presie(.
!.emplu de utilizare"
>C
/< Programul ("E=#.188 </
/< Cal1ulul 1.m.m.4.1. 3i a 1.m.m.m.1
a 4oua /umere /aturale a 3i K </
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3t4io.5@
mai/9;
A
i/t a,K,a1,K1,1mm41,1mmm1,re3t7
8ri/t69bI/tro4u1eti aNb;7
31a/69bO4b,Ia;7
8ri/t69bI/tro4u1eti KNb;7
31a/69bO4b,IK;7
/< A6larea 1.m.m.4.1. </
a1Na7K1NK7
`5ile 99re3tNa1OK1;[N-;
A a1NK17
K1Nre3t7
B7
1mm41NK17
1mmm1Na<K/1mm417
1lr31r9;7
8ri/t69baNO4 KNO4 1mm419a,K;NO4 1mmm1NO4b, a, K,
1mm41, 1mmm1;7
get159;7
B
2.! I/3tru10iu/ea 6or
3ormatul instruciunii 6or este urmtorul"
6or 9 e=8r17 e=8r27 e=8r" ;
i/3tru10iu/e
unde"
- e.pr2, e.pr>, e.pr0 sunt e.presii$
- instruciune este corpul instruciunii.
%escrierea efectului instruciunii 6or, cu ajutorul instruciunii `5ile
este urmtorul"
>E
e=8r17
`5ile 9 e=8r2 ; A
i/3tru10iu/e7
e=8r"7
B
Observaie" e.pr2, e.pr>, e.pr0 pot fi vide, ns caracterele E7H nu
pot lipsi.
!.emplu de utilizare"
/< Programul ("E=$.188 </
/< Cal1ulul me4iei aritmeti1e a / /umere reale </
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3t4io.5@
mai/9;
A
6loat aC1--D,me4ia,3uma7
i/t i,/7
8ri/t69bF/I/tro4u1eti /r.4e eleme/te /Nb;7
31a/69bO4b,I/;7
8ri/t69bF/I/tro4u1eti eleme/tele 3iruluiF/b;7
6or9iN-,3umaN-7i?/7PPi;
A
8ri/t69baCO24DNb,i;7
31a/69 bO6b,IaCiD;7
3umaPNaCiD7
B7
me4iaN3uma//7
8ri/t69bF/'EDIANOgF/b,me4ia;7
get159;7
B
2.+ I/3tru10iu/ea 4oX`5ile
,nstruciunea 4oX`5ile este instruciunea ciclic cu test final.
3ormatul ei este urmtorul"
0?
4o
i/3tru10iu/e
`5ile 9 e=8re3ie ;7
!fectul ei este descris cu instruciunea `5ile astfel"
i/3tru10iu/e7
`5ile9 e=8re3ie ;
i/3tru10iu/e7
Se observ c corpul ciclului se e.ecut cel puin o dat.
!.emplu de utilizare"
/< Programul ("E=).188 </
/< Cal1ulul 1.m.m.4.1. 3i a 1.m.m.m.1
a 4oua /umere /aturale a 3i K </
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3t4io.5@
mai/9;
A
i/t a,K,a1,K1,1mm41,1mmm1,re3t7
8ri/t69bI/tro4u1eti aNb;7
31a/69bO4b,Ia;7
8ri/t69bI/tro4u1eti KNb;7
31a/69bO4b,IK;7
/< A6larea 1.m.m.4.1. </
a1Na7K1NK7
4oA
re3tNa1OK17
a1NK17
K1Nre3t7
B
`5ile 9re3t[N-;7
1mm41Na17
1mmm1Na<K/1mm417
1lr31r9;7
02
8ri/t69baNO4 KNO4 1mm419a,K;NO4
1mmm1NO4b,a,K,1mm41,1mmm1;7
get159;7
B
2.9 I/3tru10iu/ile 1o/ti/ue Gi Kreaa
,nstruciunile 1o/ti/ue i Kreaa se pot utiliza numai n corpul unui
ciclu.
,nstruciunea 1o/ti/ue abandoneaz iteraia curent i se trece la
e.ecuia pasului de reiniializare n cazul instruciunii 6or, respectiv la
revalidarea e.presiei care stabilete continuarea sau terminarea ciclului n
cazul instruciunilor `5ile i 4oX`5ile.
,nstruciunea Kreaa termin ciclul i se trece la instruciunea imediat
urmtoare celei repetitive D6or, `5ile, 4oX`5ile#.
2.1-. I/3tru10iu/ea goto
,nstruciunea goto este utilizat pentru saltul dintr-un punct al unei
funcii Dc&iar i dintr-un ciclu# n alt punct al aceleai funcii, respectiv la o
instruciune etic&etat.
!tic&eta este un nume urmat de caracterul 8"(
/umeQ
3ormatul instruciunii goto este"
goto eti15eta7
!.emplu"
L
goto al6a7
L
al6aQ i6 9 ; L
L
2.11. Fu/10ia 3ta/4ar4 e=it
)rototipul funciei standard e=it este descris n fiierele 3t4liK.5 i
8ro1e33.5 i este"
0>
:oi4 e=it9i/t 1o4;7
3uncia e=it are ca scop terminarea forat a programului. Codul de
ieire folosit este zero pentru terminare normal i alte valori pentru
terminare datorat unor erori.
". 'er3ul lu1r2rii
0.2. Se vor analiza i e.ecuta programele date ca e.emplu n lucrare.
0.>. %e la tastatur se citesc 6 perec&i de numere reale, care
reprezint n coordonate rectangulare vrfurile unui patrulater. S se
stabileasc natura acestui patrulater.
0.0. %e pe mediul de intrare sunt citite elementele reale ale unui ir
de dimensiunea n. S se gseasc valoarea minim i valoarea ma.im
dintre elementele irului i poziia lor.
0.6. S se scrie un program pentru generarea tuturor numerelor prime
mai mici sau egale cu un numr natural n.
0.7. Se citete un numr natural n. S se gseasc cel mai mare
ptrat perfect mai mic sau egal cu n. -ceeai problem, dar s se indice
numrul prim cel mai mic, dar mai mare sau egal cu numrul citit.
0.A. %e pe mediul de intrare se citete un numr natural n. S se
verifice dac numrul respectiv este palindrom.
0.B. %e pe mediul de intrare se citesc cifrele &e.azecimale ale unui
numr ntreg n baza 2A. Sa se calculeze i s se afieze reprezentarea
numrului n baza 2?.
0.C. Se citete gradul i coeficienii polinomului pD.#Ra
?
+a
2
.
2
+......+ a
n
.
n
S se calculeze valoarea polinomului n .R .
?
D.
?
se
citete#.
0.E. S se scrie un program pentru efectuarea operaiilor de
00
adunare, scdere, nmulire i mprire ntre dou polinoame"
-D.#Ra
?
+a
2
.
2
+......+ a
n
.
n
4D.#Rb
?
+b
2
.
2
+......+ b
m
.
m
@radele i coeficienii reali ai polinoamelor se citesc de pe
mediul de intrare.
0.22.Se d un sistem de n ecuaii liniare cu n necunoscute. S se
scrie un program de rezolvare a sistemului, folosind o metoda numeric.
0.2>. Sa se calculeze polinoamele )D.# i ]D.# din relaia"
;alorile n, a
i
, b
i
, c
i
se citesc de la tastatur.
0.20. Se d un ir de n elemente reale ordonate cresctor. S se
verifice dac o valoare citit . se gsete n ir i s se indice poziia sa.
0.26. Se d un ir de n numere ntregi. S se e.trag subirul de
dimensiune ma.im, ordonat cresctor.
0.27. )entru elaborarea unui test de aptitudini se dispune de un set de
n ntrebri, fiecare ntrebare i fiind cotat cu un numr de p
i
puncte. S se
elaboreze toate c&estionarele avnd ^ ntrebri, fiecare c&estionar totaliznd
ntre a i b puncte. /ntrebrile sunt date prin numr i punctaj.
0.2A. Se dau > iruri de n si respectiv m elemente de tip ntreg. S se
calculeze"
a# irul ce conine elementele comune ale celor dou iruri$
b b# irul ce conine toate elementele celor dou iruri
luate o sin-
gura dat$
c c# irul ce conine elementele primului ir din care au
fost
eliminate elementele comune.
d
0.2B. Se d un numr real a n baza 2?. S se scrie programul de
conversie a lui n baza 4, 4 SR 2A.
06

n
i i i
i
c x b
a
X P
X Q
2
# D
# D
0.2C. Se d un numr natural n.
a# S se gseasc numrul obinut prin eliminarea cifrelor care
apar de mai multe ori n numr.
b#S se gseasc numrul obinut prin intersc&imbarea ntre ele
a primei cifre cu ultima , a celei de a doua cu penultima .a.m.d.
c#S se gseasc cel mai mare numr ce se poate obine din
cifrele sale.
0.2E. Se d o matrice de n.n elemente ? i 2. S se stabileasc dac
matricea respectiv este simetric.
0.>?. %e pe mediul de intrare se citete o propoziie. S se indice
numrul cuvintelor i cuvntul cel mai lung din propoziie.
07
Lucrarea de laborator nr.4
FUNCII
1. Co/0i/utul lu1r2rii
/n lucrare se prezint structura unei funcii, apelul unei funcii prin
valoare i prin referin, prototipul unei funcii.
2. Co/3i4era0ii teoreti1e
<n program conine una sau mai multe funcii, dintre care una este
funcia principal avnd numele mai/. Celelalte au un nume dat de
programator.
2.1. Stru1tura u/ei 6u/10ii
O funcie are urmtoarea structur"
ti8 /ume 9li3taJ8arametrilorJ6ormali;
A
4e1lara0ii
i/3tru10iu/i
B
)rimul rnd din definiia funciei se numete a/tet, iar restul se
numete 1or8ul 6u/10iei.
/n limbajul C*C++ e.ist dou categorii de funcii"
0A
- funcii care returneaz n punctul de apel o valoare prin
instruciunea retur/ e=8re3ie7 valoarea avnd tipul specificat n
antet prin 8tip($
- funcii care nu returneaz nici o valoare n punctul de apel, tip
fiind nlocuit prin cuvntul c&eie 8:oi4(.
'ista parametrilor formali poate conine"
- zero parametri, caz n care antetul funciei se reduce la"
ti8 /ume 9; sau ti8 /ume 9:oi4;
- unul sau mai muli parametri formali, separai ntre ei prin
virgul. <n parametru formal se indic prin" ti8 /ume.
!.emplu"
i/t reZol:J3i3tem 9i/t /, 4ouKle a C1-D C1-D, 4ouKle KC1-D, 4ouKle = C1-D;
)rototipul unei funcii se obine scriind punct i virgul dup o
construcie identic cu antetul funciei respective sau obinut prin
eliminarea numelui parametrilor formali.
!.emplu"
i/t 6a1torial 9i/t /;7
i/t 6a1torial 9i/t;7
3unciile standard de bibliotec au prototipurile n diferite fiiere cu
e.tensia .5, cum ar fi 3t4io.5, 1o/io.5, mat5.5 etc. 3unciile standard de
bibliotec se gsesc n format obiect De.tensia .oKc#, i se adaug n
programe n faza de editare de legturi. )rototipurile funciilor standard se
includ n program nainte de apelul lor prin construcia >i/1lu4e.
1.1. A8elul u/ei 6u/10ii
O funcie care nu returneaz nici o valoare se apeleaz astfel"
/ume 9li3taJ8arametrilorJe6e1ti:i;7
0B
Corespondena ntre parametrii formali i cei efectivi este
poziional.
O funcie care returneaz o valoare poate fi apelat
- fie printr-o instruciune de apel ca mai sus, caz n care valoarea
returnat se pierde$
- fie ca un operand al unei e.presii, valoarea returnat folosindu-se la
evaluarea e.presiei respective.
=ipul parametrilor formali i cei actuali se recomand s fie acelai.
/n caz contrar, n limbajul C tipul parametrului efectiv este convertit
automat la tipul parametrului formal. /n limbajul C++ se utilizeaz o
verificare mai comple. pentru apelul funciilor. %e aceea se recomand
utilizarea operatorului de conversie e.plicit 9ti8;, adic e.presiile cast.
!.emplu"
6994ouKle;/;
1evenirea dintr-o funcie se face fie dup e.ecuia ultimei
instruciuni din corpul funciei, fie la ntlnirea instruciunii retur/.
,nstruciunea retur/ are formatele"
retur/$
sau
retur/ e=8re3ie$
Observaie"
a# %ac tipul e.presiei din instruciune este cel din antetul funciei, se
face conversia automat spre cel al funciei.
b# )rimul format al funciei retur/ se folosete n funciile care nu
returneaz nici o valoare.
=ransmiterea parametrilor efectivi Dactuali# se poate face"
- prin valoare Dcall bZ value#$
- prin referin Dcall bZ reference#.
/n cazul apelului prin valoare, unui parametru formal i se transfer
valoarea parametrului efectiv. /n acest caz, funcia apelat nu poate modifica
0C
parametrul efectiv din funcia care a fcut apelul, neavnd acces la el.
)rogramul '6!.2.cpp ilustreaz acest lucru"
0E
/<Programul (#E=1.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
/< APE( PRIN *A(%ARE </
/<Pro1e4ura 4e i/ter315imKare i/tre a 3i K </
:oi4 i/ter315imKare9i/t a,i/t K;
A
i/t au=7
8ri/t69bF/I/ 6u/1tie la i/trare aNO4 KNO4F/b,a,K;7
au=Na7aNK7KNau=7
8ri/t69bF/I/ 6u/1tie la ie3ire aNO4 KNO4F/b,a,K;7
B
:oi4 mai/9;
A
i/t a,K7
aN27KN"7
8ri/t69bF/I/ mai/ i/ai/tea a8elului 6u/1tiei i/ter315imKareF
aNO4 KNO4F/b,a,K;7
i/ter315imKare9a,K;7
8ri/t69bF/I/ mai/ la re:e/irea 4i/ 6u/1tia i/ter315imKareF
aNO4 KNO4F/b,a,K;7
get159;7
B
Se va constata c a i b i pstreaz vec&ile valori.
)entru ca intersc&imbarea s se produc, este necesar folosirea
pointerilor, ca mai jos"
/<Programul (#E=2.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
/< APE( PRIN *A(%ARE F%(%SIND P%INTERI</
/<Pro1e4ura 4e i/ter315imKare i/tre a 3i K </
:oi4 i/ter315imKare9i/t <a,i/t <K;
A
i/t au=7
8ri/t69bF/I/ 6u/1tie la i/trare aNO4 KNO4F/b,<a,<K;7
6?
au=N<a7<aN<K7<KNau=7
8ri/t69bF/I/ 6u/1tie la ie3ire aNO4 KNO4F/b,<a,<K;7
B
:oi4 mai/9;
A
i/t a,K7
aN27KN"7
8ri/t69bF/I/ mai/ i/ai/tea a8elului 6u/1tiei i/ter315imKareF
aNO4 KNO4F/b,a,K;7
i/ter315imKare9Ia,IK;7
8ri/t69bF/I/ mai/ la re:e/irea 4i/ 6u/1tia i/ter315imKareF
aNO4 KNO4F/b,a,K;7
get159;7
B
Se va constata c valorile a i b au fost intersc&imbate ntre ele.
-cest mod de transmitere a parametrilor este tot prin valoare, adic unui
pointer i s-a transmis o adres.
/n cazul apelului prin referin, se transmit adresele parametrilor, nu
valoarea lor. -cest mod de transmitere este valabil n C++. /n acest caz,
parametrii formali sunt definii ca fiind de tip referin.
-celai e.emplu n acest caz devine"
/<Programul (#E=".188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
/< APE( PRIN REFERINTA </
/<Pro1e4ura 4e i/ter315imKare i/tre a 3i K </
:oi4 i/ter315imKare9i/tI a,i/tI K;
A
i/t au=7
8ri/t69bF/I/ 6u/1tie la i/trare aNO4 KNO4F/b,a,K;7
au=Na7aNK7KNau=7
8ri/t69bF/I/ 6u/1tie la ie3ire aNO4 KNO4F/b,a,K;7
B
62
:oi4 mai/9;
A
i/t a,K7
aN27KN"7
8ri/t69bF/I/ mai/ i/ai/tea a8elului 6u/1tiei i/ter315imKareF
aNO4 KNO4F/b,a,K;7
i/ter315imKare9a,K;7
8ri/t69bF/I/ mai/ la re:e/irea 4i/ 6u/1tia i/ter315imKareF
aNO4 KNO4F/b,a,K;7
get159;7
B
Se va constata c valorile lui a i b au fost intersc&imbate ntre ele.
Observaie important" n cazul n care un parametru efectiv este
numele unui tablou, atunci acesta are ca valoare adresa primului element,
deci se transmite adresa ca valoare pentru parametrul formal corespunztor.
/n acest caz, dei apelul s-a fcut prin valoare, funcia respectiv poate
modifica elementele tabloului al crui nume s-a folosit ca parametru efectiv.
%rept e.emplu de folosire a funciilor, n continuare se prezint un
program care realizeaz cteva operaii asupra a dou polinoame.
/<Programul (#E=#.188 </
/< %8eratii a3u8ra 8oli/oamelor
U/ 8oli/om are 6orma P9=;N8C-DP8C1D<=P 8C2D<=]2 P...8C/D< =]/ </
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3t4io.5@
> 4e6i/e &RAD'A 2-
:oi4 8ro4u39i/t /,6loat aCD, i/t m,6loat KCD,
i/t <8,6loat 1CD;
A
i/t i,c7
<8N/Pm7
6or9iN-7i?N/Pm7iPP; 1CiDN-.-7
6or9iN-7i?N/7iPP;
6>
6or9cN-7c?Nm7cPP;
1CiPcDPNaCiD<KCcD7
B
:oi4 im8artire9i/t /, 6loat aCD,i/t m,6loat KCD,
i/t <gra4J1at,6loat 1atCD, i/t <gra4Jre3t, 6loat re3tCD;
A
i/t i,c,a7
i6 9/?m; A
<gra4J1atN-71atC-DN-.-7
<gra4Jre3tNm7re3tN1at7
B
el3e A
<gra4J1atN/Xm7<gra4Jre3tNmX17
6or9iN/Xm,cN/7i@N-7iXX,cXX;
A
1atCiDNaCcD/KCmD7
6or 9aNm7a@N-7aXX;
aCiPaDNaCiPaDX1atCiD<KCaD7
aCcDN-7
B7
6or9iN-7i?NmX17iPP;
re3tCiDNaCiD7
B
B
:oi4 1itireJ8oli/om9i/t </,6loat aCD;
A
i/t i7
8ri/t69bF/I/tro4u1eti gra4ul 8oli/omului b;7
31a/69bO4b,/;7
6or9iN-7i?N</7iPP;
A
8ri/t69bF/aCO4DNb,i;7
31a/69bO6b,IaCiD;7
B7
8ri/t69bF/b;7
B
60
6loat :alJ8oli/om96loat =,i/t /,6loat aCD;
A
i/t i7
6loat :7
:N-.-7
6or9iN/7i@N-7iXX;
:N:<=PaCiD7
retur/ :7
B
:oi4 a6i3J8oli/om9i/t /,6loat aCD,15ar 1;
A
i/t i7
8ri/t69bF/O1C=DNOgb,1,aC-D;7
6or9iN17i?N/7iPP;
8ri/t69bPOg<=]O4b,aCiD,i;7
8ri/t69bF/b;7
B
:oi4 mai/9#
A
i/t /,m,gra4Jr,gra4J1at,gra4Jre3t7
6loat =, :,8C&RAD'AP1D,RC&RAD'AP1D,rC&RAD'AP1D,
1atC&RAD'AP1D,re3tC&RAD'AP1D7
1lr31r7
1itireJ8oli/om9I/,8;7a6i3J8oli/om9/,8,dPd;7
1itireJ8oli/om9Im,R;7a6i3J8oli/om9m,R,ded;7
8ri/t69bF/I/tro4u1eti =Nb;731a/69bO6b,I=;7
:N:alJ8oli/om9=,/,8;7
8ri/t69b*al.Poli/omului 8 8e/tru =NO6 e3te O6b,=, :;7
get159;7
8ro4u39/,8,m,R,Igra4Jr,r;7
8ri/t69bF/RC=DNPC=D<eC=DF/b;7
a6i3J8oli/om9gra4Jr,r,dRd;7
get159;7
im8artire9/,8,m,R,Igra4J1at,1at,Igra4Jre3t,re3t;7
8ri/t69bF/REfU(TATU( I'PARTIRII PC=D/eC=DN@1atul CC=D GiF
re3tul RC=DF/b;7
a6i3J8oli/om9gra4J1at,1at,dCd;7
a6i3J8oli/om9gra4Jre3t,re3t,dRd;7
66
get159;7
8ri/t69bF/ATENTIE[ Poli/omul 8 e3te mo4i6i1atF/b;7
a6i3J8oli/om9/,8,dPd;7
get159;7
B
".'er3ul lu1r2rii
0.2. Se va analiza modul de transmitere a parametrilor efectivi n
programele din lucrare date ca e.emplu.
/n continuare se vor scrie programe pentru rezolvarea urmtoarelor
probleme, folosind funcii i diverse moduri de transmitere a parametrilor.
Se va evita folosirea variabilelor globale.
0.>. %e pe mediul de intrare se citete gradul unui polinom i
coeficienii si, care sunt numere ntregi.

n
n
x p x p p x P + + + ... # D
2
2

n care p
?
este nenul.
9tiind c polinomul admite numai rdcini ntregi simple, s se
gseasc rdcinile polinomului.
0.0. %e pe mediul de intrare se citete n i perec&ile de numere
ntregi
n i y x
i i
, 2 #, , D
reprezentnd o relaie binar 1 peste mulimea
:.
a# -dmind c fiecare element din mulimea : apare n cel puin o
perec&e dintre cele citite, s se determine mulimea :.
b# S se verifice dac relaia 1 este o relaie de ec&ivalen
Drefle.iv, simetric i tranzitiv#.
0.6. Se dau dou iruri de caractere care reprezint numere ntregi
zecimale foarte mari. S se scrie un program de efectuare a operaiilor
aritmetice asupra lor.
0.7. S se scrie funciile pentru adunarea, scderea i nmulirea a
67
dou matrice i apoi s se realizeze calculul -R4OC M>OD4+C#, unde 4 i C
sunt dou matrice ptratice de ordinul n.
0.A. S se scrie funcia care realizeaz operaiile aritmetice asupra a
dou matrice rare Dmatricea rar este o matrice de dimensiune mare, care
are multe elemente nule#.
0.B. 3iind date anul, luna, ziua, s se scrie o funcie care s returneze
a ctea zi din an este ziua respectiv i cte zile au mai rmas din anul
respectiv.
0.C.S se scrie o funcie care primind ca parametru un numr roman
sub forma unui ir de caractere, returneaz numrul respectiv ca numr arab
n baza 2?.
0.2?. S se scrie o funcie care primind ca parametru un numr
arab n baza 2?, calculeaz irul de caractere ce reprezint numrul
respectiv sub form roman.
0.22. %e pe mediul de intrare se citete un numr ntreg, multiplu
de 2??. S se gseasc numrul minim de bancnote romneti necesare
pentru plata sumei respective.
6A
Lucrarea de laborator nr.5
PR%&RA'AREA '%DU(AR
1. Co/0i/utul lu1r2rii
/n lucrare sunt prezentate conceptele de modul, programare
modular i vizibilitate a variabilelor
2. Co/3i4era0ii teoreti1e
>.2. No0iu/ea 4e mo4ul
:odulul surs este o parte a te.tului surs al programului, care se
compileaz separat de restul te.tului surs a programului.
:odulul obiect este rezultatul compilrii unui modul surs.
<n modul surs conine funcii nrudite, n sensul ca ele concur la
rezolvarea unei subprobleme.
%e fapt modulele corespund subproblemelor rezultate n urma
proiectrii top-doJn a unei probleme comple.e.
)rogramarea modular este stilul de programare care are la baz
utilizarea de module. )rin acest stil de programare se poate pune n valoare
posibilitile de 8ascundere( a datelor i procedurilor mpotriva unor accese
neautorizate din alte module. -stfel, datele statice declarate n afara
funciilor modulului, pot fi utilizate n comun de acestea, dar nu pot fi
accesate de ctre funciile din alte module.
1ecomandarea care se face n scrierea unui program comple. este
de a-l modulariza, permind lucrul n ec&ip.
:odularizarea unui program duce la punerea la punct a programului
Dimplementarea i testarea# mai rapid.
:odulele puse la punct pot fi utilizate ulterior pentru rezolvarea
altor probleme.
/n rezolvarea unor probleme comple.e, programul e.ecutabil poate
fi obinut n urmtoarele moduri"
6B
a# Se scriu mai multe fiiere surs, fiecare surs constituind un
modul surs. !vident, fiecare modul surs este pus la punct
separat. Cu ajutorul construciei
>i/1lu4e E38e1i6i1ator 4e 6iGierH
sunt incluse te.tele surs fie n modulul care conine funcia
principal mai/, fie ntr-un fiier care conine numai includerile
tuturor modulelor, inclusiv a modulului care conine funcia
principal mai/9;.
/n felul acesta se obine de fapt un singur program surs, care va fi
compilat, lin_editat i e.ecutat.
b# Se scriu mai multe module surs. Se compileaz separat
obinndu-se mai multe module obiect Davnd e.tensia .obj#. Se
lin_editeaz aceste module obiect, obinndu-se fiierul e.ecutabil.
:odulele surs pot fi compilate separat i lin_editate folosind un
fiier de tip )roject. -cesta se editeaz utiliznd meniul )roject al
mediului =urbo C++.
2.2. Dome/iul 4e :alaKilitate al :ariaKilelor
2.2.1. *ariaKile gloKale
;ariabilele globale sunt definite la nceputul unui fiier surs, deci
naintea primei funcii. !le sunt variabile vizibile din locul respectiv pn la
sfritul fiierului surs respectiv. %ac programul are mai multe fiiere
surs, o variabil global definit ntr-un fiier surs poate fi utilizat n
celelalte, dac este declarat ca e.tern. %eclararea unei variabile e.terne
se poate face"
- dup antetul unei funcii, caz n care variabila global este valabil
numai n acea funcie$
- la nceputul fiierului surs, adic naintea primei funcii, caz n care
este valabil pentru toate funciile din acel fiier.
6C
%K3er:a0ie"Se recomand ca variabilele e.terne s fie declarate n
fiecare funcie unde se utilizeaz, evitnd erorile care pot aprea prin
mutarea ulterioar a unei funcii n alt modul
;ariabilele globale sunt alocate la compilare, ntr-o zon de memorie
special.
2.2.2.*ariaKilele lo1ale
;ariabilele declarate ntr-o funcie sau intr-o instruciune compus
au valabilitate numai n unitatea declarat.
!le pot fi"
a# automati1e M care sunt alocate pe stiv la e.ecuie. !le i pierd
e.istena la revenirea din funcie sau la terminarea instruciunii
compuse. %eclararea lor este cea obinuita Dint a,b,c$ double .$
etc.#$
b; 3tati1e - care sunt alocate la compilare ntr-o zon special.
%eclararea se face cu ajutorul cuvntului c&eie 3tati1 naintea tipului
variabilei. !.emplu"
3tati1 i/t =,V,Z$
%eclararea unei variabile statice poate fi fcut"
- la nceputul fiierului surs Ddeci naintea primei funcii#. /n acest
caz variabila static respectiv este valabil n tot fiierul surs
respectiv, dar nu poate fi declarat ca e.tern n alte fiiere$
- n corpul unei funcii, caz n care este valabil numai n ea sau n
instruciunea compus unde a fost declarat.
c# :ariaKile regi3tru M care sunt alocate n registrele procesorului.
!le pot fi numai variabile int, c&ar i pointer. Se recomand
declararea ca variabile registru, variabilele des utilizate n funcia
respectiv. 5umrul variabilelor registru este limitat. %ac s-au
declarat mai multe, cele care nu pot fi alocate n registre vor fi
alocate pe stiv ca variabile automatice.
%eclararea variabilelor registru se face cu ajutorul cuvntului c&eie
regi3terQ
6E
regi3ter ti8 :ariaKil2$
-locarea este valabil numai n funcia n care au fost declarate.
2.". E=em8lu 4e 8rogram mo4ulariZat
<rmtorul program calculeaz inversa i determinantul unei matrice
ptrate cu elemente double. )rogramul a fost modularizat astfel"
3iierul '7!.2[2.cpp M conine funcia de citire a dimensiunilor i
elementelor unei matrice i funcia de afiare a unei matrice"
/< A6i3area 3i 1itirea u/ei matri1e 4e /<m eleme/te 4e ti8
4ouKle </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>4e6i/e N'A 1-
:oi4 a6i3are9i/t /,i/t m,4ouKle aCN'ADCN'AD,15ar 15;
A
i/t i,c7
8ri/t69bF/ 'ATRICEA O1F/b,15;7
6or9iN-7i?/7iPP;
A 6or9cN-7c?m7cPP;
8ri/t69bO+.2l6 b,aCiDCcD;7
8ri/t69bF/b;7
B
B
:oi4 1itireJmatri1e9i/t </,i/t <m,4ouKle aCN'ADCN'AD;
A
i/t i,c7
8ri/t69bF/I/tro4u1eti /r.li/ii /Nb;731a/69bO4b,/;7
8ri/t69bF/I/tro4u1eti /r.1oloa/e mNb;731a/69bO4b,m;7
8ri/t69bF/I/tro4u1eti eleme/tele matri1eiF/b;7
6or 9iN-7i?</7iPP;
6or9cN-7c?<m7cPP;
7?
A
8ri/t69baCO4,O4DNb,i,c;731a/69bOl6b,IaCiDCcD;7
B
8ri/t69bF/b;7
B
3iierul '7!.2[>.cpp M conine funcia de nmulire a dou matrice$
/< Fu/1tia 1al1uleaZa 8ro4u3ul matri1elor aC/DCmD
3i KCmDC8D 4e ti8 4ouKle reZulta/4 matri1ea 1C/CDC8D </
>4e6i/e N'A 1-
:oi4 8ro4u39i/t /,i/t m,i/t 8,4ouKle aCN'ADCN'AD,
4ouKle KCN'ADCN'AD,4ouKle 1CN'ADCN'AD;
/< Cal1ulul 8ro4u3ului 1Na<K; </
A
i/t i,c,a7
4ouKle 37
6or9iN-7i?/7iPP;
6or9cN-7c?87cPP;
A
3N-.-7
6or9aN-7a?m7aPP;
3N3PaCiDCaD<KCaDCcD7
1CiDCcDN37
B7
B
3iierul '7!.2[0.cpp M conine funcia de calcul a inversei unei
matrice ptrate i a determinatului afiat"
/<Program 4e 1al1ul a i/:er3ei u/ei matri1e 3i a 4etermi/a/tului
ata3at </
>i/1lu4e ?mat5.5@
>4e6i/e N'A 1-
72
:oi4 i/:er39i/t /,4ouKle aCN'ADCN'AD,4ouKle e83,
4ouKle KCN'ADCN'AD,4ouKle <4etJa,
i/t <err;
A
i/t i,c,a,8oZma=7
4ouKle ama=,au=7
/< I/itialiZarea matri1ei K 1u matri1ea u/itat`e </
6or9iN-7i?/7iPP;
6or9cN-7c?/7cPP;
i69iNNc; KCiDCcDN1.-7
el3e KCiDCcDN-.-7
/< I/itialiZarea 4etermi/a/tului </
<4etJaN1.-7
/< Se 6a1e -3uK 4iago/ala 8ri/1i8ala 3i 1 8e ea </
aN-7 /<aN/r.li/iei </
<errN-7
`5ile99a?/; II 9<errNN-;;
A
/<Cal1ul eleme/t 8i:ot</
ama=N6aK39aCaDCaD;78oZma=Na7
6or9iNaP17i?/7iPP;
i6 96aK39aCiDCaD; @ama=; A
ama=N6aK39aCiDCaD;7
8oZma=Ni7
B7
/<I/ter315imKarea li/iei a 1u 8oZma= i/ matr. a 3i K </
i69 a[N8oZma=; A
6or9cN-7c?/7cPP;
A
au=NaCaDCcD7
aCaDCcDNaC8oZma=DCcD7
aC8oZma=DCcDNau=7
au=NKCaDCcD7
KCaDCcDNKC8oZma=DCcD7
KC8oZma=DCcDNau=7
B7
<4etJaNX<4etJa7
B7
7>
i69 6aK39aCaDCaD; ?e83; <errN17
el3e A
<4etJa N<4etJa<aCaDCaD7
au=NaCaDCaD7
6or9cN-7c?/7cPP;
A
aCaDCcDNaCaDCcD / au=7
KCaDCcDNKCaDCcD / au=7
B7
6or9iN-7i?/7iPP;
i69i[Na; A
au=NaCiDCaD7
6or9cN-7c?/7cPP;
A
aCiDCcDNaCiDCcDXaCaDCcD<au=7
KCiDCcDNKCiDCcDXKCaDCcD<au=7
B
B
B
aPP7
B
B
3iierul '7!.2[6.cpp M conine funcia main$
/<Program 4e 1al1ul a i/:er3ei u/ei matri1e 3i a
4etermi/a/tului ata3at </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>4e6i/e N'A 1-
:oi4 1itireJmatri1e9i/t </,i/t <m,4ouKle aCN'ADCN'AD;7
:oi4 a6i3are9i/t /,i/t m,4ouKle aCN'ADCN'AD,15ar 15;7
:oi4 8ro4u39i/t /,i/t m,i/t 8,4ouKle aCN'ADCN'AD,
4ouKle KCN'ADCN'AD,4ouKle 1CN'ADCN'AD;7
:oi4 i/:er39i/t /,4ouKle aCN'ADCN'AD,4ouKle e83,
4ouKle KCN'ADCN'AD,4ouKle <4etJa,i/t <err;7
70
:oi4 mai/9;
A
i/t i,c,/,m,err7
4ouKle e83,4etJa,aCN'ADCN'AD,a1CN'ADCN'AD,
KCN'ADCN'AD,1CN'ADCN'AD7
1lr31r7
1itireJmatri1e9I/,Im,a;7
a6i3are9/,m,a,dAd;7
get159;7
6or9iN-7i?/7iPP;
6or9cN-7c?/7cPP;
a1CiDCcDNaCiDCcD7
e83N1.-eX)7
i/:er39/,a1,e83,K,I4etJa,Ierr;7
i69errNN1; 8ri/t69bF/'ATRICEA A ESTE SIN&U(ARAb;7
el3e A 8ri/t69bF/'ATRICEA IN*ERSA .NA]9X1;F/b;7
a6i3are9/,/,K,d.d;7
8ri/t69bF/DETER'INANTU( 'ATRICEI A ESTE
O+.#l6b,4etJa;7
8ro4u39/,/,/,a,K,1;7
8ri/t69bF/*ERIFICARE CNA<. REfU(TA 'ATRICEA
UNITATE[b;7
a6i3are9/,/,1,dCd;7
get159;7
B
B
3iierul '7!.2[7.cpp M conine construciile de includere a fiierelor
de mai sus.
>i/1lu4e b4QFio3i6FlimKacJCF($E=1J1.188b
>i/1lu4e b4QFio3i6FlimKacJ1F($E=1J2.188b
>i/1lu4e b4QFio3i6FlimKacJ1F($E=1J".188b
>i/1lu4e b4QFio3i6FlimKacJ1F($E=1J#.188b
76
". 'er3ul lu1r2rii
0.2. Se va compila, e.ecuta i analiza programul dat ca e.emplu mai
sus.
0.>. Se vor compila separat modulele programului e.emplificat i
apoi cu lin_-editorul se va obine programul e.ecutabil.
Se va construi un fiier de tip )roject cu modulele programului
e.emplificat.
/n continuare se va scrie cte un program modularizat pentru
rezolvarea urmtoarelor probleme"
0.0. %ndu-se forma postfi.at a unei e.presii aritmetice care
conine numai numere ntregi i operatori +,-,O,*, s se scrie un program
pentru evaluarea sa.
0.6. S se scrie un program pentru calculul c.m.m.d.c. i a c.m.m.m.c
a dou polinoame.
0.7. S se implementeze noiunea de mulime i operaiile permise
asupra sa.
0.A. S se implementeze un editor de te.te care s permit cteva
operaii definite de %vs. Dinserarea unui te.t, tergere, modificare
etc. ..#
77
Lucrarea de laborator nr.
P%INTERI

1. Co/0i/utul lu1r2rii
/n lucrare se prezint tipul pointer, operaiile permise asupra
pointerilor, modul de alocare i eliberare dinamic a memoriei.
2. Co/3i4era0ii teoreti1e
2.1. Ti8ul 8oi/ter
<n pointer este o variabil care are ca valori adrese. %ac pointerul p
are ca valoare adresa de memorie a variabilei ., se spune c p pointeaz spre
..
p
-dresa din memorie `
.
-dresa din memorie a
<n pointer este legat de un tip. %ac . este de tipul int, pointerul p
este legat de tipul int.
%eclararea unui pointer se face la fel ca declararea unei variabile, cu
deosebirea c numele pointerului este precedat de caracterul O"
ti8 </ume$
!.emplu"
i/t <87
7A
a
>???
-dresa unei variabile se obine cu ajutorul operatorului unar I,
numite o8erator 4e re6ere/0iere.
!.emplu" 3ie declaraiile"
i/t =7
i/t <87
-tunci 8NI=$ are ca efect atribuirea ca valoare pentru p a adresei
variabilei =. /n desenul de mai sus, variabila = fiind localizat la adresa g,
valoarea lui 8 va fi g.
3urnizarea valorii din zona de memorie a crei adres este coninut
n p se face cu ajutorul operatorului unar <, numit o8erator 4e
4ere6ere/0iere.
!.emplu"
a# instruciunea =NV este ec&ivalent cu una din secvenele"
8NI=7 sau 8NIV7
<8NV7 =N<87
b# instruciunea =PP este ec&ivalent cu secvena"
8NI=7
9<8;PP7
/n aceste e.emple p trebuia s fie legat de tipul lui .,Z. %e e.emplu"
i/t =,V7
i/t <87
!.ist cazuri cnd un pointer trebuie s nu fie legat de un tip de date.
/n acest caz, se folosete declaraia urmtoare"
:oi4 </ume$
/n acest caz, dac avem declaraiile"
i/t =7
6loat V7
7B
:oi4 <87
atunci este corect oricare din instruciunile"
8NI=7
8NIV7
ns este necesar folosirea e.presiilor de tip cast, pentru a preciza tipul
datei spre care pointeaz p"
9ti8 <;8
Observaie" este necesar cunoaterea n fiecare moment a tipului valorii
ce se gsete la adresa atribuit pointerului de tip void O. 5einnd seama
de acest lucru se ajunge la erori.
!.emplu de utilizare a unui pointer de tip void"
i/t =7
:oi4 <87
,nstruciunea =N1- este ec&ivalent cu secvena "
8NI=7
<9i/t <;8N1-$
/n esen, dac 8 este pointer declarat ca :oi4 <8, nu poate fi folosit
dereferenierea <8 fr a preciza tipul datei referite printr-o e.presie de tipul
cast.
2.2. (eg2tura 4i/tre 8oi/teri Gi taKlouri
5umele unui tablou are drept valoare adresa primului su element.
Ca urmare, se spune c numele unui tablou este un pointer constant,
neputnd fi modificat n timpul e.ecuiei.
!.emplu"
7C
i/t taKC1--D7
i/t <87
i/t =7
...
8Nt7 /< 8 8rimeGte 1a :aloare a4re3a eleme/tului taKC-D </
L
/n acest e.emplu, atribuirea =NtaKC-D este ec&ivalent cu
=N<8$
Ca urmare a celor prezentate, rezult c dac un parametru efectiv este un
tablou unidimensional, atunci parametrul formal corespunztor poate fi
declarat n dou moduri"
a# ca tablou" ti8 /umeJ8arametruJ6ormalCD$
b# ca pointer" ti8 </umeJ8arametruJ6ormal7
Cele dou declaraii ale parametrului formal sunt ec&ivalente, fiind
corect utilizarea n corpul funciei a construciei de variabil inde.at"
/umeJ8arametruJ6ormal Ci/4i1eD$
-cest lucru este ilustrat n e.emplul de mai jos, care are drept scop
gsirea ma.imului i minimului dintre elementele unui ir.
/< Programul ()E=1.188 </
/< Programul e=em8li6i1a tra/3miterea 8arametrului 6ormal
taKlou 8ri/ 8oi/ter </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
:oi4 'a=Jmi/19i/t /,i/t aCD,i/t <ma=,i/t< mi/;
A
i/t i7
<ma=NaC-D7
<mi/NaC-D7
6or 9iN17i?/7iPP;
A
i6 9aCiD@<ma=; <ma=NaCiD7
el3e i6 9aCiD? <mi/; <mi/NaCiD7
B
B
7E
:oi4 'a=Jmi/29i/t /,i/t <a,i/t <ma=,i/t <mi/;
A
i/t i7
<ma=NaC-D7
<mi/NaC-D7
6or 9iN17i?/7iPP;
A
i6 9aCiD@<ma=; <ma=NaCiD7
el3e i6 9aCiD? <mi/; <mi/NaCiD7
B
B
:oi4 mai/9:oi4;
A
i/t i,/,ma=im,mi/im7
i/t =C1--D7
/< I/tro4u1erea 4atelor </
8ri/t69bF/Numarul eleme/telor taKloului /Nb;7
31a/69bO4b,I/;7
6or9iN-7i?/7iPP;
A
8ri/t69bF/=CO4DNb,i;7
31a/69bO4b,I=CiD;7
B7
/< A8elul 8rimei 8ro1e4uri </
'a=Jmi/19/,=,Ima=im,Imi/im;7
8ri/t69bF/(a a8elul 6u/1tiei 'a=Jmi/1 reZultaQF
ma=imulNO4 mi/imulNO4F/b,ma=im,mi/im;7
/< A8elul 1elei 4e a 4oua 8ro1e4uri </
'a=Jmi/29/,=,Ima=im,Imi/im;7
8ri/t69bF/(a a8elul 6u/1tiei 'a=Jmi/2 reZultaQF
ma=imulNO4 mi/imulNO4F/b,ma=im,mi/im;7
8ri/t69bF/A8a3ati o ta3ta[F/b;7
get159;7
B
2.". %8era0ii a3u8ra 8oi/terilor
-supra pointerilor sunt permise urmtoarele operaii"
A?
a# ,ncrementare*decrementare cu 2. /n acest caz valoarea
pointerului este incrementat*decrementat cu numrul de octei
necesari pentru a pstra o dat de tipul de care este legat
pointerul.
Operatorii folosii sunt PP i XX.
%e e.emplu"
i/t taKC1--D7
i/t <87
LLLLLL..
8NItaKC1-D7
8PP7 /< *aloarea lui 8 e3te i/1reme/tat2 1u 2, a:S/4 a4re3a
eleme/tului taKC11D</
b# -dunarea i scderea unui ntreg dintr-un pointer.
Operaia 8h/ are drept efect creterea, respectiv scderea din
valoarea 8 a /</um2rul 4e o1te0i necesari pentru a pstra o dat de tipul de
care este legat pointerul.
)entru e.emplul de mai sus, dac = este de tipul i/t, atunci"
=NtaKCiD$
este ec&ivalent cu"
=N<9taKPi;$
c# %iferena a doi pointeri.
%ac > pointeri p i ^ pointeaz spre elementele i i j ale aceluiai
tablou DjTi#, adic 8NItaKCiD i RNItaKCcD, atunci RX8 N 9c W
i;</um2rul 4e a1te0i necesari pentru a pstra o dat de tipul de baz
al tabloului.
d# Compararea a doi pointeri
%oi pointeri care pointeaz spre elementele aceluiai tablou pot fi
comparai folosind operatorii de relaie i de egalitate"
? ?N @ @N NN [N
:ai jos este prezentat programul de la paragraful precedent, folosind
operaii asupra pointerilor.
A2
/< Programul ()E=2.188 </
/< Programul e=em8li6i1a 6olo3irea o8eratiilor
a3u8ra 8oi/terilor </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
:oi4 'a=Jmi/19i/t /,i/t aCD,i/t <ma=,i/t< mi/;
A
i/t i7
<ma=NaC-D7
<mi/NaC-D7
6or 9iN17i?/7iPP;
A
i6 9aCiD@<ma=; <ma=NaCiD7
el3e i6 9aCiD? <mi/; <mi/NaCiD7
B
B
:oi4 'a=Jmi/29i/t /,i/t <a,i/t <ma=,i/t <mi/;
A
i/t i7
<ma=N<a7
<mi/N<a7
6or 9iN17i?/7iPP;
A
i6 9<9aPi;@<ma=; <ma=N<9aPi;7
el3e i6 9<9aPi;? <mi/; <mi/N<9aPi;7
B
B
:oi4 mai/9:oi4;
A
i/t i,/,ma=im,mi/im7
i/t =C1--D7
/< I/tro4u1erea 4atelor </
8ri/t69bF/Numarul eleme/telor taKloului /Nb;7
31a/69bO4b,I/;7
6or9iN-7i?/7iPP;
A>
A
8ri/t69bF/=CO4DNb,i;7
31a/69bO4b,I=CiD;7
B7
/< A8elul 8rimei 8ro1e4uri </
'a=Jmi/19/,=,Ima=im,Imi/im;7
8ri/t69bF/(a a8elul 6u/1tiei 'a=Jmi/1 reZultaQF
ma=imulNO4 mi/imulNO4F/b,ma=im,mi/im;7
/< A8elul 1elei 4e a 4oua 8ro1e4uri </
'a=Jmi/29/,=,Ima=im,Imi/im;7
8ri/t69bF/(a a8elul 6u/1tiei 'a=Jmi/2 reZultaQF
ma=imulNO4 mi/imulNO4F/b,ma=im,mi/im;7
8ri/t69bF/A8a3ati o ta3ta[F/b;7
get159;7
B
2.#. Alo1area/eliKerarea 4i/ami12 a memoriei 5ea8
-locarea memoriei pentru variabilele globale i statice este static,
adic alocarea rmne pn la terminarea programului.
-locarea memoriei pentru variabilele automatice este dinamic, n
sensul c stiva este 8curat( la terminarea funciei.
:emoria &eap este o zon de memorie dinamic, special, distinct
de stiv. !a poate fi gestionat prin funcii, care au prototipurile n fiierul
alloc.& i stdlib.&
-locarea unei zone de memorie &eap se poate realiza cu ajutorul
funciilor de prototip"
:oi4 <mallo1 9u/3ig/e4 /;7
:oi4 <1allo19u/3ig/e4 /rJelem, u/3ig/e4 4im;7
3uncia mallo1 aloc n &eap o zon contigu de / o1te0i, iar funcia
1allo1 o zon contigu de /rJelem < 4im n octei.
3unciile returneaz"
- n caz de succes, adresa de nceput a zonei alocate
Dpointerul fiind de tip void, este necesar conversia spre
tipul dorit#$
- n caz de insucces, returneaz zero Dpointerul 5<''#$
A0
!liberarea unei zone alocate cu malloc sau calloc se face cu ajutorul
funciei de prototip"
:oi4 6ree 9:oi4 <8;$
Observaie" )entru alocri de blocuri mai mari de A6 _octei, este
necesar utilizarea pointerilor de tipul far. /n acest caz, funciile de mai sus
au prototipurile"
:oi4 6ar <6armallo1 9u/3ig/e4 lo/g /;7
:oi4 6ar <6ar1allo19u/3ig/e4 lo/g /rJeleme/te, u/3ig/e4 lo/g
4im;7
:oi4 6ar6ree 9:oi4 6ar <8;7
:ai jos se prezint un e.emplu de utilizare a funciilor prezentate n
acest paragraf.
/< Programul ()E=".188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?allo1.5@
>i/1lu4e ?8ro1e33.5@
>i/1lu4e ?1o/io.5@
:oi4 mai/9:oi4;
A
15ar <3tr1,<3tr27
/< Alo1a memorie 8e/tru 8rimul 3ir 4e 1ara1tere </
i6 993tr1 N 915ar <; mallo191--;; NN NU((;
A
8ri/t69b'emorie i/3u6i1ie/taF/b;7
e=it91;7
B
8ri/t69bF/I/tro4u1eti 8rimul 3ir 4e 1ara1tere termi/at 1u
ENTERF/b;7
get393tr1;7
8ri/t69bF/Sirul 4e 1ara1tere i/tro4u3 e3teF/ O3F/b,3tr1;7
A6
/< Alo1a memorie 8e/tru al 4oilea 3ir 4e 1ara1tere </
i6 993tr2 N 915ar <; 1allo191--,3iZeo6915ar;;; NN NU((;
A
8ri/t69b'emorie i/3u6i1ie/taF/b;7
e=it92;7
B
8ri/t69bF/I/tro4u1eti al 4oilea 3ir 4e 1ara1tere termi/at 1u
ENTERF/b;7
get393tr2;7
8ri/t69bF/Sirul 4e 1ara1tere i/tro4u3 e3teF/ O3F/b,3tr2;7
8ri/t69bF/A8a3ati o ta3taF/b;7
get159;7
/< EliKerarea memoriei </
6ree93tr1;7
6ree93tr2;7
B
2.$. Folo3irea 1a 8arametru a u/ei 6u/10ii
5umele unei funcii este un pointer spre funcia respectiv. %e
aceea, numele unei funcii poate fi folosit ca parametru efectiv la apelul unei
funcii.
3ie 6 o funcie care va fi transmis ca parametru efectiv, avnd
antetul"
ti86 69li3taJ8arametrilorJ6ormaliJ6;$
/n acest caz, parametrul formal al unei funcii g care va fi apelat cu
parametrul efectiv f, este prezentat n antetul funciei g"
ti8g g9L, ti869<8;9li3taJ8arametrilorJ6ormaliJ6;, L;
-pelul se va face astfel"
g9L,6,..;7
)rogramul 'A!.6.cpp prezint un e.emplu n acest sens. !ste vorba
de integrarea unei funcii prin metoda trapezului.
A7



,
_

+ +
+

b
a
n
i
h i a f
b f a f
h dx x f
2
2
# O D
>
# D # D
# D
unde, n este numrul de subintervale n care s-a mprit intervalul Fa,bG,
dimensiunea unui subinterval fiind &.
/< Programul ()E=#.188 </
/< Programul e=em8li6i1a mo4ul 4e 6olo3ire
a u/ei 6u/1tii 1a 8arametru </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>i/1lu4e ?mat5.5@
4ouKle 694ouKle =;
A
retur/ 9"<=<= P1;7
B
4ouKle i/tegrala94ouKle a,4ouKle K,i/t /,4ouKle9<8;94ouKle =;;
/< Cal1ulul i/tegralei 8ri/ meto4a tra8eZelor </
A
i/t i7
4ouKle 5,37
5N9KXa;//7
3N99<8;9a;P9<8;9K;;/2.-7
6or9iN17i?/7iPP;
3N3P9<8;9aPi<5;7
3N3<57
retur/ 37
B
:oi4 mai/9;
A
4ouKle a,K7
i/t /7
15ar 157
/< Citirea i/ter:alului 4e i/tegrare </
8ri/t69bF/aNb;731a/69bOl6b,Ia;7
8ri/t69bF/KNb;731a/69bOl6b,IK;7
15NdDd7
AA
`5ile 915NNdDd ^^ 15NNd4d;
A
8ri/t69bF//Nb;731a/69bO4b,I/;7
8ri/t69bF/Pe/tru /NO4 *aloarea i/tegralei e3te Ol6b,/,
i/tegrala9a,K,/,6;;7
8ri/t69bF/A8a3ati o ta3taF/b;7get159;7
8ri/t69bF/I/tro4u1eti alt /_ DAND/4 NUNalt 1ara1ter b;7
15Nget159;7
B
B
". 'er3ul lu1r2rii
0.2 Se vor e.ecuta e.emplele din lucrare. Se vor analiza urmtoarele
lucruri"
- folosirea unei variabile inde.ate, atunci cnd numele tabloului a fost
definit ca pointer n antetul funciei D'A!.2.cpp#$
- operaiile permise asupra pointerilor. Ce avantaj prezint nlocuirea
unei variabile cu indici cu o e.presie cu pointeriP D'A!.>.cpp#$
- cum se aloc n memoria &eap spaiul de memorie pentru variabile
dinamiceP D'A!.0.cpp#.
- care este avantajul transmiterii funciilor ca parametru efectiv
D'A!.6.cpp#.
/n continuare se vor scrie programele pentru rezolvarea urmtoarelor
probleme"
0.>. 3olosind numai pointeri i e.presii cu pointeri se vor scrie
funcii de citire, afiare i nmulire a dou matrice.
0.0. 3olosind numai pointeri i e.presii cu pointeri se vor scrie
funcii de sortare a unui vector cu elemente reale.
0.6. 3olosind numai pointeri i e.presii cu pointeri se va scrie o
funcie de interclasare a doi vectori, care conin elemente de tip real
ordonate cresctor.
AB
0.7. S se scrie o funcie care sorteaz n ordine cresctoare n iruri
de caractere.
0.A. S se scrie o funcie care determin rdcina unei funcii fD.#, n
intervalul Fa,bG, tiind c admite o singur rdcin n acest interval.
3uncia f va fi transmis ca parametru efectiv.
AC
Lucrarea de laborator nr. 7
1!C<1S,;,=-=!
1. Co/0i/utul lu1r2rii
/n lucrare este prezentat noiunea de recursivitate, avantajele i
dezavantajele funciilor recursive n raport cu cele nerecursive, pe baza unor
e.emple simple.
2. Co/3i4era0ii teoreti1e

2.1. 'e1a/i3mul re1ur3i:it20ii
<n obiect este recursiv dac este definit prin el nsui. O funcie este
recursiv dac ea se autoapeleaz.
1ecursivitatea poate fi"
- direct - cnd funcia conine un apel direct la ea
nsi$
- indirect - cnd funcia conine un apel al altei funcii,
care la rndul su o apeleaz pe prima.
'a fiecare apel al unei funcii, parametrii i variabilele automatice
ale ei se aloc pe stiv ntr-o zon independent. -cest lucru se ntmpl la
fiecare apel sau autoapel al funciei. %e aceea datele amintite au valori
distincte la fiecare reapelare ;ariabilele statice i cele globale ocup tot
timpul aceeai locaie de memorie. Ca urmare, orice modificare asupra lor
se face numai la adresa fi.at n memorie, deci ele i pstreaz valoarea de
la un reapel la altul.
1evenirea dintr-o funcie se face n punctul urmtor celui din care
s-a fcut apelul. -dresa de revenire se pstreaz tot n stiv. 'a revenire,
stiva se reface la starea ei dinaintea apelului, deci variabilele automatice i
parametrii vor reveni la valorile lor dinaintea reapelului respectiv.
AE
O problem important este stoparea autoapelului. %e aceea trebuie
s e.iste o condiie de terminare, fr de care un apel recursiv ar conduce la
o bucl infinit. /n aplicaiile practice este necesar nu numai ca adncimea
recursivitii sa fie finit, ci s fie relativ mic, deoarece fiecare apel
recursiv necesit alocarea pe stiv a zonei de memorie pentru"
- parametrii funciei$
- variabilele automatice locale funciei$
- adresa de return Drevenire n punctul de apel#.
Ca urmare, stiva poate crete foarte mult i repede se ajunge la
ocuparea ntregului spaiu de memorie alocat ei.
<n e.emplu clasic de proces recursiv este calculul factorialului
definit astfel"
Se observ c n definiia funciei fact e.ist o parte care nu se
definete prin ea nsi i anume factDn#R2 dac nR?.
/n limbajul C*C++, codul funciei corespunztoare este urmtoarea"
4ouKle 6a1t9i/t /;
A
i6 9/NN-; retur/ 1.-7
el3e retur/ /<6a1t9/X1;
B
1ecursivitatea liniar se caracterizeaz prin faptul c nu pot aprea
pe ramuri diferite ale e.ecuiei programului mai multe apeluri recursive,
adic pe un anumit nivel apare doar un singur apel recursiv.
1ecursivitatea liniar ntotdeauna poate fi transformat n iteraie,
ducnd la economie de memorie i timp de calcul Dse elimin operaiile de
salvare de conte.t la autoapelurile funciei#.
-vantajul principal al recursivitii este scrierea mai compact i mai
clar a funciilor care e.prim procese de calcul recursive. /n aceast clas
B?
?
?
# 2 D O
2
# D
>

'

n daca
n daca
n fact n
n fact
de procese intr cele generate de metodele de cutare cu revenire
D8bac_trac_ing(# i metodele de divizare D8divide et impera(#.
2.2. E=em8le
2.2.1. Citirea a / 1u:i/te 9Giruri 4e 1ara1tere;, 6ie1are termi/at
1u 38a0iu Gi ti82rirea lor M/ ogli/42.
/< Programul (!E=1.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
/< Programul 1ite3te / 1u:i/te 3e8arate 1u 38atiu7
94u8a ultimul 1u:a/t :a e=i3ta 38atiu 3i ?ENTER@;
3i le a6i3eaZa bi/ ogli/4ab </
:oi4 re:er39:oi4;
A
15ar 17
31a/69bO1b,I1;7
i6 91[NdF#-d; A8ri/t69bO1b,1;7re:er39;7B7
8ri/t69bO1b,1;7
B
:oi4 mai/9:oi4;
A
i/t /,i7
8ri/t69bF/Numarul 4e 1u:i/teNb;7
31a/69bO4b,I/;7
6or9iN17i?N/7PPi;
A
re:er39;7
8ri/t69bF/b;7
B7
8ri/t69bF/PR%&RA'U( SXA TER'INAT[[[F/b;7
get159;7
B
B2
3uncia revers citete cte un caracter pe care l afieaz pn la
ntlnirea spaiului Dterminatorul irului de caractere#. 3iecare autoapel
conduce la pstrarea n stiv a variabilei locale c. -pariia spaiului conduce
la terminarea apelurilor recursive ale funciei, urmnd scrierea spaiului i a
caracterelor n ordinea invers introducerii lor.
2.2.2. Determi/area terme/ului mi/im al u/ui Gir 4e / M/tregi.
/< Programul (!E=2.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
/< Programul 1al1uleaZa mi/imul 4i/trXu/ 3ir
1u terme/i i/tregi </
>4e6i/e N'A 1--
>4e6i/e 'AI' "2!)!
i/t 3irCN'AD7
i/t mi/im9i/t =,i/t V;
A
i6 9=?NV; retur/ =7
el3e retur/ V7
B
i/t terme/Jmi/im9i/t 4imJ3ir;
A
i6 94imJ3ir@N-; retur/ mi/im93irC4imJ3irD,terme/Jmi/im94imJ3irX1;;7
el3e retur/ 'AI'7
B
:oi4 mai/9:oi4;
A
i/t i,/7
8ri/t69bF/I/tro4u1eti /r 4e terme/i ai 3irului /Nb;7
31a/69bO4b,I/;7
8ri/t69bF/I/tro4u1eti :alorile terme/ilorF/b;7
6or9iN-7i?/7PPi;
A
8ri/t69b3irCO4DNb,i;7
B>
31a/69bO4b,I3irCiD;7
B7
8ri/t69bF/SIRU( INTR%DUSF/b;7
6or9iN-7i?/7PPi;
A
8ri/t69bO)4b,3irCiD;7
i6 99iP1; O 1- NN -; 8ri/t69bF/b;7
B7
8ri/t69bF/Cel mai mi1 terme/ e3te O4F/b,terme/Jmi/im9/X1;;7
8ri/t69bF/A8a3ati o ta3ta[b;7
get159;7
}
2.2.". *aria/ta re1ur3i:2 Gi /ere1ur3i:2 a g23irii :alorii 1elui 4e al /X
lea terme/ al Girului lui FiKo/a11i.
9irul lui 3ibonacci este definit astfel"
3ibD?#R?$ 3ibD2#R2$
3ibDn#R3ibDn-2#+3ibDn-># pentru n >
/< Programul (!E=".188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
/< Numerele lui FiKo/a11i </
i/t 6iK19i/t /;
/< *ARIANTA RECURSI*A </
A
i6 9/NN-; retur/ -7
el3e i6 9/NN1; retur/ 17
el3e retur/ 96iK19/X1;P6iK19/X2;;7
B
i/t 6iK29i/t /;
/< *ARIANTA NERECURSI*A </
A
i/t i,=,V,Z7
i6 9/NN-; retur/ -7
B0
el3e i6 9/NN1; retur/ 17
el3e A
=N17VN-7
6or9iN27i?N/7PPi;
A
ZN=7=N=PV7VNZ7
B7
retur/ =7
B
B
:oi4 mai/9:oi4;
A
i/t /7
15ar 157
15NdDd7
`5ile 9915NNd4d;^^ 915NNdDd;;
A
8ri/t69bF/I/tro4u1eti /Nb;7
31a/69bO4b,I/;7
8ri/t69bF/CA(CU( RECURSI*Q 6iK9O4;NO4F/b,/,6iK19/;;7
8ri/t69bF/CA(CU( NERECURSI*Q 6iK9O4;NO4F/b,/,6iK29/;;7
8ri/t69bF/Doriti 3a 1o/ti/uati _ DaND/4b;7
15Nget159;7
B
B
-pelul recursiv conduce la creterea rapid a stivei, de aceea este
preferabil implementarea nerecursiv.
". 'er3ul lu1r2rii
0.2. Se vor analiza i e.ecuta programele din e.emplele de mai sus.
)entru un caz concret, se va trasa starea stivei, urmrindu-se creterea pe
msura autoapelrii funciei i scderea ei la revenirea din autoapel.
0.>. S se scrie o funcie recursiv i una nerecursiv pentru calculul
valorii polinoamelor bermite bD.# definite astfel"
B6
b
?
D.#R2$ b
2
D.#R>.$ b
n
D.#R>nb
n-2
D.#->Dn-2#b
n->
D.#,
pentru n2
0.0. )roblema turnurilor din banoi
Se consider trei tije verticale -,4,C i n discuri de diametre diferite. ,niial
toate discurile sunt puse n tija -, n ordinea descresctoare a diametrului
Ddiscul cel mai mare la baz, iar cel mai mic n vrf#. Se cere s se mute
discurile de pe tija - pe tija C folosind tija 4 ca intermediar, folosind
condiiile"
a# la o manevr se mut un singur disc i anume cel din
vrful unei tije$
b# nu se poate pune un disc de diametru mai mare peste unul
de diametru mai mic$
c# n final, pe tija C, discurile trebuie s fie n aceeai ordine
ca n starea iniial de pe tija -.
0.6.S se scrie un program recursiv care citete n cuvinte i le
afieaz n ordinea invers a introducerii lor.
0.7.S se scrie un program recursiv de generare a produsului
cartezian a n mulimi.
0.A.S se scrie un program de generare recursiv a submulimilor
de _ elemente ale mulimii - cu n elemente Dcombinaiile de n elemente
luate cte _#.
0.B. S se scrie un program de rezolvare a problemei celor C
regine Ddeterminarea tuturor aezrilor pe tabla de a& a celor C regine astfel
nct s nu se atace#.
0.C.S se genereze recursiv permutrile mulimii - de n elemente.
0.E.Se consider o bar de lungime m i n repere de lungimi l
2
,
l
>
, .... , l
n
. %in bar trebuie tiate buci de lungimea reperelor date, astfel
nct s rezulte din fiecare reper cel puin o bucat i pierderile s fie
minime.
0.2?. 3uncia lui -c_ermann. S se scrie programul recursiv care
calculeaz funcia lui -c_ermann definit astfel"
B7
-c_D?,n#Rn+2 pentru n c 5
-c_Dm,?#R-c_Dm-2,2# pentru m c 5O
-c_Dm,n#R-c_Dm-2,-c_Dm,n-2## pentru m,n c 5O
BA
Lucrarea de laborator nr. !
IRURI DE CARACTERE
1. Co/0i/utul lu1r2rii
/n lucrare se prezint modul de reprezentare n memorie a unui ir de
caractere i unele funcii standard de prelucrare a irurilor de caracter.
2. Co/3i4era0ii teoreti1e
2.1. Re8reZe/tarea M/ memorie a u/ui Gir 4e 1ara1tere
<n ir de caractere este pstrat ntr-un tablou unidimensional de tip
c&ar. 3iecare caracter se pstreaz ntr-un octet prin codul -SC,, al su.
<ltimul caracter al irului, deci terminatorul irului, este caracterul 5<''
DKI?H#.
5umele tabloului care pstreaz irul de caractere este un pointer
constant spre irul de caractere.
!.emplu"
c&ar sir FGR(S,1 %! C-1-C=!1!($
/n memorie reprezentarea sa va fi Dn &e.azecimal#"
sir ? 2 > 0 6 7 A B C E 2? 22 2> 20 26 27 2A
70 6E 7> >? 66 67 >? 60 62 7> 62 60 76 67 7> 67 ??
3ir are ca valoare adresa zonei de memorie care conine irul.
-vem urmtoarele relaii"
sirFiG unde i c F?,2AG M reprezint codul -SC,, al celui de al i-lea
caracter din irul de caractere$
BB
sir + i unde i c F?,2AG, reprezint adresa celui de al i-lea caracter din
irul de caractere$
ODsir+i# are acelai efect ca sirFiG.
=ot ce s-a e.plicat mai sus, rmne valabil i n cazul declarrii n
felul urmtor"
15ar <1o/3t 3irNHSIR DE CARACTEREH7
%eclararea unui tablou de iruri de caractere se poate face astfel"
15ar <taKCDNA3irJ-,3irJ1,L,3irJ/B7
/n acest caz, tabFiG, pentru i c F?,nG, este un pointer spre irul de
caractere 8sir[i(.
/n cazul apelului
8ri/t69EO3F/H, taKCiD;7
se va afia te.tul 3irJi.
2.2. Fu/10ii 3ta/4ar4 4e 8relu1rare a Girurilor 4e 1ara1tere
3unciile standard de citire*scriere a irurilor de caractere"
- gets*puts$
- scanf*printf$
- sscanf*sprintf
au fost prezentate n lucrarea de laborator nr. 2.
/n continuare sunt prezentate cteva funcii de prelucrare a irurilor
de caractere, al cror prototip se gsete n fiierul 3tri/g.5
2.2.1. (u/gimea u/ui Gir 4e 1ara1tere
'ungimea unui ir de caractere, fr a fi luat n considerare
caracterul KI?H, este returnat de funcia 3trle/, care are prototipul"
BC
u/3ig/e4 3trle/ 91o/3t 15ar <3;7
!.emplu"
/< Programul (+E=1.188 </
/< Programul e=em8li6i1a utiliZarea 6u/1tiei 3trle/ </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3tri/g.5@
>4e6i/e al6a bA8a3ati o ta3ta[b
:oi4 mai/9:oi4;
A
15ar 3ir1CDNbSIR DE CARACTEREb7
15ar <3ir2NbSIR DE CARACTEREb7
i/t /1,/2,/"7
/1N3trle/93ir1;7
/2N3trle/93ir2;7
/"N3trle/9bSIR DE CARACTEREb;7
/< Atat /1,1at 3i /2 3i /" au 1a :aloare 1) </
8ri/t69bF/ /1NO4 /2NO4 /"NO4F/b,/1,/2,/";7
8ri/t69EO3F/H,al6a;7
get159;7
d
2.2..2. Co8ierea u/ui Gir 4e 1ara1tere
Copierea unui ir de caractere dintr-o zon de memorie de adres
3ur32 ntr-o alt zon de memorie de adres 4e3t se face cu ajutorul funciei
strcp", al crei prototip este"
15ar <3tr18V 915ar <4e3t, 1o/3t 15ar <3ur32;7
Se menioneaz c are loc copierea inclusiv a caracterului
5<''DKI?H#.
BE
3uncia returneaz adresa unde a avut loc copierea, adic c&iar
destinaia.
)entru a copia cel mult n caractere, din zona de memorie de adres
3ur32 n zona de memorie de adres 4e3t, se va folosi funcia 3tr/18V, al
crei prototip este urmtorul"
15ar <3tr/18V 915ar <4e3t, 1o/3t 15ar <3ur32, u/3ig/e4 /;7
%up ultimul caracter transferat, trebuie pus caracterul KI?H.
!vident c dac n T lungimea irului de la adresa surs, atunci are
loc transferarea ntregului ir de caractere.
!.emplu"
/< Programul (+E=2.188 </
/< Programul e=em8li6i1a utiliZarea 6u/1tiei 3tr18V </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3tri/g.5@
>4e6i/e al6a bF/A8a3ati o ta3ta[b
:oi4 mai/9:oi4;
A
15ar 3ir1CDNbSIR DE CARACTEREb7
15ar <3ir2NbSIR DE CARACTEREb7
15ar 3ir"C1--D,3ir#C1--D,3ir$C1--D7
3tr18V93ir",3ir1;7
8ri/t69bF/ 3ir" 1o/ti/eQ O3F/b,3ir";7
3tr18V93ir#,bFu/1tii 3ta/4ar4 4e 8relu1rare 3iruri 4e 1ara1tereb;7
8ri/t69bF/ 3ir# 1o/ti/eQ O3F/b,3ir#;7
3tr/18V93ir$,3ir2,);7/< 3ir$ 1o/ti/e SIR DE </
3ir$C)DNdF-d7
8ri/t69bF/ 3ir$ 1o/ti/eQ O3F/b,3ir$;7
8ri/t69al6a;7
get159;7
B
C?
2.2.". Co/1ate/area a 4ou2 Giruri 4e 1ara1tere
-dugarea irului de caractere de la adresa 3ur32 dup ultimul
caracter Dcel care precede 5<''# al irului de caractere de la adresa 4e3t se
face cu ajutorul funciei strcat, care are prototipul"
15ar <3tr1at915ar <4e3t, 1o/3t 15ar <3ur3;7
%up irul rezultat, se pune evident caracterul 5<'' DKI?H#. 3uncia
retuneaz valoarea adresei destinaie. !.ist posibilitatea de a prelua din
irul de caractere de la adresa surs numai n caractere, cu ajutorul funciei
3tr/1at, care are prototipul"
15ar <3tr/1at 915ar <4e3t, 1o/3t 15ar <3ur3a, u/3ig/e4 /;7
'a sfrit se pune automat caracterul 5<'' DKI?H#.
%ac nT lungimea irului de la adresa surs, atunci funcia 3tr/1at
are acelai efect ca i funcia 3tr1at.
!.emplu"
/< Programul (+E=".188 </
/< Programul e=em8li6i1a utiliZarea 6u/1tiei 3tr1at</
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3tri/g.5@
>4e6i/e al6a bF/A8a3ati o ta3ta[b
:oi4 mai/9:oi4;
A
15ar 3ir1C1--DNbSIR1 DE CARACTEREb7
15ar <3ir2Nb?SIR2 DE CARACTEREb7
15ar 3ir"C1--D7
3tr18V93ir",3ir1;7
3tr1at93ir1,3ir2;7
8ri/t69bF/ 3ir1 1o/ti/eQ O3F/b,3ir1;7
3tr/1at93ir",3ir2,$;7
C2
/< Du8a ultimul 1ara1ter 4i/ 3r" 3e 8u/e im8li1it dF-d </
6or 9i/t iN-7i?N3trle/93ir";P17PPi; 8ri/t69bO=b,3ir"CiD;7
8ri/t69bF/ 3ir" 1o/ti/eQ O3F/b,3ir";7
8ri/t69al6a;7
get159;7
B
2.2.#. Com8ararea a 4ou2 Giruri 4e 1ara1tere
Compararea a dou iruri de caractere se face caracter cu caracter
Dpe baza codurilor -SC,,# pn cnd"
- s-a ajuns la un caracter i din primul ir care difer de
caracterul i din al doilea ir$
- s-a ajuns la sfritul unuia din iruri sau a ambelor.
Compararea a dou iruri de caractere de la adresele 3ir1 i respectiv
3ir2 se poate face cu funcia de prototip"
i/t 3tr1m891o/3t 15ar <3ir1,1o/3t 15ar <3ir2;7
3uncia returneaz"
- o valoare negativ dac irul de caractere de la adresa
3ir1 este mai mic dect cel de la adresa 3ir2$
- zero dac irurile sunt egale$
- o valoare pozitiv, dac irul de la adresa 3ir1 este mai
mare dect cel de la adresa 3ir2.
%ac dorim s se compare numai primele n caractere din cele dou
iruri se folosete funcia de prototip"
i/t 3tr/1m8 91o/3t 15ar <3ir1, 1o/3t 15ar <3ir2, u/3ig/e4 /;7
%ac dorim s nu se fac distincie ntre literele mici i cele mari,
atunci cele dou funcii au drept corespondene"
i/t 3tri1m8 91o/3t 15ar <3ir1, 1o/3t 15ar <3ir2;7
i/t 3tr/i1m8 91o/3t 15ar <3ir1, 1o/3t 15ar <3ir2, u/3ig/e4 /;7
C>
!.emplu"
/< Programul (+E=#.188 </
/< Programul e=em8li6i1a utiliZarea 6u/1tiei 3tr1m8</
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3tri/g.5@
>4e6i/e al6a bF/A8a3ati o ta3ta[b
:oi4 mai/9:oi4;
A
15ar 3ir1C1--DNbSIR DE CARACTEREb7
15ar <3ir2NbSIR 4e 1ara1tereb7
i/t i,c,a,l7
iN3tr1m893ir1,3ir2;7/< i?- , reZulta 3ir1?3ir2 </
8ri/t69bF/iNO4F/b,i;7
cN3tr/1m893ir1,3ir2,";7/<cN- ,reZulta 1a 8rimele " 1ara1tere 4i/ 3ir1 3i
3ir2 3u/t egale </
8ri/t69bF/cNO4F/b,c;7
aN3tri1m893ir1,3ir2;7 /< aN-, reZulta 1a 1ele 2 3iruri 3u/t egale </
8ri/t69bF/aNO4F/b,a;7
lN3tr/i1m893ir1,bSIR 4e 1- 1ara1tereb,);7 /<lN- </
8ri/t69bF/lNO4F/b,l;7
8ri/t69al6a;7
get159;7
B
". 'er3ul lu1r2rii
0.2. Se vor analiza i e.ecuta programele din lucrare.
C0
0.>. Se va scrie o funcie care s realizeze e.tragerea dintr-un ir de
caractere surs a unui subir specificat prin poziia n cadrul sursei i a
numrului de caractere e.trase.
0.0. Se va scrie o funcie pentru inserarea unui ir de caractere surs
ntr-un ir de caractere destinaie, specificnd poziia din care ncepe
inserarea.
0.6. Se va scrie o funcie pentru tergerea unui subir dintr-un ir de
caractere dat. Subirul se va specifica prin poziie i numr de caractere.
0.7. Se va scrie o funcie pentru a verifica dac un ir dat este subir
al unui alt ir de caractere. /n caz afirmativ, se va specifica poziia pe care se
regsete pentru prima dat.
0.A. S se scrie dou funcii, una care convertete un numr ntreg
sau real ntr-un ir de caractere, iar cealalt face operaia invers.
0.B. S se scrie un program care citete n iruri de caractere i
afieaz irul cel mai lung i irul cel mai mare alfanumeric.
C6
Lucrarea de laborator nr. 9
TIPURI(E DE DATE STRUCTUR,
UNIUNE I ENU'ERARE
1. Co/0i/utul lu1r2rii
/n lucrare sunt prezentate tipurile definite de utilizator structur,
uniune i enumerare, accesul la componentele lor i asignarea de nume
pentru aceste tipuri.
2. Co/3i4era0ii teoreti1e
2.1. Ti8ul 4e 4ate b3tru1tur2b
O 3tru1tur2 conine mai multe componente de tipuri diferite
Dpredefinite sau definite de utilizator#, grupate conform unei ierar&ii.
%eclaraia unei structuri se poate face astfel"
C7
struct nume
e
'ista de
componente
d
,dentificator
variabil
$
,
Observaie" /n aceasta declaraie nu pot lipsi simultan fnumef i
8identificator[variabil(.
O variabil structur de tipul fnumef poate fi declarat i ulterior
conform diagramei de mai jos, cu meniunea c cuvntul c&eie fstructf
poate lipsi n C++"
!.emple ec&ivalente"
a# struct material e
long cod$
c&ar den F0?G$
c&ar um F2?G$
real cantitate$
real pret[unit$
d stofa, &artie, motor$
b# struct materiale
long cod$
c&ar den F0?G$
c&ar um F2?G$
real cantitate$
real pre[unitar$
d$
struct material stofa, &artie, motor$
sau
CA
'ista de
componente
tip identificator
$
,
struct nume ,dentificator
variabil
$
,
material stofa, &artie, motor$
c# struct e
long cod$
c&ar den F0?G
c&ar um F2?G$
real cantitate$
real pret[unitar$
d stofa, &artie, motor$
-ccesul la componentele unei structuri se poate face prin procedeul
de calificare"
i4e/ti6i1atorJ:ariaKil2.i4e/ti6i1atorJ1Sm87
!.emplu" stofa.den
&artie.cantitate
)rocedeul de calificare ptrunde din aproape n aproape n ierar&ia structur.
/n limbajul C, transmiterea ca parametru a unei structuri la apelul
unei funcii, se face numai prin adresa variabilei de tip structur. %e
e.emplu"
:oi4 6 93tru1t material <8, ...;7

-pelul se va face prin"
69I3to6a, ...;
/n funcie, selectarea unui cmp se face astfel"
DOp#.den
DOp#.cantitate
sau nlocuind 9<8;. prin 8X@ , ca mai jos"
p-Tden
p-Tcantitate
/n limbajul C++, o structur poate fi transferat prin parametri n 0
moduri"
CB
- direct" void f Dmaterial p, ..#
- pointer spre structur" void f Dmaterial Op, ...#
- referin la structur" void f Dmaterial Vp, ...#
O structur de acelai tip se poate atribui direct una alteia"
material alfa, beta$
alfaRbeta$ eeste corectd
2.2. Ti8ul 4e 4ate bu/iu/eb
/n momente diferite ale e.ecuiei, se pot pstra n aceeai zon de
memorie date de tipuri diferite pentru economisirea memoriei sau din
motive ale concepiei programului. -cest lucru se face grupnd toate datele
care se aloc n aceeai zon de memorie. Structura utilizator obinut se
numete u/iu/e. Sinta.a uniunii este identic cu cea a structurii, singura
deosebire constnd n nlocuirea cuvntului c&eie f3tru1tf cu fu/io/f n
diagramele de sinta. de la punctul >.2.
%e menionat c zona de memorie rezervat are dimensiunea
componentei care necesit cea mai mult memorie pentru reprezentare.
-ccesul la componente se face identic ca la structur.
%e menionat c programatorul trebuie s cunoasc n fiecare
moment care dat este reprezentat.
!.emplu"
union alfa e
c&ar cF7G$ *O reprezentare pe 7 octei O*
int i$ *O reprezentare pe > octei O*
long j$ *O reprezentare pe 6 octei O*
d$
union alfa .$
strcpZD..c, 8-4C%(#$
;ariabila . are reprezentarea n &e.azecimal, astfel"
62 6> 60 66 ??
CC
%aca se acceseaz componenta ..i, atunci aceasta va avea 6>62 n
&e.azecimal, adic 2AEA2 n zecimal.
/n sc&imb, aceeai zon de memorie interpretat ca ..j Dlong# va avea
valoarea 66606>62 n &e.azecimal, adic 2.267.>7C.7A2 n zecimal
2.". Ti8ul 4e 4ate be/umerareb
=ipul e/umerare permite programatorului de a folosi nume
sugestive pentru valori numerice. %iagrama de sinta. pentru tipul
enumerare este asemntoare cu tipurile structur i uniune. %eosebirea
const n faptul c lista de componente este format numai din identificatori
de valoare ntreag ?,2,>,..."
!.emple ec&ivalente"
a# enum spt eluni, mari, miercuri, joi, vineri, smbt, duminicd$
enum spt spt[vacan$
b# enum spt eluni, mari, miercuri, joi, vineri, smbt, duminicd
spt[vacan$
CE
=ip
enumerare
enum nume
e
,dentificator
valoare
,dentificator
variabil
d $
,
,
c# enum eluni, mari, miercuri, joi, vineri, smbt, duminicd spt[vacan$
-tribuiri posibile"
spt[vacanRvineri$
,dentificatorii luni, mari,\, au valorile ?,2,.\
2.#. De1lararea ti8urilor 4e 4ate 8ri/ /ume 3imKoli1e
/n limbajul C*C++ se poate atribui un nume simbolic unui tip
predefinit sau unui tip utilizator. %iagrama de sinta. pentru asignarea unui
nume simbolic fnume[tipf unui ftipf predefinit sau utilizator este
urmtoarea"

!.emplu"
a# tZpedef struct e
int i$
float j$
double .$
d -'3-$
-'3- Z, z$
b# tZpedef struct e
float re$
float im$
d CO:)'!g$
CO:)'!g ., Z$
c# tZpedef union e
c&ar .F2?G$
long cod$
E?
tZpedef tip 5ume[tip
$
d 4!=-$
4!=- u, v$
d# tZpedef enum efalse, trued 4OO'!-5$
4OO'!-5 _, l$
2.$. E=em8le 4e 8rograme
)rogramul urmtor prezint operaii asupra numerelor comple.e,
folosind tipul structur. Sunt ilustrate toate posibilitile de transmiterea a
parametrilor de tip structur.
/<Programul (9E=1.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>i/1lu4e ?8ro1e33.5@
tV8e4e6 3tru1t A6loat re,im7BC%'P(E7
:oi4 a4u/a9C%'P(E <a,C%'P(E <K,C%'P(E <1;
/< tra/3miterea 8arametrilor 8ri/ 8oi/teri </
A
1X@reNaX@rePKX@re7
1X@imNaX@imPKX@im7
B7
:oi4 31a4e9C%'P(E a,C%'P(E K,C%'P(E <1;
/< tra/3miterea 8arametrilor 8ri/ :aloare b8o3iKil /umai i/ CPPb
3i a reZultatului 8ri/ 8oi/ter </
A
1X@reNa.reXK.re7
1X@imNa.imXK.im7
B7
:oi4 8ro4u39C%'P(E a,C%'P(E K,C%'P(E I1;
/<tra/3miterea 8arametrilor 8ri/ :aloare b8o3iKil /umai i/ CPPb
3i a reZultatului 8ri/ re6eri/ta </
A
1.reNa.re<K.reXa.im<K.im7
E2
1.imNa.im<K.rePa.re<K.im7
B7
:oi4 im8artire9C%'P(E <a,C%'P(E <K,C%'P(E <1;
/<tra/3miterea 8arametrilor 8ri/ 8oi/teri </
A
6loat =7
=NKX@re<KX@rePKX@im<KX@im7
i6 9=NN-; A
8ri/t69bF/im8artire la Zero[F/b;7
e=it91;7
B
el3eA
1X@reN9aX@re<KX@rePaX@im<KX@im;/=7
1X@imN9aX@im<KX@reXaX@re<KX@im;/=7
B
B7
:oi4 mai/9:oi4;
/< %8era0ii a3u8ra /umerelor 1om8le=e </
A
C%'P(E a,K,17
15ar 15,o87
15NdDd7
`5ile 9915NNdDd;^^ 915NNd4d;;
A
8ri/t69bF/I/tro4u1eti 8rimul /um2r 1om8le=F/b;7
8ri/t69ba.reNb;731a/69bO6b,Ia.re;7
8ri/t69ba.imNb;731a/69bO6b,Ia.im;7
8ri/t69bF/I/tro4u1e0i al 4oilea /um2r 1om8le=F/b;7
8ri/t69bK.reNb;731a/69bO6b,IK.re;7
8ri/t69bK.imNb;731a/69bO6b,IK.im;7
a4u/a9Ia,IK,I1;7
8ri/t69bF/9O6Pc<O6;P9O6Pc<O6;NO6Pc<O6F/b,
a.re,a.im,K.re,K.im,1.re,1.im;7
31a4e9a,K,I1;7
8ri/t69bF/9O6Pc<O6;X9O6Pc<O6;NO6Pc<O6F/b,
a.re,a.im,K.re,K.im,1.re,1.im;7
E>
8ro4u39a,K,1;7
8ri/t69bF/9O6Pc<O6;<9O6Pc<O6;NO6Pc<O6F/b,
a.re,a.im,K.re,K.im,1.re,1.im;7
im8artire9Ia,IK,I1;7
8ri/t69bF/9O6Pc<O6;P9O6Pc<O6;NO6Pc<O6F/b,
a.re,a.im,K.re,K.im,1.re,1.im;7
8ri/t69bF/C%NTINUAI_DAND/4,NuNalt 1ara1ter b ;7
31a/69bO<1O1b,I15;7
B
B
)rogramul urmtor prezint operaii asupra datelor de tipul funionf"
/< Programul (9E=2.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>i/1lu4e ?3tri/g.5@
/< E=em8lu 4e 6olo3ire a ti8ului bu/io/b </
:oi4 mai/9;
AtV8e4e6 u/io/A
15ar 15C1-D7
i/t =7
lo/g V7
6loat 67
B al6a7
al6a a7
3tr18V9a.15,bA.CDEF&jIb;7
8ri/t69bF/Dime/3iu/ea Zo/ei 4e memorie reZer:ata NO4 o1tetiF/b,
3iZeo6 a;7
8ri/t69bF/C%NTINUTU( f%NEIQF/b;7
8ri/t69bF/X3ir 4e 1ara1tereQ O3b,a.15;7
8ri/t69bF/Xi/treg 4e ti8ul i/tQ O49O= i/ 5e=a;b,a.=,a.=;7
8ri/t69bF/Xi/treg 4e ti8ul lo/gQ Ol49Ol= i/ 5e=a;b,a.V,a.V;7
8ri/t69bF/Xreal 4e ti8ul 6loatQ Ogb,a.6;7
get159;7
B
E0
)rogramul urmator prezinta operatii asupra datelor de tipul fenumf.
/< Programul (9E=".188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
/< E=em8lu 4e 6olo3ire a ti8ului be/umb </
:oi4 mai/9;
A
tV8e4e6 e/umAZero,u/u,4oi,trei,8atru,1i/1iB NR7
NR =,V7
i/t Z,`7
=N4oi7 /< =N2 </
VNtrei7 /<=N"</
ZN=PV7
`N=<V7
8ri/t69bF/ZNO4 `NO4F/b,Z,`;7
get159;7
=N27VN"7/< o a3t6el 4e atriKuire i/4i1a b`ar/i/gb </
ZN=PV7`N=<V7
8ri/t69bF/ZNO4 `NO4F/b,Z,`;7
get159;7
B
". 'er3ul lu1r2rii
0.2. 3olosind tipul structur pentru o dat curent an, lun, zi, s se
scrie un program pentru a afia a ctea zi din an este ziua respectiv i cte
zile au mai rmas pn la sfritul anului.
0.>. 3olosind tipul structur pentru data de natere a %-voastr i
tiind c n anul curent v aniversai ziua de natere n ziua de . Fluni,
mari, ..., duminicG, scriei un program pentru a afia ziua Ddin sptmn#
n care v-ai nscut.
E6
0.0. S se scrie un program modularizat care citete datele legate de
studenii unei grupe" nume, data naterii, adresa i i afiseaz n ordine
cresctoare le.icografic.
0.6. S se scrie un program pentru calculul valorii unui polinom de
gradul n cu coeficieni compleci pentru o valoare comple.. Calculul se va
face cu ajutorul unei funcii.
0.7. S se introduc tipul 1-h,O5-' ca o structur formata din
numrtor i numitor. S se scrie funcii de simplificare, adunare, scdere,
nmulire, mprire, ridicare la putere.
0.A. 3olosind tipul uniune, care conine cmpurile necesare pentru a
putea reprezenta un cerc, un dreptung&i, un ptrat, un triung&i, s se scrie o
funcie pentru a calcula aria figurii respective.

0.B. 3olosind tipul enumerare, s se introduc tipul boolean. S se
scrie o funcie de ordonare cresctoare a unui ir folosind metoda bulelor i
un semafor de tipul boolean.
0.C. Se citete un ir de caractere format din litere i cifre. S se
indice frecvena de apariie a caracterelor ntlnite n ir folosind o list
ordonat alfabetic Dnodul conine caracterul, frecvena i adresa urmtorului
nod#.
E7
Lucrarea de laborator nr. 10
PRE(UCRAREA FIIERE(%R
DE CTRE NI*E(U( INFERI%R A( S.&.F.
1. Co/0i/utul lu1r2rii
/n lucrare sunt prezentate funciile de prelucrare a fiierelor la
nivelul inferior, adic acelea care fac apel la sistemul de operare. !.emplul
prezentat n lucrare ilustreaz principalele operaii asupra unui fiier"
crearea, adugarea, modificarea i citirea unui fiier.
2. Co/3i4era0ii teoreti1e
3iierul este o colecie ordonat de nregistrri, memorate pe un
suport e.tern.
)rincipalele operaii asupra unui fiier sunt"
- desc&iderea unui fiier e.istent$
- crearea unui fiier$
- citirea*scrierea ntr-un fiier$
- poziionarea ntr-un fiier$
- tergerea unui fiier.
)relucrarea unui fiier se poate face n dou moduri"
a# utiliznd funciile sistemului de operare Dnivelul inferior#$
b# utiliznd funciile specializate de gestiune a fiierelor Dnivelul superior#.
:odul de e.ploatare a unui fiier poate fi"
- secvenial$
- direct.
EA
/n lucrare sunt prezentate funciile de nivel inferior de prelucrare a
fiierelor.
2.1. Crearea u/ui 6iGier /ou
)entru a avea un fiier nou, se utilizeaz funcia creat, care are
urmtorul prototip"
i/t 1reat 91o/3t 15ar <1aleaJ/ume, i/t mo4;7
unde"
- calea[nume - este un pointer spre un ir de caractere care definete calea
de nume Dpat&[name# a fiierului care se creeaz$
- mod - este un ntreg care poate fi definit prin combinarea cu f3au
8e Ki0if a urmtoarelor drepturi de acces"
S[,1!-% - dreptul de citire$
S[,i1,=! - dreptul de scriere.
3uncia returneaz descriptorul de fiier n caz de succes sau -2 n
caz de eroare.
3uncia creat necesit includerile de fiiere"
jinclude Sio.&T
jinclude SsZs*stat.&T
%K3er:a0ie im8orta/t2" desc&iderea n creare a unui fiier e.istent conduce
la tergerea saU
3iierul creat este e.ploatat n mod te.t DO[=!g=# sau binar
DO[4,5-1k#, dup valoarea variabilei globale [fmode Dimplicit are
valoarea O[=!g=#.
!.emplu"
[fmodeRO[4,5-1k$
dfRcreat Dfa"II3,S.4,5(,S[,i1,=!#$
EB
2.2. De315i4erea u/ui 6iGier e=i3te/t
%esc&iderea unui fiier e.istent se face cu ajutorul funciei open,
care are urmtorul prototip"
i/t o8e/ 91o/3t 15ar <1aleaJ/ume, i/t a11e3;7
unde"
calea[nume - este un pointer spre un ir de caractere care definete calea de
nume a fiierului e.istent$
acces - este un ntreg care este generat prin combinarea pe bii cu ajutorul
operatorului f3au 8e Ki0i f ntre urmtoarele constante"
O[1%O5'k - desc&iderea pentru 1!-%$
O[i1O5'k - desc&iderea pentru i1,=!$
O[1%i1 - desc&iderea pentru 1!-% i i1,=!$
O[-))!5% - pointerul n fiier va fi fi.at pe sfritul de fiier naintea
fiecrei scrieri$
O[=1<5C - dac fiierul e.ist, el este trunc&iat la zero. %repturile de
acces la fiier rmn nesc&imbate$
O[4,5-1k - modul de lucru binar$
O[=!g= - modul de lucru caracter Dimplicit#.
Observaie" cu ajutorul funciei open, fiierul poate fi creat, caz n
care open are prototipul urmtor"
i/t o8e/ 91o/3t 15ar <1aleJ/ume, i/t a11e3, u/3ig/e4 mo4;7
/n acest caz, accesul este o combinaie ntre opiunile prezentate anterior i
urmtoarele"
O[C1!-= - pentru crearea fiierului$
O[!gC' - pentru a returna eroare n caz c fiierul e.ist.
Opiunile pentru parametrul mo4 sunt identice cu cele de la creat.
3iierele care trebuie incluse sunt"
jinclude Sfcntl.&T
jinclude Sio.&T
3uncia open returneaz descriptorul de fiier sau -2 n caz de eroare.
EC
!.emplu"
dfRopenDfC"IIlimbaj[cII3,S.%-=f, O[1%i1#$
Observaie" numrul fiierelor desc&ise la un moment dat este limitat de
obicei la >?.
2.". Citirea 4i/trXu/ 6iGier
Citirea dintr-un fiier e.istent desc&is cu open se face cu ajutorul
funciei read, care are urmtorul prototip"
i/t rea4 9i/t 46, :oi4 <Ku6, u/3ig/e4 lu/gime;7
unde"
df - este descriptorul de fiier returnat de open la desc&iderea
fiierului respectiv$
buf - este pointerul spre zona de memorie n care se pstreaz
nregistrarea citit din fiier$
lungime - este lungimea n octei a nregistrrii citite.
3iierul este interpretat ca o succesiune de octei, ncepnd cu zero.
%up fiecare citire, indicatorul din fiier indic octetul cu care ncepe citirea
urmtoare.

'a desc&idere cu O[1%O5'k sau O[1%i1, indicatorul este
poziionat pe octetul ?.
3uncia read returneaz n caz de succes numrul de octei efectiv
citii, iar n caz de eroare returneaz -2, felul erorii fiind dat de variabila
EE
!O3
Sfrit de fiier
indicator
i
2 > 0 6
e.tern err/o. /n caz de ntlnire a sfritului de fiier DC=1'*L#, funcia
read returneaz valoarea zero.
3iierul standard de intrare are descriptorul de fiier zero.
3uncia read necesit includerea fiierului io.&.
!.emplu. Citirea a >? de octei din fiierul 3,S.%-= aflat in directorul
curent"
dfRopen Df3,S.%-=f, O[1%O5'k#$
nRread Ddf, adr, >?#$
2.#. S1rierea M/trXu/ 6iGier
Scrierea ntr-un fiier desc&is cu open sau cu creat se face cu ajutorul
funciei Jrite, care are ca prototip"
i/t `rite 9i/t 46, :oi4 <Ku6, u/3ig/e4 lu/gime;7
unde"
df - este descriptorul de fiier returnat de funcia open sau creat$
buf - este pointerul spre zona de memorie din care se preia
nregistrarea care se scrie n fiier$
lungime - este numrul de octei de scris.
3uncia returneaz numrul de octei efectiv scrii sau -2 n caz de
eroare.
3uncia Jrite implic includerea fiierului io.&.
3uncia Jrite poate fi folosit pentru scrierea n fiierul standard,
care are dfR2$
!.emplu" Scrierea n fiierul 3,S.%-= din directorul curent a >? de
octei de la adresa adr"
dfRcreat Df3,S.%-=f, S[,i1,=!#$
nRJrite Ddf,adr,>?#$
2??
2.$. PoZi0io/area M/trXu/ 6iGier
/n cazul n care se dorete citirea sau scrierea de la o anumit poziie
dintr-un fiier pe suport magnetic, se utilizeaz funcia lsee_, care are
prototipul"
lo/g l3eea 9i/t 46, lo/g i/1reme/t, i/t origi/e;7
unde"
df - este descriptorul de fiier desc&is$
increment - numrul de octei peste care se va poziiona indicatorul n
fiier, innd cont de parametrul origine$
origine - are una din valorile"
? - incrementul se consider fa de nceputul fiierului$
2 - incrementul se consider fa de poziia curent a indicatorului de
fiier$
> - incrementul se consider fa de sfritul fiierului.
3uncia returneaz deplasamentul rezultat fa de nceputul fiierului sau -2
n caz de eroare. <tilizarea funciei necesit includerea fiierului io.&.
!.emple"
a# poziionarea indicatorului la nceputul fiierului"
lsee_Ddf,?l,?#$
b# poziionarea indicatorului la sfritul fiierului, caz utilizat pentru
adugarea de noi nregistrri n fiier "
lsee_ Ddf, ?l, >#
2.). i/15i4erea u/ui 6iGier
%up terminarea prelucrrii unui fiier, acesta se nc&ide apelnd
funcia close, care are prototipul"
int closeDint df#$
df fiind descriptorul fiierului.
3uncia returneaz zero n caz de succes sau -2 n caz de eroare.
3olosirea funciei necesit includerea fiierului io.&.
2?2
2.!. E=em8lu
/n programul urmtor sunt ilustrate urmtoarele operaii asupra unui
fiier"
- crearea fiierului$
- adugarea de noi nregistrri$
- modificarea unor nregistrri. /n acest caz se poziioneaz indicatorul n
fiier pe nceputul nregistrrii i se scrie noua nregistrare$
- citirea i afiarea coninutului fiierului$
- sortarea fiierului, avnd drept c&eie media, un cmp din nregistrare.
/ntruct numrul nregistrrilor unui fiier este mare, s-au citit iniial
nregistrrile din care s-au e.tras c&eile de sortare, reinndu-se numrul de
ordine al nregistrrilor i se ordoneaz n memoria interna. -poi se obine
fiierul sortat.
/< Programul (1-E=1.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
>i/1lu4e ?io.5@
>i/1lu4e ?61/tl.5@
>i/1lu4e ?3V3F3tat.5@
>i/1lu4e ?8ro1e33.5@
>i/1lu4e ?3t4liK.5@
/< E=em8lu 4e utiliZare a 6iGierelor </
tV8e4e6 3tru1tA
15ar /umeC"2D7
6loat me4ia7
/<alte i/6orma0ii </
B STUDENT7
tV8e4e6 u/io/ A
STUDENT 3tu47
15ar 3tC3iZeo69STUDENT;D7
B .UF7
tV8e4e6 3tru1t A
i/t /r7
6loat me47
B E(E'ENT7
2?>
:oi4 3ortare915ar /umeJ6i3CD,15ar /umeJ6i3J3ortatCD;
A
E(E'ENT el,tC1--D7
i/t a,c,/,i,461,4627
.UF 3tu7
cN-7
461No8e/9/umeJ6i3,%JRD%N(k;7
`5ile 9rea49461,3tu.3t,3iZeo69STUDENT;;@-;
A
tCcD./rNc7
tCcD.me4N3tu.3tu4.me4ia7
cNcP17
B7
/< Sortarea taKloului t 4u82 me4ie </
/NcX17/< Eleme/tele taKloului t 3u/t -,1,2,...,/ </
cN-7
4o
A
aN17cNcP17 /<aNTRUE</
6or9iN-7i?N/Xc7iPP;
i6 9tCiD.me4 @ tCiP1D.me4;
A
elNtCiD7tCiDNtCiP1D7tCiP1DNel7
aN-7/<aNFA(SE </
B7
B
`5ile9aNN-;7
1lo3e9461;7
/<Crearea 6iGierului 3ortat </
462N1reat9/umeJ6i3J3ortat,SJIlRITE^SJIREAD;7
461No8e/9/umeJ6i3,%JRD%N(k;7
6or9iN-7i?N/7iPP;
A
l3eea9461,9lo/g;9tCiD./r < 3iZeo69STUDENT;;,-;7
rea49461,3tu.3t,3iZeo69STUDENT;;7
`rite9462,3tu.3t,3iZeo69STUDENT;;7
B7
1lo3e9461;7
2?0
1lo3e9462;7
B
:oi4 a6i3are9 15ar /umeJ6i3CD;
A
.UF 3tu7
i/t c,4617
cN-7
461No8e/9/umeJ6i3,%JRD%N(k;7
`5ile 9rea49461,3tu.3t,3iZeo69STUDENT;;@-;
A
8ri/t69bF/O4 OX"23 O!.26b, c, 3tu.3tu4./ume,
3tu.3tu4.me4ia;7
cNcP17
B7
1lo3e9461;7
B
:oi4 mai/9;
A
i/t i,/,m,4617lo/g l7
15ar 157
.UF 3tu7
15ar /umeJ6i3C$-DNb1QFFig/atFF(imKacJCFFgru8a.4atb7
15ar /umeJ6i3J3ortatC$-DNb1QFFig/atFF(imKacJCFFgru8a3ort.4atb7
8ri/t69bF/Nr.3tu4e/tilor 4e i/tro4u3 /Nb;7
31a/69bO4b,I/;7
/<1rearea 6iGierului </
i6 99461N1reat9/umeJ6i3,SJIlRITE^SJIREAD;;NNX1;
A
8ri/t69bNu 3e 8oate 1rea 6iGierulF/b;7
e=it91;7
B
/< I/tro4u1erea 4atelor 4e38re 3tu4e/ti </
6or9iN17i?N/7iPP;
A
8ri/t69bF/Numele 3tu4e/tuluiQ b;7
31a/69bO<1b;7
2?6
get393tu.3tu4./ume;7
8ri/t69bF/'e4iaNb;7
31a/69bO6b,I3tu.3tu4.me4ia;7
`rite9461,3tu.3t,3iZeo69STUDENT;;7
B7
1lo3e9461;7 /< i/15i4erea 6iGierului </
/<A42ugarea 4e /oi arti1ole i/ 6iGier </
8ri/t69bF/Nr.3tu4e/tilor 4e a4augat mNb;7
31a/69bO4b,Im;7
461No8e/9/umeJ6i3,%JRDlR;7
l3eea9461,-l,2;7
6or9iN17i?Nm7iPP;
A
8ri/t69bF/Numele 3tu4e/tului a42ugatQ b;7
31a/69bO<1b;7
get393tu.3tu4./ume;7
8ri/t69bF/'e4iaNb;7
31a/69bO6b,I3tu.3tu4.me4ia;7
`rite9461,3tu.3t,3iZeo69STUDENT;;7
B7
1lo3e9461;7 /<i/15i4erea 6iGierului </
8ri/t69bF/ FIIERU( DUPA CREAREF/b;7
a6i3are9/umeJ6i3;7
/< 'o4i6i1area 4atelor 4i/ 6iGier </
8ri/t69bF/ 'o4i6i1ati_ DAND/4 NUN alt 1ara1ter b;7
31a/69bO<1O1b,I15;7
461No8e/9/umeJ6i3,%JRDlR;7
`5ile9915NNdDd;^^915NNd4d;;
A
8ri/t69bNr.4e or4i/e al 3tu4e/tului Nb;7
31a/69bO4O<1b,Ii;7
lNl3eea9461,9lo/g;93iZeo69STUDENT; <i;,-;7
8ri/t69b4e8lNOl4 8e/tru iNO4F/b,l,i;7
rea49461,3tu.3t,3iZeo69STUDENT;;7
8ri/t69bF/Numele :e15i e3teQO3F/b,3tu.3tu4./ume;7
8ri/t69bF/Numele mo4i6i1atQb;7
get393tu.3tu4./ume;7
8ri/t69bF/ 'e4ia :e15e e3teQ O6b,3tu.3tu4.me4ia;7
2?7
8ri/t69bF/'e4ia mo4i6i1at2Nb;7
31a/69bO6b,I3tu.3tu4.me4ia;7
lNl3eea9461,9lo/g;93iZeo69STUDENT; <i;,-;7
8ri/t69b4e8lNOl4 8e/tru iNO4F/b,l,i;7
`rite9461,3tu.3t,3iZeo69STUDENT;;7
8ri/t69bF/ 'ai mo4i6i1ati_ DAND/4 NUNalt 1ara1ter b;7
31a/69bO<1O1b,I15;7
B
1lo3e9461;7
8ri/t69bF/C%NINUTU( FISIERU(UI NES%RTATF/b;7
a6i3are9/umeJ6i3;7
get159;7
8ri/t69bF/C%NINUTU( FISIERU(UI S%RTATF/b;7
3ortare9/umeJ6i3,/umeJ6i3J3ortat;7
a6i3are9/umeJ6i3J3ortat;7
get159;7
B
". 'er3ul lu1rarii
0.2. Se va e.ecuta i analiza programul '2?!.2.cpp
0.>. Se citete de la tastatur un te.t care se scrie ntr-un fiier
fte.t.datf. S se afieze apoi coninutul fiierului, fiecare linie fiind
precedat de numrul de ordine al ei.
0.0. %e la tastatur se citesc partea real i partea imaginar pentru n
numere comple.e. S se creeze un fiier care conine numerele comple.e
citite, fiecare numr avnd partea real, partea imaginar, modulul i
argumentul su.
0.6. %ou firme i pstreaz informaiile referitoare la stocul de
mrfuri Dcod produs, denumire, cantitate, pre unitar# n fiierele
fmarfa2.datf i respectiv fmarfa>.datf, ordonate cresctor dup cod. )rin
fuzionarea celor dou firme, rezult un stoc comun care trebuie memorat n
fiierul fmarfa.datf, ordonat dup cod.
a# S se creeze fiierele iniiale, pe baza datelor introduse de la
tastatur i apoi s se creeze fiierul de stoc comun fmarfa.datf )entru
mrfuri cu cod comun, se consider c denumirea i preul unitar corespund.
2?A
b# 3iierul fmarfa.datf se va parcurge secvenial, tiprind pentru
fiecare component denumirea i cantitatea.
c#)entru o component dorit dat prin numrul de ordine, se va
modifica direct preul su unitar.
0.7. S se scrie programul pentru concatenarea a dou sau mai multe
fiiere ce conin numere reale. Se va tipri informaia din fiierul rezultat.
2?B
Lucrarea de laborator nr. 11.
PRE(UCRAREA FIIERE(%R
DE CTRE NI*E(U( SUPERI%R A( S.&.F.
1. Co/0i/utul lu1r2rii
/n lucrare sunt prezentate funciile de prelucrare a fiierelor de nivel
superior, utiliznd structuri speciale de tip 3,'!. )rincipalele operaii care
se pot efectua asupra fiierelor la acest nivel sunt" crearea, desc&iderea,
citirea*scrierea unui caracter sau a unui ir de caractere, citirea*scrierea
binar a unui numr de articole, poziionarea ntr-un fiier, nc&iderea unui
fiier, vidarea zonei tampon a unui fiier.
2. Co/3i4era0ii teoreti1e
'a acest nivel, fiecrui fiier i se ataeaz un pointer la o structur de
tip 3,'!"
FI(E <87
=ipul 3,'! i toate prototipurile funciilor de prelucrare se gsesc n
fiierul 3t4io.5
2.1. De315i4erea u/ui 6iGier
%esc&iderea unui fiier e.istent, precum i crearea unui fiier nou se
face cu ajutorul funciei 6o8e/, care are urmtorul prototip"
FI(E <6o8e/91o/3t 15ar <1aleJ/ume, 1o/3t 15ar <mo4;7
unde"
o cale[nume M este un pointer spre un ir de caractere care definete
calea de nume a fiierului$
2?C
o mod M este un pointer spre un ir de caractere care definete modul
de prelucrare a fiierului desc&is, dup cum urmeaz"
8r( - desc&idere n citire Dread#$
8J( - desc&idere n scriere DJrite#$
8a( - desc&idere pentru adugare Dappend#$
8r+( - desc&idere n citire*scriere Dmodificare#$
8rb( - citire binar$
8Jb( - scriere binar$
8r+b( - citire*scriere binar$
lJ+b( - citire*scriere binar$
8ab( M adugare de nregistrri n modul binar.
Coninutul unui fiier e.istent desc&is n scriere lJ( , va fi ters, el
considerndu-se desc&is n creare.
%ac fiierul este desc&is n modul la(, se vor putea aduga noi
nregistrri dup ultima nregistrare e.istent n fiier.
<n fiier ine.istent desc&is n modul lJ( sau la( va fi creat.
3uncia 6o8e/ returneaz un pointer spre tipul 3,'! n caz de succes
sau pointerul nul n caz de eroare.
3iierele standard de ,*! sunt desc&ise automat la lansarea
programului$ pentru ele, pointerii spre tipul 3,'! sunt"
3t4i/ M intrare standard$
3t4out M ieire standard$
3t4err M ieire standard erori$
3t48r/ M ieire paralel Dimprimant#$
3t4au= M comunicaie serial.
2.2. Prelu1rarea 8e 1ara1tere a u/ui 6iGier
<n fiier poate fi prelucrat, n citire sau scriere, caracter cu caracter,
folosind funciile get1 i 8ut1, ale cror prototipuri sunt"
i/t get1 9FI(E <86;7
i/t 8ut1 9i/t 15, FI(E <86;7
n care"
pf este pointerul spre tipul 3,'! returnat de funcia 6o8e/$
c& este codul -SC,, al caracterului care se scrie.
2?E
3uncia get1 returneaz codul -SC,, al caracterului scris. /n caz de
eroare ambele returneaz M2.
%e e.emplu, secvena de copiere a intrrii standard la ieirea standard
este"
`5ile 991Nget193t4i/;;[NE%F;
8ut191, 3t4out;7
2.". Citirea/31rierea u/ui Gir 4e 1ara1tere
Citirea dintr-un fiier a unui ir de caractere se face cu ajutorul
funciei 6get3, care are prototipul"
15ar <6get3915ar <3, i/t /, FI(E <86;7
n care"
s M este pointerul spre zona din memorie unde are loc pstrarea
irului de caractere$
n M este numrul de octei a zonei n care se citesc caracterele din
fiier. Citirea se oprete la ntlnirea caracterului KInH sau citirea a cel mult
n-2 caractere. <ltimul caracter n ambele cazuri va fi KI?H.
pf M este pointerul spre tipul 3,'!.
3uncia returneaz valoarea pointerului s. 'a ntlnirea sfritului de
fiier funcia returneaz valoarea zero.
Scrierea unui ir de caractere Dinclusiv caracterul lI?(# se face cu
funcia 68ut3, care are prototipul"

i/t 68ut3 91o/3t 15ar <3, 6ile <86;7
unde s este pointerul spre nceputul zonei de memorie care conine irul de
caractere care se scrie n fiier.
3uncia 68ut3 returneaz codul -SC,, al ultimului caracter scris n
fiier sau M2 n caz de eroare.
2.#. Citirea/31rierea 1u 6ormat
Citirea*scrierea cu format se poate face cu ajutorul funciilor
631a/6/68ri/t6, similare cu funciile 331a/6/38ri/t6, prezentate n lucrarea
22?
'2., deosebirea constnd n faptul c n cadrul funciilor 331a/6/38ri/t6 se
precizeaz ca prim parametru pointerul zonei unde se pstreaz irul de
caractere, iar n cadrul funciilor 631a/6/68ri/t6 se precizeaz ca prim
parametru pointerul spre tipul 3,'!, aa cum reiese din prototipurile lor"
i/t 631a/69FI(E <86, 1o/3t 15ar <6ormat,Ca4re3a,LD;7
i/t 68ri/t69FI(E <86, 1o/3t 15ar <6ormat,Ca4re3a,LD;7
3uncia 631a/6 returneaz numrul de cmpuri citite corect$ la
ntlnirea sfritului de fiier funcia returneaz valoarea !O3.
3uncia 68ri/t6 returneaz numrul caracterelor scrise n fiier sau M2
n caz de eroare.
2.$. *i4area Zo/ei tam8o/ a u/ui 6iGier
;idarea zonei tampon a unui fiier se face cu ajutorul funciei fflus&,
avnd prototipul urmtor"
i/t 66lu359FI(E <86;7
unde pf este pointerul spre tipul file.
%ac fiierul e desc&is n scriere, coninutul zonei tampon se scrie n
fiierul respectiv.
%ac fiierul e desc&is n citire, caracterele necitite se pierd.
3uncia returneaz zero n caz de succes i M2 n caz de eroare.
2.). PoZi0io/area M/trXu/ 6iGier
)oziionarea ntr-un fiier pe un anumit octet se poate face cu ajutorul
funciei 63eea, care are prototipul"
i/t 63eea 9FI(E <86, lo/g i/1reme/t, i/t origi/e;7
-ceast funcie este similar cu l3eea, deosebirea constnd n faptul
c la 63eea se precizeaz pointerul spre tipul 3,'!, iar la l3eea se precizeaz
descriptorul de fiier.
)oziia curent a indicatorului intr-un fiier dat prin deplasamentul n
octei fa de nceputul su este returnat de ctre funcia 6tell de prototip"
222
lo/g 6tell9FI(E <86;7
2.!. Prelu1rarea 6iGierelor Ki/are
/n acest caz, fiierele sunt considerate ca o succesiune de nregistrri,
fiecare nregistrare coninnd un numr de articole, ca n figura urmtoare"
.......

nregistrare nregistrare
-rticolele sunt de lungime fi.. <n articol este o dat de un tip
predefinit sau definit de utilizator.
Citirea, respectiv scrierea unei nregistrri se face cu ajutorul funciilor
6rea4 i 6`rite, care au prototipurile"
u/3ig/e4 6rea49:oi4 <Ku6, u/3ig/e4 4im, u/3ig/e4 /rart, FI(E <86;7
u/3ig/e4 6`rite9:oi4 <Ku6, u/3ig/e4 4im, u/3ig/e4 /rart, FI(E <86;7
unde"
buf M este pointerul spre zona tampon care conine articolele
citite, respectiv cele care se scriu$
dim M este dimensiunea unui articol n octei$
nrart M numrul articolelor dintr-o nregistrare$
pf M este pointerul spre tipul 3,'!.
3unciile returneaz numrul articolelor citite, respectiv scrise n caz
de succes, sau M2 n caz de eroare.
2.+. i/15i4erea u/ui 6iGier
/nc&iderea unui fiier se realizeaz cu ajutorul funciei 61lo3e, care are
prototipul"
i/t 61lo3e9FI(E <86;7
unde pf este pointerul spre tipul 3,'! returnat de 6o8e/.
3uncia returneaz ? n caz de succes i M2 n caz de eroare.
22>
-1=,CO' -1=,CO' -1=,CO'
-1=,CO' -1=,CO'
!O3 -1=,CO'
2.9. tergerea u/ui 6iGier
<n fiier nc&is poate fi ters cu ajutorul funciei u/li/a, care are
prototipul"
i/t u/li/a 91o/3t 15ar <1aleJ/ume;7
unde cale[nume este un pointer spre un ir de caractere care red calea de
nume a fiierului.
3uncia returneaz ? n caz de succes i M2 in caz de eroare.
2.1-. E=em8le
E=em8lul 1
/n programul '22!.2.cpp este creat un fiier caracter cu caracter,
citite de la tastatur. -poi este ilustrat modul de adugare la sfritul
fiierului ,de data aceasta, a unor iruri de caractere. 'a sfrit fiierul este
listat linie cu linie, cu numerotarea lor.
/< Programul (11E=1.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
/< Programul ilu3treaZ2 8relu1rarea 6i3ierului
8e 1ara1tere 3i 3iruri 4e 1ara1tere </
:oi4 mai/9:oi4;
A
15ar 15,3C1--D,/umeJ6i3C$-DNb1QFF6i31.t=tb7
i/t i7
FI(E <867
/< 1rearea 6iGierului7 31rierea 1ara1terelor i/1lu3i:
d//di/tro4u3e 4e la ta3tatura </
86N6o8e/9/umeJ6i3,b`b;7
8ri/t69bF/I/tro4u1eti te=tul[F/b;7
`5ile 9915Nget193t4i/;;[NE%F;
A
8ut1915,86;7
B
61lo3e986;7
/<A4augarea 4e 3iruri 4e 1ara1tere</
220
86N6o8e/9/umeJ6i3,brPb;7
63eea986,-l,2;7
8ri/t69bF/INTR%DUCETI 3irurile 4e 1ara1tere 1are 3e
a4auga termi/ate 1u ENTER F/b;7
`5ile96get393,1--,3t4i/;[N915ar<;-;
A
68ut393,86;7
B
61lo3e986;7
/<A6i3area 1o/ti/utului </
8ri/t69bF/C%NTINUTU( FISIERU(UI 1u NU'ER%TAREA
(INII(%RF/b;7
iN-7
86N6o8e/9/umeJ6i3,brb;7
`5ile96get393,1--,86;[N915ar <;-;
A8ri/t69bO4 O3b,i,3;7
iPP7
B
61lo3e986;7
get159;7
u/li/a9/umeJ6i3;7
B
E=em8lul 2
)rogramul '22!.>.cpp ilustreaz modul de prelucrare binar a unui
fiier. )rogramul conine crearea fiierului i afiarea coninutului
su.
/< Programul (11E=2.188 </
>i/1lu4e ?3t4io.5@
>i/1lu4e ?1o/io.5@
/< Programul ilu3treaZa 8relu1rarea Ki/ara a u/ui 6i3ier </
tV8e4e6 3tru1t A
15ar /umeC#-D7
lo/g 3uma7
/<alte 1om8o/e/te </
B ARTIC%(7
:oi4 a6i3are915ar </umeJ6i3;
226
A
FI(E <867
ARTIC%( Ku67
i/t i7
86N6o8e/9/umeJ6i3,brKb;7
8ri/t69bF/NR.CRT. SU'A NU'E(EXPRENU'E(EF/b;7
iN-7
`5ile96rea49IKu6,3iZeo69ARTIC%(;,1,86;@-;
A
8ri/t69bF/O)4 O1-l4 OX#-3b,i,Ku6.3uma,Ku6./ume;7
iPP7
B
61lo3e986;7
B
:oi4 mai/9:oi4;
A
FI(E <867
ARTIC%( Ku67
i/t i,/7
15ar 3C#-D,/umeJ6i3C#-DNb1QFF6i3.4atb7
/<Crearea 6i3ierului </
8ri/t69bF/I/tro4u1eti /r 8er3oa/elor /Nb;7
31a/69bO4b,I/;7
86N6o8e/9/umeJ6i3,b`Kb;7
6or9iN17i?N/7iPP;
A
66lu3593t4i/;7
8ri/t69bNumele 8er3oa/eiQ b;7
6get39Ku6./ume,#-,3t4i/;7
8ri/t69bSuma N b;7
31a/69b Ol4b,IKu6.3uma;7
6`rite9IKu6,3iZeo69ARTIC%(;,1,86;7
B
61lo3e986;7
8ri/t69bF/C%NTINUTU( FISIERU(UIF/b;7
a6i3are9/umeJ6i3;7
get159;7
B
227
". 'er3ul lu1r2rii
e 0.2. Se vor analiza i e.ecuta e.emplele '22!.2.cpp i '22!.>.cpp.
f
0.> S se creeze un fiier care s conin produsele unui magazin.
<n produs este reprezentat printr-o structur ce conine codul produsului,
denumirea, unitatea de msur, cantitatea, preul unitar.
)lecnd de la acest fiier, s se obin un fiier sortat dup cod.
0.0. -vnd creat fiierul sortat la punctul 0.>. se vor scrie funcii de
intrare i de ieire a produselor magazinului
0.6. Se va scrie un program pentru admiterea la facultate n anul ,.
)rogramul va cuprinde crearea fiierului cu candidaii nscrii. /n final
trebuie s se obin fiierele cu candidaii admii pe secii i cei respini pe
baza mediei obinute DDbacalaureat + > O test[matem# * 0.?#.
0.7. Se consider un director de fiiere. 3iecare intrare n director
conine numele DC caractere# i e.tensia D0 caractere# fiierului, numrul de
blocuri alocate pentru el, adresa primului bloc alocat, data i ora ultimei
actualizri. Dzi, luna, an, ora, minut, secunda#.
Se cere"
a# crearea directorului de fiiere$
b# afiarea directorului n ordine alfabetic a numelor
fiierelor$
c# afiarea directorului n ordine cresctoare a datei i orei
ultimei actualizri.
22A
22B
.I.(I%&RAFIE
1. *.Cri3tea, E.mali3Z, I.Ata/a3iu, *.Iorga. Te5/i1i 4e 8rogramare.
E4.Teora, .u1ureGti, 199$.
2. *.D24Srlat, I.Ig/at, '.To8a/, (.Petre31u. Programarea
1al1ulatoarelor. Stru1turi 4e 4ate Gi algoritmi. (itogra6ia U.T.C.N.,
199$.

". I.Ig/at, *,D24Srlat, '.To8a/, (.Petre31u.. TurKo Pa31al !.-.
Fu/4ame/te Gi a8li1a0ii. E4.AlKa3tr2, ClucXNa8o1a, 199).

#. I.Ig/at, *.D24Srlat, I.Ru3, A.ma13o. Programarea 3i3temati12 M/
TurKo Pa31al ).-. E4. C2r0ii 4e Stii/02, ClucXNa8o1a, 1992.
$. (.(i:o:315i, j.&eorge31u. A/aliZa Gi 3i/teZa algoritmilor. E4.
E/1i1lo8e4i12, .u1ureGti, 19+).

). (.Negre31u. (imKacele C Gi CPP 8e/tru M/1e82tori, *ol. 1 Gi 2. E4.
'i1roi/6ormati1a, ClucJNa8o1a, 199# 9ree4itare 2---;.
!. (.D.SerK2/a0i, *.Cri3tea, F.'ol4o:ea/u, *.Iorga. Programarea
3i3temati12 M/ limKacele Pa31al Gi Fortra/. E4.Te5/i12, .u1ureGti, 19+#.
+. N.lirt5. Algorit5m3 P Data Stru1ture3 N Program3.Pre/ti1e jall,
19!+.

22C

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