// clase PUNTO
  
  class Punto {
    public:
      float x;
      float y;
      float z;
    
      //constructores
      Punto();
      Punto(float a, float b, float c);
      
      //acceso a datos
      void Leer(float &a, float &b, float &c);
      void Escribir(float a, float b, float c);
      
      //operadores sobrecargados
      Punto operator^(float a);
      float operator*(Punto p);
      float operator*(float a);
      Punto operator-(Punto p);
      Punto operator-(float a);
      Punto operator+(Punto p);
      Punto operator+(float a);
  };
  
  Punto::Punto(){
    x=0.0;
    y=0.0;
    z=0.0;  
  };
  
  Punto::Punto(float a, float b, float c){
    x=a;
    y=b;
    z=c;  
  };
  
  void Punto::Leer(float &a, float &b, float &c){
    a=x;
    b=y;
    c=z;  
  };
  
  void Punto::Escribir(float a, float b, float c){
    x=a;
    y=b;
    z=c;
  };
 
 
  Punto Punto::operator^ (float a){
  
    Punto mult;
    
    mult.x = x*a;
    mult.y = y*a;
    mult.z = z*a;
     
    
    return mult;
  
  };
 
  
  
  float Punto::operator* (Punto p){
  
    float mult;
    
    mult = x*p.x +
            y*p.y +
            z*p.z;    
    
    return mult;
  
  };
  
    
  float Punto::operator* (float a){
  
    float mult;
    
    mult= x*a +
          y*a +
          z*a;
    
    
    return mult;
  
  };
    
  
    
  Punto Punto::operator -(Punto p){
  
    Punto resta;
    
    resta.x= x-p.x;
    resta.y= y-p.y;
    resta.z= z-p.z;
    
    return resta;
  
  };
  
  Punto Punto::operator -(float a){
  
    Punto resta;
    
    resta.x= x-a;
    resta.y= y-a;
    resta.z= z-a;
    
    return resta;
  
  };
  
  Punto Punto::operator +(Punto p){
  
    Punto suma;
    
    suma.x= x+p.x;
    suma.y= y+p.y;
    suma.z= z+p.z;
    
    return suma;
  
  };
  
  Punto Punto::operator +(float a){
  
    Punto suma;
    
    suma.x= x+a;
    suma.y= y+a;
    suma.z= z+a;
    
    return suma;
  
  };
  


