Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

i307

Compressão de dados

Mensagens Recomendadas

i307

Agora tenho de comprimir dados num vector.

E não consigo acabar.

int main()
{
int v[50];
int aux=0;
int n=0;
int c=0;

printf("Quantas vezes quer introduzir o valor?");
scanf("%i",&n);

    do {
        scanf("%i",&v[aux]);
        aux++;
    }
    while(aux < n);


for (aux=0;aux <n ;aux++){

     if (v[aux]==v[aux+1])
     c++;
}

if (c>4)
/* introduzir no vector o seguinte: "c(numero repetido)(o c)f" */
}

Eu consigo através disto descobrir se existe alguma repetição , mas não sei como introduzir no vector aquela última parte  :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
i307

Se houver mais que 4 repetições de um número substitui-se o numero.

Exemplo:  4556777777777789 fica 4556c710f89

Ou seja "c numero repetido numero de repetições f".

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrosorio

Então o que tenho de fazer para conseguir por letras e números?

Que tipo é?

Como parece que estás a usar um array de inteiros em que cada posição tem um algarismo, faria de facto mais sentido usar um array de caracteres. Para colocar o 'c' e o 'f' basta-te fazer uma atribuição normal, os caracteres são convertidos em inteiros usando o seu código ASCII automaticamente (quer 'c' quer 'f' têm códigos superiores a 9 pelo que não há ambiguidade).


Não respondo a dúvidas por mensagem.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Como parece que estás a usar um array de inteiros em que cada posição tem um algarismo, faria de facto mais sentido usar um array de caracteres. Para colocar o 'c' e o 'f' basta-te fazer uma atribuição normal, os caracteres são convertidos em inteiros usando o seu código ASCII automaticamente (quer 'c' quer 'f' têm códigos superiores a 9 pelo que não há ambiguidade).

Fiquei na dúvida se ele depois de atribuir não ficaria sem vê-los visto que eles eram transformados em ascii code.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrosorio

Fiquei na dúvida se ele depois de atribuir não ficaria sem vê-los visto que eles eram transformados em ascii code.

De facto, se fizer um printf, por exemplo, aparece-lhe o ascii code. Mas se o objectivo for apenas comprimir/descomprimir um vector, pode comparar esses valores com os caracteres e tudo funciona bem.


Não respondo a dúvidas por mensagem.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Pois, e isso pode ser um problema se ele pretender imprimir mais tarde.

A função itoa seria boa para este caso. Depois podia comprimir. No entanto, não é definida pelo ansi.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrosorio

Nunca usei. Transforma em string?

Funciona exactamente como um printf, mas faz output para uma string em vez de ser para o standard output.

Exemplo:

sprintf(string,"%d",var);

Isto é equivalente a:

itoa(var,string,10);


Não respondo a dúvidas por mensagem.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.