que tal pues miren he generado mi archivo binario y he aqui el codigo
#include<stdio.h>
#include<conio.h>
#include <string.h>
#include<ctype.h>
#include<stdlib.h>
void altas(void);
void op2(void);
void op3(void);
void op4(void);
void op5(void);
void op6(void);
FILE *fich;
struct ficha
{
int nomina;
char nombre[25];
char apellidop[40];
char apellidom[40];
char sucursal[40];
char departamento[40];
float salario;
int pro;
}vendedor;
int main(void)
{
int opcion;
if((fich=fopen("c:\\vendedores.dat","a+b"))==NULL)
{
printf("Error al crear fichero");
}
do
{
system("cls");
printf("\n");
printf("1)REGISTRO DE VENDEDORES \n");
printf("2)VENDEDORES REGISTRADOS\n");
printf("3)CONSULTA VENDEDOR INDIVIDUAL REGISTRADO POR NOMINA \n");
printf("4)CONSULTA VENDEDORES POR VENTAS \n");
printf("5)LISTAR VENDEDORES POR SUCURSAL \n");
printf("6)MODIFICAR DATOS DE VENDEDOR \n");
printf("7)LISTAR VENDEDORES ORDENADOS POR NOMINA \n");
printf("8)SALIR \n");
printf("Elegir opcion: \n");
opcion=getch();
fflush(stdin);
switch(opcion)
{
case '1': altas();
break;
case '2': op2();
break;
case '3': op3();
break;
case '4': op4();
break;
case '5': op5();
break;
case '6': op6();
break;
case '7': ;
break;
}
} while(opcion!='8');
fclose(fich);
getchar ();
getchar ();
return 0;
}
void altas(void)
{
system("cls");
printf("\n ");
printf("NOMINA: ");
scanf("%d",&vendedor.nomina);
printf("NOMBRE: ");
scanf("%s",vendedor.nombre);
printf("APELLIDO PATERNO : ");
scanf("%s",vendedor.apellidop);
printf("APELLIDO MATERNO : ");
scanf("%s",vendedor.apellidom);
printf("SUCURSAL: ");
scanf("%s",vendedor.sucursal);
printf("DEPARTAMENTO: ");
scanf("%s",vendedor.departamento);
printf("SALARIO: ");
scanf("%f",&vendedor.salario);
printf("NUMERO DE PRODUCTOS VENDIDOS: ");
scanf("%d",&vendedor.pro);
fwrite(&vendedor,sizeof (vendedor),1,fich);
}
void op2(void)
{
FILE *parchivo;
parchivo=fopen("c:\\vendedores.dat","rb");
rewind(fich);
while(!feof(fich))
{
fread(&vendedor,sizeof (vendedor),1,fich);
printf("NOMINA: %d\n",vendedor.nomina);
printf("NOMBRE: %s\n",vendedor.nombre);
printf("APELLIDO PATERNO: %s\n",vendedor.apellidop);
printf("APELLIDO MATERNO: %s\n",vendedor.apellidom);
printf("SUCURSAL: %s\n",vendedor.sucursal);
printf("DEPARTAMENTO: %s\n",vendedor.departamento);
printf("SALARIO: %d \n",vendedor.salario);
printf("NUMERO DE PRODUCTOS VENDIDOS: %d \n",vendedor.pro);
printf("\n");
}
getchar();
}
void op3(void)
{
int cod_temp;
system("cls");
rewind(fich);
printf("\n");
printf("Nomina a mostrar: ");
scanf("%d",&cod_temp);
while(!feof(fich))
{
fread(&vendedor,sizeof (vendedor),1,fich);
if(cod_temp==vendedor.nomina)
{
printf("NOMINA: %d\n",vendedor.nomina);
printf("NOMBRE: %s\n",vendedor.nombre);
printf("APELLIDO PATERNO: %s\n",vendedor.apellidop);
printf("APELLIDO MATERNO: %s\n",vendedor.apellidom);
printf("SUCURSAL: %s\n",vendedor.sucursal);
printf("DEPARTAMENTO: %s\n",vendedor.departamento);
printf("SALARIO: %d \n",vendedor.salario);
printf("NUMERO DE PRODUCTOS VENDIDOS: %d \n",vendedor.pro);
printf("\n");
}
}
}
void op4(void)
{
int cod_temp;
system("cls");
rewind(fich);
printf("\n");
printf("Ingresa cantidad de productos vendidos : ");
scanf("%d",&cod_temp);
while(!feof(fich))
{
fread(&vendedor,sizeof (vendedor),1,fich);
if((cod_temp==vendedor.pro)||(cod_temp<vendedor.pr o))
{
printf("NOMINA: %d\n",vendedor.nomina);
printf("NOMBRE: %s\n",vendedor.nombre);
printf("APELLIDO PATERNO: %s\n",vendedor.apellidop);
printf("APELLIDO MATERNO: %s\n",vendedor.apellidom);
printf("SUCURSAL: %s\n",vendedor.sucursal);
printf("DEPARTAMENTO: %s\n",vendedor.departamento);
printf("SALARIO: %d \n",vendedor.salario);
printf("NUMERO DE PRODUCTOS VENDIDOS: %d \n",vendedor.pro);
printf("\n");
}
}
}
void op5(void)
{
char suc[40];
system("cls");
rewind(fich);
printf("\n");
printf("Ingresa sucursal a buscar : ");
scanf("%s",suc);
while(!feof(fich))
{
fread(&vendedor,sizeof (vendedor),1,fich);
if (strcmp(suc,vendedor.sucursal)==0)
{
printf("NOMINA: %d\n",vendedor.nomina);
printf("NOMBRE: %s\n",vendedor.nombre);
printf("APELLIDO PATERNO: %s\n",vendedor.apellidop);
printf("APELLIDO MATERNO: %s\n",vendedor.apellidom);
printf("SUCURSAL: %s\n",vendedor.sucursal);
printf("DEPARTAMENTO: %s\n",vendedor.departamento);
printf("SALARIO: %d \n",vendedor.salario);
printf("NUMERO DE PRODUCTOS VENDIDOS: %d \n",vendedor.pro);
printf("\n");
}
}
}
void op6(void)
{
FILE*fichero;
struct ficha vendedor;
long int nr=0;
char nom[20];
fichero=fopen("C:\\vendedores.dat","r+b");
if(fichero!=NULL)
{
printf("INGRESA NOMBRE A BUSCAR \n");
scanf("%s",nom);
fread(&vendedor,sizeof(struct ficha),1,fichero);
while(!feof(fichero)&&strcmp(vendedor.nombre,nom)= =0)
{
fread(&vendedor,sizeof(struct ficha),1,fichero);
nr=nr+1;
}
if(strcmp(vendedor.nombre,nom)==0)
{
printf("NOMINA: ");
scanf("%d",&vendedor.nomina);
printf("NOMBRE: ");
scanf("%s",vendedor.nombre);
printf("APELLIDO PATERNO : ");
scanf("%s",vendedor.apellidop);
printf("APELLIDO MATERNO : ");
scanf("%s",vendedor.apellidom);
printf("SUCURSAL: ");
scanf("%s",vendedor.sucursal);
printf("DEPARTAMENTO: ");
scanf("%s",vendedor.departamento);
printf("SALARIO: ");
scanf("%d",&vendedor.salario);
printf("NUMERO DE PRODUCTOS VENDIDOS: ");
scanf("%d",&vendedor.pro);
nr=nr-1;
fseek(fichero,nr*sizeof(struct ficha),0);
fwrite(&vendedor,sizeof (vendedor),1,fich);
}
else
printf("no se encontro nombre");
}
else
printf(" no se abrio archivo");
}
no es el mejor codigo ustedes estaran de acuerdo, pero quiero ordenar a los vendedores por el numero de matricula usando el metodo shellsort
cabe mencionar que el problema es academico, he estado preguntando y lo que me comentan es que el archivo binario ya es un arreglo de estructuras por lo que solo hay que ponerlo como entrada al metodo shellsort, lo que no comprendo como hago eso???
mi codigo shellsort es el siguiente
void shellsort(int a[], int n)
{
int j,i,k,m,mid,p,p1,p2;
for(m=n/2;m>0;m/=2)
{
p=n/2;
printf("%d",p);
for(j=m;j<n;j++)
{
p1=m;
printf("%d",p1);
for(i=j-m;i>=0;i-=m)
{
p2=j-m;
printf("%d",p2);
if(a[i+m]>=a[i])
{
printf("%d %d",a[i+m], a[i]);
break;
}
else
mid=a[i];
a[i]=a[i+m];
a[i+m]=mid;
}
}
}
}
les agradesco su ayuda