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...)
C++: Functii prieten si supraincarcarea op. matematici - aplicatii rezolvate
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; }