Librarie de functii si proceduri pentru lucru cu matrici (masive bidimensionale) in limbajul C si C++ – Introducere

3 comments - This post in english

Library source: Librarie de functii si proceduri pentru lucru cu matrici in limbajul C si C++

Limbaj programare: C / C++
Data: 04.2002
Autori: Catalin Boja si Niculescu Silviu
Licenta: Creative Commons Attribution 3.0 License

Lucrarea de fata isi propune sa abordeze o serie de aspecte legate de construirea unei biblioteci de proceduri pentru solutionarea de probleme in care apar ca operanzi matricele. Primele capitole grupeaza subprograme pentru initializare, afisare, calcul matriceal. Ultimele capitole prezinta abordarea obiectuala a acestei probleme.S-a procedat la crearea unei biblioteci specializate pe calcule matriceale si la utilizarea in solutionarea de probleme practice.

Numeroase probleme economice utilizeaza reprezentari de date omogene carora le corespund masive unidimensionale, bidimensionale si multidimensionale. Un loc special il ocupa calculul matriceal. Problemele de bilant contabil se rezolva cu ajutorul matricelor. Problemele balantei legaturilor dintre ramuri utilizeaza reprezentarea matriceala. De asemenea, in domeniul cercetarilor operationale matricea tehnologica. Rezolvarea algoritmului simplex presupune lucrul dupa regula dreptunghiului. In econometrie, metoda celor mai mici patrate in mai multe trepte foloseste expresii de calcul matriceal.

Cum lucrarea de fata abordeaza calculul matriceal, in continuare se fac referiri care faciliteaza parcurgerea continutului de catre utilizator. In biblioteca de functii matrice.h, o matrice este declarata prin variabila X. Numarul de linii al respectivului masiv este dat de variabila intreaga n, in timp ce numarul de coloane de variabila m. Pentru parcurgerea masivelor s-au folosit variabilele contor clasice i si j, iar in cazul in care este necesara utilizarea a mai mult de doua variabile contor se folosesc literele k si l. Majoritatea functiilor din biblioteca matrice.h primesc parametrii in urmatoarea succesiune : numarul de linii, numarul de coloane si masivul, adica n, m, X. Transferul parametrilor de iesire se efectueaza in cele mai multe situatii prin valoare. In cazurile in care nu au fost respectate aceste reguli, in textele sursa se dau explicatii corespunzatoare.

Clasa matrix relizeaza modul dinamic de lucru cu matrice. Masivul bidimensional este declarat prin variabila a. Aceasta este accesata numai in interiorul clasei deoarece are dreptul de acces implicit private. Numarul de linii este reprezentat tot de variabila n, iar numarul de coloane de variabila m. Pentru o mai buna aerisire a textului sursa au fost declarate si variabilele contor i si j in interiorul clasei pentru a nu mai fi declarate in fiecare functie membra clasei matrix.

Atât biblioteca matrice.h cât si clasa matrix sunt construite in limbajul C++, fiind implementate sub BorlandC++ de Windows. Daca dezvoltarea de aplicatii se face in Visual Studio sau alte medii, trebuie avute in vedere particularitatilor de utilizare ale functiei clrscr() (cea mai simpla solutie este eliminarea functie din cod).

Lucrarea implementeaza doua moduri de lucru diferite. Varianta statica se afla in biblioteca matrice.h , iar varianta dinamica se gaseste in clasa matrix. Daca in varianta dinamica restrictiile de dimensiune sunt date de capacitatea memoriei si de experienta utilizatorului, in varianta statica dimensiunile masivelor bidimensionale sunt limitate la 30 de linii si la 30 de coloane, iar cele unidimensionale la 1000 de componente.

In varianta statica matricele sunt definite astfel :

int x[30][30];

In varianta dinamica definirea este realizata in urmatorul mod:

int **a;
  • se aloca dinamic un vector de pointeri;
  • componentele vectorului de pointeri se initializeaza cu zonele de memorie corespunzatoare unei linii din matrice.

Alocarea zonei de memorie se realizeaza cu ajutorul unei functii membre clasei matrix si este prezentata detaliat in capitolul Functii de intrare si iesire. Tot in acest capitol se prezinta si constructorii clasei.

Traversarea matricei in varianta statica se efectueaza utilizând instructiunile:

for (i=0;i<n;i++)
     for(j=0;j<m;j++)

In varianta dinamica la alocarea memoriei masivului bidimensional traversarea este realizata intr-o singura instructiune for.

int **pmat=(int **)malloc(n*sizeof(int*));
	for (int i=0;i<n;i++) pmat[i]=(int*)malloc(m*sizeof(int))

Pentru o compatibilitate ridicata in functiile membre si prietene traversarea matricei se realizeaza la fel ca in varianta statica.

Cu speranta ca toate aceste precizari vor face posibila intelegerea continutului acestei lucrarii, autorii sunt recunoscatori tuturor celor care prin observatiile si sugestiile lor vor contribui la imbunatatirea acestei lucrari.

Codul aflat in aceasta librarie este pus la dispozitia utilizatorilor de catre autori, Catalin Boja si Silviu Niculescu, sub Creative Commons Attribution 3.0 License

,