Sunteți pe pagina 1din 11

Tablouri

Unitatea de nvare nr. 10


TABLOURI

Cuprins

Pagina

Obiectivele unitii de nvare nr. 10 10 10.1 Tablouri Declararea tablourilor

2 2 2 3 4 5 6 6 8 9 9

10.2. Tablouri unidimensionale 10.3 10.4 Operaii cu vectori Exemple de prelucrri ale datelor organizate n vectori

Test de autoevaluare Lucrare de verificare unitatea de nvare nr. 10 Rspunsuri i comentarii la ntrebrile din testele de autoevaluare Recapitulare Bibliografie unitatea de nvare nr. 10

Programarea calculatoarelor i limbaje de programare Curs i aplicaii

Tablouri

OBIECTIVELE unitii de nvare nr. 10 Principalele obiective ale Unitii de nvare nr. 10 sunt:

nelegerea organizrii datelor n tablouri Familiarizarea cu tablourile unidimensionale Modelarea datelor de prelucrat pe principiul utilizrii tablourilor Implementarea cu succes a problemelor care utilizeaz vectori

10. TABLOURI
Un tablou este o colecie de date, de acelai tip, situate ntr-o zon de memorie continu (elementele tabloului se afl la adrese succesive). Tablourile sunt variabile compuse (structurate), deoarece grupeaz mai multe elemente. Variabilele tablou au nume, iar tipul tabloului este dat de tipul elementelor sale. Elementele tabloului pot fi referite prin numele tabloului i indicii (numere ntregi) care reprezint poziia elementului n cadrul tabloului. n funcie de numrul indicilor utilizai pentru a referi elementele tabloului, putem ntlni tablouri unidimensionale (vectorii) sau multidimensionale (matricile sunt tablouri bidimensionale).

10.1. DECLARAREA TABLOURILOR


Ca i variabilele simple, variabilele tablou trebuie declarate nainte de utilizare. Modul de declarare: tip nume_tablou [dim_1][dim_2][dim_n] ; unde:

tip reprezint tipul elementelor tabloului; dim_1,dim_2,...,dim_n sunt numere


2

Programarea calculatoarelor i limbaje de programare Curs i aplicaii

vector

Tablouri ntregi sau expresii constante ntregi (a cror valoare este evaluat la compilare) care reprezint limitele superioare ale indicilor tabloului.

De exemplu, n secvena: int k[50] ; char c[8] ; float a[100] ; se declar tablourile c , k i a cu, respectiv, 50 de elemente ntregi, 8 elemente de tip caracter i 100 elemente de tip float.

10.2. TABLOURI UNIDIMENSIONALE


Tablourile unidimensionale sunt tablouri cu un singur indice (vectori). Dac tabloul conine n elemente, indicii elementelor au valori ntregi din intervalul [0, n-1]. La ntlnirea declaraiei unei variabile tablou, compilatorul aloc o zon de memorie continu (dat de produsul dintre dimensiunea maxim i numrul de octei corespunztor tipului tabloului) pentru pstrarea valorilor elementelor sale. Numele tabloului poate fi utilizat n diferite expresii i valoarea lui este chiar adresa de nceput a zonei de memorie care i-a fost alocat. Un element al unui tablou poate fi utilizat ca orice alt variabil (n exemplul urmtor, atribuirea de valori elementelor tabloului vector). Se pot efectua operaii asupra fiecrui element al tabloului, nu asupra ntregului tablou. Exemplu: // Declararea tabloului vector int vector[6]; // Iniializarea elementelor tabloului vector[0]=100; vector[1]=101; vector[2]=102; vector[3]=103; vector[4]=104; vector[5]=105; Exemplu:
3

Programarea calculatoarelor i limbaje de programare Curs i aplicaii

Tablouri double alpha[5], beta[5], gama[5]; int i=2; alpha[2*i-1] = 5.78; alpha[0]=2*beta[i]+3.5; gama[i]=alpha[i]+beta[i]; //permis gama=alpha+beta; //nepermis Variabilele tablou pot fi iniializate n momentul declarrii: declaraie_tablou=list_valori; Valorile din lista de valori sunt separate prin virgul, iar ntreaga list este inclus ntre acolade: Exemple: 1. int vector[6]={100,101,102,103,104,105};

[0] 2. double x=9.8; double a[5]={1.2, 3.5, x, x-1, 7.5};

[5]

