Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Ayuda. Busqueda Binaria de Archivos C++
Autor Mensaje
germanico Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 12
Agradecimientos dados: 12
Agradecimientos: 0 en 0 posts
Registro en: Jan 2014
Mensaje: #1
Information Ayuda. Busqueda Binaria de Archivos C++ Ejercicios Algoritmos y Estructuras de Datos
Hola que tal, alguien podría ser tan amable de pasarme un ejemplo de código en c++ de búsqueda binaria de archivos por favor, estuve intentando hacerlo funcionar pero no lo encuentro la vuelta y lo necesito pronto. Gracias
04-07-2015 00:09
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
FarSalazar Sin conexión
Militante
"Si el viento cambia... E...
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 79
Agradecimientos dados: 0
Agradecimientos: 18 en 15 posts
Registro en: Apr 2014
Mensaje: #2
RE: Ayuda. Busqueda Binaria de Archivos C++
hola
podes mostrarme el codigo?
asi lo modificamos.
04-07-2015 14:42
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] FarSalazar recibio 1 Gracias por este post
germanico (05-07-2015)
germanico Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 12
Agradecimientos dados: 12
Agradecimientos: 0 en 0 posts
Registro en: Jan 2014
Mensaje: #3
RE: Ayuda. Busqueda Binaria de Archivos C++
Lo que me interesa es que la función búsqueda binaria me funcione mas allá de otro errores que hay.. Gracias


#include <cstdlib>
#include <iostream>

struct Trprods{
int codp;
float pu;
};
Trprods Rprods;
struct Trvtas {
int cod;
float tot;
};


using namespace std;

void seek(FILE* arch, int recSize, int n) {

fseek(arch, n*recSize,SEEK_SET);

}

long fileSize(FILE* f, int recSize) {

long curr=ftell(f);

fseek(f,0,SEEK_END);

long ultimo=ftell(f);

fseek(f,curr,SEEK_SET);

return ultimo/recSize;

}

long filePos(FILE* arch, int recSize) {

return ftell(arch)/recSize;

}

int BusquedaBinariaArchivo(FILE*f, Trprods ,int Posic){
int U,M;
int codp;
Posic = -1;
int Pri=0;

U = fileSize(f,sizeof(Rprods));
while ((Pri <= U) and (Posic = -1)) {

M = (Pri + U )/2;

fseek(f, M*sizeof(f),SEEK_SET);
fread(&f,sizeof(Rprods),1,f) ;

if ( Rprods.codp = codp)
{

Posic = M;

}
else
{

if( codp > Rprods.codp)
{


Pri = M+1;

}
else
{

U = M - 1;
}
}
}

}


