Sunteți pe pagina 1din 5

C++: Functii prieten si supraincarcarea op.

matematici - aplicatii rezolvate


1) Se cere sa se implementeze conceptul de vector bidimensional. În acest sens vom spune ca
vectorul bidimensional este un sistem ordonat de 2 numere reale. Asupra vectorilor vom
defini operatiile elementare (rezolvare...)

2) Sa se scrie un program care citeşte de la tastatura doua matrice şi calculeaza suma,


diferenta şi transpusa acestora (rezolvare...)

Rezolvari
1) Se cere sa se implementeze conceptul de vector bidimensional. În acest sens vom spune ca
vectorul bidimensional este un sistem ordonat de 2 numere reale. Asupra vectorilor vom
defini urmatoarele operatii:
- operatii de atribuire de valori în elementele vectorului
- suma a doi vectori;
- diferenta a doi vectori;
- produsul dintre un vector si un scalar;
- negativarea unui vector;
- produsul scalar a doi vectori;
- afisarea componentelor vectorului sub forma unei perechi de elemente.

Sa se scrie un program care citeste 2 perechi de numere ce reprezinta componentele vectorilor


a si b, apoi calculeaza si afiseaza:
- suma: a+b;
- diferenta: a-b;
- suma: 3*a+4*b;
- diferenta: a*2 -b*4;
- suma: -a-b;
- produsul scalar al celor doi vectori.
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;

class vb
{
float e1,e2; //elementele vectorului
public:
//constructor de initializare cu parametri
vb(float, float);
//rescrierea constructorului implicit de initializare
vb(){}
//suma a doi vectori: r=vb1+vb2
vb operator+(vb);
//negativarea unui vector: r=-vb
vb operator-();
//diferenta a doi vectori: r=vb1-vb2
vb operator-(vb);
//produsul dintre un vector si un numar: r=vb*a
vb operator*(int);
//produsul dintre un numar si un vector oarecare: r=a*vb
friend vb operator*(int, vb);
//produsul scalar a 2 vectori r=(vb1,vb2)
double operator*(vb);
//citirea unui vector
void citire(char*);
//afisarea unui vector
void afisare(char*);
};

inline vb::vb(float a, float b)


{
e1=a;
e2=b;
}

vb vb::operator + (vb v) //suma a doi vectori


{
vb r;
r.e1=e1+v.e1;
r.e2=e2+v.e2;
return r;
}

vb vb::operator - () //negativarea unui vector


{
vb r;
r.e1=-e1;
r.e2=-e2;
return r;
}

vb vb::operator - (vb v) //diferenta a doi vectori


{
return (*this)+(-v);
}

vb vb::operator * (int a) //produsul dintre un vector si un numar


{
vb r;
r.e1=a*e1;
r.e2=a*e2;
return r;
}

vb operator * (int a, vb v) //produsul dintre un numar si un vector


{
return v*a;
/*operatorul * este supraincarcat pentru produsul dintre un vector
si
un numar prin functia precedenta */
}

double vb::operator * (vb v) //produsul scalar a doi vectori


{
return e1*v.e1+e2*v.e2;
}
void vb::citire(char *s)
{
cout<<"\nDati elementele vetorului "<<s<<":\n";
cout<<"\tprimul element: "; cin>>e1;
cout<<"\tal doilea element: "; cin>>e2;
}

void vb::afisare(char* sir)


{
cout<<"\nVectorul "<<sir<<": ("<<e1<<","<<e2<<")"<<endl;
}

void main()
{
vb a;
a.citire("a");
a.afisare("a");
cout<<"Elementele vectorului <b> le vom introduce direct la
initializare.";
vb b(2.5,1);
b.afisare("b");
vb c;
c=a+b;
c.afisare("a+b");
c=a-b;
c.afisare("a-b");
c=3*a+4*b;
c.afisare("3*a+4*b");
c=a*2-b*4;
c.afisare("a*2-b*4");
c=-a-b;
c.afisare("-a-b");
cout<<"\nProdusul cartezian: "<<a*b<<endl;

int g;
cin >>g;
}

2) Sa se scrie un program care citeşte de la tastatura doua matrice şi calculeaza suma,


diferenta şi transpusa acestora.
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;

class matrice
{
int n; //nr. de linii, respectiv coloane, matricea fiind patratica
int m[10][10];
public:
matrice();
void creare(int x, char* s);
matrice operator +(matrice a); //adunarea adoua matrice
matrice operator -(matrice a); //diferenta a doua matrice
matrice operator ~(); //transpusa unei matrice
void afisare(char* s);
};

inline matrice::matrice()
{
n=0;
}

void matrice::creare(int x, char* s)


{
cout<<"Introduceti datele pentru matricea "<<s<<":\n";
n=x;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
cout<<s<<"["<<i+1<<","<<j+1<<"]=";
cin>>m[i][j];
}
}

matrice matrice::operator + (matrice a)


{
matrice temp;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
temp.m[i][j]=m[i][j]+a.m[i][j];
temp.n=n;
return temp;
}

matrice matrice::operator - (matrice a)


{
matrice temp;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
temp.m[i][j]=m[i][j]-a.m[i][j];
temp.n=n;
return temp;
}

matrice matrice::operator ~ ()
{
matrice temp;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
temp.m[i][j]=m[j][i];
temp.n=n;
return temp;
}

void matrice::afisare(char *s)


{
cout<<"\nMatricea "<<s<<" este:"<<endl;
int i,j;
for(i=0;i<n;i++)
{
cout<<'\t';
for(j=0;j<n;j++)
cout<<m[i][j]<<" ";
cout<<'\n';
}
}

void main()
{
matrice a,b,t,s,d;
int x;
cout<<"Introduceti dimensiunea celor doua matrici: ";
cin>>x;
a.creare(x,"A");
b.creare(x,"B");
cout<<endl;
a.afisare("A");
b.afisare("B");
s=a+b;
s.afisare("A+B");
d=a-b;
d.afisare("A-B");
t=~a;
t.afisare("~A");

int g;
cin >>g;
}

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