[ Foro de Pascal ]

ordenamiento

18-Sep-2014 00:48
Carolina Sanchez
9 Respuestas

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.




18-Sep-2014 01:29
Luis Torres (+18)

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.


18-Sep-2014 03:51
Carolina Sanchez

Y como lo paso a otro dos vectores?


18-Sep-2014 05:22
Luis Torres (+18)

Muy fácil:


.
.
.
for i:=1 to LimiteSupVector do
Begin
    VectorOrigenAleatorio[i]:= VectorParaOrdenar1[i];
    VectorOrigenAleatorio[i]:= VectorParaOrdenar2[i]; 
End;
.
.
.

18-Sep-2014 05:31
Luis Torres (+18)

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;
.
.
.



18-Sep-2014 21:25
Carolina Sanchez

Quiza no lo entendi bien, pero no me funciona :/


19-Sep-2014 00:00
Luis Torres (+18)

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.


19-Sep-2014 00:28
Carolina Sanchez

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?


19-Sep-2014 00:55
Luis Torres (+18)

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.


19-Sep-2014 01:13
Carolina Sanchez

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.)