[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