Sunteți pe pagina 1din 11

Tablouri

Unitatea de învăţare nr. 10

TABLOURI

Cuprins Pagina

Obiectivele unităţii de învăţare nr. 10 2

10 Tablouri 2

10.1 Declararea tablourilor 2

10.2. Tablouri unidimensionale 3

10.3 Operații cu vectori 4

10.4 Exemple de prelucrări ale datelor organizate în vectori 5

Test de autoevaluare 6

Lucrare de verificare – unitatea de învăţare nr. 10 6

Răspunsuri şi comentarii la întrebările din testele de autoevaluare 8

Recapitulare 9

Bibliografie – unitatea de învăţare nr. 10 9

1
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Tablouri

OBIECTIVELE unităţii de învăţare nr. 10

Principalele obiective ale Unităţii de învăţare nr. 10 sunt:

 Înţelegerea organizării datelor în tablouri


 Familiarizarea cu tablourile unidimensionale
 Modelarea datelor de prelucrat pe principiul utilizării
tablourilor
 Implementarea cu succes a problemelor care
utilizează vectori

10. TABLOURI
Un tablou este o colecţie de date, de acelaşi 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ă poziţia
elementului în cadrul tabloului.
În funcţie de numărul indicilor utilizaţi pentru a referi elementele tabloului, putem
întâlni 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 întregi sau
expresii constante întregi (a căror valoare este evaluată la compilare) care reprezintă
limitele superioare ale indicilor tabloului.

2
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Tablouri

De exemplu, în secvenţa:
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 conţine n elemente, indicii elementelor au valori întregi din intervalul [0, n-1].
La întâlnirea declaraţiei unei variabile tablou, compilatorul alocă o zonă de
memorie continuă (dată de produsul dintre dimensiunea maximă şi numărul de octeţi
corespunzător tipului tabloului) pentru păstrarea 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 următor, atribuirea de valori elementelor tabloului
vector). Se pot efectua operaţii asupra fiecărui element al tabloului, nu asupra întregului
tablou.
Exemplu:
// Declararea tabloului vector
int vector[6];
vector
// Iniţializarea elementelor tabloului
vector[0]=100; 100 vector[0]
vector[1]=101; 101 vector[1]
vector[2]=102; 102 vector[2]
vector[3]=103; 103 vector[3]
vector[4]=104; 104 vector[4]
vector[5]=105; 105 vector[5]
Exemplu:
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 iniţializate în momentul declarării:


declaraţie_tablou=listă_valori;

3
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Tablouri

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};

vector 100 101 102 103 104 105


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

La declararea unui vector cu iniţializarea elementelor sale, numărul maxim de


elemente ale tabloului poate fi omis, caz în care compilatorul determină automat
mărimea tabloului, în funcţie de numărul elementelor iniţializate.
Exemplu:
char tab[ ]={ ’A’, ’C’, ’D’, ’C’};

tab ’A’ ’B’ ’C’ ’D’


[0] 1 [3]

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

data 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. OPERAȚII CU VECTORI


a) Citirea elementelor unui vector:
double a[100];
int n,i;
cout<<”Dati numarul de elemente al vectorului”; cin>>n;
for (i=0; i<n; i++)
{ cout<<”a["<<i<<”]=”; //afişarea unui mesaj prealabil citirii fiecărui element
cin>>a[i]; //citirea valorii elementului de indice i
}

b) Afişarea elementelor unui vector:


cout<<”Vectorul introdus este:”<<endl;
for (i=0; i<n i++)

4
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Tablouri

cout<<a[i]<<’ ’;
c) Afişarea 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 prelucrări ale datelor organizate în vectori

1. Se citeşte un vector cu n componente reale. Aflaţi suma elementelor


vectorului.

#include <iostream.h>
#include <conio.h>
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];
s=s+v[i];
}
cout<<"suma elemtelor vectorului este "<<s;
getch();
}

2. Se citeşte un vector cu n componente reale. Aflaţi maximul dintre acestea.


#include <iostream.h>
#include <conio.h>
main( )
{ int n, v[50],i,max;
cout<<"Dati numarul elementelor vectorului"; cin >>n;
for(i=1;i<=n;i++)
{
cout<<"dati 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 "<<max;
getch();
}
5
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Tablouri

6
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Tablouri

Test de autoevaluare 10
1. Se citeşte un vector cu n componente reale. Aflaţi minimul
dintre acestea.

2. Se citesc doi vectori a şi b, având elemente întregi. Aflaţi 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 învăţare nr. 10


1. Determinati cate elemente sunt nule, strict negative si
strict pozitive dintr-un vector de numere intregi.
Rezolvare:
Folosim trei variabile pentru numărare:
 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;
getch( ); }

7
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii

xy ( x(
2
xy x y) y ) 2
Tablouri

2. Într-un şir de numere întregi, să se afişeze suma


elementelor de pe poziţiile pare şi suma celor de pe poziţii
impare.
Exemplu: Date de intrare n=6 numere 3 8 5 4 6 7
Date de ieşire 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 citeşte un număr natural n, reprezentând un cod ce


trebuie reprezentat binar. Să se scrie un program care face
această transformare.
Rezolvare:
Problema se reduce la a transforma un număr din baza 10 în baza
Algoritmul de transformare presupune împărţirea numărului respectiv
la 2 şi reţinerea restului acestei împărţiri şi, atât timp cât câtul împărţirii
este diferit de 0, acesta va trece în locul deîmpărţitului, operaţia
repetându-se.
Rezultatul transformării reprezintă succesiunea de resturi obţinute,
în ordine inversă.
Programul C++, care face acestă transformare este următorul:

8
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Tablouri

#include <iostream.h>
#include <conio.h>
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;}
cout<<"Codificarea binara a lui "<<n<<" este ";
for(i=k;i>=1;i--) cout<<baza2[i];
getch();
}

Răspunsuri şi comentarii la întrebările din testele de


autoevaluare

1. #include <iostream.h>
#include <conio.h>
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();
}

9
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Tablouri

2. #include <iostream.h>
#include <conio.h>
main()
{ int n, a[50],b[50],c[50],i;
cout<<"Dati numarul 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();
}

Recapitulare
Datele de același tip pot fi organizate în tablouri, în vederea
prelucrării, acestea permițând prelucrarea lor, atunci când sunt în volum
mare.
Elementele unui tablou se memorează în locații succesive de
memorie și pot fi identificate prin numele tabloului şi indicii (numere
întregi) care reprezintă poziţia elementului în cadrul tabloului.
În funcţie de numărul indicilor utilizaţi pentru a referi elementele
tabloului, putem întâlni tablouri
 unidimensionale (vectorii)
 multidimensionale (matricile sunt tablouri bidimensionale).
Înainte de utilizare, variabilele de tip tablou trebuie declarate.
Sintaxa declarării 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
mărul(a căror valoare este evaluată la compilare) care reprezintă numărul
maxim de elemente ale tabloului.
Tablourile unidimensionale sunt tablouri cu un singur indice
(vectori). Dacă tabloul conţine n elemente, indicii elementelor au valori
10
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii
Tablouri

î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=numărul 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

Bibliografie

11
Programarea calculatoarelor și limbaje de programare – Curs şi aplicaţii

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