La declararea unui vector cu iniializarea elementelor sale, numrul maxim de elemente ale tabloului poate fi omis, caz n care compilatorul determin automat mrimea tabloului, n funcie de numrul elementelor iniializate. Exemplu: char tab[ ]={ A, C, D, C};

[0]

[3]

float data[5]={ 1.2, 2.3, 3.4 };

[0] [4] Adresa elementului de indice i dintr-un tablou unidimensional poate fi calculat astfel: adresa_elementului_i = adresa_de_baz + i lungime_element

10.3. OPERAII CU VECTORI


a) Citirea elementelor unui vector:
4

Programarea calculatoarelor i limbaje de programare Curs i aplicaii

Tablouri double a[100]; int n,i; cout<<Dati numarul de elemente al vectorului; cin>>n; for (i=0; i<n; i++) { cout<<a["<<i<<]=; //afiarea unui mesaj prealabil citirii fiecrui element cin>>a[i]; //citirea valorii elementului de indice i }
Afiarea elementelor unui vector:

cout<<Vectorul introdus este:<<endl; for (i=0; i<n i++) cout<<a[i]<< ; b) Afiarea elementelor unui vector n ordine invers: cout<<Elementele vectorului n ordine invers:<<endl; for (i=n-1; i>=0 i--) cout<<a[i]<< ;

10.4. Exemple de prelucrri ale datelor organizate n vectori


1. Se citete un vector cu n componente reale. Aflai suma elementelor vectorului. #include <iostream.h> #include <conio.h> void main(){ int n, v[50],i,s=0; cout<<"Dati numarul elementelor vectorului"; cin >>n; for(i=1;i<=n;i++) { cout<<"Dati elementul "<<i<<":"; cin>>v[i]; s=s+v[i];} cout<<"suma elementelor vectorului este "<<s; getch();} 2. Se citete un vector cu n componente reale. Aflai maximul dintre acestea. #include <iostream.h> #include <conio.h> void main(){ int n, v[50],i,max ; cout<<"Dati numarul elementelor vectorului"; cin >>n; for(i=1;i<=n;i++) {
5

Programarea calculatoarelor i limbaje de programare Curs i aplicaii

Tablouri cout<<"elementul "<<i<<":"; cin>>v[i];} max=v[1]; for(i=2;i<=n;i++) if (max<v[i]) max=v[i]; cout<<"maximul elementelor vectorului este "<<s; getch(); }

Programarea calculatoarelor i limbaje de programare Curs i aplicaii

Tablouri

Test de autoevaluare 10
1. Se citete un vector cu n componente reale. Aflai minimul dintre acestea. 2. Se citesc doi vectori a i b, avnd elemente ntregi. Aflai suma c a celor doi vectori. Elementele ci, ale vectorului c, se calculeaz astfel: ci=ai+bi, pentru orice i, ntre 1 i n.

Lucrare de verificare la Unitatea de nvare nr. 10


1. Determinati cate elemente sunt nule, strict negative si strict pozitive dintr-un vector de numere intregi. Rezolvare: Folosim trei variabile pentru numrare: nr_poz pt. elementele pozitive; nr_neg pt. elementele negative; nr_nul pt. elementele nule Pentru numararea elementelor care indeplinesc o anumita proprietate vom initializa mai intai elementele de numarare cu 0. Vom parcurge pe rand, element cu element, verificand proprietatea ceruta. #include <iostream.h> #include <conio.h> void main(){ int n, v[50],i, nr_poz =0; nr_neg =0; nr_nul=0 ; cout<<"Dati numarul elementelor vectorului"; cin >>n; for(i=1;i<=n;i++) { cout<<"elementul "<<i<<":"; cin>>v[i];} for(i=1;i<=n;i++) { if (v[i]>0) nr_poz++; else if (v[i]<0) nr_neg++ else nr_nul++;} cout<<nr_poz<< elemente pozitive<<endl; cout<<nr_neg<< elemente negative<<endl; cout<<nr_nul<< elemente nule<<endl;
7

xy = (+ + 2 xy =( xx y ) y)

Programarea calculatoarelor i limbaje de programare Curs i aplicaii

Tablouri getch( ); }
2. ntr-un ir de numere ntregi, s se afieze

