miércoles, 22 de mayo de 2013


He corregido un poco la redacción de mis clases SexagRad, RadSexag y PolarRect para adpatrlas a los usos que veo por ahí. Para hacerlo "bonito" se deben hacer dos secciones, una de "declaración" con su parte public y private y otra de "implementación" donde van las funciones o métodos, mientras que en la primera van más bien las variables y los prototipos. Así que las cosas quedarían así:

fichero sexagra1.h


//Declaración
class SexagRad
{
private:
double radianes;
double grados;
double minutos;
double segundos;
const static double pi=3.1415926;
public:
SexagRad (double, double, double);
double gra2sexa();
};
//Implementación
SexagRad :: SexagRad (double g, double m, double s){
grados=g;
minutos=m;
segundos=s;
}
double SexagRad :: gra2sexa(){
minutos = minutos + segundos/60.0;
grados = grados + minutos/60.0;
radianes = grados*pi/180.0;
return radianes;
}
//Declaración
class RadSexag
{
private:
double radianes;
double grados;
double minutos;
double segundos;
const static double pi=3.1415926;
public:
RadSexag (double);
double rad2gra1();
double rad2gra2();
double rad2gra3();
};
//Implementación
RadSexag :: RadSexag (double r){
radianes=r;
}
double RadSexag :: rad2gra1(){
grados=radianes*180.0/pi;
return floor(grados);
}
double RadSexag :: rad2gra2(){
grados=radianes*180.0/pi;
minutos=(grados-rad2gra1())*60.0;
return floor(minutos);
}
double RadSexag :: rad2gra3(){
grados=radianes*180.0/pi;
minutos=(grados-rad2gra1())*60.0;
segundos = (minutos-rad2gra2())*60.0;
return segundos;
}

Fichero polarrect1.h

//Declaración
class PolarRect
{
private:
double modulo;
double argumento;
public:
PolarRect (double,double);
double primcomp();
double segucomp();
};
// Implementación
PolarRect :: PolarRect (double md, double a){
modulo = md;
argumento = a;
}
double PolarRect :: primcomp(){
return modulo*cos(argumento);
}
double PolarRect :: segucomp(){
return modulo*sin(argumento);
}

Finalmente pongo uno de los ficheros que utilizan esta clase un poco corregido conforme a algunos retoques. Tener en cuenta que a veces los resultados del argumento (ángulo) los da como números negativos. No pasa nada: En vez de 120º, por ejemplo, dará -60º.

#include<iostream>
#include<cmath>
#include "polarrect1.h"
#include "sexagra1.h"
using namespace std;
int main()
{
int c;
cout<<"Cuántos vectores: ";cin>>c;
double md[c],a[c],r;
double g[c],m[c],s[c];
double v[c][2], vr1=0,vr2=0;
for(int i=0;i<c;i++){
cout<<"Dame el módulo del vector: ";cin>>md[i];
cout<<"Dame el argumento del vector: grados, minutos ,segundos: ";cin>>g[i]>>m[i]>>s[i];
SexagRad ang(g[i],m[i],s[i]);
a[i]=ang.gra2sexa();
PolarRect objeto(md[i], a[i]);
v[i][1]=objeto.primcomp();
v[i][2]=objeto.segucomp();
cout<<"La primera componente es "<<v[i][1]<<endl;
cout<<"La segunda componente es "<<v[i][2]<<endl;
}
for (int i=0;i<c;i++){
vr1=vr1+v[i][1];
}
for (int i=0;i<c;i++){
vr2=vr2+v[i][2];
}
r=atan(vr2/vr1);
cout<<"Las componentes de la suma de los vectores son: "<<vr1<<" y "
<<vr2<<endl;
cout<<"El módulo de la resultante es "<<sqrt(vr1*vr1+vr2*vr2)<<endl;
RadSexag angr(r);
cout<<"Su argumento "<<angr.rad2gra1()<<" grados "<<angr.rad2gra2()<<" minutos "<<angr.rad2gra3()<<" segundos"<<endl;
return 0;
}

No hay comentarios:

Publicar un comentario