Smarties ha scritto:
Scusami, ma non so rispondere.
Soprattutto non capisco tutti questi passaggi
for(i=0; i<num_elem1; i++)
if(a2[i] == a1[num_elem1 - 1])
{
temp = a2[num_elem1 -1];
a2[num_elem1 - 1] = a2[i];
a2[i] = temp;
Vabbé ti posto la soluzione allora:
bool insiemi_uguali(double a1[], double a2[], int num_elem1, int num_elem2)
{
int i;
double temp;
if(num_elem1 != num_elem2)
return false;
if(num_elem1 == 0)
return true;
for(i=0; i<num_elem1; i++)
if(a2[i] == a1[num_elem1 - 1])
{
temp = a2[num_elem1 -1];
a2[num_elem1 - 1] = a2[i];
a2[i] = temp;
return insiemi_uguali(a1, a2, num_elem1 - 1, num_elem2 - 1);
}
return false;
}
int main(void)
{
double a[5] = {3, -7, 3, -0.5, 1};
double b[5] = {1, 3, -0.5, 3, -7};
if(insiemi_uguali(a, b, sizeof(a)/sizeof(double), sizeof(b)/sizeof(double)))
printf("OK");
else
printf("KO");
getchar();
return 0;
}
Il significato è:
1) verifica che gli array da controllare abbiano le stesse dimensioni: se non ce l'hanno, allora gli insiemi sono diversi
2) se non ci sono più elementi da confrontare abbiamo finito: gli insiemi sono uguali
3) controlla che l'ultimo elemento del primo array sia presente nel secondo array
4) se l'hai trovato, sposta l'elemento che hai trovato all'ultimo posto del secondo array, dopodiché elemina gli elementi all'ultimo posto di entrambe gli array e ricomincia la verifica da capo con un elemento in meno da controllare
5) se non l'hai trovato, allora gli insiemi sono diversi
L'esercizio sull'intersezione devi, però, farlo da solo