Sunteți pe pagina 1din 4

PCLP Laboratorul 7

Asist.drd.ing. Ana-Maria SUDUC

Laboratorul 7
Tablouri şi şiruri I

1. Noţiuni teoretice
1.1. Introducere
Un tablou (array) este un ansamblu de variabile de acelaşi tip la care se face referire folosindu-se un
acelaşi nume. Un anume element dintr-un tablou este indicat prin intermediul unui indice (index). În C/C++
toate tablourile sunt alcătuite din locaţii de memorie învecinate. Adresa de memorie cea mai mică
corespunde primului element, iar adresa cea mai mare corespunde ultimului element. Tablourile pot avea de
la una la mai multe dimensiuni. Tabloul cel mai des folosit în C/C++ este şirul (string), care este un tablou
de caractere care se încheie cu un zero. Acest mod de a privi şirurile conferă limbajului C/C++ mai multă
putere şi eficienţă decât, alte limbaje.
În C/C++, tablourile şi pointerii sunt legaţi printr-o relaţie strânsă; de obicei, orice abordare a unuia
trebuie să se refere şi la celălalt.
1.2. Tablouri unidimensionale
Forma generală de declarare a unui tablou unidimensional este:
tip variabila_nume[dimensiune]
Tip declară tipul de bază al tabloului, care este tipul fiecărui element inclus în tablou, dimensiune
defineşte numărul de elemente conţinute în tablou. În C/C++, indicele primului element din orice tablou
este 0.
Cantitatea de memorie necesară pentru stocarea unui tablou depinde direct de tipul şi dimensiunea
acestuia.
În C/C++ nu se poate transmite un întreg tablou ca argument al unei funcţii. Totuşi, funcţiei i se
poate transmite un pointer către un tablou, indicând numele tabloului fără a fi urmat de vreun indice. Ex:
void main (void)
{int i[10];
funct1(i);

1.2.1. Generarea unui pointer către un tablou
Un pointer către primul element al unui tablou se poate genera specificând numai numele tabloului,
fără a fi urmat de indice. De exemplu, fie:
int test[10];
Se poate genera un pointer pentru primul element folosind numele test. De exemplu, programul
următor atribuie variabilei p adresa primului element din tabloul test:
int *p;
int test[10];

p=test;
De asemenea, adresa primului element dintr-un tablou poate fi specificată folosind operatorul &. De
exemplu, dacă scrieţi test şi &test[0], obţinem acelaşi rezultat.
1.2.2. Şiruri
Cea mai des utilizată întrebuinţare a tablourilor unidimensionale o reprezintă şirurile. În C/C++, un
şir este definit ca un tablou de caractere care se încheie printr-un caracter nul (zero). Un caracter nul este
specificat ca ‘\0’ şi este zero. Din acest motiv, este necesar să declaraţi şirurile de caractere ca fiind cu un
caracter mai lungi decât cel mai lung şir pe care îl pot memora. De exemplu, pentru a declara un tablou şir
care poate memora un şir de 10 caractere, vom declara:
char sir[11];

1
PCLP Laboratorul 7
Asist.drd.ing. Ana-Maria SUDUC

Deşi nu dispune de un tip de dată şir, permite existenţa constantelor şir. O constantă şir este o listă
de caractere încadrate între ghilimele duble.
Nu este necesar să inserăm manual zeroul de la sfârşitul constantelor şir. Compilatorul C/C++ va
efectua automat această operaţie.
C/C++ dispune de o varietate de funcţii pentru manipularea şirurilor. Cel mai des folosite sunt:
Nume Funcţie
strcpy(s1,s2) Copiază s2 în s1
strcat(s1,s2) Concatenează s2 la sfârşitul lui s1
strlen(s1) Calculează lungimea lui s1
strcmp(s1,s2) Dă valoarea 0 dacă s1 şi s2 sunt identice, negative dacă
s1<s2 şi pozitiv dacă s1>s2
strchr(s1,ch) Returnează pointerul primei apariţii a caracterului ch în s1
strstr(s1,s2) Returnează pointerul primei apariţii a lui s2 în s1

1.2. Tablouri bidimensionale


C/C++ acceptă tablouri multidimensionale. Forma cea mai simplă a unui tablou multidimensional
este tabloul bidimensional. În esenţă, un tablou bidimensional este un tablou de tablouri unidimensionale.
Pentru a declara un tablou de întregi d, de dimensiunea 10x20 se va scrie:
int d[10][20];
Când un tablou bidimensional este folosit ca argument al unei funcţii este transmis efectiv numai
pointerul primului element. Cu toate acestea, paramentul care primeşte un tablou bidimensional trebuie să
definească măcar dimensiunea din dreapta a tabloului. Ex:
void funct1 (int x[][10])

2. Aplicaţii
2.1.Lansaţi în execuţie aplicaţia Visual C++ 2010 Express Edition:
Din meniul Start-> All Programs-> Microsoft Visual C++ 2010 Express, executaţi clic pe
opţiunea Microsoft Visual C++ 2010 Express.
2.2. Creaţi un nou proiect, Proiect1 şi un nou fişier File1.cpp:
a) Din meniul File->New, alegeţi opţiunea Project;
b) În fereastra New Project selectaţi opţiunea Win32 şi verificaţi să fie selectat Win32 Console
Application;
c) În câmpul Name introduceţi Proiect1 şi apăsaţi OK;
d) În fereastra deschisă apăsaţi Next şi apoi selectaţi opţiunea Empty Project şi apăsaţi Finish;
e) În secţiunea Solution Explorer executaţi clic dreapta pe directorul Source File şi alegeţi opţiunea
New-> Item;
f) În fereastra Add New Item selectaţi categoria Code şi verificaţi să fie selectată opţiunea C++
File (.cpp);
g) În câmpul Name tastaţi numele File1 şi apăsaţi Add.
2.3. În fişierul File1.cpp introduceţi şi testaţi următorul program care atribuie valoarea ‘R’ celui de-al
patrulea element (tablourile în C/C++ încep cu zero) din tabloul s, apoi afişează acel element.

