Fonctions amis et surcharger les opérateurs mathématiques en C++ - Applications résolues


1) Implementer le cpncepte de vecteur bidimensionel.
Dans ce sens on dira que le vecteur bidimensionel est un systeme ordonné de 2 nombres reels.
Sur les vecteurs, on va definir les operations:
- operations d’atribution de valeurs dans les elements du vecteur;
- somme de deux vecteurs;
- difference de deux vecteurs;
- produit d’un vecteurs et un scalaire;
- negativité d’un vecteur;
- produit scalaire de deux vecteurs;
- affichage des components du vecteur sous la forme d’une paire d’elements.

Ecrire un programme pour lire 2 paires de nombres qui representent les components dexs vecteurs a et b, ensuite calculer et afficher:
- somme: a+b;
- difference: a-b;
- somme: 3*a+4*b;
- difference: a*2 -b*4;
- somme: -a-b;
- produit scalaire de deux vecteurs.
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
 
class vb
{
	float e1,e2; //elements du vecteur
	public:
	//constructeur d’initialisation avec ds parametres
	vb(float, float);
	//reecrire le constructeur implicite d’initialisation
	vb(){}
	//somme de deux vecteurs: r=vb1+vb2
	vb operator+(vb);
	//negativation d’un vecteur: r=-vb
	vb operator-();
	//difference des vecteurs: r=vb1-vb2
	vb operator-(vb);
	//produit entre un vecteur et un nombre: r=vb*a
	vb operator*(int);
	//produit entre un vecteur et un autre nombre: r=a*vb
	friend vb operator*(int, vb);
	//produit scalaire de 2 vecteurs r=(vb1,vb2)
	double operator*(vb);
	//lire un vecteur
	void lire(char*);
	//affichage d’un vecteur
	void affichage(char*);
};
 
inline vb::vb(float a, float b)
{
	e1=a;
	e2=b;
}
 
vb vb::operator + (vb v) //somme de deux vecteurs
{
	vb r;
	r.e1=e1+v.e1;
	r.e2=e2+v.e2;
	return r;
}
 
vb vb::operator - () //negativation d’un vecteur
{
	vb r;
	r.e1=-e1;
	r.e2=-e2;
	return r;
}
 
vb vb::operator - (vb v) //difference des deux vecteurs
{
	return (*this)+(-v);
}
 
vb vb::operator * (int a) //produit d’entre un vecteur et un nombre
{
	vb r;
	r.e1=a*e1;
	r.e2=a*e2;
	return r;
}
 
vb operator * (int a, vb v) //produit entre un nombre et un vecteur
{
	return v*a;
	/*l’opperateur * est surcharhé pour le produit entre un vecteur et
	un nombre par la precedente fonction */
}
 
double vb::operator * (vb v) //produit scalaire de deux vecteurs
{
	return e1*v.e1+e2*v.e2;
}
 
void vb::lire(char *s)
{
	cout<<"\nDonnez les elements du vecteur"<<s<<":\n";
	cout<<"\tpremier element: "; cin>>e1;
	cout<<"\tdeuxieme element: "; cin>>e2;
}
 
void vb::affichage(char* sir)
{
	cout<<"\nVecteur "<<sir<<": ("<<e1<<","<<e2<<")"<<endl;
}
 
void main()
{
	vb a;
	a.lire("a");
	a.affichage("a");
	cout<<"Les elements du vecteur <b> seront introduits par l’initialisation.";
	vb b(2.5,1);
	b.affichage("b");
	vb c;
	c=a+b;
	c.affichage("a+b");
	c=a-b;
	c.affichage("a-b");
	c=3*a+4*b;
	c.affichage("3*a+4*b");
	c=a*2-b*4;
	c.affichage("a*2-b*4");
	c=-a-b;
	c.affichage("-a-b");
	cout<<"\nProduit cartesien: "<<a*b<<endl;
 
	int g;
	cin >>g;
}
 

2) Ecrire un programme pour lire du clavier deux matrices et calculer la somme, la difference et leur transposée.
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
 
class matrice
{
	int n; //nombres de lignes et colonnes, d’une matrice carée
	int m[10][10];
	public:
	matrice();
	void creer(int x, char* s);
	matrice operator +(matrice a); //addition de deux matrices
	matrice operator -(matrice a); //difference de deux matrices
	matrice operator ~(); //transposee des matrices
	void affichage(char* s);
};
 
inline matrice::matrice()
{
	n=0;
}
 
void matrice::creer(int x, char* s)
{
	cout<<"Introduire les dates pour la matrice "<<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::affichage(char *s)
{
	cout<<"\nMatrice "<<s<<" est:"<<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<<"Introduire la dimension de deux matrices: ";
	cin>>x;
	a.creer(x,"A");
	b.creer(x,"B");
	cout<<endl;
	a.affichage("A");
	b.affichage("B");
	s=a+b;
	s.affichage("A+B");
	d=a-b;
	d.affichage("A-B");
	t=~a;
	t.affichage("~A");
 
	int g;
	cin >>g;
}
Cookies help us deliver our services. By using our services, you agree to our use of cookies.