Pascal/Turbo Pascal - Insertar ordenado en vector

 
Vista:

Insertar ordenado en vector

Publicado por Juan (83 intervenciones) el 06/12/2007 17:15:12
Que tal, mi duda es como hago para insertar ordenado en un vector y desplazar todo para abajo? alguno tiene algún procedimiento que me pueda ayudar con esto? saludos
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

RE:Insertar ordenado en vector

Publicado por Tate (1 intervención) el 06/12/2007 20:46:41
Si el vector no esta ordenado tienes que ordenarlo con este procedimiento:

procedure quicksort(var a: vector; inf,sup : integer);

var piv,tmp,i,j : integer;
begin
if inf <= sup then
begin
piv := a[sup]; i := inf - 1; j := sup;
repeat
repeat i := i + 1 until a[i] >= piv;
repeat j := j - 1 until a[j] <= piv;
tmp := a[i]; a[i] := a[j]; a[j] := tmp
until j <= i;
a[j] := a[i]; a[i] := a[sup]; a[sup] := tmp;
quicksort(a,inf,i - 1);
quicksort(a,i + 1,sup)
end
end;

para insertar luego el elemento tienes que biscar su posición teniendo en cuenta que no este repetido y como esta ordenado el vector si de forma ascendente o descendente:

i:=1
enc:=false;
while (i<=n_elementos_de_v) do or not enc
begin
if vector[i]=elemento then begin
write('El elemento ya existe en el vector');
enc:=true;
end;
else if vector[i]>elemento then begin
pos:=i;
enc:=true;
end
else i:=i+1;
end;

hay formas mas optimas de encontrar elementos en vectores ordenados;
a continuación desplazas a la derecha (o hacia abajo) los elementos que te sobran de forma descendente hasta la posión i:

for i:=n_elementos_de_v downto pos do vector[i+1]:=vector[i];

y ya solo te queda:

vector[pos]:=elemento

espero que te haya podido ayudar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Insertar ordenado en vector

Publicado por Andres Villaneva (13 intervenciones) el 07/12/2007 02:31:30
Hola, conozco otra manera de invertir el vector al momento de imprimirlo, quedaria algo asi.!

Program VECT_INV;

Uses
crt;

Type

Vector= Array [1..10000] of Integer;

Var

Vect:Vector;
V:Integer;
P:Char;
Long:integer;

Begin {*** Estructura Principal ***}

V:=0;
clrscr;

Gotoxy (29,02); writeln ('Inversion de un Vector');
Gotoxy (29,03); writeln ('ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ');
Gotoxy (18,05); writeln ('Longitud del vector:');
Gotoxy (39,05); readln (Long);

For V:= 1 to Long do {*** Llenado y muestreo del vector ***}
Begin
Gotoxy (16,08); writeln ('Posicion [',V,']:');
Gotoxy (30,08); readln (Vect[V]);
Gotoxy (26,V+13); writeln ('[',Vect[V],']');
Gotoxy (20,11); writeln ('Vector Original');
Gotoxy (20,12); writeln ('ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ');
End;

For V:= 1 to Long do {*** Muestreo del vector Invertido ***}
Begin
Gotoxy (42,11); writeln ('Vector Invertido');
Gotoxy (42,12); writeln ('ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ');
Gotoxy (48,13+(Long-V+1) ); writeln ('[',Vect[V],']');
End;

P:=readkey ;

End.

Espero que te sirva
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Insertar ordenado en vector

Publicado por juan (83 intervenciones) el 07/12/2007 03:55:10
No hay un procedimiento mas simple para todo esto??? el quicksort es muy avanzado, me gustaría simpelemnte un intsertar ordenado desplazando a todas las posiciones que siguen
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Insertar ordenado en vector

Publicado por Mariano (2 intervenciones) el 07/12/2007 18:04:36
Hola, el modulo seria asi:

Procedure InsertaOrdenado (var vec:tvec; elem:tinfo;cardi:word);
begin
while (cardi < 1) and (elem< vec[cardi-1]) do begin
v[cardi]:=v[cardi-1];
cardi:=cardi-1
end;
v[cardi]:=elem
end;

Con eso alcanza, el primero es el vector, el segundo paramentro el elemento a agruregar dle tipo que quieras, y el tercero es la cardinalidad, es decir un contador que debes ir usando para ver caundo elemento ya hay agregados al vector, o sea no representa la cantidad maxima, sino cuantos campos ya insertaste!

Un abrazooo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Insertar ordenado en vector

Publicado por juan (83 intervenciones) el 07/12/2007 19:10:23
Gracias!!!!!!!! es justo lo qeu estaba buscando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Insertar ordenado en vector

Publicado por juan (83 intervenciones) el 07/12/2007 19:50:47
Estas seguro que la condición del while está bien?????

Procedure InsertaOrdenado (var vec:tvec; elem:tinfo;cardi:word);
begin
while (cardi < 1) and (elem< vec[cardi-1]) do begin
v[cardi]:=v[cardi-1];
cardi:=cardi-1
end;
v[cardi]:=elem
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Insertar ordenado en vector

Publicado por Mariano (57 intervenciones) el 07/12/2007 20:14:57
Holaa!!
No disculpaaaa es
while (cardi > 1) and (elem < vec[cardi-1]) do begin
.....
....
End;

Disculpaa que tipie mal :S

Un abrazoo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar