Compress array with equal values C

0

The problem consists of the following: Make an algorithm that reads vector A [10]. Then, remove the elements in duplicate by compressing vector A. Finally enter the value zero in the last elements. Show vector A updated.

But finally it does not execute, it gives the impression, because it does nothing and does not print the new vector on screen.

follow the code below:

#include <stdio.h>
#include <string.h>

/*
Fazer um algoritmo que lê um vetor A[10].
Após, retire os elementos em duplicata compactando o vetor A. 
Por fim inserir o valor zero nos últimos elementos. 
Mostre o vetor A atualizado.
*/

int main(void)
{
// declara variaveis
    //declara vetor unico
    int vet[9];
    //declara contador referente a vetor
    int count;
    //variavel auxiliar zero_final
    int zf;
    //variavel recebimento, recebe valores para testalos com o resto do array
    int rec;
    //variavel incremento auxiliar
    int i;
    //variavel compressao de array
    int comp;



    //variavel 'zf' (zero_final) decrementa valores para incluir zeros no final do vetor
    zf=10;

    /*cabeçalho inicial*/

    //entra com valores
    puts("\t*---------------------------*");
    puts("\t| <<< ENTRE COM VALORES >>> |");
    puts("\t*---------------------------*");
    for(count;count<=9;count++)
        scanf("%i",&vet[count]);    
    count=0;
    //exibe valores ordenados em tela
    for(count;count<=9;count++)
        printf("\t VETOR[%i] = %i\n",count,vet[count]);     
    /*cabeçalho inicial*/

    i=0;
    for(count=0;count<=9;count++)
    {
        rec=vet[count];
        while(i!=9)
        {
            if(rec==vet[count])
            {
                zf--;
                comp=count;
            }
            for(;count<=9;count++)
            {
                vet[count]=vet[count++];
            }
            count=comp;
            i++;
        }
    }

    //inclui valor zero no fim do array
    for(;count<=zf;count++)
    {
        vet[count]=0;
    }   
    //imprime array em tela
    for(count;count<=9;count++)
        printf("\t VETOR[%i] = %i\n",count,vet[count]); 

    printf(" -- PRESSIONE ALGO --");
    return 0;
}
    
asked by anonymous 05.06.2017 / 02:03

1 answer

1

Agenaro, as pointed out in the comments, his first problem is the initialization of the comp variable before the for statements. Solving this, a problem of logic appears in the time to discover the repeated variables. I corrected the comp problem and rewritten the quest for equal elements. see below.

#include <stdio.h>
#include <string.h>

/*
Fazer um algoritmo que lê um vetor A[10].
Após, retire os elementos em duplicata compactando o vetor A. 
Por fim inserir o valor zero nos últimos elementos.  
Mostre o vetor A atualizado.
*/

int main(void)
{
// declara variaveis
//declara vetor unico
int vet[9];
//declara contador referente a vetor
int count;
//variavel auxiliar zero_final
int zf;
//variavel recebimento, recebe valores para testalos com o resto do array
int rec;
//variavel incremento auxiliar
int comp;
//variavel auxiliar no for


//variavel 'zf' (zero_final) decrementa valores para incluir zeros no final do vetor
zf=10;

/*cabeçalho inicial*/

//entra com valores
puts("\t*---------------------------*");
puts("\t| <<< ENTRE COM VALORES >>> |");
puts("\t*---------------------------*");
for(count = 0;count<=9;count++){
    scanf("%i",&vet[count]);
}

for(count = 0, comp = 9; count <= comp; count++){ //Um for que compara a atual posição com todas as seguintes
    for(rec = count + 1; rec <= comp; rec++){
        if(vet[count] == vet[rec]){ //se houver uma repetição
            /*Por questão de eficiencia, troca-se o valor repetido pelo ultimo, decrementa o tamanho do comprimento "real" do vetor*/
            vet[rec] = vet[comp--];
            rec--;//caso a ultima posição seja repetida
        }
    }

}

//inclui valor zero no fim do array
for(count = comp + 1; count < zf; count++)
{
    vet[count]=0;
}   

//imprime array em tela
for(count = 0; count<=9;count++)
    printf("\t VETOR[%i] = %i\n",count,vet[count]); 

printf(" -- PRESSIONE ALGO --\n");
getchar();
return 0;

}

    
05.06.2017 / 02:56