Programa C++
que lea el fichero binario "sueldos2.dat" creado en una entrada anterior y muestre los empleados ordenados
por sueldo, de menor a mayor.
Utiliza un array dinámico para realizar la ordenación.
Para ordenar el array se utilizará el método de ordenación de la burbuja
Utiliza un array dinámico para realizar la ordenación.
Para ordenar el array se utilizará el método de ordenación de la burbuja
Los datos de cada empleado se han escrito en el fichero utilizando
la siguiente estructura:
struct Templeado
{
char nombre[20];
char apellidos[20];
char departamento[20];
float sueldo;
};
#include
<iostream>
#include
<fstream>
using
namespace std;
struct Templeado
{
char nombre[20];
char
apellidos[20];
char
departamento[20];
float sueldo;
};
void burbuja(Templeado [], int);
int main()
{
Templeado
registro, *array;
int tamanyo =
sizeof(Templeado); // Tamaño de un registro
int
i = 0, num_registros;
ifstream in;
in.open("sueldos2.dat", ios::binary);
if(in.fail())
{
cout <<
"Error al abrir el fichero sueldos2.dat" << endl;
system("pause");
exit(1);
}
//cálculo
del número de registros del fichero
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 con el tamaño calculado
array
= new Templeado[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
//
Pasamos los registros al array
in.read((char *)
&array[i], tamanyo);
while(!in.eof())
{
i++;
in.read((char *) &array[i],
tamanyo);
}
burbuja(array,num_registros); //ordenar el
array
//mostrar todos los empleados ordenados por sueldo
for(i=0;i<num_registros;i++)
{
cout << "\nEMPLEADO:
" << i+1 << endl;
cout << "Nombre: "
<< array[i].nombre << endl;
cout << "Apellidos: " <<
array[i].apellidos << endl;
cout
<< "Departamento: " << array[i].departamento <<
endl;
cout << "Sueldo: "
<< array[i].sueldo << endl;
}
in.close();
delete [] array;
system("pause");
}
//función para ordenar el array de empleados por el método de la burbuja
void
burbuja(Templeado A[], int N)
{
int i, j;
Templeado aux;
for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
if(A[j+1].sueldo<A[j].sueldo)
{
aux=A[j+1];
A[j+1]=A[j];
A[j]=aux;
}
}
Hola, muy útil el post.
ResponderEliminarVeo sencillo saber el número de líneas si se usan struct, pero... y si no sabes el tamaño de la lineaque lees en el fichero binario. Hay alguna forma de obtenerlo? Muchas gracias de antemano