[ Foro de Pascal ]
Buenas , el problema que tengo es el siguiente: dos arrays de 1..n y de 1..m , ordenarlos cada uno por separado , y que se visualicen los elementos de los dos en un tercer array [1..n+m] ordenados
Me falla que se visualicen ordenados en el ultimo array y no se si el ordenamiento en el arrray c esta bien ya que hay que comparar los elementos de los anteriores e ir colocandolos.
El codigo es este
PROGRAM EjercicioPracticas(input,output);
CONST
n=3;
m=4;
TYPE
tarray=array[1..n] of integer;
tarray2=array[1..m] of integer;
tarray3=array[1..n+m] of integer;
var
a:tarray;
b:tarray2;
c:tarray3;
(**************************************************)
PROCEDURE MeterDatos( VAR a:tarray);
VAR
i,j:integer;
BEGIN
FOR i:=1 TO n DO BEGIN
write('Inserte el elemento[',i,']');
readln(a[i]);
END;
END;
(********************************************)
PROCEDURE VisualizarDatos( protected VAR a:tarray);
VAR
i:integer;
BEGIN
FOR i :=1 TO n DO BEGIN
write('':15);
write(a[i]:5);
writeln;writeln;
END;
END;
(**************************************************)
PROCEDURE MeterDatos2( VAR b:tarray2);
VAR
i,j:integer;
BEGIN
FOR i:=1 TO n DO BEGIN
write('Inserte el elemento[',i,']');
readln(b[i]);
END;
END;
(********************************************)
PROCEDURE VisualizarDatos2( protected VAR b:tarray2);
VAR
i:integer;
BEGIN
FOR i :=1 TO n DO BEGIN
write('':15);
write(b[i]:5);
writeln;writeln;
END;
END;
(*******************************************************)
PROCEDURE Ordena_Burbuja(var a:tarray);
var
i:integer;
aux:integer;
BEGIN
for i:= 1 to n DO BEGIN
if a[i-1] > a[i] then
BEGIN
aux := a[i-1];
a[i-1] := a[i];
a[i] := aux;
end;
end;
VisualizarDatos(a);
end;
(***********************************************************)
PROCEDURE OrdenaBurbuja2(var b:tarray2);
var
i:integer;
aux:integer;
BEGIN
for i:= 1 to n DO BEGIN
if a[i-1] > a[i] then
BEGIN
aux := a[i-1];
a[i-1] := a[i];
a[i] := aux;
end;
end;
VisualizarDatos2(b);
end;
(*********************************************************************)
PROCEDURE OrdenarC(var a:tarray; var b:tarray2;var c:tarray3 );
VAR
i:integer;
BEGIN
c[1]:=a[1];
FOR i:=1 TO n DO BEGIN
IF(b[i]<a[i]) then
b[i]:=c[1];
END;
END;
(********************************************)
PROCEDURE VisualizarDatos3( protected VAR c:tarray3);
VAR
i:integer;
BEGIN
FOR i :=1 TO n DO BEGIN
write('':15);
write(c[i]:5);
writeln;writeln;
END;
END;
Falta el procedimiento menu que los llama pero no quiero extender demasiado el codigo.
Aquí tendrás que recurrir a algún algoritmo que te permita intercalar ordenadamente ambos vectores en el tercer vector. Yo estuve buscando en google y encontré esto:
Algoritmo Intercala_2V(A,B,C)
Inicio_Algoritmo
i <- 1
j <- 1
k <- 1
Mientras ((i<=n) y (j<=m)) hacer
Si (A[i] < B[j] entonces
C[k] <- A[i]
i <- i + 1
Si_no
C[k] <- B[j]
j <- j + 1
Fin_Si
k <- k + 1
Fin_Mientras
Mientras (i <= n) hacer
C[k] <- A[i]
i <- i + 1
k <- k + 1
Fin_Mientras
Mientras (j <= m) hacer
C[k] <- B[j]
j <- j + 1
k <- k + 1
Fin_Mientras
Fin_Algoritmo
Ahora lo que debes hacer es llevar este algoritmo al código Pascal.
Saludos.
(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.)