Escribe un programa C++ que
lea el fichero binario de alumnos.dat creado en una entrada anterior y escriba
en otro fichero binario alumnos_cod.dat los alumnos ordenados por código de
alumno.
Utiliza un array dinámico para realizar la ordenación.
Para ordenar el array se utilizará el método de la burbuja
Utiliza un array dinámico para realizar la ordenación.
Para ordenar el array se utilizará el método de la burbuja
Los alumnos se han
escrito en el fichero utilizando la estructura:
struct
Talumno
{
char apellido1[21];
char apellido2[21];
char nombre[21];
char codigo[11];
};
#include
<iostream>
#include
<fstream>
using
namespace std;
struct
Talumno
{
char apellido1[21];
char apellido2[21];
char nombre[21];
char codigo[11];
};
void
burbuja(Talumno [], int);
int main()
{
Talumno
registro, *array;
int tamanyo
= sizeof(Talumno), num_registros, i=0;
ifstream in;
ofstream
out;
in.open("alumnos.dat", ios::binary);
if(in.fail())
{
cout << "Error al abrir el
fichero alumnos.dat" << endl;
system("pause");
exit(1);
}
out.open("alumnos_cod.dat",
ios::binary);
if(out.fail())
{
cout << "Error al crear el
fichero alumnos_cod.dat" << endl;
system("pause");
exit(1);
}
//calculamos el número de
registros
in.seekg(0,ios::end); //nos posicionamos al final del fichero
//número de registros =
bytes / tamaño en bytes de un registro
num_registros=in.tellg()/tamanyo;
//creamos el array necesario
para ordenar los registros del fichero
array = new
Talumno[num_registros];
if(array==NULL)
{
cout << "Error en la
asignación de memoria\n";
system("pause");
exit(1);
}
in.seekg(0); //volvemos
al pincipio del fichero
//Leemos el fichero y pasamos
los registros al array
in.read((char
*) &array[i], tamanyo);
while(!in.eof())
{
i++;
in.read((char *) &array[i], tamanyo);
}
//ordenar el array
burbuja(array,num_registros);
//escribir el array
ordenado en el fichero de salida
for(i=0;i<num_registros;i++)
{
cout
<< "\nALUMNO: " << i+1 << endl;
cout
<< "Nombre: " << array[i].nombre << endl;
cout << "Apellido1:
" << array[i].apellido1 << endl;
cout << "Apellido2:
" << array[i].apellido2 << endl;
cout
<< "Codigo: " << array[i].codigo << endl;
out.write((char
*) &array[i], tamanyo);
}
in.close();
out.close();
delete []
array;
system("pause");
}
//función que ordena de menor a mayor los alumnos por código
void burbuja(Talumno A[], int N)
{
int i, j;
Talumno aux;
for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
if(strcmp(A[j+1].codigo,A[j].codigo)<0)
{
aux=A[j+1];
A[j+1]=A[j];
A[j]=aux;
}
}
No hay comentarios:
Publicar un comentario