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();
}
#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();
}