Foros del Web » Programación para mayores de 30 ;) » C/C++ »

me ayudan con ordenamiento shellsort de un archivo binario???

Estas en el tema de me ayudan con ordenamiento shellsort de un archivo binario??? en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 10/08/2010, 23:47
 
Fecha de Ingreso: agosto-2010
Mensajes: 1
Antigüedad: 13 años, 8 meses
Puntos: 0
me ayudan con ordenamiento shellsort de un archivo binario???

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

Etiquetas: estructura, estructurada, programacion, shellsort, binario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:37.