Ir ao conteúdo

Posts recomendados

Postado

Boa tarde Pessoal.

 

Gostaria de receber um feedback de vocês sobre onde posso estar errando. Sou nova na área e me falta muito conhecimento ainda.

O código possui três vetores, A, B, C. O terceiro vetor C irá receber o resultado dos dois anteriores A e B.

Na impressão do vetor resultante, devo excluir os valores repetidos e usar alocação dinâmica para imprimir o resultado, no entanto, usando a função malloc, imprime lixo de memória, se uso

a função calloc, ela inizializa com zero em todas as posições.

Vocês poderia me ajudar a resolver essa questão, por gentileza?

Muito obrigado!

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

int main(int argc, char **argv)
{
	//Declaração das variáveis e vetores
    int vetA[10], vetB[15], vetC[25];
    int mostra[25];
	int i, j, troca;
		

	//Função que mudará os valores em cada nova execução
	srand(time(NULL));
	//Vetor preenchido com valores de 0 até 100
	printf("Preenchendo o vetor A aleatoriamente\n\n");
	for (i=0; i<10; i++){
		vetA[i] = rand() % 100;
		printf("O valor gerado na posicao [%2d] eh = %d\n", i, vetA[i]);	
	}
	printf("\n");
	//Preenchendo o segundo vetor
	printf("Preenchendo o vetor B aleatoriamente\n\n");
	for (i=0; i<15; i++){
		vetB[i] =rand() % 100;
		printf("O valor gerado na posicao [%2d] eh = %d\n", i, vetB[i]);
    }
	printf("\n");
	
	//Laço que vai ler os valores gerados e atribuirá ao vetor C "Vetor Resultante"
	for (i=0; i < 10; i++){
		vetC[i] = vetA[i];
	}
	for (i=10; i<25; i++){
		vetC[i]= vetB[i-10];
	}

	//Ordenando os objetos dos vetores
	int escolhido;
	int tamanhoVetor = 25;
	for (i = 1; i < tamanhoVetor; i++) {
		escolhido = vetC[i];
		j = i - 1;
			
		while ((j >= 0) && (vetC[j] > escolhido)) {
			vetC[j + 1] = vetC[j];
			j--;
		}	
		vetC[j + 1] = escolhido;
	}
	//Imprime os elementos do vetor C de forma ordenada
	printf("O vetor C ordenado possui os seguintes elementos\n\n");
		for(i=0; i<25; i++){
			printf("%2d\n", vetC[i]);
		
		}
	
		printf("\n");
		
    //Laço que vai controlar e eliminar os valores repetidos
    for(i = 0; i < 25; i++)
    {
        for(j = 0; j < troca; j++)
        {
            if( vetC[i] == mostra[j])
                break;
        }

        if( j == troca)
        {
            mostra[troca] = vetC[i];
            troca++;
        }
    }

    //Impressão do vetor Resultante excluído os valores redundantes Gerado Dinamicamente
    printf("Imprime vetor resultante excluídos os valores repetidos = C\n\n");
    int *p;
	p = (int *) calloc(25,sizeof(int));
	
	for( i = 0; i < troca; i++ )
    printf("O elemento na [%d] posicao = %d \n", i, p[i]);
    system("pause");
		
	return 0;
}

 

Postado

você tem que preencher o "p" com os valores antes de imprimir:

//(...)
int i, j, troca = 0;//não esquecer de inicializar "troca"
//(...)
int *p; 
p = (int *) malloc(troca*sizeof(int)); 
memcpy (p, mostra, troca*sizeof(int));//copia o conteúdo de mostra em p
for(i = 0; i < troca; i++ ) 
{
 
  printf("O elemento na [%d] posicao = %d \n", i, p[i]);
}
                     
free(p);//tem que liberar a memória alocada antes de sair

Acho que assim vai funcionar (não testei).

  • Obrigado 1
Postado

@Flávio Pedroza Olá. Boa resposta!

Só uma dica: Para a função malloc não é preciso o uso da casting explícito. Além de desnecessário pode te induzir ao erro!

Seria isso:

p = malloc(troca * sizeof(int)); // aqui ocorre uma casting implícito para o tipo do ponteiro, que é int *

Só uma dica, ok cara?

Abraço! 🙂

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!