Sunteți pe pagina 1din 18

Capitolul 6 Pointeri

112

}n modul obi=nuit de alocare (alocarea static[), asocierea nume de variabil[ , zon[ de memorie este constant[ pe toat[ durata execu\iei programului. Alocarea se face ]n faza de compilare, iar dealocarea pe parcursul execu\iei programului este imposibil[. Pointerii sunt variabile ]n care se pot memora adrese de memorie. i ofer[ posibilitatea de a aloca dinamic memoria, adic[ pe parcursul execu\iei unui program se pot aloca sau dealoca zone de memorie asociate lor. !orma general[ de declarare a unui pointer este"
tip *var_pointer;

unde tip reprezint[ tipul de date asociat pointerului var_pointer. #ai corect, tip reprezint[ tipul de date care pot fi indicate (de la verbul to point din limba engleza) de c[tre var_pointer. xemple de declara\ii de pointeri"
int *x,*y; void *z; float *p[10];

$eclara\iile de mai sus se citesc astfel" x, y sunt pointeri c[tre int, z e pointer c[tre orice sau nimic, iar p este un tablou de pointeri c[tre float, adic[ p[0],p[1],...,p[9] sunt pointeri c[tre float. %rice variabil[ pointer trebuie ini\ializat[ cu o valoare valid[ (0 sau o adres[& obiectele au adrese diferite de zero, iar pentru 0 se folose=te constanta '()) din fi=ierul *eader stdio.h). PERATORII & +I * )a o variabil[ pointer putem fi interesa\i fie de adresa pe care o memoreaz[, fie de informa\ia memorat[ la aceast[ adres[ (informa\ia util[), fie de am+ndou[. % modalitate de a ob\ine adresele unor

Capitolul 6 Pointeri

113

variabile spre a fi memorate ]ntr,un pointer este oferit[ de operatorul - numit operator de referen\iere sau adresare . %peratorul * numit operator de dereferen\iere sau indirectare permite accesul (indirect) la informa\ia memorat[ ]n zonele de memorie referite de pointeri. $ac[ p este un pointer =i con\ine valoarea unei adrese de memorie, *p va furniza con\inutul loca\iei a c[rei adres[ e memorat[ ]n p. Atribuirea din secven\a de program
int x,*p; p=&x;

este corect[ =i are ]n\elesul c[ adresa variabilei x este memorat[ ]n p. .[ consider[m secven\a"
int x,*p; x=10; p=&x;

$eoarece ]n pointerul p se va memora adresa lui x, variabila *p va avea con\inutul variabilei x, adic[ *p=10. $in modul de definire, se observ[ c[ operatorii & =i * sunt complementari, adic[ x=* &x!. .[ observ[m, de asemenea, c[ o secven\[ de genul"
int *p; *p="1;

este gre=it[ deoarece simpla declara\ie a lui p ca pointer nu presupune alocare de memorie. /orect ar fi, de exemplu, o secven\[ de forma
int x,*p; p=&x; *p="1;

care implic[ =i ini\ializarea variabilei x cu valoarea "1. 0rocedeul de a ne referi la valoarea unei variabile in mod indirect, folosind un pointer este numit indirectare , de unde =i numele operatorului *. }n atribuirea *p="1, *p \ine locul variabilei x, adic[ are

Capitolul 6 Pointeri

114

valoare st]ng[ (left value). }n general *p poate apare oriunde poate apare variabila x. ste necesar ca tipul pointerului s[ fie acela=i cu cel al variabilei la care se refer[ pentru a asigura ]ntotdeauna o folosire corect[ a indirect[rilor. Astfel, secven\a
int *p; float x,y; x=#$%&9.$1; p=&x; y=*p;

este gre=it[ deoarece se ]ncearc[ folosirea pointerului c[tre ]ntregi p spre a transfera ]n y valoarea real[ con\inut[ ]n x. }n aceast[ situa\ie doar doi octe\i din x vor fi transfera\i ]n y. .unt posibile =i abateri de la regula de mai sus (folosind pointeri c[tre void sau conversii explicite cast) =i ]n aceste cazuri este evident c[ programatorul trebuie s[,=i asume responsabilitatea efectu[rii corecte a opera\iilor. $e=i, de obicei, nu suntem interesa\i ]n cunoa=terea valorii concrete a unui pointer, totu=i, se poate ob\ine aceast[ valoare ( ]n *exazecimal) cu a1utorul descriptorului 'p, ca ]n exemplul urm[tor"

Afi=area valorii unei variabile pointer


#include "stdio.h" #include "conio.h" void main(void) { int x,*x_ptr; x=10; x_ptr= x; print!(""n #dresa lui x print!(""n %aloarea lui print!(""n %aloarea lui print!(""n %aloarea lui &etch(); '

este=$p", x); x este=$i",x); x_ptr=$p",x_ptr); x=$i",*x_ptr);

Capitolul 6 Pointeri

115

ste admis[ folosirea pointerului c[tre tipul void cu ]n\elesul de pointer care nu are asociat un tip de date precis (pointer c[tre 2orice3). $eclara\iile void 4 se folosesc ]n situa\iile ]n care nu trebuie precizat ]n mod expres tipul pointerilor tocmai pentru a permite scrierea unor func\ii c+t mai generale din punct de vedere al tipurilor pe care le manevreaz[. 5aloarea '()) (declarat[ ]n fi=ierele antet stdio.h, stdli(.h etc.) are ]n\elesul de pointer zero =i poate fi atribuit[ oric[rui pointer cu semnifica\ia c[ nu indic[ nimic (nu con\ine nici o adres[). A=a cum s,a vazut, un pointer poate fi ini\ializat cu adresa unei variabile statice. xist[ ]ns[ =i posibilitatea de a atribui pointerului considerat adresa unui bloc de memorie din zona dinamic[, numit[ eap. Acest lucru se poate face utiliz+nd una din func\iile speciale, )allo* !, *allo* !, reallo* !, prezentate ]n !apitolul "#, $unc\ii pentru %estiunea memoriei eap. !un\iile )allo* ! =i *allo* ! au prototipul ]n fi=ierul stdli(.h, iar reallo* ! are prototipul ]n fi=ierul )allo*.h. 6onele alocate r[m+n ocupate p+n[ la dealocarea explicit[ cu a1utorul func\iei free ! (prototipul func\iei se afl[ ]n stdli(.h) prezentate ]n acela=i paragraf cu func\iile de alocare. $rept exemplu, consider[m secven\a de program"
int *p; . . . . . . . +* se alo*a o zona de )e)orie de "0*sizeof int! o*teti la o adresa )e)orata in p*+ p=)allo* "0*sizeof int!!; *p=,0; . . . . . . . +* se dealo*a eli(ereaza! zona de )e)orie alo*ata*+ free p!;

Capitolul 6 Pointeri

116

Observa\ii:

Func\ia malloc() are forma general[


void *)allo* -nsi.ned int, nr_o*teti!;

Ea ]ntoarce un pointer de tip void =i din acest motiv poate fi atribuit oric[rui tip de pointer (vezi secven\a program de mai sus). Dac[ spa\iul de alocare este suficient pointerul ] ntors de func\ia )allo* ! con\ine adresa primului octet al zonei de memorie alocate. !n caz contrar (spa\iu insuficient) func\ia ]ntoarce valoarea "#$$. De aceea un mod riguros de alocare se poate face sub forma%
if / p=)allo* %0*sizeof int!!!! 0 printf 1n 2pati- ins-fi*ient!; exit 1!; 3

Func\ia free() se aplic[ unui pointer care indic[ o zon[ de memorie alocat[ anterior cu func\ia )allo* !.

OI&TERI +I TA'(O)RI )&I*I+E&,IO&A(E }n /, numele unui tablou este ec*ivalent cu un pointer constant c[tre primul element al tabloului, adic[ sunt ec*ivalente referirile"
t &t &t[0]

unde t e pointer c[tre tipul de baz[ al tabloului =i reprezint[ adresa la care e memorat tabloul. }n consecin\[, e corect[ declara\ia"
int t[10],*p=t;

dar nu este corect[ o secven\[ de genul


int t1[%],t$[%]; t1=t$;

Capitolul 6 Pointeri

117

deoarece ea constituie o ]ncercare de a modifica pointerul constant t1. OI&TERI !-TRE TIP)( !.AR +I +IR)RI *E !ARA!TERE .e pot memora constante /ir la o adres[ indicat[ de un pointer c[tre c ar. $e exemplu, o atribuire de genul
*har *spoint=4ine v5a) .asit/;

este valid[, deoarece, ]nt+lnind,o, compilatorul va memora =irul ]ntr,un tabel de /iruri gener+nd pointerul spoint c[tre adresa =irului. }n tabel se vor memora toate constantele =ir din program. $ac[ dorim sa afi=[m pe ecran mesa1ul con\inut ]n =ir este suficient s[ scriem
printf spoint! sau printf 's,spoint!.

% formul[ de afi=are ca aceasta este util[ mai ales dac[ mesa1ul este lung =i trebuie afi=at frecvent. }ntr,o declara\ie de forma
*har *sir; sir poate avea mai multe interpret[ri" pointer c[tre

c ar, =ir de caractere sau vector de caractere alocat dinamic. $ac[ =irul e declarat ca un tablou de caractere spa\iul necesar e alocat automat, iar dac[ declara\ia este ca un pointer la c ar programatorul trebuie s[ aloce ]n mod explicit spa\iu sau s[ atribuie adresa unui =ir existent (cazul de mai sus).

Capitolul 6 Pointeri

118

OI&TERI !-TRE TA'(O)RI )&I*I+E&,IO&A(E $eclararea unui pointer c[tre un tablou unidimensional de dimensiune di) se face sub forma"
tip *var_pointer![di)];

.[ consider[m urm[toarea secven\[ de program"


int x[10], *t![10]=&x; t66;

0ointerul va con\ine adresa unui tablou cu 10 ] ntregi (de fapt adresa primului element al tabloului), iar t66 va con\ine adresa t=&x6sizeof int!*10. Observa\ii: &arantezele rotunde din declara\ie sunt esen\iale pentru individualizarea pointerilor c[tre tablouri. Dac[ ar fi omise declara\ia
int *t[10];

ar fi de asemenea corect[ dar ar avea o alt[ semnifica\ie =i anume% t este un tablou de pointeri c[tre ]ntregi. 0entru a ]n\elege semnifica\ia pointerilor c[tre tablouri, s[ consider[m secven\a de program"
int x[10],*p=x; p66;

0ointerul p va con\ine, de asemenea, adresa primului element al tabloului x, dar p66 va con\ine adresa p=&x6sizeof int! (adic[ adresa variabilei x[1]). .e observ[ c[ diferen\a dintre cele dou[ cazuri apare la aritmetica pointerilor" c+nd se lucreaz[ cu pointeri c[tre tablouri de dimensiune di) componente de tip tip, aritmetica folosit[ are unitatea egal[ cu di)*sizeof tip!. c+nd se lucreaz[ cu pointeri c[tre tip aritmetica folosit[ are unitatea egal[ cu sizeof tip!. 0ointerii c[tre tablouri unidimensionale sunt extremi de utili

Capitolul 6 Pointeri

119

mai ales ]n ]n\elegerea =i folosirea tablourilor cu mai multe dimensiuni ]n /. PERA0II ARIT+ETI!E !) POI&TERI Au sens opera\iile de adunare (sc[dere) ale unui pointer cu un intreg. .emnifica\ia expresiilor p6n,p5n, unde p este pointer de un anumit tip, iar n este un num[r ]ntreg pozitiv este urm[toarea" p6n va con\ine adresa p6n*sizeof tip!, iar p5n adresa p5n*sizeof tip!, unde tip este tipul pointerului. }n secven\a urm[toare se consider[ c[ tipul int se memoreaz[ pe $ octe\i, iar tipul float pe & octe\i.
int *p1,*p$; float *p; . . . . . . p$=p16";+* p$ *ontine adresa p16"*$ *+ . . . . . . p5=%;+* p *ontine adresa p5%*& *+

$e obicei, programatorul este mai pu\in interesat de adresa concret[ a zonei de memorie unde se afl[ variabilele. $e aceea, opera\iile asupra pointerilor au semnifica\ie practic[ dac[ deplas[rile se fac ]n interiorul unui tablou. $ac[ x[n] este un tablou cu n componente, atunci pentru orice i=0,1,7,n51
x6i e ec*ivalent cu &x[i],

iar
* x6i! e ec*ivalent cu x[i]

Capitolul 6 Pointeri

120

'omutarea elementelor egal departate de capetele unui vector =i afi=area vectorului ob\inut.
#include "stdio.h" #include "conio.h" void main(void) { int x()*={1,+,,,-,.,/,)',i,*p,0; 1* a!isarea vectorului initial *1 print!(""n %ectorul initial este2"); !or (i=0;i3);i44) print!(""nx($i*=$i",i,x(i*); 1* comutarea elementelor vectorului x *1 !or (i=0;i3,;i44) { 0=*(x4i); *(x4i)=*(x4/5i); *(x4/5i)=0; ' 1* a!isarea vectorului comutat *1 print!(""n %ectorul comutat este2"); !or (i=0,p=x;i3);44i) { print!(""nx($i*=$i",i,*p); p44; ' &etch(); '

&rogramul reprezint[ Exemplului 6.2.


#include "stdio.h" #include "conio.h" void main(void)

alt[

implementare

Capitolul 6 Pointeri

121

{ int x()*={1,+,,,-,.,/,)',i,*p,*6,0; 1* a!isarea vectorului initial *1 print!(""n %ectorul initial este2"); !or (i=0;i3);i44) print!(""nx($i*=$i",i,x(i*); 1* comutarea elementelor vectorului x *1 p=x; 6= x(/*; do { 0=*p; *p=*6; *6=0; p44; 655; ' 7hile (p36); 1* a!isarea vectorului comutat *1 print!(""n %ectorul comutat este2"); !or (i=0,p=x;i3);44i) { print!(""nx($i*=$i",i,*p); p44; ' &etch(); '

Observa\ie . (ecven\a de instruc\iuni


printf 81nx['i]='i8,i,*p!; p66;

din programul de mai sus putea fi scris[ ec)ivalent%


printf 81nx['i]='i8,i,p[i]!;

ceea ce arat[ c[ pointerul p poate fi folosit cu indice ]ntocmai ca un tablou. .c[derea a doi pointeri p1,p$ are semnifica\ie ]n cazul ]n care p1,p$ au acela=i tip de baz[ =i se refer[ la elementele aceluia=i tablou. $ac[ t este numele tabloului =i

Capitolul 6 Pointeri

122

atunci

p1=&t[i1]; p$=&t[i$]; p15p$ semnific[ adresa i15i$ din tabloul t.

.unt posibile combina\ii de pointeri cu a1utorul operatorilor &,*,66 =i 55, ]ns[ ele trebuie facute cu mult[ gri1[.(rm[torul program ilustreaz[ c+teva din efectele acestor combina\ii (rezultatele afi=[rii sunt date ]n comentarii).

Afi=area valorilor unui pointer p combinat ]n e*presii cu operatorii * =i 66.


#include "stdio.h" void main(void) { int x(*={.,-,,,+,1',*p; p=x; print!(""n %aloarea=$i",*p44); print!(""n %aloarea=$i",*p); p=x; print!(""n %aloarea=$i",(*p)44); print!(""n %aloarea=$i",*p); p=x; print!(""n %aloarea=$i",*44p); p=x; print!(""n %aloarea=$i",44*p); &etch(); '

1* val=. *1 1* val=- *1 1* val=. *1 1* val=/ *1 1* val=- *1 1* val=) *1

OI&TERI *)'(I +I TA'(O)RI 'I*I+E&,IO&A(E (n pointer c[tre un pointer la un anumit tip se nume=te pointer dublu c[tre acel tip. $eclara\ia unui pointer dublu se face sub forma
tip **var_pointer;

Capitolul 6 Pointeri

123

.emnifica\ia acestei declara\ii este urm[toarea" var_pointer poate memora adresa unui pointer c[tre tip. }n !igura 7.8 se prezint[ sc*ema acestui tip de adresare. 0ointer Adres[ 0ointer Adres[ 5aloare

Figura 6.1 Adresare indirect[ (pointer dublu) Exemplu:


int **p,*9,x; x=10; 9=&x; p=&9;

.e observ[ c[ pointerului 9 i se atribuie adresa variabilei x ]n timp ce pointerului p i se atribuie adresa pointerului 9. $ac[ la aceast[ secven\[ ad[ug[m
**p=,;

efectul este c[ valoarea lui x va deveni ,. $eci **p permite accesul indirect ( indirectare dubl[ ) la con\inutul variabilei x. )imba1ul permite folosirea pointerilor tripli =i ]n general a pointerilor multipli, dar apar dificult[\i la manevrarea corect[ a unor astfel de pointeri. 0ointerii dubli =i tablourile de pointeri permit extinderea corect[ a aritmeticii pointerilor prezenta\i =i la cazul tablourilor multidimensionale. .e porne=te de la observa\ia c[ un tablou multidimensional este un tablou cu o singur[ dimensiune care are drept elemente un tablou cu restul de dimensiuni. 0entru u=urin\a expunerii s[ consider[m cazul unui tablou bidimensional (matrice), ca ]n exemplul de mai 1os. !ie declara\ia"
int x["][%];

Capitolul 6 Pointeri

124

/onform observa\iei f[cute, tabloul x["][%] poate fi privit ca un tablou cu trei variabile pointer x[0],x[1],x[$] care arat[ respectiv c[tre tablourile unidimensionale" =i
x[0][0] x[0][1] ... x[0][&], x[1][0] x[1][1] ... x[1][&], x[$][0] x[$][1] ... x[$][&].

$ar x[0],x[1],x[$], se pot scrie ec*ivalent *x,* x61! =i * x6$!, respectiv. $eci numele tabloului x poate fi v[zut ca un pointer dublu c[tre tablouri de c+te cinci loca\ii de tip int. $in acest motiv, avem ec*ivalen\ele"
x[i][:];=< * x6i!![:];=<* * x6i!6:!,

unde expresia x6i ]nseamn[ x6i* sizeof int!*% (conform propriet[\ii pointerilor c[tre tablouri unidimensionale). Alte ec*ivalen\e evidente sunt
x[i][:];=<* x[i]6:!;=<* &x[0][0]6%*i6:!

Observa\ie: #ltima e*presie din ec)ivalen\ele de mai sus con\ine func\ia de alocare a tabloului bidimensional x["][%]. 9 .9 $ /%'9:%) 12" (n pointer este" a) o adres[ de memorie b) o variabil[ care poate memora adrese de memorie c) o zon[ de memorie dinamic[ 12# }n secven\a de program
int x,*p; p=&x;

atribuirea este"

Capitolul 6 Pointeri

125

a) corect[, deoarece se atribuie unui pointer o adres[ de memorie b) incorect[, deoarece trebuia precedat[ de o atribuire pentru variabila x 123 }n secven\a de program atribuirea este" a) corect[, deoarece se atribuie lui p o variabil[ alocat[ static b) corect[, deoarece variabila x a fost ini\ializat[ c) incorect[, deoarece pointerului p trebuie s[ i se atribuie adrese de memorie 124 }n secven\a de program
int *p,x; x="1; *p=x; int x=10,*p; p=x;

atribuirea este" a) corect[ b) incorect[, deoarece pointerul p nu indic[ nici o loca\ie c) este corect[ =i ec*ivalent[ cu p=p*x; 125 .ecven\a de program
int x,*p,*9; x=11; p=9=&x; printf 'd,*p!;

afi=eaz[ valoarea 11 b) este gre=it[, deoarece ]n expresia p=9=&x& semnul = apare de dou[ ori c) este gre=it[, deoarece descriptorul de format pentru pointeri este 'p =i nu 'd
a)

Capitolul 6 Pointeri

126

121 .ecven\a de program


int x,y,*p; x=%; y=10; p=&x; &y=p; printf 'd,y!;
a) b) c)

este corect[ =i afi=eaz[ valoarea % este incorect[, deoarece atribuirea &y=p& este incorect[ este corect[ =i afi=eaz[ valoarea 10
int *x[10],y=10; x[1]=&y; printf 'd,*x[1]!;

126 .ecven\a de program

a) b) c)

este gre=it[, deoarece componenta x[1] nu poate primi drept valoare o adres[ este corect[ =i afi=eaz[ valoarea 10 este gre=it[ deoarece expresia *x[1] este gre=it[
*har *s==)i pla*e li)(a:-l >/; int i; for i=0;s[i];i66! printf 1n '*,s[i]!;

127 .ecven\a de program

a) b) c)

este gre=it[, deoarece s este declarat ca pointer c[tre *har =i este folosit ca un tablou este corect[ deoarece un pointer c[tre *har poate fi interpretat ca =i un tablou de caractere este corect[ =i afi=eaz[ mesa1ul =)i pla*e li)(a:-l >/ pe vertical[
*har *p;

128 % declara\ie de forma" poate avea interpretarea"


a)

variabila p este pointer c[tre c ar

Capitolul 6 Pointeri

127

b) c)

variabila p poate con\ine adresa unui =ir de caractere variabila p este numele unui vector de caractere alocate dinamic
int x[10],*p=x;

12"9 .ecven\a de program a) este ec*ivalent[ cu secven\a


int x[10]; *p=x;

este incorect[, deoarece ]n loca\ia indicat[ de p se memoreaz[ o valoare nedefinit[ x c) este corect[ =i este ec*ivalent[ cu
b)

int x[10],*p=&x[0];

d) este corect[ =i este ec*ivalent[ cu


int x[10],*p=x[0];

e) este corect[ =i este ec*ivalent[ cu


int x[10],*p=&x;

12"" }n secven\a de program


float x[10],y[10],*p; x=y; p=x;

a) prima atribuire este corect[ b) a doua atribuire e corect[ c) ambele atribuiri sunt corecte 12"# $eclara\ia
int *x![10];

a) este gre=it[ b) este ec*ivalent[ cu


int *x[10];
c)

este corect[ =i reprezint[ declara\ia unui pointer c[tre un tablou unidimensional de 10 componente

Capitolul 6 Pointeri

128

12"3 }n secven\a de program


int x["]; int *p!["]; p=x; p66;

pointerul p" indic[ componenta x[1] a vectorului x[10] b) indic[ loca\ia cu adresa x610*sizeof int! 12"4 .ecven\a de program
a)

int *p,x[]=01,$,"3; p=x; p6=$; printf 'd,*p!;


a) b) c) d)

afi=eaz[ valoarea " afi=eaz[ valoarea $ este gre=it[, deoarece ]n expresia p=x; se atribuie un nume de tablou unui pointer este gre=it[, deoarece adunarea unui ]ntreg la un pointer (expresia p6=$&) este interzis[

12"5 /omponenta i a unui tablou x[10],0;=i;=9 se poate indica prin


a! x[i] (! x6i *! &x[i] d! * x6i!

12"1 5aloarea componentei i a unui tablou x[0],0;=i;=9 se poate ob\ine folosind nota\ia
a) b) c) d) x[i] x6i &x[i] * x6i! int *p,**9,x=10; p=&x; 9=&p; printf 1n 'd,**9!;

12"6 .ecven\a de program

Capitolul 6 Pointeri

129

a) b)

c) d)

este gre=it[, deoarece ]n declara\ie 9 e precedat de dou[ semne * =i nu doar de unul este gre=it[, deoarece inten\ia de a memora adresa unui pointer (expresia 9=&p;) tot ]ntr,un pointer este o eroare este corect[, deoarece opera\iile cu pointerul p =i pointerul dublu 9 sunt corecte este corect[ =i afi=eaz[ valoarea 10

+,(&#"(#+7.8,b 7.7,b 7.88,b 7.87,a, d 7.;,a 7.?,b 7.8;,c 7.8?,c, 7.<,c 7.=,b 7.>,a 7.@,b, c 7.A,a, b, c 7.8B,c, e 7.8<,b 7.8=,a 7.8>,b, c d

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

  • Tipuri de Traductoare
    Tipuri de Traductoare
    Document20 pagini
    Tipuri de Traductoare
    alexandra_dutescu
    100% (2)
  • Instructiuni Instalare
    Instructiuni Instalare
    Document2 pagini
    Instructiuni Instalare
    Barosz
    Încă nu există evaluări
  • Sub
    Sub
    Document3 pagini
    Sub
    Barosz
    Încă nu există evaluări
  • Versiondog CH
    Versiondog CH
    Document7 pagini
    Versiondog CH
    Barosz
    Încă nu există evaluări
  • Sesiune Examene-1
    Sesiune Examene-1
    Document1 pagină
    Sesiune Examene-1
    Barosz
    Încă nu există evaluări
  • Sub
    Sub
    Document3 pagini
    Sub
    Barosz
    Încă nu există evaluări
  • Versiondog - AP - Ro
    Versiondog - AP - Ro
    Document27 pagini
    Versiondog - AP - Ro
    Barosz
    Încă nu există evaluări
  • Plante
    Plante
    Document1 pagină
    Plante
    Barosz
    Încă nu există evaluări
  • Capitol Ul 13
    Capitol Ul 13
    Document17 pagini
    Capitol Ul 13
    Barosz
    Încă nu există evaluări
  • ADA Layout Manual
    ADA Layout Manual
    Document8 pagini
    ADA Layout Manual
    Annemarie Hansen
    Încă nu există evaluări
  • Adresgfha Service Samsung
    Adresgfha Service Samsung
    Document1 pagină
    Adresgfha Service Samsung
    Barosz
    Încă nu există evaluări
  • Functionare Turbosuflanta
    Functionare Turbosuflanta
    Document3 pagini
    Functionare Turbosuflanta
    Alex
    Încă nu există evaluări
  • Capitol Ul 12
    Capitol Ul 12
    Document17 pagini
    Capitol Ul 12
    Barosz
    Încă nu există evaluări
  • Capitol Ul 11
    Capitol Ul 11
    Document14 pagini
    Capitol Ul 11
    Barosz
    Încă nu există evaluări
  • Capitol Ul 7
    Capitol Ul 7
    Document26 pagini
    Capitol Ul 7
    Barosz
    Încă nu există evaluări
  • Capitol Ul 4
    Capitol Ul 4
    Document38 pagini
    Capitol Ul 4
    Barosz
    Încă nu există evaluări
  • Capitol Ul 9
    Capitol Ul 9
    Document13 pagini
    Capitol Ul 9
    Barosz
    Încă nu există evaluări
  • Capitol Ul 10
    Capitol Ul 10
    Document20 pagini
    Capitol Ul 10
    Barosz
    Încă nu există evaluări
  • Capitol Ul 8
    Capitol Ul 8
    Document51 pagini
    Capitol Ul 8
    Barosz
    Încă nu există evaluări
  • Capitol Ul 5
    Capitol Ul 5
    Document16 pagini
    Capitol Ul 5
    Barosz
    Încă nu există evaluări
  • Capitol Ul 1
    Capitol Ul 1
    Document8 pagini
    Capitol Ul 1
    Barosz
    Încă nu există evaluări
  • Capitol Ul 3
    Capitol Ul 3
    Document43 pagini
    Capitol Ul 3
    Barosz
    Încă nu există evaluări
  • Capitol Ul 2
    Capitol Ul 2
    Document13 pagini
    Capitol Ul 2
    Barosz
    Încă nu există evaluări
  • Capitolul 3
    Capitolul 3
    Document21 pagini
    Capitolul 3
    baratkyy5555
    100% (1)
  • Capitolul 1 - Cibernetica
    Capitolul 1 - Cibernetica
    Document36 pagini
    Capitolul 1 - Cibernetica
    alexandru_roman_9
    Încă nu există evaluări
  • Capitolul 4 ISSC
    Capitolul 4 ISSC
    Document15 pagini
    Capitolul 4 ISSC
    Barosz
    Încă nu există evaluări
  • Teorie Masurare Debite
    Teorie Masurare Debite
    Document38 pagini
    Teorie Masurare Debite
    Razvan Preda
    Încă nu există evaluări
  • Reprez Grafica
    Reprez Grafica
    Document1 pagină
    Reprez Grafica
    Barosz
    Încă nu există evaluări
  • Mat A
    Mat A
    Document1 pagină
    Mat A
    Barosz
    Încă nu există evaluări