suma elementelor de pe poziiile pare i suma celor de pe poziii impare. Exemplu: Date de intrare n=6 numere 3 8 5 4 6 7 Date de ieire simp=15 spar=18. #include <iostream.h> #include <conio.h> void main( ) { int n, v[50],i,s=0; cout<<"Dati numarul elementelor vectorului"; cin >>n; for(i=1;i<=n;i++) { cout<<"elementul "<<i<<":"; cin>>v[i]; if (i%2==1) s=s+v[i];} cout<<"suma elementelor de pe pozitiile impare este "<<s; getch( ); } 3. Se citete un numr natural n, reprezentnd un cod ce trebuie reprezentat binar. S se scrie un program care face aceast transformare. Rezolvare: Problema se reduce la a transforma un numr din baza 10 n baza 2. Algoritmul de transformare presupune mprirea numrului respectiv la 2 i reinerea restului acestei mpriri i, att timp ct ctul mpririi este diferit de 0, acesta va trece n locul dempritului, operaia repetndu-se. Rezultatul transformrii reprezint succesiunea de resturi obinute, n ordine invers. Programul C++, care face acest transformare este urmtorul: #include <iostream.h> #include <conio.h> void main(){ int n, baza2[50],k=0,i; /* vectorul baza2 retine cifrele binare (resturile la 2) ale numarului, in ordinea in care acestea sunt aflate*/ cout<<"Codul =";cin >>n; while (n!=0) { k++; baza2[k]=n%2; n=n/2;}
8

Programarea calculatoarelor i limbaje de programare Curs i aplicaii

Tablouri cout<<"Codificarea binara a lui "<<n<<" este "; for(i=k;i>=1;i--) cout<<baza2[i]; getch(); }

Rspunsuri i comentarii la ntrebrile din testele de autoevaluare


1. #include <iostream.h> #include <conio.h> void main(){ int n, v[50],i,min; cout<<"Dati numarul elementelor vectorului"; cin >>n; for(i=1;i<=n;i++) { cout<<"elementul "<<i<<":"; cin>>v[i];} min=v[1]; for(i=2;i<=n;i++) if (min>v[i]) min=v[i]; cout<<"minimul este "<<min; getch(); } 2. #include <iostream.h> #include <conio.h> void main(){ int n, a[50],b[50],c[50],i; cout<<"Dati elementelor vectorilor"; cin >>n; cout<<"vectorul a:"<<endl; for(i=1;i<=n;i++) { cout<<"a["<<i<<"]:"; cin>>a[i];} cout<<"vectorul b:"<<endl; for(i=1;i<=n;i++) { cout<<"b["<<i<<"]:"; cin>>b[i]; c[i]=a[i]+b[i];} for(i=1;i<=n;i++) cout<<c[i]<<" "; getch(); }

Programarea calculatoarelor i limbaje de programare Curs i aplicaii

Tablouri

Recapitulare
Datele de acelai tip pot fi organizate n tablouri, n vederea prelucrrii, acestea permind prelucrarea lor, atunci cnd sunt n volum mare. Elementele unui tablou se memoreaz n locaii succesive de memorie i pot fi identificate prin numele tabloului i indicii (numere ntregi) care reprezint poziia elementului n cadrul tabloului. n funcie de numrul indicilor utilizai pentru a referi elementele tabloului, putem ntlni tablouri unidimensionale (vectorii) multidimensionale (matricile sunt tablouri bidimensionale).

nainte de utilizare, variabilele de tip tablou trebuie declarate. Sintaxa declarrii unei asemenea variabile este: nume_tablou [dim_1][dim_2][dim_n] ; unde:

tip reprezint tipul elementelor tabloului (tip de baz), iar dim_1,dim_2,...,dim_n sunt numere ntregi sau expresii constante ntregi mrul(a cror valoare este evaluat la compilare) care reprezint numrul maxim de elemente ale tabloului. Tablourile unidimensionale sunt tablouri cu un singur indice (vectori). Dac tabloul conine n elemente, indicii elementelor au valori ntregi din intervalul [0, n-1]. Declararea unei variabile de tip tablou unidimensional se face astflel: tip nume[dimmax], unde tip=tipul de date al elementelor nume=numele tabloului dimmax=numrul maxim de elemente Identificarea unui element dintr-un vector se face pe baza indicelui acestuia, astfel: nume[i] identific n vectorul nume elmentul de indice i
10

Programarea calculatoarelor i limbaje de programare Curs i aplicaii

Tablouri

Bibliografie

11

Programarea calculatoarelor i limbaje de programare Curs i aplicaii