int main(int argc, char *argv[])
{
int codp;
int cantu;
int Posic;
{
FILE*Prods;
Trprods Rprod;
Prods = fopen ("Prods.dat","rb");

FILE*Vtas;
Trvtas Rvtas;
Vtas = fopen ("Vtas.dat","wb");

for(int i =1; fileSize(Prods,sizeof(Rprod));i++)
{
fread(&Rprod, sizeof(Rprod), 1, Prods);
Rvtas.cod = Rprod.codp;
Rvtas.tot = 0;
fwrite(&Rvtas,sizeof(Rvtas),1,Vtas);
}

cout<<"ingrese el cod de producto: "<<endl;
cout<<"ingrese 0 para terminar el ingreso. "<<endl;
cin>>codp;
float imp;

while(codp != 0);
{
cin>>cantu;
BusquedaBinariaArchivo(Prods ,Trprods? ,posic?)
fseek(Prods,Posic,SEEK_SET);
fread(&Rprod, sizeof(Rprod), 1, Prods);
imp = Rprod.pu*cantu;

cout<<Rvta.codp<<endl;
cout<<cantu<<endl;
cout<<imp<<endl;
seek(Vtas,pos,SEEK_SET);
fread(&Rvtas,sizeof(Rvtas),1,Vtas)
Rvtas.tot = Rvtas.tot+ imp;
seek (Vtas,Posic,SEEK_SET);
fwrite(&Rvtas,sizeof(Rvtas),1,Vtas);

cin>>codp;
}

seek(Vtas,0);

while ( !feof(Vtas) );
{
fread(&Rvtas,sizeof(Rvtas),1,Vtas);
if ( Rvtas.tot=0 )
{
cout<<Rvtas.cod<<endl;
cout<<"no se vendio"<<endl;
}

cout<<Rvtas.cod<<endl;
cout<<Rvtas.tot<<endl;
}
fclose(Prods);
fclose(Vtas);


system("PAUSE");
return EXIT_SUCCESS;
}

05-07-2015 01:51
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
FarSalazar Sin conexión
Militante
"Si el viento cambia... E...
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 79
Agradecimientos dados: 0
Agradecimientos: 18 en 15 posts
Registro en: Apr 2014
Mensaje: #4
RE: Ayuda. Busqueda Binaria de Archivos C++
me gustaria saber de que trata el problema , podes decirme??
05-07-2015 10:09
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
germanico Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 12
Agradecimientos dados: 12
Agradecimientos: 0 en 0 posts
Registro en: Jan 2014
Mensaje: #5
RE: Ayuda. Busqueda Binaria de Archivos C++
Dice dado un archivo de prod ordenado por cod de prod, con el siguiente diseño:
codigo de prod.(int) precio unitario(float)
y un conjunto de pedidos, donde cad uno se conoce cod de prod y cant de unidades pedidas(word).Los pedidos finalizan con un cod = a 0, y hay stock suf para satisfacer todos los pedidos(todos se transforman en vtas)
informar de cada vta codigo de prod, unidades e importe de la venta
informar los cod de prod que no fueron vendidos
grabar un archivo binario con los sig datos:
Cod de prod Total facturado
999 9999999
05-07-2015 23:09
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
germanico Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 12
Agradecimientos dados: 12
Agradecimientos: 0 en 0 posts
Registro en: Jan 2014
Mensaje: #6
RE: Ayuda. Busqueda Binaria de Archivos C++
Ahí lo modifique un poco pero sigo con problemas para correrlo cry

#include <cstdlib>
#include <iostream>

struct Trprods{
int codp;
float pu;
};
Trprods Rprods;
struct Trvtas {
int cod;
float tot;
};


using namespace std;

long fileSize(FILE* f, int recSize) {

long curr=ftell(f);

fseek(f,0,SEEK_END);

long ultimo=ftell(f);

fseek(f,curr,SEEK_SET);

return ultimo/recSize;

}

long filePos(FILE* arch, int recSize) {

return ftell(arch)/recSize;

}

int BusquedaBinariaArchivo(FILE*f, Trprods ,int Posic){
int U,M;
int codp;
Posic = -1;
int Pri=0;

U = fileSize(f,sizeof(Rprods));
while ((Pri <= U) and (Posic = -1)) {

M = (Pri + U )/2;

fseek(f, M*sizeof(Rprods),SEEK_SET);
fread(&f,sizeof(Rprods),1,f) ;

if ( Rprods.codp = codp)
{

Posic = M;

}
else
{

if( codp > Rprods.codp)
{


Pri = M+1;

}
else
{

U = M - 1;
}
}
}

}


int main(int argc, char *argv[])
{
int codp;
int cantu;
int Posic;
{
FILE*Prods;
Trprods Rprods;
Prods = fopen ("Productos.dat","rb");

FILE*Vtas;
Trvtas Rvtas;
Vtas = fopen ("Vtas.dat","wb");

for(int i =1; fileSize(Prods,sizeof(Rprods));i++)
{
fread(&Rprods, sizeof(Rprods), 1, Prods);
Rvtas.cod = Rprods.codp;
Rvtas.tot = 0;
fwrite(&Rvtas,sizeof(Rvtas),1,Vtas);
}

cout<<"ingrese el cod de producto: "<<endl;
cout<<"ingrese 0 para terminar el ingreso. "<<endl;
cin>>codp;
float imp;

while(codp != 0)
{
cin>>cantu;
BusquedaBinariaArchivo(Prods ,Rprods ,Posic);
fseek(Prods,Posic,SEEK_SET);
fread(&Rprods, sizeof(Rprods), 1, Prods);
imp = Rprods.pu*cantu;

cout<<Rvtas.cod<<endl;
cout<<cantu<<endl;
cout<<imp<<endl;
fseek(Vtas,Posic,SEEK_SET);
fread(&Rvtas,sizeof(Rvtas),1,Vtas);
Rvtas.tot = Rvtas.tot+ imp;
fseek (Vtas,Posic,SEEK_SET);
fwrite(&Rvtas,sizeof(Rvtas),1,Vtas);

cin>>codp;
}

fseek(Vtas,0,SEEK_SET);

while ( !feof(Vtas) )
{
fread(&Rvtas,sizeof(Rvtas),1,Vtas);
if ( Rvtas.tot=0 )
{
cout<<Rvtas.cod<<endl;
cout<<"no se vendio"<<endl;
}

cout<<Rvtas.cod<<endl;
cout<<Rvtas.tot<<endl;
}
fclose(Prods);
fclose(Vtas);

system("PAUSE");
return EXIT_SUCCESS;
}
}



(Este mensaje fue modificado por última vez en: 07-07-2015 04:12 por germanico.)
07-07-2015 04:04
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.