Pascal/Turbo Pascal - Ayuda ordenamiento archivos pascal

 
Vista:
sin imagen de perfil

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

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder