Programação Imperativa

100 Questões Fichas Testes/Exames

Questão 43: intersectSet

Voltar

Uma forma de representar conjuntos de índices consiste em usar um array de inteiros contendo 1 ou 0 consoante esse índice pertença ou não ao conjunto. Assim o conjunto {1, 4, 7} seria representado por um array em que as primeiras 8 posições conteriam {0, 1, 0, 0, 1, 0, 0, 1}.

Apresente uma definição da função int interesectSet (int N, int v1[N], int v2[N], int r[N]) que coloca no array r o resultado da interseção dos conjuntos v1 e v2.

Exemplo

> int v1[8] = {0, 1, 0, 0, 1, 0, 0, 1};
> int v2[8] = {1, 0, 0, 1, 1, 0, 1, 0};
> int r[8];
> intersectSet(8, v1, v2, r);
> r
(int [8]) {0, 0, 0, 0, 1, 0, 0, 0}

Resolução

int intersectSet (int N, int v1[N], int v2[N],int r[N]) {
    int i, len = 0;
    for(i = 0; i < N; i++) {
        r[i] = v1[i] && v2[i];
        len += r[i];
    }
    return len;
}

Explicação

Tal como na questão anterior, esta função devolve o número de elementos no novo conjunto, mas, visto que o enunciado não especifica o que é que este valor deve representar, poderíamos apenas devolver sempre 0, por exemplo, ou o tamanho do array.