Problema nas saidas

Problema nas saidas

por Thiago Maciel Batista -
Número de respostas: 2

I-Quando o arquivo comprimido for maior que o original é apenas para avisar o usuario e sair do programa sem gerar os arquivos de saida(o binario e o texto com os pares), ou avisar e comprimir normalmente o arquivo gerando as saidas, mesmo o arquivo comprimido sendo maior que o original?

II-No meu arquivo de saida contendo os pares, os caracteres saem estranhos.Enquanto nao repete um caractere ele vai bem, mas quando começa a repetir, os caracteres ficam todos estranhos.Um pequeno exemplo para um pedaço de um texto:  ( õ7% g m n" h ó r t, c#+#).Isso é no windows, no lynux ele nem abre o arquivo.Se alguem puder ajudar eu agradeço.

Em resposta à Thiago Maciel Batista

Re: Problema nas saidas

por Luciano Ramalho -
I-Realmente seria possível simular a compressão e apenas contar os bytes da saída hipotética, mas isso tornaria o programa bem mais lento pois o algoritmo inteiro precisaria rodar uma segunda vez na hora de gravar a saída real. Para não fazer duas vezes, e nem gerar o arquivo de saída em todos os casos, seria preciso fazer a compressão em um grande buffer na memória, porém isto limitaria a utilidade do seu programa a processar arquivos que coubessem na memória depois de comprimidos (não seria uma grande limitação nestes tempos de máquinas com 2GB de RAM, mas também não dá para você assumir que toda a memória do computador está à disposição do seu programa). Acho razoável supor que o arquivo de saída deverá ser gerado sempre, especialmente considerando que falta só um dia para o final do prazo!

II-O jeito mais fácil de gerar o arquivo de saída dos pares é formatando os pares como números, ou seja, algo assim: printf("%3d %3d", dist, compr);
Um jeito melhor seria mudar a formatação conforme o par, ou seja, se dist!=0 então o segundo caractere deve ser exibido como número (%d), do contrário como um caractere mesmo (%c). Só que no caso dos caracteres com valor < 32 e maior que > 127 o %c vai produzir coisas estranhas, então nestes casos continua valendo a pena formatar como número.

--
Luciano