Sunteți pe pagina 1din 12

Functii (2)

1. Mecanisme de transfer ale parametrilor.


n limbajele de programare exist dou mecanisme principale de transfer ale parametrilor:
transferul prin valoare i transferul prin referin.
n C parametrii se transfer numai prin valoare- aceasta nseamn c parametrii actuali sunt
copiai n zona de memorie rezervat pentru parametrii formali. Modificarea parametrilor formali se va
reflecta asupra copiilor parametrilor actuali i nu afecteaz parametrii actuali adic parametrii actuali nu
pot fi modificai !
!stfel funcia:
void schimb(int a, int b)
{ int c=a;
a=b;
b=c;
}
nu produce intersc"imbul parametrilor actuali x i y din funcia main():
void main(void)
{ int x=10,y=15;
printf(%d\t%d\n, x, y);
schimb(x, y);
printf(%d\t%d\n, x, y);
}
#e afieaz:
10 15
10 15
#tiva funciei apelante #tiva funciei apelate
x
y
a 1
3 c
2
b
n cazul transferului prin referin pentru modificarea parametrilor actuali funciei i se transmit
nu valorile parametrilor actuali ci adresele lor.
$orma corect a funciei schimb() obinut prin simularea transferului prin referin cu
pointeri este:
void schimb(int !a, int !b)
{ int c;
c = !a;
!a = !b;
!b = c;
}
void main(void)
{ int x=10,y=15;
%&
%'
%&
%'
printf(%d\t%d\n, x, y);
schimb("x, "y);
printf(%d\t%d\n, x, y);
}
#tiva funciei apelante #tiva funciei apelate
ntreg pointer
x a
C ntreg
pointer
y b
ntreg
(n consecin pentru a transmite un rezultat prin lista de parametri )adic pentru a modifica un
parametru* va trebui s declarm parametrul formal ca pointer.
+ablourile sunt transmise ntotdeauna prin referin adic un parametru formal tablou reprezint o
adres )un pointer* i anume adresa de nceput a tabloului.
n ,-- a fost introdus transferul parametrilor prin referin ceea ce simplific n mod
considerabil scrierea. .n parametru formal transmis prin referin este specificat prin: tip". $uncia
schimb() se definete n acest caz astfel:
void schimb(int "a, int "b)
{ int c;
c = a;
a = b;
b = c;
}
void main(void)
{ int x=10,y=15;
printf(%d\t%d\n, x, y);
schimb(x, y);
printf(%d\t%d\n, x, y);
}
2. Funcii care ntorc pointeri.
$uncia strcpy() ntoarce adresa irului destinaie:
char !strcpy(char !d, char !s)
{ char !p=d;
#hi$% (!p&&=!s&&)
;
r%t'rn d;
}
!ceasta ne permite ca simultan cu copierea s calculm lungimea irului copiat:
n=str$%n((strcpy)d,s));
/ac funcia ntoarce adresa unei variabile locale atunci aceasta trebuie s fie n mod obligatoriu
n clasa static.
/e asemeni nu trebuiesc ntoarse adrese ale unor parametri deoarece acetia sunt transmii prin
stiv.
3. Pointeri la funcii.
0umele unei funcii reprezint adresa de memorie la care ncepe funcia. 0umele functiei este de
fapt un pointer la funcie.
#e poate stabili o coresponden ntre variabile i funcii prin intermediul pointerilor la funcii. ,a
i variabilele aceti pointeri:
pot primi ca valori funcii1
pot fi transmii ca parametrii altor funcii
pot fi intori ca rezultate de ctre funcii
2a declararea unui pointer ctre o funcie trebuiesc precizate toate informaiile despre funcie
adic:
tipul funciei
numrul de parametri
tipul parametrilor
care ne vor permite s apelm indirect funcia prin intermediul pointerului.
/eclararea unui pointer la o funcie se face prin:
tip (!pf)($ist()param%tri)forma$i);
/ac nu s-ar folosi paranteze ar fi vorba de o funcie care ntoarce un pointer.
!pelul unei funcii prin intermediul unui pointer are forma:
(!pf)($ist()param%tri)act'a$i);
3ste permis i apelul fr indirectare:
pf($ist()param%tri)act'a$i);
3ste posibil s creem un tablou de pointeri la funcii1 apelarea funciilor n acest caz se face prin
referirea la componentele tabloului.
/e exemplu iniializarea unui tablou cu pointeri cu funciile matematice uzuale se face prin:
do'b$% (!tabf'n*+)(do'b$%) = {sin, cos, tan, %xp, $o,};
4entru a calcula rdcina de ordinul 5 din % este suficient atribuirea:
y = (!tabf'n*-+)(0./);
0umele unei funcii fiind un pointer ctre funcie poate fi folosit ca parametru n apeluri de
funcii.
n acest mod putem transmite n lista de parametri a unei funcii 5 numele altei funcii.
/e exemplu o funcie care calculeaz integrala definit:

=
b
a
dx ) x ( f 0
va avea prototipul:
do'b$% int%,ra$a(do'b$%, do'b$%, do'b$%(!)(do'b$%));
Definii o funcie pentru calculul unei integrale definite prin metoda trapezelor,cu un numr
fixat n de puncte de diviziune:
Folosii apoi aceast funcie pentru calculul unei integrale definite cu o precizie dat . Aceast
precizie este atins n momentul n care diferena ntre dou integrale, calculate cu n, respectiv /n
puncte de diviziune este inferioar lui
1inc$'d% 2math.h3
n
a b
h c' ) ih a ( f
/
) b ( f ) a ( f
h dx ) x ( f
b
a
1 n
1 i

+ +
+
=

=
do'b$% sinxp();
do'b$% trap%4(do'b$%,do'b$%,int,do'b$%(!)());
do'b$% a=0.0, b=1.0, %ps=1567;
int 8=10;
void main(void)
{ int n=8;
do'b$% 0n,0/n,vabs;
0n=trap%4(a,b,n,sinxp);
do { n!=/;
0/n=trap%4(a,b,n,sinxp);
if((vabs=0n60/n)20) vabs=6vabs;
0n=0/n;
} #hi$%(vabs 3 %ps);
printf(%7./$f\n, 0/n);
}
do'b$% trap%4(do'b$% a,do'b$% b,int n,do'b$%(!f)())
{ do'b$% h,s;
int i;
h=(b6a)9n;
for(s=0.0,i=1;i2n;i&&)
s&=(!f)(a&i!h);
s&=((!f)(a)&(!f)(b))9/.0;
s!=h;
r%t'rn s;
}
4. Declaratii complexe.
6 declaratie complex este o combinaie de pointeri tablouri si functii. (n acest scop se folosesc
atributele:
() 5 functie
*+ 5 tablou
! - pointer
care pot genera urmatoarele combinatii:
! () 5 funcie ce returneaz un pointer
(!)() 5 pointer la o funcie
! *+ - tablou de pointeri
(!) *+ 5 pointer la tablou
* + *+ 5 tablou bidimensional
3xist i combinaii incorecte, provenite din faptul c n , nu este permis declararea:
- unui tablou de funcii
- unei funcii ce returneaz un tablou.
!cestea sunt:
( ) * + 5 funcie ce returneaz un tablou
* + ( ) 5 tablou de funcii
( ) ( ) 5 funcie ce returneaz o funcie
4entru a interpreta o declaraie complex vom inlocui atributele prin urmtoarele abloane text:
!tribut #ablon text
() functia returneaz
*n+ tablou de n
! pointer la
/escifrarea unei declaraii complexe se face aplic7nd regula dreapta stnga care presupune
urmtorii pai:
se incepe cu identificatorul
se caut n dreapta identificatorului un atribut
dac nu exist se caut n partea stang
se substituie atributul cu ablonul text corespunztor
se continu substituia dreapta-st7nga
se oprete procesul la nt7lnirea tipului datei.
/e exemplu:
int (! a*10+) ( );
tablou de %&
pointeri la
funcii ce returneaz int
do'b$% (!(!pf)())*-+*:+;
pointer la
o funcie ce returneaz un pointer
la un tablou cu 8 linii si 9 coloane de do'b$%
(n loc de a construi declaraii complexe se prefer pentru creterea claritii s definim progresiv
noi tipuri folosind typ%d%f. :eamintim c declaraia typ%d%f asociaz un nume unei definiri de tip:
typ%d%f 2d%finir% d% tip3 id%ntificator;
3xemple:
typ%d%f char !;0<; 9!tip'$ ;0<=sir d% caract%r%!9
typ%d%f f$oat =5>?@<*10+;9!tip'$ =5>?@<=tab$o' d% 10f$oat!9
typ%d%f f$oat AB?<0>5*10+*10+;9!tip'$ AB?<0>5= tab$o' d%
10x10 f$oat !9
typ%d%f do'b$% (!CDBE<E)(do'b$%);9!tip'$ CDBE<E=point%r $a
f'ncti% d% ar,'m%nt do'b$% si r%4'$tat do'b$% !9
;om putea folosi aceste tipuri noi n definirea de variabile:
;0< s1, s/;
=5>?@< b, x;
AB?<0>5 a;
CDBE<E pf1;
Talouri !i pointeri (2).
1. "locarea dinamic# a memoriei.
.tilizatorul poate solicita n timpul execuiei programului alocarea unei zone de memorie.
!ceast zon de memorie poate fi eliberat n momentul n care nu mai este necesar.
!locarea i eliberarea de memorie la execuie permite gestionarea optim a memoriei.
<iblioteca standard ofer 9 funcii av7nd prototipurile n 2a$$oc.h3 i 2std$ib.h3.
!cestea sunt:
void !ma$$oc('nsi,n%d n);
$uncia aloc un bloc de memorie de n octei. $uncia ntoarce un pointer la nceputul zonei
alocate. n caz c cererea de alocare nu poate fi satisfcut funcia returneaz 8FGG.
void !ca$$oc('nsi,n%d n%$%m, 'nsi,n%d dim);
!loc n%$%m!dim octei de memorie (n%$%m blocuri formate din dim octei fiecare*. ntoarce
un pointer la nceputul zonei alocate sau 8FGG.Memoria alocat este iniializat cu zerouri.
void fr%%(void !p);
$uncia elibereaz o zon de memorie indicat de p, alocat n prealabil prin ma$$oc() sau
ca$$oc().
void !r%a$$oc(void !p, 'nsi,n%d dim);
Modific dimensiunea spaiului alocat prin pointerul p, la dim. $uncia ntoarce adresa zonei de
memorie realocate iar pointerul p va adresa zona realocat.
dac dimensiunea blocului realocat este mai mic dec7t a blocului iniial, p nu se modific iar funcia
va ntoarce valoarea lui p.
dac dim==0 zona adresat de p va fi eliberat i funcia ntoarce 8FGG.
dac p==8FGG, funcia aloc o zon de dim octei )ec"ivalent cu ma$$oc()).
$unciile de alocare ntorc pointeri generici (void!) la zone de memorie n timp ce utilizatorul
aloc memorie ce pstreaz informaii de un anumit tip. 4entru a putea accesa memoria alocat indirect
prin intermediul pointerului acesta va trebui s fie un pointer cu tip ceea ce impune conversia explicit
)prin cast* a pointerului ntors de funcia de alocare ntr-un pointer cu tip.
/e exemplu pentru a aloca un vector de ntregi av7nd n elemente vom folosi:
int !pH
if (p=(int!)ma$$oc(n!si4%of(int))==8FGG) {
printf(A%mori% ins'fici%nta\n);
%xit(1);
}
$unciile care ntorc pointeri sunt utile n alocarea de spaiu pentru variabile dinamice.
;ariabilele dinamice sunt alocate n momentul execuiei nu au nume i sunt accesate prin pointeri.
.n constructor este o funcie care aloc spaiu n mod dinamic pentru o variabil i ntoarce un
pointer la spaiul rezervat.
.n destructor este o funcie care primete un pointer la o zon alocat dinamic i elibereaz
aceast zon.
6 funcie util strd'p() 5 salveaz un ir de caractere ntr-o zon alocat dinamic i ntoarce
un pointer la acea zon sau 8FGG.
char !strd'p(char !s)
{ char !p;
p=(char!) ma$$oc(str$%n(s)&1);
if (pI=8FGG)
strcpy(p,s);
r%t'rn p;
}
$xemplul 2%& Citii de la intrarea standard un ir de caractere de lungime necunoscut ntrun vector
alocat dinamic. Alocarea de memorie se va face progresiv, n incremente de lungime 08>, dup citirea a
08> caractere se face o realocare.
char !citir%()
{ char !p, !J;
int n;
'nsi,n%d dim=08>;
p=J=(char!)ma$$oc(dim);
for(n=1; (!p=,%tchar())I=K\nK ""!pI=5@D; n&&) {
if(n%08>==0) {
dim&=08>;
p=J=r%a$$oc(J,dim);
p&=n;
contin'%;
}
p&&;
}
!p=K\0K;
r%t'rn r%a$$oc(J,n);
}
n ,-- alocarea dinamic se face mai simplu i mai sigur folosind operatorii n%# i d%$%t%.
6peratorul n%# permite alocarea de memorie n "eap. 3l se folosete ntr-una din formele:
tip !p, !J, !r;
p=n%# tip; 99r%4%rva in h%ap o 4ona d% si4%of(tip) oct%ti
J=n%# tip(%xpr%si%);99ac%$asi %f%ct c' initia$i4ar% c' va$.%xpr%si%i
r=n%# tip*%xpint+; 99r%4%rva o 4ona n%initia$i4ata d%
99 %xpint!si4%of(tip) oct%ti
3liberarea memoriei alocate se face prin:
d%$%t% p;
d%$%t% *+ r; 99%$ib%r%a4a m%moria a$ocata p%ntr' tab$o'
2. Pointeri la pointeri.
!dresa unei variabile pointer va fi de tip pointer ctre pointer )pointer dublu*
# considerm definiiile:
int x=10, !px="x, !!ppx="px;
care corespund situaiei:
ppx px x
pentru a obine valoarea %& putem folosi x, !px sau !!ppx.
6 funcie care intersc"imb doi pointeri are forma:
void pschimb(int !!pa, int !!pb)
{ int !pt%mp;
pt%mp=!pa;
!pa=!pb;
!pb=pt%mp;
}
cu apelul:
int !px, !py;
pschimb("px, "py);
/eoarece un tablou este accesat printr=un pointer tablourile de pointeri pot fi accesate cu pointeri
dubli:
char !a*10+;
char !!pa;
p=a;
$uncia de afiare a irurilor de caractere adresate de un tablou de
pointeri poate fi rescris ca:
void afisar%(char !!tp, int n)
{ #hi$%(n66)
printf(%s\n,!tp&&);
}
3. Talouri multidimensionale.
%&
.n tablou cu mai multe dimensiuni se definete prin:
tip n'm%*d1+*d/+L*dn+;
:eferirile la elemente unui tablou cu mai multe dimensiuni se fac folosind variabile indexate de
forma: n'm%*i1+*i/+L*in+, n care 02=iM2=dM61
.n tablou cu n dimensiuni poate fi considerat ca un tablou cu o dimensiune av7nd ca elemente
tablouri cu n61 dimensiuni.
3lementele tabloului ocup o zon continu de memorie de:
d1 x d/ xLx dn x si4%of(?) octei.
!dresa n memorie a unui element a*i1+*i/+L*in+ este dat de funcia de alocare:
"a*i1+*i/+L*in+=a&si4%of(?)!*i1!d/!L!dn&i/!d-!L!dn&L&in+
n cazul vectorilor: "a*i+=a&si4%of(?)!i
aceasta ne permite ca la declararea unui parametru vector s nu specificm dimensiunea tabloului.
n cazul matricilor compilatorul le transform n vectori:
"a*i+*N+=a&si4%of(?)!(i!>&N)
>i n cazul matricelor ca i la vectori putem nlocui indexarea prin operaii cu indici i avem:
a*i+*N+ = (!(a&i)*N+=!(!(a&i)&N)
2a transmiterea unui tablou multidimensional ca parametru al unei funcii vom omite numai prima
dimensiune celelalte trebuind s fie specificate.
4rin urmare prototipul unei funcii de afiare a unei matrici av7nd $ linii i c coloane nu poate fi
scris ca:
void matprint(int a*+*+, int $, int c);
ci:
void matprint(int a*+*EABO+, int $, int c);
n care EABO este numrul de coloane al matricii din apel ceeace ne limiteaz utilizarea funciei numai
pentru matrici cu EABO coloane!
;om reda generalitate funciei de afiare a matricilor declar7nd matricea parametru ca un vector
de pointeri:
void matprint(int (!a)*+, int $, int c)
{ int i,N;
for(i=0;i2$;i&&)
{ for (N=0;N2c;N&&)
printf(%d,((int!)a)*i!n&N+;
printf(\n);
}
}
4roblema transmiterii matricilor ca parametri poate fi evitat dac le linearizm transform7ndu-le
n vectori. n acest caz n locul folosirii a doi indici i i j vom folosi un singur indice:
M=i!>&N
$xemplul 3'& !criei o funcie pentru nmulirea a dou matrici B i P av"nd mxn, respectiv nxp
elemente.
Matricea produs va avea mxp elemente care vor fi calculate cu relaia:
void matprod(int m,int n, int p,

=
=
1 n
0 M
MN iM iN
P B >
do'b$% B*+, do'b$% P*+, do'b$% >*+)
{ int i, N, M, iN;
for (i=0; i2m; i&&)
for (N=0; N2p; N&&) {
iN=i!p&N;
for (M=0; M2n; M&&)
>*iN+=>*iN+&B*i!n&M+!P*M!p&N+;
}
}
#oluia propus nu ne permite s acceesm elementele matricelor folosind ? indici.
!m putea nlocui matricea printr-un vector de pointeri la liniile matricei.
Exemplul 31: Definii o funcie care aloc dinamic memorie pentru o matrice avnd l linii i c
coloane.
a plin pelem
plin[0] pelem[0][0]
plin[1] pelem[0][1]
plin[2] pelem[1][0]
pelem[1][1]
pelem[2][1] pelem[2][0]

do'b$% !!a$ocmat(int $in, int co$)
{ do'b$% !!p$in;
do'b$% !p%$%m;
int i;
p%$%m=(do'b$%!)ca$$oc($in!co$, si4%of(do'b$%));
if(p%$%m==(do'b$%!)8FGG){
printf(spati' ins'fici%nt\n);
%xit(1);}
p$in=(do'b$%!!)ca$$oc($in, si4%of(do'b$%!);
if(p$in==(do'b$%!!)8FGG){
printf(spati' ins'fici%nt\n);
%xit(1);
}
for (i=0; i2 $in; i&&) {
p$in*i+=p%$%m;
p%$%m&=co$;
}
r%t'rn p$in;
}
4. Proleme propuse.
%. # se construiasc un patrat magic de dimensiune n )cu n impar* adic o matrice cu n linii i n coloane
av7nd elemente numerele naturale 1,/,...,n
/
astfel nc7t sumele elementelor pe linii pe coloane i pe
cele dou diagonale s fie identice.
? .# se stabileasc dac exist elemente comune tuturor liniilor unei matrici date. #e vor afia c7te
asemenea elemente sunt care sunt acestea i apoi se va indica ce poziie ocup acestea n fiecare linie.
8. 6 matrice ptrat a are n linii i n coloane. ,ele dou diagonale determin patru zone notate %?89
care nu includ elementele de pe diagonale.
# se calculeze mediile geometrice ale elementelor pozitive din zonele % i ?. /ac media nu se poate
calcula se va afia un mesaj corespunztor.
# se calculeze procentajul de elemente strict pozitive din zona 8 i numrul de elemente divizibile cu '
din zona 9./ac nu exist elemente cu proprietile cerute se va afia un mesaj corespunztor.
9. #e dau dou matrici B i P ptrate de ordin n. # se stabileasc dac cele dou matrici sunt sau nu
una inversa celeilalte.n acest scop se creeaz matricea produs >=B!P i se verific dac aceasta este
matricea unitate.
'. /intr-o matrice ! av7nd n linii i n coloane s se afieze liniile care reprezint iruri ordonate
cresctor i coloanele care reprezint iruri ordonate descresctor.
@. 6 matrice a are p linii i J coloane. # se creeze o nou matrice b, din matricea a, except7nd liniile i
coloanele la intersecia crora se afl elemente nule.#e vor utiliza doi vectori n care se vor marca
liniile respectiv coloanele care nu vor apare n b.
A. #e consider o matrice B cu p linii i J coloane de elemente reale. # se creeze pe baza acesteia o nou
matrice P av7nd m coloane cu elementele pozitive din B i un vector > cu elementele negative din
matricea B.
B. #e d o matrice B ptrat cu n linii i n coloane. # se fac sc"imbrile de linii i de coloane astfel
nc7t elementele diagonalei principale s fie ordonate cresctor.
C. # se calculeze coeficieni polinomului ,eb7ev de ordinul n, pornind de la relaia de recuren
?
M
(x) = /x?
M61
(x) Q ?
M6/
(x), M 3 /
?
0
(x) = 1, ?
1
(x) = x
obin7nd n prealabil relaii de recuren pentru coeficieni.
10. a* # se defineasc o funcie care calculeaz produsul scalar a doi vectori adic:
b* # se defineasc o procedur care calculeaz produsul diadic a doi vectori:
c* # se scrie un program care citete: un numr ntreg n ( n 2= 10 ), o matrice ptrat B cu n
linii i coloane i doi vectori ' i v cu c7te n componente i calculeaz matricea P, n care:
P = B 6 '.vR9'R.v
%%. # se scrie un program care citete un numr ntreg n i o matrice ptrat B cu n linii i coloane i
afieaz numerele liniilor av7nd n prima poziie elementul minim i n ultima poziie - elementul
maxim din linie. #e vor afia de asemenea numerele coloanelor av7nd n prima poziie elementul maxim i
n ultima elementul minim.
%?. # se realizeze un program care simuleaz jocul DviaaD adic traseaz populaia unei comuniti de
organisme vii prin generarea de nateri i mori timp de S generaii.
i
1 n
0 i
i
?
y x y x

=
=

1 n 1 n 1 1 n 0 1 n
1 n 1 1 1 0 1
1 n 0 1 0 0 0
?
y x y x y x
y x y x y x
y x y x y x
y x

,omunitatea de organisme este descris printr-o matrice cu 8 linii i 8 coloane fiecare element
reprezent7nd o celul care poate fi vid sau poate conine un organism. $iecare celul din reea
except7ndu-le pe cele de la periferie are B vecini.
0aterile i morile de organisme se produc simultan la nceputul unei noi generaii. 2egile
genetice care guverneaz creterea i descreterea populaiei sunt:
fiecare celul vid care este adiacent la 8 celule ocupate va da natere n urmtoarea generaie la un
organism
fiecare celul care conine un organism ce are numai un vecin sau niciunulva muri la nceputul
generaiei urmtoare)datorit izolrii*
orice organism dintr-o celul cu patru sau mai muli vecini n generaia prezent va muri la nceputul
generaiei urmtoare)datorit suprapopulaiei*.
%8. # se scrie n ,:
6 funcie care verific dac dou linii date i i N dintr-o matrice ptrat (nxn) sunt identice sau
nu.
6 funcie care afieaz numerele liniilor i coloanelor dintr-o matrice ptrat unde se afl elemente
nule )zero*.
.n program care citete o matrice ptrat cu maxim 8& de linii i coloane de numere ntregi verific
dac exist sau nu ? linii identice n aceast matrice folosind funcia de la punctul a*. /ac toate
liniile sunt distincte atunci se afieaz poziia tuturor elementelor nule din matrice folosind funcia de
la punctul b*
%9. # se nmuleasc dou matrici utiliz7nd o funcie pentru calculul produsului scalar a doi vectori.
%'. #e d o matrice B av7nd G linii i > coloane (G,>10, >3-) de elemente ntregi.
# se afieze liniile n care exist cel puin trei elemente av7nd minim cinci divizori nebanali. #e va
defini i utiliza o funcie care stabilete c7i divizori nebanali are un numr dat.
%@. # se defineasc o funcie care calculeaz diferena ntre elementul maxim i elementul minim ale
unei linii date dintr-o matrice.
# se scrie un program care citeste: numerele naturale $ i c ($,c 10), valoarea real eps i
matricea B av7nd $ x c elemente i afieaz liniile din matrice care au diferena ntre extreme
inferioar valorii %ps.
%A. (ntr-o matrice dat B cu G linii i > coloane s se permute circular dreapta fiecare linie i cu i
pozitii. #e va utiliza o funcie care permut circular dreapta cu o poziie componentele unui vector.
%B. 4entru o matrice dat B cu G linii i > coloane s se afieze toate cuplurile (i,N) reprezent7nd
numere de linii av7nd elementele respectiv egale. #e va defini i utiliza o funcie care stabilete dac doi
vectori sunt sau nu egali.
%C. #e dau dou matrici A i B av7nd n linii i coloane fiecare. # se stabileasc dac una dintre ele este
sau nu inversa celeilalte. #e va defini i utiliza o funcie pentru a nmuli dou matrici.
?&. .n punct a ntr-o matrice este un element maxim pe coloan i minim pe linia pe care se afl sau
minim pe coloan i maxim pe linia sa..tiliz7nd funcii care verific dac un element este
minim=maxim pe linia=coloana sa s se determine punctele n a dintr-o matrice cu elemente distincte.
21. /oi vectori x i y cu cite n componente fiecare (n 2= /0) se afl n relaia x 2= y
dac x
i
2= y
i
,pentru iH=0..n61
# se defineasc o funcie care primind ca parametri dou linii i i k ale unei matrici stabilete dac
acestea se afl n relaia 2=.
# se defineasc o funcie care primind ca parametri numerele a dou linii dintr-o matrice calculeaz
diferena lor depun7nd rezultatul ntr-un vector.
# se scrie un program care citete un numr ntreg n (n 2= /0) i o matrice cu n linii i
coloane i afieaz pentru toate perec"ile de linii care nu se gsesc n relatia 2= diferena lor.
??. # se defineasc o funcie care stabilete dac o linie specificat a unei matrici este sau nu o secven
ordonat cresctor.
# se defineasc o funcie care pentru o linie specificat a unei matrici determin elementul minim
i elementul maxim din acea linie.
#e citete o matrice ptrat B cu n linii i coloane (n 2= 10). # se afieze pentru fiecare linie care
nu reprezint un ir de valori cresctoare: numrul liniei elementul maxim i elementul minim.
(ndicaie: 6 linie i dintr-o matrice reprezint o secven ordonat cresctor dac:
B
0,N
2= B
0,N&1
pentru NH= 1..n61.
?8. # se defineasc o funcie care stabilete dac doi vectori dai ca parametri sunt sau nu ortogonali.
# se scrie un program care citete o matrice ptrat cu n linii i coloane i stabilete dac matricea
este sau nu ortogonal pe linii i n caz afirmativ calculeaz matricea invers. #e tie c pentru o
matrice ortogonal matricea invers se obine transpun7nd matricea dat i imprind fiecare coloan
cu norma euclidian a ei )radicalul produsului scalar al coloanei cu ea nsi*. 6 matrice este
ortogonal dac oricare dou linii diferite sunt ortogonale.

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