
Ayuda ordenamiento archivos pascal
Publicado por Martiniano (1 intervención) el 09/12/2016 03:52:48
Hola! Que tal ? Tengo una consulta y espero que alguien por favor me pueda ayudar... Necesito ordenar un archivo por descripción, lo que hice fue pasar el campo 'descripción' y el campo 'posición' a un vector,para ordenarlo de manera que me ordene el vector por descripción pero no me lo modifique, entonces cuando necesito ordenar el archivo técnicamente ya estaría ordenado en el vector y solo necesitaría llamarlo, pero mi problema es que cuando hago el ordenar del archivo no se como hacer para sacar la posición que se encuentra en el vector para pasársela al archivo, alguien por favor me podría ayudar?
Trato de explicarlo de otra forma... Lo que hice fue crear un vector con los campos 'descripción' y 'posición' que tenia en el archivo, entonces yo al vector lo ordeno por descripción pero al campo 'posición' no lo modifico, de manera tal que cuando yo vaya a ordenar el archivo llame al vector[i].posición y de ahí me lo ordene.Por ejemplo: Estaría el volkswagen golf, y el renault 12, suponiendo que en el archivo el volkswagen este en la posición 5, y el renault en la posición 8, en el vector me quedaría
"descripción: renault 12; posición :8" "descripción: volkswagen golf; posición: 5" entonces yo al ordenar en el archivo, leería el vector ordenado, y si el renault 12 esta primero, voy a la posición 8 del archivo y leo todos los campos que haya en esa posición y los asigno a la posición en la que me encuentre. Pero no se como sacar esa posición del vector.
Lo que tengo en mi codigo seria esto:
Este seria el ordenar vector
Y este seria el ordenar archivo:
Espero haberme explicado bien y que alguien me pueda ayudar, desde ya muchas gracias por su tiempo y de no haberme explicado bien tratare de hacerlo de nuevo.
Trato de explicarlo de otra forma... Lo que hice fue crear un vector con los campos 'descripción' y 'posición' que tenia en el archivo, entonces yo al vector lo ordeno por descripción pero al campo 'posición' no lo modifico, de manera tal que cuando yo vaya a ordenar el archivo llame al vector[i].posición y de ahí me lo ordene.Por ejemplo: Estaría el volkswagen golf, y el renault 12, suponiendo que en el archivo el volkswagen este en la posición 5, y el renault en la posición 8, en el vector me quedaría
"descripción: renault 12; posición :8" "descripción: volkswagen golf; posición: 5" entonces yo al ordenar en el archivo, leería el vector ordenado, y si el renault 12 esta primero, voy a la posición 8 del archivo y leo todos los campos que haya en esa posición y los asigno a la posición en la que me encuentre. Pero no se como sacar esa posición del vector.
Lo que tengo en mi codigo seria esto:
Este seria el ordenar vector
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure ordenar_vec_au (var vec_a:vec_auto; lima:word);
var
i,j:word;
aux:autos1;
begin
for i:=1 to lima-1 do
begin
for j:=1 to lima-i do
begin
if (vec_a[j].descripcion>vec_a[j+1].descripcion) then
begin
aux:=vec_a[j+1];
vec_a[j+1]:=vec_a[j];
vec_a[j]:=aux;
end;
end;
end;
end;
Y este seria el ordenar archivo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure ordenar_a (var vec_a:vec_auto; arch_a:archivo_auto ; lima:word{este es el limite}; var a: autos {este es el registro});
var
op:char;
i:word;
posicion:word;
begin
abrir_a(arch_a);
leer_a(arch_a,pos,a);
writeln ('Desea ordenar los autos?');
i:=0;
op:=readkey;
if (op <>'0') then
ordenar_vec_au (vec_a,lima);
begin
for i:=1 to lima do
begin
posicion:=vec_a[i].pos;
a[i]:=a[posicion];
{leer_a(arch_a,pos,a);}
end;
end;
guardar_a(arch_a,pos,a);
save_vec_a( a, vec_a,lima,pos);
cerrar_a (arch_a);
end;
Espero haberme explicado bien y que alguien me pueda ayudar, desde ya muchas gracias por su tiempo y de no haberme explicado bien tratare de hacerlo de nuevo.
Valora esta pregunta


0