Ir ao conteúdo
  • Cadastre-se

C++ Intersecção entre dois vetores


Yaunoz

Posts recomendados

Venho aqui por meio desse post pedir ajuda nesse exercício, vou deixar o código aqui, não sei o que estou fazendo errado infelizmente :(
Desde já, muito obrigado

#include <stdio.h>
#include <stdlib.h>

main()
{
    int n, m, nm, vetA[n], vetB[m], i, j;
    
    printf ("O valor de N e: ");
    scanf("%d", &n);
    printf ("O valor de M e: ");
    scanf("%d", &m);
    
    nm = n + m;
    
    for(i=0; i<n; i++)
    {
        printf("Qual o valor de A[%d]? ", i);
        scanf("%d", &vetA[i]);
    }
    
    printf("\n");
    
    for(i=0; i<m; i++) 
     { 
         printf("Qual o valor de B[%d]? ", i); 
         scanf("%d", &vetB[i]); 
     } 
     
     for (i=0; i<n; i++)
     {
         for (j=0; j=nm; j++)
         {
             if (vetA[i] == vetB[j])
             {
                 printf("%d", vetA[i]);
            }
        }
    }
    system("pause");
}

Exercicio.png

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Boa noite camarada,

 

for (i=0; i<n; i++)      
{          
  for (j=0; j=nm; j++)          
  {              
    if (vetA[i] == vetB[j])              
    {                  
      printf("%d", vetA[i]);             
    }        
  }     
}

nessa parte do código, você está usando dois for, sendo que para vetor só é utilizado 1, e pode prejudicar na hora de exebir

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Yaunoz O seu programa contem vários erros, é pelo o que eu conheço de compiladores você está utilizando uma IDE que não vai te ajudar em nada (você provavelmente está utilizando o DevC++) eu recomendo você utilizar esse aqui online replit

 

Agora vamos ao seu código, Em C você não pode ter arrays (vetores) mutáveis. Eles tem que ser fixos ou reservados dinamicamente.

Exemplo de vetor fixo.

	int vetor[100];		/* Vetor de 100 posições a partir do 0 */
	/* Manipula o vetor */
	vetor[0] = 10;		/* A primeira posição vale 10 */
	vetor[15] = 124; 	/* A decima quinta posição vale 124 */
	/* Etc..*/

Exemplo de vetor dinâmico,

	int *vetor = malloc(sizeof(int[TAMANHO_DO_VETOR]));
	/* Manipula o vetor */
	vetor[0] = 10;		/* A primeira posição vale 10 */
	vetor[15] = 124; 	/* A decima quinta posição vale 124 */
	/* Etc..*/
	free(vetor);		/* Libera o espaço reservado para o vetor */

 

Um exemplo de programa básico em C.

int main(void)
{
  return(0);
}

A compilação de C não tolera uma função que não especifica se tem parâmetros, então toda vez que for fazer uma função principal e não for receber os parâmetros padrões declare-a como void

Exemplo

int main(void)

 

Tente configurar o seu IDE para a compilação em C para tudo ficar mais simples.

 

Exemplo de como pegar os dois vetores

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
    int 
        *vetor1,
        *vetor2;
    int
        tam_vetor1 = 0,
        tam_vetor2 = 0,
        contador;

    printf("Digite o tamanho do primeiro vetor\n");
    scanf("%d%*c", &tam_vetor1);

    printf("Digite o tamanho do segundo vetor\n");
    scanf("%d%*c", &tam_vetor2);    /* %*c Retira o enter do buffer do teclado */

    /* Reserva memoria para os vetores */
    vetor1 = malloc(sizeof(int[tam_vetor1]));
    vetor2 = malloc(sizeof(int[tam_vetor2]));

    /* Testa se foi possivel reservar a memoria */
    if (vetor1 == NULL || vetor2 == NULL) {
        perror("não foi possivel reservar memoria!");
        exit(EXIT_FAILURE);     /* Aborta o programa */
    }

    /* Pega os dois vetores */
    printf("Primeiro vetor\n");
    for (contador = 0; contador < tam_vetor1; contador++) {
        printf("[%d]:", contador);
        scanf("%d%*c", &vetor1[contador]);      /* %*c Retira o enter do buffer do teclado */
    }

    printf("Segundo vetor\n");
    for (contador = 0; contador < tam_vetor2; contador++) {
        printf("[%d]:", contador);
        scanf("%d%*c", &vetor2[contador]);      /* %*c Retira o enter do buffer do teclado */
    }

    /* Mostra os dois vetores */
    printf("Primeiro vetor\n");
    for (contador = 0; contador < tam_vetor1; contador++) {
        printf("[%d] = %d\n", contador, vetor1[contador]);
    }

    printf("Segundo vetor\n");
    for (contador = 0; contador < tam_vetor2; contador++) {
        printf("[%d] = %d\n", contador, vetor2[contador]);
    }

    getchar();      /* Faz uma pausa no programa */
    /* Apaga a memoria reservada */
    free(vetor1);
    free(vetor2);
    return(0);
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Yaunoz Se já aprendeu alocação dinâmica, poderá alocar as n quantidades informadas para carregar os vetores, mas se se for permitido definir a quantidade máxima de elementos dos vetores, poderá deixar o tamanho constante. E assim usar as variáveis apenas para  preencher e mostrar as n quantidades informadas (menores que o limite). Supondo que queira deixar a quantidade máxima (por exemplo de 10) que o usuário pode informar para n e m, poderá fazer assim,

 

#define MAX 10

 

Aí em main a declaração dos vetores será com esse tamanho, p.ex,

 

int main(){
    int A[MAX];
    int B[MAX];
    int C[MAX * 2];
    int n;
    int m;

    do{
        printf("N e M = ");
        scanf("%d %d", &n, &m);
    }while(n > MAX || m > MAX);
...

 

Para carregar o terceiro vetor com os elementos dos outros dois sem repetir, poderá criar funções para deixar tudo mais simples. Acho que poderiam ser três: Uma para preencher os vetores A e B, uma para imprimir todos os vetores e outra para verificar se há elementos repetidos. Estes p.ex poderia ser os protótipos (n é a quantidade de elementos do vetor),

 

void preenche(int *vetor, int n);
void imprime(int *vetor, int n);
int repete(int *vetor, int num, int n);

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Yaunoz     no enunciado não disse nada sobre escrever o conteúdo dos vetores A  e   B  e  Resultado ,  pois terá que ter um terceiro vetor onde armazenar os números de A que sejam iguais aos de B ,   e se não quiser criar vetor com alocação dinâmica ,  você pode criar os vetores A e B e R com uma qtd grande de elementos , e depois nos loop's use o valor das variáveis m e n como limites , e um contador para melhor posicionar os números no vetor Resultado ,  mas creio que seja uma boa ideia escrever mesmo o resultado , para ver como ficou . e seu código com alguma modificações ficou assim   :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n,m,i,  j, 
        vetA[999] = {},   // cria o vetorA com muitas posições
        vetB[999] = {},   // cria o vetorB com muitas posições
        vetR[999] = {},   // cria o vetor Resultado com muitas posições
        cont=0,nm;

    printf("O valor de N eh : ");
    scanf("%d", &n);
    printf("O valor de M eh : ");
    scanf("%d", &m);

    nm = n + m;   // não precisa somar , pois a qtd
                  // maxima de numeros que pode ter 
                  // no vetor resultante , 
                  // sera iguaL a do menor vetor ou 
                  // menos , e nunca mais que isso 
                  // ou iguaL a do maior e muito menos 
                  // a soma do tamanho dos dois vetores

    for (i = 0; i < n; i++)
    {
        printf("Qual o valor de A[%d]? ", i);
        scanf("%d", &vetA[i]);
    }

    printf("\n");

    for (i = 0; i < m; i++)
    {
        printf("Qual o valor de B[%d]? ", i);
        scanf("%d", &vetB[i]);
    }
    for (i = 0; i < n; i++)
    {                                 // nesse loop  j você estava acessando 
                                      // posições inexistentes do vetor vetB
        for (j = 0; j < m; j++)       // sinal errado "="  no lugar de "<"
        {
            if (vetA[i] == vetB[j] && vetB[j] != -4096 ) // compara cada numero do vetorA 
                                                         // com todos os numeros de vetorB
            {
                vetR[cont] = vetA[i]; // coloca o numero no vetor resultado
                vetB[j] = -4096;      // marca essa posição com esse valor
                                      // eliminando aquele numero que estava ali
                                      // para que não haja numeros repetidos
                cont++;               // incrementa a posição do vetor Resultado
                                      // para inserir o proximo numero
            }
        }
    }
    printf("\n");                     // cont tem a qtd de numeros no vetor resuLtado
    for (i = 0; i < cont; i++)printf("\tposicao %d  vaLor= %d\n",i, vetR[i]);
    system("pause");
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!