ci dessous le source à utiliser en TP4 :
using namespace std;
#include <iostream>
#include <cmath>
class point
{
int num;
float x,y;
public:
void saisir(int i);
void afficher(void);
int get_num(void);
float get_x(void);
float get_y(void);
void set_coord(float a, float b);
void set_num(int n);
float distance(float a, float b);
float distance(point p);
void deplace(float dx,float dy);
void mettre_au_milieu(point p, point q);
};
int point::get_num(void)
{return num;}
float point::get_x(void)
{return x;}
float point::get_y(void)
{return y;}
void point::set_coord(float a, float b)
{x=a;y=b;};
void point::set_num(int n)
{num=n;};
void point::saisir(int i)
{
cout<<"coordonnees du point "<<i<<" ? ";
num=i;
cin>>x;
cin>>y;
}
void point::afficher(void)
{cout<<"point "<<num<<" : ("<<x<<","<<y<<")";}
void point::deplace(float dx,float dy)
{x=x+dx;y=y+dy;}
float point::distance(float a, float b)
{return sqrt((x-a)*(x-a)+(y-b)*(y-b));}
float point::distance(point p)
{return distance(p.get_x(),p.get_y());}
void point::mettre_au_milieu(point p, point q)
{set_coord((p.get_x()+q.get_x())/2,(p.get_y()+q.get_y())/2);}
//surcharge de << (pour faire cout<< pour un point)
ostream& operator<< (ostream& f,point& x)
{x.afficher();return f;}
#define MAXPTS 1000
class tpts
{
int nbpoints;
point n[MAXPTS];
public:
void saisir(void);
void afficher(void);
void deplace(float dx,float dy);
int get_nbpoints(void);
int position(int num);
point get_point_direct(int i);
point get_point(int num);
point get_point(float x, float y);
int indice_du_plus_proche(float x, float y, int a_partir_de);
void creer(void); //idem saisie mais avec valeurs imposées
};
void tpts::saisir(void)
{
int i;
cout<<"combien de points ? ";
cin>>nbpoints;
for(i=0;i<nbpoints;i++) n[i].saisir(i+1);
}
void tpts::creer(void)
{
int i;
cout<<"combien de points ? ";
cin>>nbpoints;
for(i=0;i<nbpoints;i++)
{
n[i].set_num(i+1);
n[i].set_coord(i,10-i);
}
}
void tpts::afficher(void)
{ int i; for(i=0;i<nbpoints;i++) cout<<n[i]<<"\n"; }
void tpts::deplace(float dx,float dy)
{ int i; for(i=0;i<nbpoints;i++) n[i].deplace(dx,dy); }
int tpts::position(int num)
{
int i;
for(i=0;i<nbpoints;i++)
if(n[i].get_num() == num) return i;
return -1; //au cas o je n'aurais pas trouve
}
int tpts::get_nbpoints(void)
{return nbpoints;}
point tpts::get_point_direct(int i)
{return n[i];}
point tpts::get_point(int num)
{
int pos;
pos=position(num);
return n[pos];
}
int tpts::indice_du_plus_proche(float x, float y, int a_partir_de)
{
int i,pos;
float dmin,dis;
pos=a_partir_de;
dmin=n[pos].distance(x,y);
for(i=a_partir_de+1;i<nbpoints;i++)
{
dis=n[i].distance(x,y); //n[i] et pas n[pos] comme donné au 1er TP !!!!!!!!!!!
if(dis<dmin) {dmin=dis;pos=i;}
}
return pos;
}
point tpts::get_point(float x, float y)
{
int pos;
pos=indice_du_plus_proche(x,y,0);
return n[pos];
}
ostream& operator<< (ostream& f,tpts& x)
{x.afficher();return f;}