SE ME CAE EL PELO!!!
Publicado por Juan (83 intervenciones) el 01/09/2007 00:28:36
Que tal tengo el siguiente problema
El negocio ABC tiene un Archivo desordenado con la siguiente información de cada uno de los 90 articulos que vende:
nro de articulo(3 digitos) precio(real)
Se solicita emitir un listado con la información contenida en el archivo ordenado de menor a mayor
por nro de artículo.
El problema es que no se si me equivoqué con la lógica o que pero lo que quize hacer es:
primero paso el campo Nro de Articulo a un vector, luego ordeno ese vector, y después uso ese
vector indice para listar el archivo como ordenado(cosa que no se hacer bien, no termino de
entender el tema de archivos/vectores índices), acá esta el código Saint Romero, un saludo
De paso te muestro el contenido del archivo Abc:
Nro de socio precio
03 19.50
02 15
05 18
04 17
01 12
Debería Salir
01 12
02 15
03 19.50
04 17
05 18
y el código:
Program ej12S1;
const
LimiteInferior=0;
LimiteSuperior=89;
Type
Rabc=record
Nart:word;
Precio:real
end;
ArchAbc=file of Rabc;
VecArt=array[LimiteInferior..LimiteSuperior] of word;
Procedure Abrir(var Art:ArchAbc);
Begin
assign(Art,'Abc.dat');
reset(Art);
end;
Procedure CargarVector(var Art:ArchAbc;Var Vart:VecArt);
var
Rart:Rabc;
i:Byte;
Begin
i:=0;
while not eof(Art) do
begin
read(art,rart);
Vart[i]:=Rart.Nart;
i:=i+1
end
end;
Procedure Intercambio(var Entidad1,Entidad2:word);
Var Aux:word;
Begin
Aux:=Entidad1;
Entidad1:=Entidad2;
Entidad2:=Aux
end;
Procedure OrdenarVector(var Vart:VecArt;LimiteInferior,LimiteSuperior:word);
Var i:byte;
Fin:word;
Begin
while LimiteInferior<LimiteSuperior do
begin
Fin:=LimiteSuperior-1;
LimiteSuperior:=0;
for i:=LimiteInferior to Fin do
begin
if VArt[i]>VArt[i+1] then
begin
Intercambio(VArt[i],VArt[i+1]);
limiteSuperior:=i
end
end
end
end;
Procedure MostrarOrdenado(Var Art:ArchAbc;Var Vart:VecArt;Card:byte);
var Rart:Rabc;
i:byte;
begin
for i:=1 to card do
begin
seek(art,Vart[i]);
read(art,rart);
writeln('Nro de Articulo es:',rart.Nart);
writeln('Precio: ',rart.Precio:5:2)
end
end;
Var
abc:ArchAbc;
regAbc:Rabc;
Vart:Vecart;
Begin
Abrir(Abc);
CargarVector(Abc,Vart);
OrdenarVector(Vart,LimiteInferior,LimiteSuperior);
MostrarOrdenado(Abc,Vart,LimiteSuperior);
close(abc)
end.
El negocio ABC tiene un Archivo desordenado con la siguiente información de cada uno de los 90 articulos que vende:
nro de articulo(3 digitos) precio(real)
Se solicita emitir un listado con la información contenida en el archivo ordenado de menor a mayor
por nro de artículo.
El problema es que no se si me equivoqué con la lógica o que pero lo que quize hacer es:
primero paso el campo Nro de Articulo a un vector, luego ordeno ese vector, y después uso ese
vector indice para listar el archivo como ordenado(cosa que no se hacer bien, no termino de
entender el tema de archivos/vectores índices), acá esta el código Saint Romero, un saludo
De paso te muestro el contenido del archivo Abc:
Nro de socio precio
03 19.50
02 15
05 18
04 17
01 12
Debería Salir
01 12
02 15
03 19.50
04 17
05 18
y el código:
Program ej12S1;
const
LimiteInferior=0;
LimiteSuperior=89;
Type
Rabc=record
Nart:word;
Precio:real
end;
ArchAbc=file of Rabc;
VecArt=array[LimiteInferior..LimiteSuperior] of word;
Procedure Abrir(var Art:ArchAbc);
Begin
assign(Art,'Abc.dat');
reset(Art);
end;
Procedure CargarVector(var Art:ArchAbc;Var Vart:VecArt);
var
Rart:Rabc;
i:Byte;
Begin
i:=0;
while not eof(Art) do
begin
read(art,rart);
Vart[i]:=Rart.Nart;
i:=i+1
end
end;
Procedure Intercambio(var Entidad1,Entidad2:word);
Var Aux:word;
Begin
Aux:=Entidad1;
Entidad1:=Entidad2;
Entidad2:=Aux
end;
Procedure OrdenarVector(var Vart:VecArt;LimiteInferior,LimiteSuperior:word);
Var i:byte;
Fin:word;
Begin
while LimiteInferior<LimiteSuperior do
begin
Fin:=LimiteSuperior-1;
LimiteSuperior:=0;
for i:=LimiteInferior to Fin do
begin
if VArt[i]>VArt[i+1] then
begin
Intercambio(VArt[i],VArt[i+1]);
limiteSuperior:=i
end
end
end
end;
Procedure MostrarOrdenado(Var Art:ArchAbc;Var Vart:VecArt;Card:byte);
var Rart:Rabc;
i:byte;
begin
for i:=1 to card do
begin
seek(art,Vart[i]);
read(art,rart);
writeln('Nro de Articulo es:',rart.Nart);
writeln('Precio: ',rart.Precio:5:2)
end
end;
Var
abc:ArchAbc;
regAbc:Rabc;
Vart:Vecart;
Begin
Abrir(Abc);
CargarVector(Abc,Vart);
OrdenarVector(Vart,LimiteInferior,LimiteSuperior);
MostrarOrdenado(Abc,Vart,LimiteSuperior);
close(abc)
end.
Valora esta pregunta


0