Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - intersezione tra due vettori
Forum - Pascal - intersezione tra due vettori

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
xswat69 (Normal User)
Newbie


Messaggi: 6
Iscritto: 29/11/2009

Segnala al moderatore
Postato alle 15:11
Domenica, 29/11/2009
buonasera ho fatto questo programma che dice di fare l'intersezione tra due vettori e di eliminare (se ci sono) i numeri che si ripetono...non riesco a fare quest'ultimo punto per favore aiutatemi!serve per domani...grazie a chi risponde
esempio 1 vet=1  3  5  3
        2 vet=3  4  3  2
        vet intersezione =3(solo una volta non due)


Codice sorgente - presumibilmente Delphi

  1. type pvet =array [1..10] of integer;
  2.        svet=array [1..10] of integer;
  3.        cvet=array[1..10] of integer;
  4.   var a:pvet;
  5.       s:pvet;
  6.       l,x:cvet;
  7.       r,f,j,i,c:integer;
  8. begin
  9.  randomize;
  10.  r:=1;
  11.        for j:=1 to 10 do
  12.         begin
  13.         a[j]:=random(20)+1;
  14.         write(a[j],' ');
  15.         end;
  16.   writeln;
  17.                   for i:=1 to 10 do
  18.                     begin
  19.                     s[i]:=random(10)+1;
  20.                     write(s[i],' ');
  21.                     end;
  22.  writeln;
  23.                            for i:=1 to 10 do
  24.                              begin
  25.                                for j:=1 to 10 do
  26.                                 if a[j]=s[i] then
  27.                                   begin
  28.                                   c:=c+1;
  29.                                   x[i]:=s[i];
  30.                                   end;
  31.                               end;
  32.  writeln;
  33.                                            for i:=1 to c do
  34.                                            write(x[i],' ');
  35.                                  
  36. readln



edit by netarrow: sistemato il titolo

Ultima modifica effettuata da netarrow il 29/11/2009 alle 15:28
PM Quote
Avatar
Anonymous (Member)
Guru


Messaggi: 1059
Iscritto: 30/07/2006

Segnala al moderatore
Postato alle 17:14
Domenica, 29/11/2009
allora... (premetto che non ho guardato il codice che hai scritto)
cmq se tu vuoi far confrontare due vettori per poi crearne un altro che contenga tutti gli elementi del primo e del secondo eliminando quelli che sono doppioni basta che fai cosi:

chiamiamo A e B i due vettori e C il terzo da comporre..

dovrai partire con un ciclo for che passa indice per indice ogni elemento di A e che controlla se quell'elemento è presente dentro al vettore C (quindi ti serviranno due for annidati)

e poi fai la stessa cosa su B


avendo a disposizione i due array A e B, dovrai creare il terzo array C con dimensione la somma di quelle di A e B
quindi se A è lungo 5 e B è lungo 10, a C devi dargli 15, perché a priorio non sai quanto sarà grande ma di sicuro non di più della loro somma

un esempio di codice abbozzato potrebbe essere questo:
Codice sorgente - presumibilmente Delphi

  1. conta:=0;
  2. for i:=0 to [dimensione di a] do
  3. begin
  4. for j:=0 to [dimensione di c] do
  5. begin
  6. if not(A[i] = C[j]) then
  7. begin
  8. c[conta]= A[i];
  9. conta:= conta+1;
  10. end;
  11. end;
  12. end;


e poi la stessa cosa su B

penso dovrebbe andare cosi...

PM Quote
Avatar
Anonymous (Member)
Guru


Messaggi: 1059
Iscritto: 30/07/2006

Segnala al moderatore
Postato alle 17:32
Domenica, 29/11/2009
ah ho interpretato male la domanda...
no il codice di prima non fa l'intersezione...
ma riempie il vettore C con tutti gli elementi di A + quelli di B senza ripetere i doppioni...

cmq per quello che chiedi il gioco dovrebbe essere cosi:

passi in rassegna ogni elemento di A (con un ciclo for) poi lo confronti con ogni elemento di B
se trovi che c'è una corrispondenza, allora lo inserisci in C, ma solo se non è già presente in C

quindi ti serviranno 3 cicli for...

se riesci bene... sennò fammi sapere

PM Quote
Avatar
xswat69 (Normal User)
Newbie


Messaggi: 6
Iscritto: 29/11/2009

Segnala al moderatore
Postato alle 19:13
Domenica, 29/11/2009
scusa ma non ci riesco se puoi modificare il mio programma:
type pvet =array [1..10] of integer;
       svet=array [1..10] of integer;
       cvet=array[1..10] of integer;
  var a:pvet;
      s:pvet;
      l,x:cvet;
      r,f,j,i,c:integer;
begin
randomize;
r:=1;
for j:=1 to 10 do
begin
a[j]:=random(20)+1;
  write(a[j],' ');
  end;
  writeln;
for i:=1 to 10 do
begin
s:=random(10)+1;
  write(s,' ');
end;
writeln;
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
if (a[j]=s) and (x[j]<>a[j]) then
begin
c:=c+1;
x[j]:=a[j];
end;
end;
end;
writeln;
for i:=1 to c do
write(x,' ');


readln;



end.

PM Quote
Avatar
Anonymous (Member)
Guru


Messaggi: 1059
Iscritto: 30/07/2006

