Newsgroup: it.comp.lang.pascal
Titolo: fondi array!!

Salve a tutti, volevo chiedervi una cosa sicuramente stupida,
qual'è il meccanismo per fondere ordinatamente 2 array di integer??
Se avete il codice postatemelo .
Grazie!!

 wrote:

Non so se è quello che ti serve ma per la scuola io ho fatto questo
programma che, immessi due gruppi di numeri (array) li inserisce in un
terzo eliminando i doppioni.
program stat;
 const N = 100;
 type vet = array[1..N] of integer;
 var
  i, m1, m2, a, pul: integer;
  appoggio: real;
  g, p, q, h: vet;
procedure carica (m: integer; var v: vet);
 var i: integer;
  begin
   for i := 1 to m do
     begin
        writeln('Immetti il valore', i);
        readln(v[i]);
     end;
  end;
begin{main program}
 write('Scrivi di quanti valori è composto il primo gruppo : ');
 readln(m1);
 write('Scrivi di quanti valori è composto il secondo gruppo : ');
 readln(m2);
 carica(m1, q);
 carica(m2, p);
 for i := 1 to m1 do
   g[i] := q[i];
 for i := (m1 + 1) to (m1 + m2) do
   g[i] := p[i - m1];
 for i := 1 to ((m1 + m2) - 1) do
   for a := (i + 1) to (m1 + m2) do
      if g[a] < g[i] then
        begin
          appoggio := g[i];
          g[i] := g[a];
          g[a] := appoggio;
        end;
 writeln('Scrivo il gruppo di numeri in ordine : ');
  for i := 1 to (m1 + m2) do
   writeln(g[i] : 10 : 2);
h[1] := g[1];
pul := 1;
 for i := 2 to (m1 + m2) do
   begin
     if g[i] <> h[pul] then
        begin
         h[pul + 1] := g[i];
         pul := pul + 1;
        end;
   end;
writeln('Scrivo il gruppo di numeri in ordine e senza doppioni');
 for i := 1 to pul do
  begin
   writeln(h[i] : 2 : 2);
  end;
end.

 ha scritto nel messaggio
news:2YOK6.3362$Rc5....@news2.tin.it...


 > qual'č il meccanismo per fondere ordinatamente 2 array di integer??


> qual'č il meccanismo per fondere ordinatamente 2 array di integer??
O parti da 2 array disordinati e quindi prima li ordini, oppure se sono gia
ordinati basta una procedurina:
.
.
.
.
procedure scegli (var vet : vettore);
begin
if x[k]>y[j] then begin
                          vet[i]:=y[j];
                          j:=j+1;
                          end
                  else begin
                            vet[i]:=x[k];
                            k:=k+1;
                        end;
end;
procedure merge(.......dipende da quello che deve fare...);
begin
 for i:=1 to n do begin
  scegli(vettore destinazione)
end;
end;
.
.
.
confronto gli elementi piů piccoli di entrambi i vettori e metto in quello
finale il piů piccolo aumentando l'indice corrispondente; a questo punto
reinvoco scegli con l'indice del vettore destinazione aggiornato che mi
risceglie il piů piccolo.............
provalo che l'ho scritto al volo........;-p
NB: ricorsivamente puoi applicare lo stesso algoritmo per ordinare un solo
vettore:
       se lo dividi in due diventano 2 vettori (ma non necessariamente
ordinati);se lo dividi ancora in 2 avrai 4 vettori (ma non necessariamente
ordinati)........
       fino a quando avrai tutti vettori da un elemento che sono tutti
vettori ordinati...... a quel punto cominci a fare la MERGE su questi fino
ad avere il tuo array di
       partenza , ma bene ordinato!!!!!!!!!!!!
ciao ciao ^___^