#include <iostream>
using namespace std;

char s[11];

void main (void)


{

2
PCLP Laboratorul 7
Asist.drd.ing. Ana-Maria SUDUC

s[3] = 'R';
cout<<s[3]<<endl;
}
a) Tastaţi programul dat, respectând liniile de cod;
b) Compilaţi programul executând clic dreapta pe numele fişierului din secţiunea Solution Explorer
şi executând clic pe opţiunea Compile sau executând combinaţia de taste Ctrl+F7;
c) Corectaţi eventualele erori semnalate în secţiunea Output;
d) După rezolvarea eventualelor erori, rulaţi programul selectând, din meniul Debug, opţiunea Start
Without Debugging sau executând combinaţia de taste Ctrl+F5.
2.4. Modificaţi programul anterior astfel încât în tabloul s să memoraţi şirul de caractere test. Afişaţi
conţinutul tabloului s.
2.5. Creaţi un program care să declare un tablou, x[10], şi un pointer, p, căruia îi veţi atribui adresa
primului element din tablou. Atribuiţi valori primelor trei elemente din tablou şi afişaţi valoarea
primului element folosind pointerul p.
2.6. Testaţi următorul program care ilustrează modul de utilizare a funcţiilor de manipulare a şirurilor
prezentate mai sus:

#include <iostream>
#include <cstdio>

using namespace std;

void main (void)


{
char s1[80], s2[80];
gets(s1);
gets(s2);
cout<<"lungimile sirurilor introduse: "<<strlen(s1)<<", "<<strlen(s2)<<endl;
if (!strcmp(s1, s2))
cout<<"Sirurile sunt identice \n";
strcat(s1, s2);
cout<<s1<<endl;
strcpy(s1, "Acesta este un test \n");
cout<<s1;
if (strchr("salut",'u'))
cout<<"u este in salut \n";
if (strstr("ce mai faci","ce"))
cout<<"am gasit ce"<<endl;
}
2.7. Testaţi următorul program care defineşte un tablou bidimensional ce cuprinde numerele de la 1 la
12 şi le scrie pe rânduri succesive:
#include <iostream>
using namespace std;

void main (void)


{
int i,j,num[3][4];
for (i=0; i<3; ++i)
for (j=0; j<4; ++j)
num[i][j] = (i*4)+j+1;
for (i=0; i<3; ++i){
for(j=0; j<4; ++j)
cout<< num[i][j]<<"\t";
cout<<endl;
}
}

3
PCLP Laboratorul 7
Asist.drd.ing. Ana-Maria SUDUC

2.8. Scrieţi un program care să definească un tablou cu 100 de elemente. Alocaţi elementelor tabloului
numerele de la 0 la 99.
2.9. Testaţi următorul program care numără spaţiile incluse în şirul introdus de către utilizator. Fiecare
caracter este testat pentru a se vedea dacă este spaţiu. Dacă nu, instrucţiunea continue forţează
reluarea ciclului for. Dacă este găsit un spaţiu, valoarea variabilei spaţiu este incrementată:
#include <iostream>
#include <cstdio>
using namespace std;

void main (void)


{
char s[80], *str;
int spatiu;

cout<<"introduceti un sir: ";


gets(s);
str = s;
for (spatiu=0; *str; str++)
{
if (*str != ' ') continue;
spatiu++;
}
cout<<spatiu<< " spatii \n";
}

2.10. Scrieţi un program care să numere toate apariţiile caracterelor 'a' şi 'b' dintr-un şir de
caractere dat de utilizator.
2.11. Următorul program citeşte elementele unui vector cu dimensiunea n si afişează valoarea
maximă.
#include <iostream>
using namespace std;

void main ()
{
int a[20], max, n, i;
cout<< "Introduceti nr de elem ale vectorului: ";
cin>>n;
for (i=0; i<n; i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
max= a[0];
for (i=1; i<n; i++)
{
if(max<a[i]) max=a[i];
}
cout<<"Valoarea maxima este "<<max<<endl;
}
2.12. Realizaţi un program care să afişele valoarea minimă a unui vector cu n elemente (n dat de
utilizator).

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