[ Foro de Pascal ]
Hola quisiera saber como tengo que hacer para usar un mismo vector aleatorio para dos metodos de ordenamiento distintos..
Este es el codigo que tengo hecho:
program estructura_menu;
uses
crt;
const
maximo=10;
type
vector=array [1..maximo] of integer;
var
opcion: string;
salida: boolean;
procedure carga(var vec:vector);
var
i:integer;
begin
ClrScr;
randomize;
writeln ('Vector sin ordenar');
for i:=1 to maximo do
begin
vec[i]:=random (50)+1;
write (vec[i], ' ');
end;
readln;
end;
procedure insercion;
var
i,j,aux:integer;
vec:vector;
begin
carga(vec);
for i:= 2 to maximo do
begin
j:=i-1;
aux:=vec[i];
while (j>0) and (vec[j]> aux) do
begin
vec[j+1]:=vec[j];
j:=j-1;
end;
vec[j+1]:=aux;
end;
writeln;
writeln ('el vector ordenado es ');
for j:=1 to maximo do
write (vec[j], ' ');
readln;
end;
procedure burbuja;
var
i,j,aux: integer;
vec:vector;
begin
carga(vec);
for i:=1 to maximo do
for j:=1 to maximo-1 do
if vec[j]> vec[j+1] then
begin
aux:=vec[j+1];
vec[j+1]:= vec[j];
vec[j]:=aux;
end;
writeln;
writeln ('El vector ordenado');
for i:= 1 to maximo do
write (vec[i], ' ');
readln;
end;
procedure mostrarmenuprincipal;
begin
gotoxy (33,2);writeln ('MENU PRINCIPAL');
gotoxy (33,3);writeln ('==============');
gotoxy (21,5);writeln ('1- ordenamiento por insercion');
gotoxy(21,7);writeln ('2-ordenamiento por burbujeo');
gotoxy (21,9);writeln ('3-salir');
end;
begin
salida:=false;
repeat
mostrarmenuprincipal;
gotoxy (40,11);write ('Elija una opcion ', ' ');
readln (opcion);
case opcion of
'1': insercion;
'2': burbuja;
'3': salida:= true;
end;
clrscr;
until (salida=true)
end.
Yo creo que lo que deberías hacer es copiar el vector aleatorio en otros dos vectores más y a cada uno aplicarle un método de ordenamiento distinto.
Esperemos a ver lo que opine el prof. Nacho Cabanes.
Saludos.
Y como lo paso a otro dos vectores?
Muy fácil:
.
.
.
for i:=1 to LimiteSupVector do
Begin
VectorOrigenAleatorio[i]:= VectorParaOrdenar1[i];
VectorOrigenAleatorio[i]:= VectorParaOrdenar2[i];
End;
.
.
.
Perdón, me equivoqué, la corrección está a continuación:
.
.
.
for i:=1 to LimiteSupVector do
Begin
VectorParaOrdenar1[i]:= VectorOrigenAleatorio[i];
VectorParaOrdenar2[i]:= VectorOrigenAleatorio[i];
End;
.
.
.
Quiza no lo entendi bien, pero no me funciona :/
Tienes un pequeño descuido en tu código, en el cuerpo principal en ninguna parte invocas al procedimiento "cargar", o sea que nunca se genera el vector con datos aleatorios.
En cuanto a tener o no varios vectores aleatorios, tienes la opción de crear un parámetro por valor en cada procedimiento de ordenamiento, ese parámetro es un vector, y ese vector es el que usarás para ordenarlo dentro de ese procedimiento. De esa manera solo necesitarás crear el vector aleatorio (en el procedimiento "cargar").
Saludos.
si creo que eso es lo que hice al final, pero tengo otro problemita, como hago para que cuando llamo al metodo de ordenamiento me muestre primero el vector desordenado?
Yo manejo Turbo Pascal, y no compila. Da un error porque defines "opcion" como string en vez de char. Corregí eso. Hice las modificaciones de acuerdo a la última idea que te di, o sea utilizando parámetros valor en cada uno de los procedimientos de ordenamiento; además, generé el vector aleatorio al principio del cuerpo del programa, pero también di la opción de generar un nuevo vector aletorio desde el menú del programa. De cualquier modo, se permitirá ordenar un mismo vector aleatorio tanto por burbuja como por inserción. Sé que no debo entregarte el código hecho, pero en vista de que has trabajado mucho, aquí te lo dejo. Espero que lo examines y aprendas de él:
program estructura_menu;
uses
crt;
const
maximo=10;
type
vector=array [1..maximo] of integer;
var
opcion: char;
salida: boolean;
vec: vector;
procedure mostrarvector(vec: vector);
var
i: integer;
begin
ClrScr;
writeln('El vector aleatorio es: ');
for i:=1 to maximo do
begin
write(vec[i],' ');
end;
end;
procedure carga(var vec:vector);
var
i:integer;
begin
ClrScr;
randomize;
for i:=1 to maximo do
begin
vec[i]:=random (50)+1;
end;
end;
procedure insercion(vec: vector);
var
i,j,aux:integer;
begin
for i:= 2 to maximo do
begin
j:=i-1;
aux:=vec[i];
while (j>0) and (vec[j]> aux) do
begin
vec[j+1]:=vec[j];
j:=j-1;
end;
vec[j+1]:=aux;
end;
writeln;
writeln ('el vector ordenado es ');
for j:=1 to maximo do
write (vec[j], ' ');
readln;
end;
procedure burbuja(vec: vector);
var
i,j,aux: integer;
begin
for i:=1 to maximo do
for j:=1 to maximo-1 do
if vec[j]> vec[j+1] then
begin
aux:=vec[j+1];
vec[j+1]:= vec[j];
vec[j]:=aux;
end;
writeln;
writeln ('El vector ordenado');
for i:= 1 to maximo do
write (vec[i], ' ');
readln;
end;
procedure mostrarmenuprincipal;
begin
gotoxy (33,2);writeln ('MENU PRINCIPAL');
gotoxy (33,3);writeln ('==============');
gotoxy (21,5);writeln ('1-ordenamiento por insercion');
gotoxy(21,7);writeln ('2-ordenamiento por burbujeo');
gotoxy(21,9);writeln('3-generar nuevo vector aleatorio');
gotoxy (21,11);writeln ('4-salir');
end;
begin
salida:=false;
carga(vec);
repeat
mostrarmenuprincipal;
gotoxy (40,13);write ('Elija una opcion ', ' ');
readln (opcion);
case opcion of
'1': begin
mostrarvector(vec);
insercion(vec);
end;
'2': begin
mostrarvector(vec);
burbuja(vec);
end;
'3': begin
carga(vec);
mostrarvector(vec);
readln;
end;
'4': salida:= true;
end;
clrscr;
until (salida=true)
end.
Muchas gracias por tu ayuda.. el codigo es muy similar al ultimo que he intentado asi que algo aprendi :)
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)