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

#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;
}

#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;
}
COMENTARII

optional (nu va fi afisat pe website)
max: 255 caractere


Acest site utilizeaza cookie-uri. Navigand in continuare va exprimati acordul asupra folosirii cookie-urilor.