Tablouri

Tabloul este o colecție de date în care fiecare element poate fi identificat pe bază unui index, colecția asigurând timp de acces constant pentru fiecare element. Prin reprezentarea tabloului t se înțelege plasarea elementelor în locații succesive de memorie, indexarea uzuală a elementelor tabloului în majoritatea limbajelor de programare începând cu 0:

t[0], t[1], t[2]…, t[n-1]

unde n este dimensiunea tabloului (în sensul numărului de componente)
Locațiile de memorie pot fi numerotate, putând accesa direct orice element. Timpul de
accesare al elementului 1, de exemplu, fiind acelaşi cu timpul de accesare al elementului n.
Funcție de dimensiunea tablourilor (în sensul numărului de indici folosiți pentru
indexarea unui element) o clasificare a acestora ar cuprinde:
 tablouri unidimensionale: vectori
 tablouri bidimensionale: matrice
 tablouri tridimensionale, multidimensionale: masive.

Parcurgerea tablourilor unidimensionale (vectorilor):

// VectoriCPP.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
#define dim 30 //directiva de preprocesor ce defineste constanta dim
 
int main()
{
	int n, tab[dim]; //alocare statica a tabloului
	cout << "Dimensiunea tabloului (intre 1 si dim), n: ";
	cin >> n;
	while (n <= 0 || n > dim)
	{
		cout << "n: ";
		cin >> n;
	}
	cout << "Citirea elementelor tabloului. " << endl;
	for (int i = 0; i < n; i++)
	{
		cout << "tab[" << i << "]=";
		cin >> tab[i];
	}
	cout << "Afisarea elementelor tabloului. " << endl;
	cout << "Varianta 1: ";
	for (int i = 0; i < n; i++)
		cout << *(tab + i) << " "; //tab[i]
	cout << endl;
	cout << "Varianta 2: ";
	int* const ptc = tab;
	for (int i = 0; i < n; i++)
		cout << *(ptc + i) << " "; //ptc[i]
	cout << endl;
	cout << "Varianta 3: ";
	int *pt = tab;
	//pentru a putea folosi operatorul ++, 
	//pt nu trebuie sa fie constant
	for (int i = 0; i < n; i++)
		cout << *pt++ << " ";
	cout << endl;
	cout << "Varianta 4: ";
	int *p = tab, *endp = tab + n - 1;
	//pointerul p retine adresa primului element al tabloului
	//pointerul endp retine adresa ultimului element al tabloului
	for (; p <= endp; p++)
		cout << *p << " ";
	cout << endl;
	system("pause");
}

Parcurgerea tablourilor bidimensionale (matricelor):

// MatriciCPP.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
const int dim1 = 30, dim2 = 30;
 
int main()
{
	int m, n, mat[dim1][dim2]; //alocare statica
	cout << "Dimensiunile tabloului." << endl;
	cout << "Numarul de linii: (intre 1 si dim1), m: ";
	cin >> m;
	while (m <= 0 || m > dim1)
	{
		cout << "m: ";
		cin >> m;
	}
	cout << "Numarul de coloane (intre 1 si dim2), n: ";
	cin >> n;
	while (n <= 0 || n > dim2)
	{
		cout << "n: ";
		cin >> n;
	}
	cout << "Citirea elementelor tabloului. " << endl;
	for (int i = 0; i < m; i++)
	for (int j = 0; j < n; j++)
	{
		cout << "mat[" << i << "," << j << "]= ";
		cin >> mat[i][j];
		//sau (*(mat+i))[j], *(mat[i]+j), *(*(mat+i)+j)
	}
	cout << "Afisarea elementelor tabloului." << endl;
	cout << "Varianta 1: " << endl;
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
			cout << (*(mat + i))[j] << " ";
		cout << endl;
	}
	cout << endl;
	cout << "Varianta 2: " << endl;
	for (int i = 0; i < m; i++)
	{
		int *p = mat[i], *endp = mat[i] + n - 1;
		//p retine adresa lui mat[i][0]
		//endp retine adresa lui mat[i][n-1]
		for (; p <= endp; p++)
			cout << *p << " ";
		cout << endl;
	}
	cout << "Varianta 3: " << endl;
	int(*p1)[dim2], (*endp1)[dim2];
	//p1 si endp1 pointeri catre tablouri cu dim2 intregi
	p1 = mat; //p1 retine adresa lui mat[0]
	endp1 = mat + m - 1; //endp1 retine adresa lui mat[m-1]
	for (; p1 <= endp1; p1++)
	{
		for (int j = 0; j < n; j++)
			cout << (*p1)[j] << " ";
		cout << endl;
	}
	cout << endl;
	cout << "Varianta 4: " << endl;
	int* pp[dim1]; //tablou de dim1 pointeri catre int
	for (int i = 0; i < m; i++)
		pp[i] = mat[i];
	int **matrice; //pointer catre int*
	matrice = pp;
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
			cout << *(*(matrice + i) + j) << " ";
		cout << endl;
	}
	cout << endl;
	system("pause");
}
 

 

Leave a comment