Faça uma função que recebe, por parâmetro, 2 vetores de 10 elementos inteiros e que calcule e retorne, também por parâmetro, o vetor união dos dois primeiros.
Passo 1
O enunciado pede uma função em que a gente vai receber dois vetores de 10 inteiros cada e, usando esses dois vetores, montar um terceiro vetor que seja a união deles (ou seja, sem repetir valores). O que precisamos saber para resolver: em C, como passar vetores por parâmetro, como controlar o tamanho de um vetor de saída e como testar se um valor já existe no vetor de união.
Passo 2
Antes de codificar, vamos entender o que é união de conjuntos: dados dois conjuntos A e B, a união A ∪ B é o conjunto que contém todos os elementos de A e de B, mas sem repetição. No nosso caso, os vetores podem ter valores repetidos entre si ou internamente, então precisamos testar cada novo valor antes de inseri-lo.
Passo 3
O plano de ação é: 1) inserir todos os valores do primeiro vetor no vetor união, evitando duplicatas internas; 2) percorrer o segundo vetor e, para cada elemento, verificar se ele já está no vetor união; se não estiver, inserir. Vamos manter um contador que diz quantos elementos já há no vetor união.
Passo 4
Para checar se um elemento x já está no vetor união, faremos uma função auxiliar ou um loop simples que percorre os elementos já inseridos e retorna verdadeiro/falso. Essa verificação garante que não haja repetições.
Passo 5
Agora implementamos a função em C. Vamos usar um parâmetro extra por referência para devolver o tamanho final do vetor união (já que seu tamanho máximo pode ser 20, mas o resultado real pode ser menor).
Resposta
#include <stdbool.h>
// Função que verifica se ‘x’ está em ‘vet’ de tamanho ‘n’
bool existe(int vet[], int n, int x) {
for (int i = 0; i < n; i++) {
if (vet[i] == x)
return true;
}
return false;
}
bool existe(int vet[], int n, int x) {
for (int i = 0; i < n; i++) {
if (vet[i] == x)
return true;
}
return false;
}
// Função que recebe v1 e v2 (10 elementos cada) e retorna em ‘uniao’ a união deles
// ‘tamanhoUniao’ será preenchido com o número de elementos válidos em ‘uniao’
void uniao(int v1[10], int v2[10], int uniao[20], int *tamanhoUniao) {
int k = 0; // contador de elementos em ‘uniao’
// ‘tamanhoUniao’ será preenchido com o número de elementos válidos em ‘uniao’
void uniao(int v1[10], int v2[10], int uniao[20], int *tamanhoUniao) {
int k = 0; // contador de elementos em ‘uniao’
// Insere elementos de v1, evitando duplicatas internas
for (int i = 0; i < 10; i++) {
if (!existe(uniao, k, v1[i])) {
uniao[k++] = v1[i];
}
}
// Insere elementos de v2 que ainda não estão em 'uniao'
for (int i = 0; i < 10; i++) {
if (!existe(uniao, k, v2[i])) {
uniao[k++] = v2[i];
}
}
*tamanhoUniao = k;
}