Ciao a tutti, sto svolgendo un esercizio la cui consegna è:
Si scriva un programma C che:
a. legga 2 vettori di N elementi interi (con N costante predefinita)
b. stabilisca se i due vettori contengono gli stessi elementi, anche
disposti in ordine differente
Esempio: siano dati i due vettori seguenti:
v1 15 3 12 13 29
v2 15 29 13 3 12
questi contengono gli stessi valori, anche se in posizioni differenti.
Invece, i due vettori seguenti:
v1 11 3 12 18 29
v2 12 29 13 4 12
non contengono gli stessi valori.
Il codice che ho scritto finora è:
#include <stdio.h>
#include <stdlib.h>
#define N 5
int main()
{
int v1[N],v2[N],i,j,uguale=1;
for(i=0;i<N;i++)
{
printf("Inserire un valore per il primo vettore: ");
scanf("%d", &v1[i]);
}
printf("\n");
for(i=0;i<N;i++)
{
printf("Inserire un valore per il secondo vettore: ");
scanf("%d", &v2[i]);
}
for(i=0;i<N && uguale==1;i++)
{
uguale=0;
for(j=0;j<N && uguale==0;j++)
{
if(v2[j]==v1[i])
{
uguale=1;
}
}
}
if(uguale==1)
printf("\nI due vettori contengono gli stessi elementi.\n");
else
printf("\nI due vettori non contengono gli stessi elementi.\n");
return 0;
}
il quale funziona correttamente per sequenze in cui ogni valore compare solo una volta, mentre se nel primo vettore un valore compare due volte e solo una volta nel secondo risulta come se i vettori contenessero gli stessi elementi. Immagino di dovere aggiungere una riga all'interno dell'if, del tipo v2[j]=?, ma non ho nessuna idea. Sarebbe possibile eliminare il contenuto del vettore?
Grazie mille in anticipo!