/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ordenar Fichero con Codigo Burbuja

 
      Índice del Foro elrincondelc.com -> Algoritmos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
oRQhyLLa



Registrado: 15 Feb 2007
Mensajes: 7

MensajePublicado: 05/05/2010 4:44 pm
Título: Ordenar Fichero con Codigo Burbuja

Holaaaa. Bueno Tengo un problemilla. Normalmente para ordenar utilizaba el codigo de inserccion. Pero el tutor me pide el del codigo de burbuja y me da errores de compilacion. Podeis ayudarme y ver donde esta el fallo? os lo agradeceria.

El ejercicio consiste en que tengo que ordenar a los empleados por su codigo y asi ya modificarlo en el fichero que he creado.

Código:

#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<stdlib.h>

typedef struct empleado
{
   int codigo;
   char nombre[50];
   char direccion[50];
   int telefono;
   int sueldo;
   int numhijos;
   int antiguedad;

}Empleado;

void CreaFicheroEmpleados(FILE *);
void CreaFicheroSalida(FILE *, FILE *);
void VisualizaFicheros(FILE *, FILE *);
void EmpleadosSinHijos(FILE *);
void OrdenaFichero(FILE *);


void main()
{
  Empleado p;
  FILE *pf;
  FILE *pf2;

  CreaFicheroEmpleados(pf);
  CreaFicheroSalida(pf,pf2);
  EmpleadosSinHijos(pf);
  OrdenaFichero(pf);
  VisualizaFicheros(pf,pf2);

}

void CreaFicheroEmpleados(FILE *pf)
{
  Empleado p;
  char opcion;

  if((pf=fopen("F_EMP","w+b"))==NULL)
  {
    printf("\nNo se puede crear fichero.");
    getch();
    exit(-1);
  }
  else
  {
    do
    {
     printf("\n\tCodigo del empleado: ");
     scanf("%d",&p.codigo);
     printf("\n\tNombre: ");
     gets(p.nombre);
     printf("\n\tDireccion: ");
     gets(p.direccion);
     printf("\n\tTelefono: ");
     scanf("%d",&p.telefono);
     printf("\n\tSueldo: ");
     scanf("%d",&p.sueldo);
     printf("\n\tNumero de hijos: ");
     scanf("%d",&p.numhijos);
     printf("\n\tAntiguedad: ");
     scanf("%d",&p.antiguedad);
     printf("\n\tDesea introducir otro empleado?");
     scanf("%c",&opcion);

    }while(tolower(opcion)=='s');


  }
  fclose(pf);


}

void CreaFicheroSalida(FILE*pf, FILE*pf2)
{
  Empleado p;

  if((pf=fopen("F_EMP","rb"))==NULL)
  {
    printf("\nNo se puede abrir fichero.");
    getch();
    exit(-1);
  }
  if((pf2=fopen("F_SAL","w+b"))==NULL)
  {
    printf("\nNo se puede abrir fichero.");
    getch();
    exit(-1);
  }
  while(!feof(pf))
  {
    fread(&p,sizeof(Empleado),1,pf);

    if(p.numhijos==2)
    {
     if(p.antiguedad>2)
     {
      if(p.sueldo<1000)
      {
       fwrite(&p,sizeof(Empleado),1,pf2);
      }
     }
    }

  }
  fclose(pf);
  fclose(pf2);
}

void VisualizaFicheros(FILE *pf, FILE *pf2)
{
  Empleado p;

  if((pf=fopen("F_EMP","rb"))==NULL)
  {
    printf("\nNo se puede abrir fichero.");
    getch();
    exit(-1);
  }
  if((pf2=fopen("F_SAL","rb"))==NULL)
  {
    printf("\nNo se puede abrir fichero.");
    getch();
    exit(-1);
  }
  while(!feof(pf))
  {
     fread(&p,sizeof(Empleado),1,pf);
     printf("\n\tCodigo del empleado: %d",p.codigo);
     printf("\n\tNombre: %s",p.nombre);
     printf("\n\tDireccion: %s",p.direccion);
     printf("\n\tTelefono: %d",p.telefono);
     printf("\n\tSueldo: %d",p.sueldo);
     printf("\n\tNumero de hijos: %d",p.numhijos);
     printf("\n\tAntiguedad: %d",p.antiguedad);
  }
  while(!feof(pf2))
  {
     fread(&p,sizeof(Empleado),1,pf2);
     printf("\n\tCodigo del empleado: %d",p.codigo);
     printf("\n\tNombre: %s",p.nombre);
     printf("\n\tDireccion: %s",p.direccion);
     printf("\n\tTelefono: %d",p.telefono);
     printf("\n\tSueldo: %d",p.sueldo);
     printf("\n\tNumero de hijos: %d",p.numhijos);
     printf("\n\tAntiguedad: %d",p.antiguedad);
  }
  fclose(pf);
  fclose(pf2);
}

void EmpleadosSinHijos(FILE *pf, FILE *pf2)
{
  Empleado p;

  if((pf=fopen("F_EMP","rb"))==NULL)
  {
    printf("\nNo se puede abrir fichero.");
    getch();
    exit(-1);
  }
  while(!feof(pf))
  {
    fread(&p,sizeof(Empleado),1,pf);

    if(p.numhijos==0)
    {
     printf("\n\tCodigo del empleado: %d",&p.codigo);
     printf("\n\tNombre: %s",&p.nombre);
    }
  }
  fclose(pf);


}

void OrdenaFichero(FILE *pf)
{
   Empleado p, aux;
   Empleado *a;//nuevo vector para guardar el tamaño del tipo Empleado
   int contadorEmpleados=0;
   int x,i,j, temp;
   if((pf=fopen("F_EMP","rb"))==NULL)
   {
    printf("\nNo se puede abrir fichero.");
    getch();
    exit(-1);
   }
   while(!feof(pf))
   {
    fread(&p,sizeof(Empleado),1,pf);
    contadorEmpleados++; //cuento el nº de empleados
   }

  //funcion de reserva dinamica
  a=(Empleado *)malloc(contadorEmpleados*sizeof(Empleado));
 

   if(a==NULL)
   {
    printf("\nNo se puede reservar memoria");
    getch();
    exit(-1);
   }

   rewind(pf);
   for(x=0;x<contadorEmpleados;x++)
      fread(&a[x],sizeof(Empleado),1,pf);
 
   [b]//ES AQUI DONDE ME DA EL PROBLEMA[/b]
     for(i=0;i<contadorEmpleados-1;i++)
     {
       aux=a[i];
       for(j=i+1;j<contadorEmpleados;j++)
       {
          if(aux.codigo > a[j].codigo)
          {
            temp = a[i].codigo;
            a[i].codigo=a[j].codigo;
            a[j].codigo=temp;
          }

       }

     }
     rewind(pf);
     for(x=0;x<contadorEmpleados;x++)
       fwrite(&a[x],sizeof(Empleado),1,pf);

    free(a);
   fclose(pf);
}

Volver arriba
      Índice del Foro elrincondelc.com -> Algoritmos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com