Segnala al moderatore
Postato alle 20:04
Domenica, 29/11/2009
Codice sorgente - presumibilmente Delphi

  1. conta:=0;
  2.  
  3. procedure inserisciSeNonPresente(valore:integer);
  4. begin
  5.  for i:=0 to conta do
  6.   for j:=0 to conta do
  7.    if (C[ i ]<>C[ j ]) and (i = conta) and(j = conta) then
  8.     begin
  9.      C[conta] = valore;
  10.      conta:= conta+1;
  11.     end;
  12. end;
  13.  
  14. for i:=0 to [dimensione di A] do
  15.  for j:=0 to [dimensione di B] do
  16.   begin
  17.    if (A[ i ] = B[ j ]) then
  18.     inserisciSeNonPresente(A[ i ]);
  19.   end;



ecco... inglobalo nel tuo programma e dovrebbe funzionare...

ovviamente devi dichiarare la variabile conta di tipo integer all'inizio del programma

Ultima modifica effettuata da Anonymous il 29/11/2009 alle 20:06
PM Quote
Avatar
xswat69 (Normal User)
Newbie


Messaggi: 6
Iscritto: 29/11/2009

Segnala al moderatore
Postato alle 20:20
Domenica, 29/11/2009
scusa non ci sto riuscendo perchè il valore viene scritto più volte per favore puoi modificare il mio programma xkè funzioni al meno capisco meglio
     const n=5;
type pvet =array [1..n] of integer;
       svet=array [1..n] of integer;
       cvet=array[1..n] of integer;
  var a:pvet;
      s:pvet;
      l,x:cvet;
      conta,r,f,j,i,c:integer;
begin
randomize;
    for j:=1 to n do
    begin
    a[j]:=random(6)+1;
    write(a[j],' ');
    end;
writeln;
    for i:=1 to n do
    begin
    s:=random(6)+1;
    write(s,' ');
    end;
writeln;
      for i:=1 to n do
       begin
             for j:=1 to n do
               begin
               if a[j]=s then
                     begin
                     c:=c+1;
                     x:=s;
                     end;
               end;
       end;
writeln;
for i:=1 to c do
  for j:=1 to c do
   if x<>x[j] then
    write(x,' ');





readln;

PM Quote
Avatar
Anonymous (Member)
Guru


Messaggi: 1059
Iscritto: 30/07/2006

Segnala al moderatore
Postato alle 22:08
Domenica, 29/11/2009
ecco:

Codice sorgente - presumibilmente Delphi

  1. program ciao;
  2. uses crt;
  3. const n=5;
  4. var conta,i,j:integer;
  5.     A:array [0..n]of integer;
  6.     B:array [0..n]of integer;
  7.     C:array [0..n] of integer;
  8.     D:array [0..n] of integer;
  9. procedure inizializzaGliArray;
  10. begin
  11.      randomize;
  12.      //inizializza l'array A e stampa a schermo gli elementi
  13.      for i:=0 to n do
  14.      begin
  15.           A[i]:=random(6)+1;
  16.           write(A[i],' ');
  17.      end;
  18.      //va a capo
  19.      writeln;
  20.      
  21.      //inizializza l'array b e stampa a schermo gli elementi
  22.      for i:=0 to n do
  23.      begin
  24.           B[i]:=random(6)+1;
  25.           write(B[i],' ');
  26.      end;
  27.      //va a capo
  28.      writeln;
  29.      for i:=0 to n do
  30.      begin
  31.           C[i]:=0;
  32.      end;
  33. end;
  34. //questa procedura inserisce nell'array C il valore che gli viene passato dal programma ma prima lo confronta con gli elementi che ha già presente
  35. procedure inserisciSeNonPresente(valore:integer);
  36. var ii,jj,temp:integer;
  37. begin
  38. temp:=conta;
  39. for ii:=0 to temp do
  40. begin
  41.    if (C[ ii ]= valore) then
  42.       break;
  43.    if (ii = temp) then
  44.    begin
  45.         C[conta] := valore;
  46.         conta:=conta+1;
  47.         break;
  48.    end;
  49. end;
  50. end;
  51.  
  52.  
  53. begin
  54.      inizializzaGliArray;
  55.  
  56.      for i:=0 to n do
  57.          for j:=0 to n do
  58.               if (A[ i ] = B[ j ]) then
  59.               begin
  60.                  inserisciSeNonPresente(A[ i ]);
  61.                  end;
  62.  
  63.   for i:=0 to conta-1 do
  64.       write(C[i],' ');
  65.  readln;
  66. end.


Ultima modifica effettuata da Anonymous il 29/11/2009 alle 22:09
PM Quote
Avatar
xswat69 (Normal User)
Newbie


Messaggi: 6
Iscritto: 29/11/2009

Segnala al moderatore
Postato alle 22:31
Domenica, 29/11/2009
grazie mille ma scusa InserisciSeNonPresente a cosa serve e come funziona?

PM Quote
Avatar
Anonymous (Member)
Guru


Messaggi: 1059
Iscritto: 30/07/2006

Segnala al moderatore
Postato alle 22:55
Domenica, 29/11/2009
Testo quotato

Postato originariamente da xswat69:

grazie mille ma scusa InserisciSeNonPresente a cosa serve e come funziona?



allora...

hai presente nel corpo del programma quando c'è:

Codice sorgente - presumibilmente Delphi

  1. for i:=0 to n do
  2.          for j:=0 to n do
  3.               if (A[ i ] = B[ j ]) then
  4.               begin
  5.                  inserisciSeNonPresente(A[ i ]);
  6.                  end;



questo praticamente prende ogni elemento di A e lo confronta con ogni elemento di B e se ne trova uno in comune allora chiama la procedura inserisciSeNonPresente passandogli quel valore che corrisponde alla richiesta


dentro a questa procedura non viene fatto altro che prendere il valore che gli viene passato e confrontarlo con tutti gli elementi già presenti in C

se sono arrivato alla fine della scansione e non ho trovato nessun altro elemento uguale allora lo inserisce... altrimenti no...

capito ora?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo