Codificador/descodificador

ola malta...
tenho um exercicio..que nao estou a conseguir resolver.. peco entao ajudas e dicas ...........
O programa deve ler um número inteiro e escrever o número que resulta
da sua codificação ou descodificação com base nas seguintes regras:

1. (Codificar) – Substituir cada sequência de n dígitos x repetidos,
pelo par de dígitos nx ;

2. (Descodificar) – Substituir cada par de dígitos nx , pela sequência
de n dígitos x repetidos (operação inversa).
A codificação e/ou descodificação deve ser uma opção de escolha. Note
que só podem ser descodificados números que possuam um número par
de dígitos.

O programa deve permitir a codificação/descodificação de mais do que
um número na mesma corrida (“run”) e deve identificar todas as
situações de erro. O programa deve imprimir mensagens em Português.
Por exemplo, se 277733444 for o inteiro lido, o programa pode codificálo
como


1 2 3 7 2 3 3 4
 
isto é ja o que consegui..
mas ta dificil


Código:
#include<stdlib.h>
#include<stdio.h>
int dgtlen(int n)
{
    if(n == 0)
        return 1;
    else
    {
        int c;
        for(c = 0; n; n /= 10)
            c++;
        return c;
    }
}
/*int a(int aux)
{
    if (a < aux)
        printf("o numero codificado:%s", indiv[0][1][2][3][4][5]);
 
} */  
int main ()
{system ("chcp 1252");
 
    int n=0;
    int aux=0; 
 
    printf("Introduza um numero Inteiro");
 
    scanf("%d", &n);
 
    aux = dgtlen(n); 
 
    char indiv[aux]; 
    sprintf(indiv, " %d", n);  
 
 
    for (aux = 0; aux <= n; aux++);
        aux = aux +indiv[aux];
 
 
    printf("\n%s", aux);
 
 
    printf("\n"); 
 
system ("\npause"); return 0;}
 
O seguinte programa faz a codificação, mas não está de maneira nenhum completo o suficiente para ser apresentado como um trabalho e só funciona se o ficheiro de texto tiver um caracter a mais (pode ser um enter):

Código:
#include <stdio.h>

int main (int argc, char const *argv[])
{
    int current = -1;
    int previous = -1;
    int repetitions = 1;
    
    int done = 0;
    
    while(!done) {
        current = getchar();
        if(current == EOF) {
            done = 1;
        } else if(current == previous) {
            repetitions++;
        } else {
            if(previous != -1) {
                putchar(repetitions + 48);
                putchar(previous);
            }
            previous = current;
            repetitions = 1;
        }   
    }   
    
    return 0;
}
 
Back
Topo