Sunteți pe pagina 1din 9

CAPITOLUL 4 Tablouri

4
TABLOURI
4.1. Declararea tablourilor 4.3. Tablouri bidimensionale
4.2. Tablouri unidimensionale 4.4. iruri de caractere
4.1. DELARAREA TABOURILOR
Numim tablou o colecie (grup, mulime ordonat) de date, de acelai tip, !ituate "ntr#o $on de memorie
continu (elementele tabloului !e a%l la adre!e !ucce!i&e)' Tablourile !unt variabile compuse (structurate),
deoarece grupea$ mai multe elemente' (ariabilele tablou au nume, iar tipul tabloului e!te dat de tipul
elementelor !ale' )lementele tabloului pot %i re%erite prin numele tabloului i indicii (numere "ntregi) care
repre$int po$iia elementului "n cadrul tabloului'
*n %uncie de numrul indicilor utili$ai pentru a re%eri elementele tabloului, putem "nt+lni tablouri
unidimensionale (&ectorii) !au multidimensionale (matricile !unt tablouri bidimen!ionale)'
Ca i &ariabilele !imple, &ariabilele tablou trebuie declarate "nainte de utili$are'
,odul de declarare-
tip nume_tablou[dim_1][dim_2][dim_n];
unde-tip repre$int tipul elementelor tabloului. dim_1,dim_2,...,dim_n !unt numere "ntregi !au
e/pre!ii con!tante "ntregi (a cror &aloare e!te e&aluat la compilare) care repre$int limitele !uperioare ale
indicilor tabloului'
Exemple:
001
int vect[20]; 00 declararea tabloului vect, de ma/imum 23 de elemente, de tipul int'
00 4e re$er& 235!i$eo%(int)623 5 2 6 43 octei
002
double p,q,tab[10];
00 declararea &ariabilelor !imple p, 7 i a &ectorului tab, de ma/imum 13 elemente, tip
double
008
#define MAX 10
ca! tabc[MAX]; !"declararea tabloului tabc, de ma/imum ,A9 (13) elemente de tip c:ar50
004
double mat!ice[2]["]; 00 declararea tabloului mat!ice (bidimen!ional),
00 ma/imum 2 linii i ma/imum 8 coloane, tip double
4.2. TABLOURI U#IDI$E#%IO#ALE
Tablourile unidimen!ionale !unt tablouri cu un !ingur indice (&ectori)' ;ac tabloul conine dim_1 elemente,
indicii elementelor au &alori "ntregi din inter&alul [0, dim_1#1]'
La "nt+lnirea declaraiei unei &ariabile tablou, compilatorul aloc o $on de memorie continu (dat de
produ!ul dintre dimen!iunea ma/im i numrul de octei core!pun$tor tipului tabloului) pentru p!trarea
&alorilor elementelor !ale' Numele tabloului poate %i utili$at "n di%erite e/pre!ii i &aloarea lui e!te c:iar
adre!a de "nceput a $onei de memorie care i#a %o!t alocat' Un element al unui tablou poate %i utili$at ca orice
alt &ariabil ("n e/emplul urmtor, atribuirea de &alori elementelor tabloului vecto!)' 4e pot e%ectua
operaii a!upra %iecrui element al tabloului, nu a!upra "ntregului tablou'
1
CAPITOLUL 4 Tablouri
Exemplu:
&ector
00 ;eclararea tabloului vecto!
int vecto![$];
00 Iniiali$area elementelor tabloului
vecto![0]%100;
vecto![1]%101;
vecto![2]%102;
vecto!["]%10";
vecto![&]%10&;
vecto![']%10';
Exemplu:
double alpa['], beta['], (ama['];
int i%2;
alpa[2)i#1] % '.*+;
alpa[0]%2)beta[i],".';
(ama[i]%apla[i],beta[i]; 00permi!
(ama%alpa,beta; 00nepermi!
(ariabilele tablou pot %i iniiali$ate "n momentul declarrii-
decla!a-ie_tablou%li.t/_valo!i;
(alorile din li!ta de &alori !unt !eparate prin &irgul, iar "ntreaga li!t e!te inclu! "ntre acolade-
Exemple:
001
int vecto![$]%0100,101,102,10",10&,10'1;
<3= <>=
002
double 2%3.+;
double a[']%01.2, ".', 2, 2#1, *.'1;
La declararea unui &ector cu iniiali$area elementelor !ale, numrul ma/im de elemente ale tabloului poate %i
omi!, ca$ "n care compilatorul determin automat mrimea tabloului, "n %uncie de numrul elementelor
iniiali$ate'
Exemplu:
ca! tab[]%0 4A4, 454, 464, 4541;
<3= <8=
float data[']%0 1.2, 2.", ".& 1;
<3= <4=
Adre!a elementului de indice i dintr#un tablou unidimen!ional poate %i calculat a!t%el-
adresa_elementului_i = adresa_de_baz + i

lungime_element
Exerci ii :
001 Citirea elementelor unui &ector-
double a['];
int i;
2
CAPITOLUL 4 Tablouri
fo! 7i%0; i8'; i,,9
0 cout88:a[;88i88:]%:; 00a%iarea unui me!a? prealabil citirii %iecrui element
cin<<a[i]; 00citirea &alorii elementului de indice i
1
004au-
double a[20]; int i, n;
cout88:6im. Ma2. %:; cin<<n;
fo! 7i%0; i8n; i,,9
0 cout88:a[=88i88:]%:;
cin<<a[i];
1
002 A%iarea elementelor unui &ector-
cout88:>ecto!ul int!odu. e.te?@n:;
fo! 7i%0; i8n i,,9
cout88a[i]884 4;
008 A%iarea elementelor unui &ector "n ordine in&er!-
cout88:Alementele vecto!ului Bn o!dine inve!./?@n:;
fo! 7i%n#1; i<%0 i,,9
cout88a[i]884 4;
008 (ectorul !um (c) a &ectorilor a i b, cu acelai numr de elemente-
fo! 7i%0; i8n i,,9
c[i]%a[i],b[i];
004 (ectorul di%eren (c) a &ectorilor a i b, cu acelai numr de elemente-
fo! 7i%0; i8n i,,9
c[i]%a[i] # b[i];
00> Produ!ul !calar (p) a &ectorilor a i b, cu acelai numr de elemente-
p6
a b
i i
i
n

3
1
double p%0;
fo! 7i%0; i8n i,,9
p ,% a[i]

b[i];
4.2. TABLOURI BIDI$E#%IO#ALE
;in punct de &edere conceptual, elementele unui tablou bidimen!ional !unt pla!ate "n !paiu pe dou direcii'
,atricea repre$int o aplicaie natural a tablourilor bidimen!ionale'
*n matematic-
q
11
q
12
q
18
. . . q
1n
q
21
q
22
q
28
. . . q
2n
C% . . . . . . . . . . . . . . . . . . . . . . . . . . Q
m n
q
m1
q
m2
q
m8
. . . q
mn
*n limba?ele C0C@@ (indicii de linie i de coloan porne!c de la 3)-
q
33
q
31
q
32
. . . q
3 1 ,n
C%
q
13
q
11
q
12
. . . q
1 1 ,n
Q
m n
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
q
m1 3 ,
q
m1 1 ,
q
m1 2 ,
. . . q
m n 1 1 ,
Exemplu:
double q["][2]; 00 declararea matricii q, cu ma/im8 linii i 2 coloane, tip double
8
CAPITOLUL 4 Tablouri
*n memorie, elementele unei matrici !unt memorate pe linii-
q
33
q
31
q
13
q
11
q
23
q
21
. . .
;ac notm cu A po$iia "n memorie a unui element, &aloarea lui A 6 i

m @ ? (unde m e!te numrul ma/im


de linii, i e!te indicele de linie, ? e!te indicele de coloan)'
;ac !e dorete iniializarea elementelor unei matrici n momentul declarrii acesteia, !e poate proceda
a!t%el-
int mat[&]["] % 0
010, #'0, "1,
0"2, 20, 11,
0#1, 1, #21,
0*, #+, 131 1;
Prin acea!t con!trucie, elementele matricii mat !e iniiali$ea$ "n modul urmtor-
mat<3=<3=613, mat<3=<1=6#>3, mat<3=<2=68
mat<1=<3=682, mat<1=<1=623, mat<1=<2=61
mat<2=<3=6#1, mat<2=<1=61, mat<2=<2=6#2
mat<8=<3=6B, mat<8=<1=6#C, mat<8=<2=61D
La declararea unei matrici i iniiali$area elementelor !ale, !e poate omite numrul ma/im de linii, "n !c:imb,
datorit modului de memorare, trebuie !peci%icat numrul ma/im de coloane-
int mat[]["] % 0
010, #', "1,
0"2, 20, 11,
0#1, 1, #21,
0*, #+, 31 1;
Con!trucia are acelai e%ect ca precedenta'
int mat[]["] % 0
01, 11,
0 #11,
0", 2, 111;
mat repre$int o matrice 8

8, ale crei elemente !e iniiali$ea$ a!t%el-


mat<3=<3=61, mat<3=<1=61, mat<1=<3=6#1, mat<2=<3=68, mat<2=<1=62, mat<2=<2=61
)lementele mat<3=<2=, mat<1=<1=, mat<1=<2= nu !unt initali$ate' )le au &aloarea $ero dac tabloul e!te global
i &alori iniiale nede%inite dac tabloul e!te automatic'
Con!truciile utili$ate la iniiali$area tablourilor bidimen!ionale !e e/tind pentru tablouri multidimen!ionale,
cu mai mult de doi indici'
Exemplu:
int a[2][2]["]%0
0 010, 201, 01, #11, 0", &11,
0 020, "01, 0'0, #&01, 011, 1211
1;
Exerciiu: 4 !e citea!c de la ta!tatur elementele unei matrici de ma/im 13 linii i 13 coloane' 4 !e
a%ie$e matricea citit'
#include 8io.t!eam.<
void main7void9
0int A[10][10]; int n!_lin, n!_col; cout88;D!. linii?;; cin<<n!_lin;
cout88;D!. coloane?;; cin<<n!_col;int i, E;
00citirea elementelor unei matrici
fo! 7i%0; i8n!_lin; i,,9
fo! 7E%0; E8n!_col; E,,9 0
cout88;A[;88i88;,;88E88;]%;; 00a%iarea unui me!a? prealabil citirii
cin<<A[i][E];
1
00a%iarea elementelor matricii
fo! 7i%0; i8n!_lin; i,,9 0
4
CAPITOLUL 4 Tablouri
fo! 7E%0; E8n!_col; E,,9
cout88A[i][E]88F@tF;
cout88F@nF; 00 dup a%iarea elementelor unei linii, !e trece pe linia urmtoare
1
1
4.3. IRURI DE ARATERE
Eirurile de caractere !unt tablouri de caractere, care au ca ultim element un terminator de ir, caracterul null
($ero A4CII), \0'
Exemplu:
ca! tc['] % 04a4, 4b4, 4c4, 4d4, 4e41; 00 tablou de caractere
ca! .c['] % 04a4, 4b4, 4c4, 4d4, 4@041; 00 irul de caractere cu elementele abcd
Limba?ul C0C@@ permite iniiali$area unui tablou de caractere printr#o con!tant ir (ir "ntre g:ilimele), care
include automat caracterul null' ;eci ultima iniiali$are e!te ec:i&alent cu-
ca! .c['] % :abcd:; 00!au cu
ca! .c[] % :abcd:;
Exemplu:
ca! tc['] % 04a4, 4b4, 4c4, 4d4, 4e41;
ca! .c['] % 04a4, 4b4, 4c4, 4d4, 4@041;
ca! .c1['] % :abcd:;
ca! .[10];
cout88.c884@n4; 00a%iea$ abcd
cout88tc884@n4;
00eroare- tabloul de caractere nu conine terminatorul de ir, deci nu poate %i a%iat ca ir
cout88.884@n4; 00 eroare- tablou neiniiali$at
cout88.c1[2]; 00 a%iea$ al treilea element din irul !c1
.c1[1]%4G4; 00 elementului din ir de indice 1 i !e atribuie &aloarea FGH.
4.3.1. &U#'II (E#TRU O(ERA'II U IRURI DE ARATERE
Iunciile pentru operaii cu iruri !e g!e!c "n :eader#ul <string.h>'
strlen (nume_Hi!)
Jeturnea$ un numr "ntreg ce repre$int lungimea unui ir de caractere, %r a numra terminatorul de ir'
strcmp (Hi!_1, Hi!_2)
Iuncia compar cele dou iruri date ca argument i returnea$ o &aloare "ntreag egal di%erena dintre
codurile A4CII ale primelor caractere care nu coincid'
strcpy (Hi!_de.tina-ie, Hi!_.u!./)
Iuncia copie irul !ur! "n irul de!tinaie' Pentru a %i po!ibil copierea, lungimea irului de!tinaie trebuie
! %ie mai mare !au egal cu cea a irului !ur!, alt%el pot apare erori gra&e'
strcat (Hi!_de.tina-ie, Hi!_.u!./)
Iuncia concatenea$ cele dou iruri- irul !ur! e!te adugat la !%+ritul irului de!tinaie' Tabloul care
conine irul de!tinaie trebuie ! aib !u%iciente elemente.
Exemplu:
#include 8io.t!eam.<
>
CAPITOLUL 4 Tablouri
#include 8.t!in(.<
void main79
0
ca! .i!1[] % :abcd:, .i!2[] % :abcde:, .i!" % ;abcdef:, .i!& % ;de:;
cout88.t!cmp7.i!1, .i!29884@n4; 00 a%iare- #131
00 HeH 6 131, HaH 6 DB, HdH 6 133
00H3H # HeH 6 #131
cout88.t!cmp7.i!2, .i!19884@n4; 00a%iare- 131
cout88.t!cmp7.i!1, ;;9884 F; 00compararea &ariabilei !ir1 cu con!tanta ir &id
ca! .t!1[20]%:ello:;
ca! .t!2[20]%:(oodbIe:;
ca! .t!"[20];
int dife!, lun(ime;
cout88:.t!1%:88.t!188: .t!2%:88.t!2884@n4;
dife!%.t!cmp7.t!1, .t!29;
if 7dife! %% 09
cout88:Ji!u!i ecivalenteK@n:;
el.e if 7dife!<09
cout88.t!188: mai ma!e 7le2ico(!afic9 decLt =88.t!2884@n4;
el.e
cout88.t!188: mai mic 7le2ico(!afic9 decLt =88.t!2884@n4;
cout88:.t!1%:88.t!1884@n4; cout88:.t!"%:88.t!"884@n4;
.t!cpI 7.t!", .t!19; cout88:.t!1%:88.t!1884@n4;
cout88:.t!"%:88.t!"884@n4;
.t!cat 7.t!", .t!19;
cout88:.t!1%:88.t!1884@n4;
cout88:.t!"%:88.t!"884@n4;
1
Exemplu: 4 !e citea!c elementele unui &ector cu ma/im 133 de elemente reale'
a) 4 !e inter!c:imbe elementele &ectorului "n modul urmtor- primul cu ultimul, al doilea cu penultimul, etc'
b) 4 !e ordone$e cre!ctor elementele &ectorului'
00 a)
#define MANJA 0
#define OPQA 1
#include 8io.t!eam.<
void main79
0 double vect[100];int n;00n#numarul de elemente ale &ectorului
cout88;D!. elemente;; cin<<n; double au2;
00 de completat e/emplul cu !ec&enta de citire a elementelor &ectorului
fo! 7int i%0; i8n/2; i,,90
aux%vect[i];
vect[i]%vect[n#1#i];
vect[n#1#i]%au2;
1
00 de completat e/emplul cu !ec&enta de a%i!are a &ectorului
1
Pentru !c:imbarea elementelor &ectorului !#a %olo!it &ariabila au/iliar au/ (%igura 4'2')' Ir acea!t
&ariabil, la atribuirea vect[i]%vect[n#1#i], &aloarea elementului vect[i] !#ar %i pierdut' Trebuie
ob!er&at, dea!emenea, c &ariabila contor i ia &alori "ntre 3 i nR2 (de e/emplu, dac &ectorul are 4 !au >
elemente !unt nece!are 2 inter!c:imbri)'
b) Pentru ordonarea elementelor &ectorului, e!te pre$entat un algoritmi de !ortare' $etoda Bubble %ort
compar %iecare element al &ectorului cu cel &ecin, iar dac e!te ca$ul, le !c:imb "ntre ele'
ANSTPUOM Vubble_Jo!t
UD5AWQO
(ata

fal.e
5UO OUMW not (ata PAWAOA
UD5AWQO
K
CAPITOLUL 4 Tablouri
(ata % t!ue
WADOPQ i%0 NA n#2 PAWAOA
UD5AWQO
6A5A vect[i] < vect[i,1] AOQD5U
X UD5AWQO
au2%vect[i]
vect[i]%vect[i,1]
vect[i,1]%au2
(ata%fal.
JMAPJUO
JMAPJUO
JMAPJUO
JMAPJUO
00 implementarea metodei Lubble4ort
int (ata %MANJA;int i;
Yile 7K(ata90
(ata%OPQA;
fo! 7i%0; i8%n#2; i,,9
if 7vect[i]<vect[i,1]90
aux%vect[i];
vect[i]%vect[i,1];
vect[i,1]%au2;
(ata%MANJA;1
1
Exemplu: 4 !e citea!c elementele matricilor A(,9N), L(N9P) i C(,9N), unde ,M613, NM613 i PM613'
4 !e inter!c:imbe liniile matricii A "n modul urmtor- prima cu ultima, a doua cu penultima, etc' 4 !e
calcule$e i ! !e a%ie$e matricile- AT6A
T
, 4U,6A@C, PJO;6A9L' Implementarea citirilor i a%irilor !e
&a completa con%orm e/emplului dat "n capitolul 4'2'
#include 8io.t!eam.<
void main79
0
double a[10][10], b[10][10], c[10][10];
int m,n,p,E;
cout88;m%;; cin<<m; cout88;n%;; cin<<n; cout88;p%;; cin<<p;
00 de completat !ec&ena de citire a elementelor matricii a, cu m linii i n coloane
00 de completat !ec&ena de citire a elementelor matricii b, cu n linii i p coloane
00 de completat !ec&ena de a%iare a matricii a
00inter!c:imbarea liniilor matricii A-
fo! 7i%0; i8mR2; i,,9
fo! 7E%0; E8n; E,,90
double au2%a[i][E];a[i][E]%a[m#1#i][E];a[m#1#i][E]%au2;
1
cout88;Mat!icea A cu liniile inte!.cimbate?@n;;
00 de completat !ec&ena de a%iare a matricii a
00 calculul matricii AT 6A
T
double at[10][10]; 00 at e!te matricea tran!pu!a
fo! 7i%0; i8n; i,,9
fo! 7E%0; E8m; E,,9
at[i][E]%a[E][i];
cout88;A t!an.pu.%@n;;
00 de completat !ec&ena de a%iare a matricii at, cu n linii !i m coloane
00 de completat !ec&ena de citire a elementelor matricii c, cu m linii i n coloane
00 calculul matricii 4U,6A@C, 4U,(,/N)-
double .um[10][10]; 00 .um e!te matricea !uma dintre a !i c
fo! 7i%0; i8m; i,,9
fo! 7E%0; E8n; E,,9
.um[i][E]%a[i][E], c[i][E];
B
CAPITOLUL 4 Tablouri
cout88;Mat!icea JQM%A,5 e.te?@n;;
00 de completat !ec&ena de a%iare a matricii .um
double p!od[10][10]; 00 p!od e!te matricea produ! dintre a !i b
fo! 7i%0; i8m; i,,9
fo! 7E%0; E8p; E,,90
p!od[i][E]%0;
fo! 7Z%0; Z8n; Z,,9
p!od[i][E],%a[i][Z])b[Z][E];
1
cout88;Mat!icea p!odu. dint!e A .i V e.te?@n;;
00 de completat !ec&ena de a%iare a matricii p!od, cu m linii !i p coloane
1
4e ob!er& c %iecare element din matricea produ! PJO;6A9L ( A(,9N), L(N9P) ), PJO;(,9P) e!te de
%orma- p!od
j i,
6
j k
n
k
k i
b a
,
1
3
,
5

=
, unde i6
1 , 3 m
i ?6
1 , 3 n
'
)#TREB*RI I E+ERI'II
,estiuni teoretice
1' Care e!te di%erena dintre irurile de caractere i
&ectorii de caractereN
2' Ce !unt tablourileN
8' ;e ce tablourile repre$int date !tructurateN
4' Prin ce !e re%er elementele unui tablouN
>' Cine impune tipul unui tablouN
C
,estiuni a-licati.e
1' 4 !e implemente$e programele cu e/emplele pre$entate'
2' 4 !e !crie programele pentru e/erciiile re$ol&ate care au %o!t pre$entate'
8' 4e cite!c de la ta!tatura elementele unei matrici de caractere (nr' linii6nr' coloane), A(N9N), NM613'
a) 4 !e a%ie$e matricea A.
b) 4 !e %orme$e i ! !e a%ie$e cu&+ntul %ormat din caracterele pe pe diagonala principal a matricii A.
c) 4 !e calcule$e i ! !e a%ie$e numrul de litere mari, litere mici i ci%re din matrice.
d) 4 !e a%ie$e cu&+ntul %ormat din caracterele de pe diagonala !ecundar.
e) 4 !e a%ie$e procentul literelor mari, al literelor mici i al ci%relor de pe cele 2 diagonale.
%) 4 !e a%ie$e caracterele comune a%late pe liniile p i 7 (p, 7 M N, p i 7 citite de la ta!tatur).
g) 4 !e a%ie$e "n ordine al%abetic, cre!ctoare, literele mari a%late pe coloanele impare'
4' 4e cite!c de la ta!tatur elementele unei matrici cu elemente reale, L (N 9 N), NM6C'
a) 4 !e a%ie$e matricea L.
b) 4 !e calcule$e i ! !e a%ie$e produ!ul elementelor de pe coloanele impare.
c) 4 !e calcule$e i ! !e a%ie$e matricea A, unde- A 6 ( L @
T
B
)
2
.
d) 4 !e %orme$e i ! !e a%ie$e &ectorul (, ale crui elemente !unt elementele po$iti&e din matricea A.
e) 4 !e calcule$e i ! !e a%ie$e !umele i produ!ele elementelor matricii A, a%late "n triung:iurile
:aurate-
%) 4 !e calcule$e procentul elementelor po$iti&e a%late pe diagonala !ecundar.
g) 4 !e calcule$e i ! !e a%ie$e matricea C, unde- C
6 8 5 L
T
@ L
2
.
:) 4 !e calcule$e i ! !e a%ie$e matricea ;, unde- ; 6 L @ L
2
@ L
8
@ L
4
.
i) 4 !e inter!c:imbe coloanele matricii A a!t%el- prima cu ultima, a doua cu antipenultima, etc'
>' 4e cite!c de la ta!tatur elementele unei matrici de numere "ntregi C (N 9 N), NM613'
a) 4 !e a%ie$e matricea C.
b) 4 !e calcule$e i ! !e a%ie$e procentul elementelor impare de pe liniile pare.
c) 4 !e calcule$e i ! !e a%ie$e matricea L, unde- L6C
2
.
d) 4 !e calcule$e i ! !e a%ie$e matricea ), unde- ) 6 (C @ C
T
)
2
@
I, unde I e!te matricea unitate.
e) 4 !e a%le elementul minim din matricea C.
%) 4 !e "nlocuia!c elementul ma/im din matricea C cu &aloarea val, introdu! de la ta!tatur.
g) 4 !e a%ie$e elementele matricii C care !unt numere prime.
:) 4 !e calcule$e i ! !e a%ie$e !umele i produ!ele elementelor matricii A, a%late "n triung:iurile
:aurate-

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