Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MicheL Vilela

Ordenar e Gerar Outro Vetor sem Repetição

Recommended Posts

Olá Pessoal, estou com o seguinte problema:

 

Elabore um programa que, dados os n valores inteiros de um vetor A, classificados em

ordem crescente, determine e mostre um vetor B com os mesmos elementos de A, mas sem

repeticoes. O tamanho e os elementos do vetor A devem ser gerados aleatoriamente. O

vetor B deve ter o tamanho exato para conter os elementos distintos.

 

Eu consigo gerar o vetor aleatoriamente, ordenar...mas não consigo fazer um outro vetor com apenas os elementos não repetidos..será que alguém podia me dar uma luz?

 

 

int main(int argc, char *argv[]){

 

int *A;

int *B;

int i, j, x, tam;

 

 

srand((unsigned)time(NULL));

 

printf("Informe o tamanho do vetor :");

scanf("%d", &tam);

 

if (!(A=(int*)malloc(tam*sizeof(int)))){

printf("Falha na alocacao\n");

exit(-1);

}

for(i=0;i<tam;i++)

A=rand()%tam;

 

for(i=0; i<tam; i++)

printf("%d",A);

 

for(i=0; i<tam; i++)

 

for(j=i+1; j<tam; j++)

 

if(A > A[j]){

x = A;

A = A[j];

A[j] = x;

}

printf("\n");

 

 

for (j=i+1; j<tam; j++)

if (A == A[i+1]){

x = A[i+1];

B[j] = x;

}

printf("\n");

for (j=i+1; j<tam; j++)

if (B[j] == B[j+1]){

x = B[j+1];

B[j] = x;

}

 

for(i=0; i<tam; i++)

printf("%d", A);

printf("\n");

printf("\n");

for(j=0; j<tam; j++)

printf("%d", B[j]);

printf("\n");

 

system("Pause");

return 0;

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Michel, esta sua ordenação esta ineficiente...

 

for(i=0; i<tam; i++)   for(j=i+1; j<tam; j++)	  if(A[i] > A[j]){		  x = A[i];		  A[i] = A[j];		  A[j] = x;	  }
veja q j começa sempre em i+1.. qdo i for igual a tam-1, ou seja, qdo ele atingir o indice maximo do vetor, o j vai estar recebendo um valor de indice fora do vetor..

http://forum.imasters.com.br/public/style_emoticons/default/excl.gif isto da um erro!!!

 

a alocação dos elementos em B deve respeitar a seguinte logica..

compara-se o elemento atual com todos os anteriores, se naum houver repetições, aloca-se no vetor B. Caso contrario naum faça nada..

 

k=0;for(i=0;i<tam;i++){  igual = 0;  for(j=0;j<i;j++)	if(A[i]==A[j]){	  igual = 1;	  break;	}  if(igual==0){	B[k] = A[i];	k++;  }}
primeiro eu analizei se ja havia numeros repetidos antes do atual, se naum houver (se igual==0) eu passo o elemento p vetor B[]..

 

eh simples, eh soh questao d pensar..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.