[C con Clase] Estructuras y punteros
Angel Adrián Carrillo Comparán
squall_oggy en hotmail.com
Mar Feb 24 20:51:59 CET 2009
Tengo un problema con unos punteros, cuando mandoa llamar la funcion de Leer(Cilindro &RefCil) esta manda a llamar a Leer(Circulo &RefC) pasandole como parametro el puntero Circulo de la estructura de Cilindro y esta funsion a su ves llama a Leer(Punto &RefP) pasandole como parametro el puntero Punto de la estructura de Circulo.
El problema es que al leer los valores de punto y regresar a Leer(Circulo &RefC) los valores de punto se mantienen, pero al regresar a Leer(Cilindro &RefCil) los valores que tenia la estructura de Punto ya no contienen valores, les pongo el programa que estoy realizando, de ante mano muchas gracias!!!!
////////////////////////////////////////////////////////////////////////////////
#include <iostream> //Para cout y cin
#include <conio.h> //Para getch() y clrscr() ó ystem ("cls")
#include <iomanip> //Para setfill() y setw()
#include <stdio.h> //Para gets()
#include <math.h> //Para M_PI
using namespace std;
struct Punto
{
float coordx;
float coordy;
}; //fin de struct punto
struct Circulo
{
Punto *AptP;
float Radio;
float Diametro;
float Perimetro;
float Area;
}; //fin de struct circulo
struct Cilindro
{
Circulo *AptC;
float Altura;
}; //fin de struct cilindro
//prototipos del punto
void Leer (Punto &RefP);
void Imprimir (Punto &RefP);
//prototipos del circulo
void Leer (Circulo &RefC);
float Diametro (const Circulo &RefC);
float Perimetro (const Circulo &RefC);
float Area (const Circulo &RefC);
void Imprimir ( Circulo &RefC);
//prototipos del cilindro
void Leer (Cilindro &RefCil);
float Arealateral (const Cilindro &RefCil);
float Volumen (const Cilindro &RefCil);
void Imprimir (Cilindro &RefCil);
int main (void)
{
//clrscr();
system ("cls");
Cilindro Cil;
Leer (Cil);
cout << Cil.AptC->AptP->coordx << Cil.AptC->AptP->coordy;
cout.setf (ios::fixed);
cout.setf (ios::showpoint);
cout.precision (2);
Imprimir (Cil);
getch();
return 0;
} //fin de main ()
void Leer (Punto &RefP)
{
cout << "\tDATOS DEL PUNTO\n"
<< "\tIngresa la coordenada de X: ";
cin >> RefP.coordx;
cout << "\tIngresa la coordenada de Y: ";
cin >> RefP.coordy;
cout << endl;
} //fin de leer ()
void Imprimir (Punto &RefP)
{
cout << "\tLas coordenadas del punto son: ["
<< RefP.coordx << "," << RefP.coordy << "]" << endl << endl;
} //fin de imprimir ()
void Leer (Circulo &RefC)
{
Punto P;
RefC.AptP=&P;
Leer (P);
//cout << P.coordx << P.coordy;
cout <<"***" << RefC.AptP->coordx << RefC.AptP->coordy;
cout <<"***" << P.coordx << P.coordy;
cout << "\tDATOS DEL CIRCULO\n"
<< "\tIngresa el radio del circulo : " ;
cin >> RefC.Radio;
} //fin de leer()
float Diametro (const Circulo &RefC)
{
//cout << RefC.Radio;
return (RefC.Radio * 2.0);
} //fin de diametro()
float Perimetro(const Circulo &RefC)
{
// cout << Diametro (R3efC);
return (M_PI * Diametro(RefC));
} //fin de perimetro()
float Area (const Circulo &RefC)
{
//cout << RefC.Radio;
return(M_PI * pow(RefC.Radio,2.0));
} //fin de area()
void Imprimir (Circulo &RefC)
{
cout << "VALORES DEL CILINDRO" << endl << endl;
Imprimir (*RefC.AptP);
cout << "\tLOS VALORES DEL CIRCULO SON\n"
<< "\tRadio = " << RefC.Radio << endl
<< "\tDiametro = " << Diametro (RefC) << endl
<< "\tPerimetro = " << Perimetro (RefC) << endl
<< "\tArea = " << Area (RefC) << endl << endl;
} //fin de imprimir()
void Leer (Cilindro &RefCil)
{
cout << "DATOS DEL CILINDRO\n" << endl;
Circulo C;
RefCil.AptC=&C;
Leer (C);
cout << "->>>>>>>" << C.AptP->coordx << endl;
cout << "\tIngresa el valor de la altura: ";
cin >> RefCil.Altura;
cout << endl;
cout << "->" <<RefCil.AptC->Radio << endl ;
}
float Arealateral (const Cilindro &RefCil)
{
//cout<< RefCil.Altura << endl
//<< Perimetro (*RefCil.AptC)<< endl;
return (Perimetro(*RefCil.AptC) * RefCil.Altura);
} //fin de arealateral()
float Areatotal (const Cilindro &RefCil)
{
//cout << Arealateral (RefCil);
return ((2*Area(*RefCil.AptC))+Arealateral(RefCil));
}
float Volumen (const Cilindro &RefCil)
{
return (Area(*RefCil.AptC)*RefCil.Altura);
}
void Imprimir (Cilindro &RefCil)
{
Imprimir (*RefCil.AptC);
cout << "\tArea Lateral = " << Arealateral (RefCil) << "\n"
<< "\tArea Total = " << Areatotal (RefCil) << endl
<< "\tVolumen = " << Volumen (RefCil) << endl << endl;
} //fin de imprimir()
_________________________________________________________________
Comparte fotos, juega y charla en Messenger.
http://download.live.com/messenger
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090224/b49f762f/attachment.html>
Más información sobre la lista de distribución Cconclase