Oppure

Loading
29/11/09 14:11
xswat69
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)


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[i]:=random(10)+1;
                    write(s[i],' ');
                    end;
 writeln;
                           for i:=1 to 10 do
                             begin
                               for j:=1 to 10 do
                                if a[j]=s[i] then
                                  begin
                                  c:=c+1;
                                  x[i]:=s[i];
                                  end;
                              end;
 writeln;
                                           for i:=1 to c do
                                           write(x[i],' ');
                                 
readln


edit by netarrow: sistemato il titolo
Ultima modifica effettuata da netarrow 29/11/09 14:28
aaa
29/11/09 16:14
Anonymous
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:
conta:=0;
for i:=0 to [dimensione di a] do
begin
for j:=0 to [dimensione di c] do
begin
if not(A[i] = C[j]) then
begin 
c[conta]= A[i];
conta:= conta+1;
end;
end;
end;

e poi la stessa cosa su B

penso dovrebbe andare cosi...
aaa
29/11/09 16:32
Anonymous
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
aaa
29/11/09 18:13
xswat69
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[i]:=random(10)+1;
write(s[i],' ');
end;
writeln;
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
if (a[j]=s[i]) 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[i],' ');


readln;



end.
aaa
29/11/09 19:04
Anonymous
conta:=0;

procedure inserisciSeNonPresente(valore:integer);
begin
 for i:=0 to conta do
  for j:=0 to conta do
   if (C[ i ]<>C[ j ]) and (i = conta) and(j = conta) then
    begin
     C[conta] = valore;
     conta:= conta+1;
    end;
end;

for i:=0 to [dimensione di A] do
 for j:=0 to [dimensione di B] do
  begin
   if (A[ i ] = B[ j ]) then
    inserisciSeNonPresente(A[ i ]);
  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 29/11/09 19:06
aaa
29/11/09 19:20
xswat69
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[i]:=random(6)+1;
write(s[i],' ');
end;
writeln;
for i:=1 to n do
begin
for j:=1 to n do
begin
if a[j]=s[i] then
begin
c:=c+1;
x[i]:=s[i];
end;
end;
end;
writeln;
for i:=1 to c do
for j:=1 to c do
if x[i]<>x[j] then
write(x[i],' ');





readln;
aaa
29/11/09 21:08
Anonymous
ecco:

program ciao;
uses crt;
const n=5;
var conta,i,j:integer;
    A:array [0..n]of integer;
    B:array [0..n]of integer;
    C:array [0..n] of integer;
    D:array [0..n] of integer;
procedure inizializzaGliArray;
begin
     randomize;
     //inizializza l'array A e stampa a schermo gli elementi
     for i:=0 to n do
     begin
          A[i]:=random(6)+1;
          write(A[i],' ');
     end;
     //va a capo
     writeln;
     
     //inizializza l'array b e stampa a schermo gli elementi
     for i:=0 to n do
     begin
          B[i]:=random(6)+1;
          write(B[i],' ');
     end;
     //va a capo
     writeln;
     for i:=0 to n do
     begin
          C[i]:=0;
     end;
end;
//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
procedure inserisciSeNonPresente(valore:integer);
var ii,jj,temp:integer;
begin
temp:=conta;
for ii:=0 to temp do
begin
   if (C[ ii ]= valore) then
      break;
   if (ii = temp) then
   begin
        C[conta] := valore;
        conta:=conta+1;
        break;
   end;
end;
end;


begin
     inizializzaGliArray;

     for i:=0 to n do
         for j:=0 to n do
              if (A[ i ] = B[ j ]) then
              begin
                 inserisciSeNonPresente(A[ i ]);
                 end;

  for i:=0 to conta-1 do
      write(C[i],' ');
 readln;
end.
Ultima modifica effettuata da Anonymous 29/11/09 21:09
aaa
29/11/09 21:31
xswat69
grazie mille ma scusa InserisciSeNonPresente a cosa serve e come funziona?
aaa