Ir ao conteúdo
  • Cadastre-se

Vetores - Como não repetir os dados?


Danilo Lopes

Posts recomendados

Estou com o seguinte exercícios. Consegui iniciá-lo, mas só consigo conferir se o número é igual ao último inserido. Preciso que ele seja comparado com todos.

 

/*6) Criar um algoritmo que leia dois conjuntos de números inteiros, tendo cada um 10 e 20
elementos e apresentar os elementos que não são comuns aos dois conjuntos.*/
 
# include <iostream>
using namespace std;
 
int main () {
const int one = 3;
const int two = 6;
int vet10[one];
int vet20[two];
int aux;
 
aux = 0;
 
for ( int i = 0 ; i < one ; i++){
cout << "Digite os numeros no vetor de 10 elementos: ";
cin >> vet10;
cout << endl;
}
 
for ( int i = 0 ; i < two ; i++){
cout << "Digite os numeros no vetor de 20 elementos: ";
cin >> vet20;
cout << endl;
}
 
for (int i = 0 ; i < one ; i++){
for (int j = 0 ; j < two ; j++){
if ((vet10 != vet20) && (vet10 != aux)){
aux = vet10;
cout << vet10 << " ";
}
}
}
 
for (int i = 0 ; i < two ; i++){
for (int j = 0 ; j < one ; j++){
if ((vet20 != vet10) && (vet20 != aux)){
aux = vet20;
cout << vet20 << " ";
}
}
}
 
return (0);
}
Link para o comentário
Compartilhar em outros sites

voce percorre pelo array cada vez que for inserido um numero..o conceito é o mesmo.. por exemplo

int conta = 0;int valor = 0;//Ja dentro do loopcin >> valor;//percorre o array até o numero de elementos que ja foram colocadoswhile(conta < i ){  if(valor == vet10[conta]) {     //faz o que voce quiser..,se nao quiser botar o elemento no array entao sai do    //loop ps:    break; }  conta = conta +1;}//se saiu do loop porque alcançou o valor de i,então é porque os numeros são diferentes,entao colocaria o valor no arrayif(conta == i){  vet10[i] = valor;}conta = 0;
Link para o comentário
Compartilhar em outros sites

for (int i = 0 ; i < one ; i++){
for (int j = 0 ; j < two ; j++){
if ((vet10 != vet20) && (vet10 != aux)){
aux = vet10;
cout << vet10 << " ";
}
}
}
 
for (int i = 0 ; i < two ; i++){
for (int j = 0 ; j < one ; j++){
if ((vet20 != vet10) && (vet20 != aux)){
aux = vet20;
cout << vet20 << " ";
}
}
}
 
Eu faria um 3° vetor, pra ficar algo mais elaborado, ate em questão de repetir elementos...

O laço deve ser feito apos a leitura mesmo... assim como você esta fazendo, porém não existe necessidade desses 2 laços e sim de somente 1 laço... não entendi o motivo dessa aux sua, o 3º vetor resolveria o caso, a comparação seria : if ((vet20 != vet10)  && não esta no 3° vetor (função retorna true se não existe o elemento)

Link para o comentário
Compartilhar em outros sites

Otávio, mas como eu faria para verificar se o número não está no 3º vetor e como inseri-lo se não estiver?

Tentei aqui mas não consegui.

 

    for (int i = 0 ; i < one ; i++){
        for (int j = 0 ; j < two ; j++){
            for ( int k = 0 ; k < fim ; k++){
                if ((vet10 != vet20[j]) && (vet10 != vet[k])){
                    vet[k] << vet10;
                    cont =  cont + 1;
                }
            }
        }
    }
    
    for (int i = 0 ; i < fim ; i++){
        cout << vet << " ";
    }

Link para o comentário
Compartilhar em outros sites

Ok!

Eu faria assim:

 

uma  função que organizar em ordem Crescente (tabela[], tamanho da tabela) {

... depois que organizar em ordem crescente a tabela (as duas);

}

 

Vamos comparar um por um dos valores;

para isso use uma função que busca um valor dentro de um vetor qualquer;

 

for i = 0 i < tamanho1; i++

 if busca(tabela1[ i ], tabela2, tamanho2 )

achou++

 

a função busca retorna (1-sim/0-não) buscar(valor, tabela[], tamanho da tabela) {

/* função pode ser otimizada com pesquisa binaria */

 

função buscará um valor na tabela, use a declaração de repetição (for/ while/ goto)

que mais lhe agradar para isso, ou chamada recursiva (não recomento a ultima não); 

}

Observe que toda vez que retorna sim, uma variável deve ser incrementada, achou++

assim então toda vez que retorna zero(0 - não) eu imprimo esse valor;

Link para o comentário
Compartilhar em outros sites

OK, também estou aprendendo...
E Programação C'99, que é a versão bem mais velha que atual C++ (cujo somente ouço falar aqui no fórum coisa boas),

Em um cursinho aqui perto de onde moro

tive um exercício parecido com seu, quase no final do curso que, fiz assim!

 

Em etapas:

Como se segue;

  1. Vou criar uma função (func1) que organize minha tabela (v) em ordem do menor valor para o maior;
  2. Depois vou criar uma função (func2) que recebe por parâmetros 3 argumentos (o meu vetor, o tamanho do meu vetor, e o valor que busco no meu vetor, e retorne a função para mim 1 ou 0 (sim ou não));
  3. Por ultimo vou criar um função (func3) que una as duas anteriores, e mais;
  • fun1(v1, tamanho_v1) para organizar o meu v1 em ordem crescente;
  • fun1(v2, tamanho_v2) para organizar o meu v2 em ordem crescente;
  • for(i = 0; i < tamanho_v1; i++)

int achou = 0;

if( func2( v2, tamanho_v2, v1[ i ] ) )

{

achou++;

}

else

{

printf("Esse valor não foi localizado na tabela v2: %d", v1[ i ]);

}

 

func1 (deve ser capas de trocar o valor de uma elemento pelo valor do outro no vetor

isso é muito útil, sempre que envolve pesquisas, organizar antes de buscar qualquer dado ).

Exemplo: 

/* troca os valores das variáveis** Organiza vetor em sistema crescente de números decimais** @parâmetros int[], size_t (um inteiro qualquer positivo diferente de 0)** @retorna nada */void Crescente(int setVetor[], size_t setVetTam){    int j, i, tempj = 0;    const char prox = 1;        setVetTam -= 1;        for(i = 0; i < setVetTam; i++)        {   for(j = 0; j < setVetTam -i; j++)            {   if( setVetor[j] > setVetor[j +prox])                {                    tempj = setVetor[j];                    setVetor[j] = setVetor[j +prox];                    setVetor[j +prox] = tempj;                }            }        }}

func2(compara um valor X, com todos os valores do vetor[20] ou mais)

Exemplo:

/* Busca Linear (independente da organização dos dados);** Busca por valor em uma tabela de valores.** @parâmetros int[], size_t (um inteiro qualquer positivo diferente de 0), ** int;** @retorna sim(1) ou não(0)   */int buscar(int v[], size_t vTam, int valor){    int i;        for(i = 0; i < vTam; i++)        {   if(v[i] == valor)                return 1;        }return 0;}

Ok :)

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...