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

Functiile de comparare a matricelor sunt folosite cu scopul de afla informatii despre o matrice sau un set de matrice din punctul de vedere al tipului unei matrice, a tipului elementelor ce o compun sau a numarului de aparitii in cadrul acelei matrice al unei chei definite de utilizator.

Functia symmet verifica daca o matrice patratica este simetrica. Functia primeste ca date de intrare numarul de linii si de coloane al matricei, adica n si m, si matricea X care va fi verificata. Matricea este definita static. Functia returneaza adresa unei variabile de tip intreg, *er, unde se va scrie 1 daca matricea este simetrica si 0 daca matricea nu este simetrica. De asemenea functia verifica si daca matricea nu este patratica, caz in care la adresa acelei variabile se scrie 0.

Functia este :

void symmet(int n,int m,int x[30][30],int *er)
{
int i,j;
			//verifica daca matricea este patratica
if(n!=m) printf("\n The matrix must be a square !");   
else
   	{
	 *er=1;
	for(i=0;i

Functia check_unit verifica daca matricea este sau nu matricea unitate. Functia are ca parametrii de intrare dimensiunile matricei X, definita static, care este verificata si anume n, numarul de linii, si m, numarul de coloane. Printre acesti parametrii se afla si adresa unei variabile de tip intreg, *er, unde se va scrie 1, daca matricea este matricea unitate ori 0,daca matricea nu este patratica sau nu este matricea unitate.

Functia este :

void check_unit(int n,int m,int x[30][30],int *er)
{
int i,j;
			//verifica daca matricea este patratica
if(n!=m) printf("\n The matrix must be a square !");
   else
   	{
	 *er=1;
	for(i=0;i

Functia check_no verifica daca un numar dat de utilizator functiei este sau nu in matrice. Parametrii de intrare ai functiei sunt dimensiunile unei matrice definita static, n numarul de linii, m numarul de coloane si matricea X. Rezultatul verificarii este cunoscut prin intermediul unei variabile de tip intreg eror, a carei adresa este parametru de intrare al functiei. Daca numarul cautat este in matrice eror va avea valoare 1 si daca numarul cautat nu este in matrice atunci eror va avea valoarea 0. Numarul ce este cautat este citit in interiorul functiei.

Functia este :

void check_no(int n,int m,int x[30][30],int *eror)
{
int i,j,k,z;
// se citeste de la tastatura numsrul de cautat
printf("\n The searched number is::");
*eror=0;
k=scanf("%d",&z);
//are loc validarea lui
valid_no_integer(&z,k);

for(i=0;i

Functia check_line_column primeste ca date de intrare dimensiunile unei matrice, adica numarul de linii n si numarul de coloane m, si matricea respectiva X, definita static. Functia verifica daca un vector citit de la tastatura in interiorul functiei reprezinta sau nu o coloana a matricei. O variabila numita eror, a carei adresa este parametru de intrare al functiei, va lua valorile 1 sau 0 daca este adevarat sau daca nu.

La citirea vectorului, elementele sale sunt validate cu ajutorul functiei valid_no_integer.

Functia este :

void check_line_column(int n,int m,int x[30][30],int *eror)
{
int i,j,h[30],k;
//se citeste vectorul si se validează elementele sale
printf("\n The line to be checked is :");
//dimensiunea vectorului este n
for(i=0;i

Functia check_line_line verifica daca un vector citit de la tastatura in interiorul functiei este sau nu linie intr-o matrice X, definita static,si care este parametru de intrare al functiei. Ca date de intrare functia mai are dimensiunile matricei, n linii si m coloane, si adresa unei variabile de tip intreg eror, unde se va scrie 1 in caz de adevar si 0 in caz de neadevar.

La citirea vectorului, elementele sale sunt validate cu ajutorul functiei valid_no_integer.

Functia este:

void check_line_line(int n,int m,int x[30][30],int *eror)
{
int i,j,h[30],k;
//se citeşte vectorul şi se validează elementele sale
printf("\n The line to be checked is:");
//dimensiunea vectorului este m
for(j=0;j

Urmatoarele 2 functii check_columns si check_lines verifica daca o matrice are sau nu coloane respectiv linii egale. Ambele functii au ca parametrii : numarul de linii al matricei, n, numarul de coloane al amtricei, m, matricea X definita static si adresa unei variabile de tip intreg, eror, unde se va scrie 1, daca se verifica egalitatea sau 0, daca nu se verifica.

Principiul care sta la baza celor doua functii este faptul ca se ia fiecare coloana, respectiv linie, si se compara cu urmatoarele afisandu-se coloanele sau liniile egale.

Functiile sunt :

void check_columns(int n,int m,int x[30][30],int *eror)
{
int i,j,k,l;
*eror=1;
l=0;
// se iau coloanele pe rand
for(j=0;j

si respectiv :

void check_lines(int n,int m,int x[30][30],int *eror)
{
int i,j,k,l;
*eror=1;
l=0;
//se iau liniile pe rand
for(i=0;i

Functia key_appar_no avand ca parametrii numarul de linii si de coloane al unei matrice, n respectiv m, matricea respectiva X, definita static, si adresa unei variabile intregi v ; va numara de cate ori un numar citit de la tastatura se afla in acea matrice. Numarul de aparitii va fi memorat la adresa variabilei v.

Numarul citit de la tastatura va fi validat cu ajutorul functiei valid_no_integer.

Functia este :

void key_appar_no(int n,int m,int x[30][30],int *v)
{
int i,j,k,c,l;
clrscr();
//se citeste numarul de la tastatura si se valideaza
printf("\n Type the key:");
l=scanf("%d",&c);
valid_no_integer(&c,l);

k=0;
//se numara aparitiile sale in matrice
for (i=0;(i

Urmatoarele doua functii key_appar_no_line si key_appar_no_column numara de cate ori apare numar citit de la tastatura intr-o linie respectiv coloana indicata de utilizator. Ambele functii au aceiasi parametrii : n numarul de linii al matricei, m numarul de coloane al matricei, matricea X definita static si adresa unei variabile intregi v. La adresa acelei variabile se va scrie numarul de aparitii al cheii de cautat in coloana sau linia indicata de utilizator.

Functiile sunt :

void key_appar_no_line(int n,int m,int a[30][30],int *v)
{
int i,j,k,c,q,l;
clrscr();
//se citeste cheia de cautat si se valideaza
printf("\n Type the key:");
l=scanf("%d",&c);
valid_no_integer(&c,l);

// se indica linia in care se cauta
printf("\n Type the line :\t");
scanf("%d",&q);
k=0;
//se numara aparitiile cheii
for (j=0;j

si respectiv

void key_appar_no_column(int n,int m,int a[30][30],int *v)
{
int i,j,k,c,q,l;
clrscr();

//se citeste cheia de cautat si se valideaza
printf("Type the key:");
scanf("%d",&c);
valid_no_integer(&c,l);

// se indica coloana in care se cauta
printf("\n Type the column:\t");
scanf("%d",&q);
k=0;
//se numara aparitiile cheii
for (i=0;i

Pe langa aceste functii aflate in biblioteca matrice.h, in clasa matrix au fost supraincarcati operatorii % si = = , pentru a se putea efectua operatii de comparare asupra obiectelor de tip matrix. Operatorul % supraincarcat face acelasi lucru ca si functia symmet verificand daca o matrice este simetrica.

Operatorul == verifica daca doua obiecte de tip matrix sunt egale, adica verifica daca doua matrice sunt egale. Operatorul primeste ca date de intrare adresa obiectului cu care se compara si returneaza 0 daca cele doua obiecte sunt diferite sau 1 daca obiectele sunt egale.

Secventa de cod care realizeaza acest lucru este :

int matrix::operator ==(matrix &b)
{
int k=0;
//prima data se verifica dimensiunile celor doua obiecte
if ((n==b.n)&&(m==b.m))
			   {
		//dacă au aceeasi dimensiune, se verifica element cu element
			for(i=0;i

Functiile prezentate mai sus si care apartin bibliotecii sunt prezente si in cadrul clasei matrix , dar ele nu mai au parametrii de intrare, ele returnand valori de tip integer.

Modelele lor sunt :

int check_line_column();

int check_line_line();

int check_columns();

int check_lines();

int check_unit();

int key_appar_no(int);

int key_appar_no_line(int,int);

int key_appar_no_column(int,int);

Pe langa aceste modificari de suprafata suferite de definirile functiilor pentru a se lucra cu obiecte, algoritmul folosit de fiecare functie este acelasi in cadrul bibliotecii si clasei.

Tutoriale anterioare pe aceasta tema: