elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Ayuda! Por favor. Tengo problema con memoria dinámica en c++ y función getline en: 25 Noviembre 2012, 19:56 pm
Hola, estoy diseñando un programa en POO que lea calificaciones de alumnos de tres periodos y luego calcule su promedio. Quiero que cuando se lean las calificaciones aparezca en nombre de cada alumno, pero hay un problema con la memoria dinámica :S, aquí está mi código....


#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <string.h>
#include <fstream.h>




class MATRIX;

class Alumnos

{
 private:
    int i,k, temp, m;

 public:
   int n; char **Arreglo;

   Alumnos(){n=0; m=0;}
   Alumnos(int F, int Long)
    {

      n=F;
      m=Long;
      Arreglo=new char *[n];
      for(i=0;i<=n;i++)
      Arreglo=new char [m];
    }


   void LeeCadena()
    {
      cout<<endl<<"El arreglo a ordenar es : "<<endl;
      for(i=1;i<=n;i++)
         {
           cout<<"Alumno "<<i<<" :";
            gets(Arreglo);
          }

    }

   void OrdenaCadena()
    {
      for(i=1;i<n;i++)
          for(k=1;k<n;k++)
        {
          temp=strcmp (Arreglo[k], Arreglo[k+1]);
            if(temp > 0)
            {
         strcpy (Arreglo[0],Arreglo[k]);
         strcpy (Arreglo[k],Arreglo[k+1]);
         strcpy (Arreglo[k+1],Arreglo[0]);
            }
        }
    }

       void GuardaCadena()
    {
      ofstream archivo;
      archivo.open("E:/Nombres.txt");
       for(i=1;i<=n;i++)
       archivo<<Arreglo<<endl;
       archivo.close();
    }

       void VerCadena()
    {
      // cout<<endl<<" Los nombres ordenados son: "<<endl;
       for(i=1;i<=n;i++)
       cout<<Arreglo<<endl;
    }


      void RecuperaCad()
      {
      ifstream archivo("E:/Nombres.txt");

      while (!archivo.eof())
      {
          for(i=0;i<=n;i++)
          archivo.getline(Arreglo,m);
      }
      }



      void LiberaMemoriaCad()
   {

     for (i=0; i<=n;i++)
          delete[]Arreglo;
          delete[]Arreglo;

   }
 
     friend class MATRIX;


};


class MATRIX
{
 private:
       int Fil, Col, i, j, x;
       double **M;
 public:


      MATRIX(){Fil=0; Col=0;}
      MATRIX(int F, int C)
      { Fil=F;
        Col=C;


      M=new double *[Fil];
         if(M==NULL)
              {cout<<"No hay MD";
               getch();
               exit(0);
            }
        for(i=0;i<Fil;i++)
         M=new double[Col];
        for(i=0;i<Fil;i++)
        if (M==NULL)
          {cout<<"No hay MD";
           getch();
           exit(0);
          }
        for(i=0;i<Fil;i++)
        for(j=0; j<Col; j++)
         M[j]=0.0;
      }

       Alumnos obj;

     // void LeeX(){cin>>x;}
      void Lee_Mtz()
          {
            cout<<"Alumno: ";
            obj.RecuperaCad();
            for(i=0;i<=obj.n;i++)
           cout<<obj.Arreglo;
              {
                 for(i=0;i<Fil;i++)
                 {
                   for(j=0;j<Col;j++)
                   {
                     cout<<"M["<<i<<"]["<<j<<"]= ";
                     cin>>M[j];
                    }

                 }
             }
           }


      void Ver_Mtz()
        {
           for(int i=0; i<Fil;i++)
             {cout<<endl;

              for(int j=0;j<Col;j++)
              cout<<M[j]<<"   ";
             }
        }

      void LiberaMem()
        {
         for(int i=0;i<Fil;i++)
          delete []M;
             delete []M;
         }


      void PromedioPorMateria()
        {
         for(int i=0; i<Fil;i++)
         for(int j=0;j<Col;j++)
            M[j]=(M[j])/3;
        }


      void GuardaParcial1()
        {
           ofstream archivo;
           archivo.open("E:/Parcial1.txt");
           for(i=0; i<Fil;i++)
         for(j=0; j<Col;j++)
         archivo<<M[j]<<endl;
         cout<<"Datos almacenados..."<<endl;
         archivo.close();
         }



      void GuardaParcial2()
      {
         ofstream archivo;
           archivo.open("E:/Parcial2.txt");
           for(i=0; i<Fil;i++)
         for(j=0; j<Col;j++)
         archivo<<M[j]<<endl;
         cout<<"Datos almacenados..."<<endl;
         archivo.close();
      }


      void GuardaParcial3()
      {
        ofstream archivo;
        archivo.open("E:/Parcial3.txt");
        for(i=0; i<Fil;i++)
         for(j=0; j<Col;j++)
            archivo<<M[j]<<endl;
      cout<<"Datos almacenados..."<<endl;
      archivo.close();
      }


      void GuardaPromedio()
      {
        ofstream archivo;
        archivo.open("E:/PromedioPorMateria.txt");
        for(i=0; i<Fil;i++)
         for(j=0; j<Col;j++)
         archivo<<M[j]<<endl;
      cout<<"Datos almacenados..."<<endl;
      archivo.close();
      }


      void RecuperaParcial1()
      {
         ifstream archivo("E:/Parcial1.txt");

           do
         {
            for (int i=0;i<Fil;i++)
            for (int j=0;j<Col;j++)
            archivo >> M[j];
         }while (!archivo.eof());

      }

      void RecuperaParcial2()
      {
        ifstream archivo("E:/Parcial2.txt");

         do
        {
          for (int i=0;i<Fil;i++)
          for (int j=0;j<Col;j++)
           archivo >> M[j];
        }while (!archivo.eof());

      }



      void RecuperaParcial3()
      {
         ifstream archivo("E:/Parcial3.txt");

              do
            {
            for (int i=0;i<Fil;i++)
               for (int j=0;j<Col;j++)
               archivo >> M[j];
            }while (!archivo.eof());

      }



      void RecuperaPromedio()
      {
      ifstream archivo("E:/PromedioPorMateria.txt");

        do
       {
         for (int i=0;i<Fil;i++)
         for (int j=0;j<Col;j++)
         archivo >> M[j];
         }while (!archivo.eof());

       }

      MATRIX operator+(MATRIX M1)
      {
       MATRIX ObjAux(Fil, Col);
        for(i=0; i<Fil;i++)
         for(j=0; j<Col;j++)
            ObjAux.M[j]=M[j]+M1.M[j];
       return ObjAux;
        }




};


void main()
{
 int F, C, Long;
C=6;
Long=50;

        cout<<"cuantas alumnos?   ";cin>>F;

       Alumnos Obj1(F, Long);
       MATRIX M1(F,C), M2(F,C), M3(F,C),M4(F,C), M5(F,C);
       Obj1.LeeCadena();
       Obj1.OrdenaCadena();
       Obj1.VerCadena();
       Obj1.GuardaCadena();

           M1.Lee_Mtz();
          M2.Lee_Mtz();
          M3.Lee_Mtz();


        M1.GuardaParcial1();
         M2.GuardaParcial2();
        M3.GuardaParcial3();

           M4=M1+M2;
          M5=M3+M4;

        M5.PromedioPorMateria();



        M1.Ver_Mtz();
          cout<<endl;
            M2.Ver_Mtz();
           cout<<endl;
           M3.Ver_Mtz();
          cout<<endl;
             M5.Ver_Mtz();
          cout<<endl<<endl;

       getch();
          M1.LiberaMem();
           M2.LiberaMem();
          M3.LiberaMem();
           M4.LiberaMem();
          M5.LiberaMem();
  }







Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines