[ Foro de Pascal ]

Visualizar array

10-Dec-2014 03:48
Alberto Rilo Mosteiro
1 Respuestas

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.


10-Dec-2014 16:22
Luis Torres (+18)

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