xswat69 (Normal User)
Newbie
Messaggi: 6
Iscritto: 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 |
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 il 29/11/2009 alle 15:28 |
|
Anonymous (Member)
Guru
Messaggi: 1059
Iscritto: 30/07/2006
|
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 |
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...
|
|
Anonymous (Member)
Guru
Messaggi: 1059
Iscritto: 30/07/2006
|
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
|
|
xswat69 (Normal User)
Newbie
Messaggi: 6
Iscritto: 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.
|
|
Anonymous (Member)
Guru
Messaggi: 1059
Iscritto: 30/07/2006
|
Codice sorgente - presumibilmente Delphi |
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 il 29/11/2009 alle 20:06 |
|
xswat69 (Normal User)
Newbie
Messaggi: 6
Iscritto: 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;
|
|
Anonymous (Member)
Guru
Messaggi: 1059
Iscritto: 30/07/2006
|
ecco:
Codice sorgente - presumibilmente Delphi |
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 il 29/11/2009 alle 22:09 |
|
xswat69 (Normal User)
Newbie
Messaggi: 6
Iscritto: 29/11/2009
|
grazie mille ma scusa InserisciSeNonPresente a cosa serve e come funziona?
|
|
Anonymous (Member)
Guru
Messaggi: 1059
Iscritto: 30/07/2006
|
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 |
for i:=0 to n do for j:=0 to n do if (A[ i ] = B[ j ]) then begin inserisciSeNonPresente(A[ i ]); 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? |
|