Problema do checksum

From AdonaiMedrado.Pro.Br
Revision as of 11:59, 19 June 2009 by Adonaimedrado (Talk | contribs) (New page: == Enunciado único == Os algoritmos de verificação tipo [http://pt.wikipedia.org/wiki/Soma_de_verifica%C3%A7%C3%A3o Checksum] trabalham executando operações sobre um conjunto de dados...)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Enunciado único

Os algoritmos de verificação tipo Checksum trabalham executando operações sobre um conjunto de dados e são úteis para verificar se este conjunto de dados se permaneceu íntegro.

Este problema considera o seguinte algoritmo de checksum onde cada par de bytes é chamado de P e elemento do par é chamado de B. Caso a entrada possua um número impar de bytes, para efeitos do algoritmo o último par é composto pelo último byte e o byte 0.

  • Para cada par P
    • Executa-se uma contagens dos bits 1 de cada elemento B chegando-se a um valor X.
    • O valor X de cada byte B de P é operado bit-a-bit em operação de e chegando-se a um valor Y
  • O resto da divisão de Y por 11 deverá ser somado e acumulado em L.
  • Ao final deve-se somar a L a quantidades de bytes B processados resultando em W.

O resultado checksum é W que deverá suportar o valor de até 100 dígitos.

Dificuldade 1

Faça um programa que receberá um número N e N cadeias de caracteres K (máximo de 200 caracteres). Cada K representará o caminho de um arquivo para o qual deve ser calculado o checksum segundo algoritmo descrito acima. A entrada termina quando for encontrada a cadeia "0" (sem as aspas).

A saída deverá ser dada na saída padrão e deverá ser o número W descrito no algoritmo acima.

Exemplo 1

Entrada

exemplo1.in
exemplo2.in
exemplo3.in
exemplo4.in
exemplo5.in
exemplo6.in
0

Saída

200
401
601
827
38762
51455


Dificuldade 2

Faça um programa que receberá um número N e N cadeias de caracteres K (máximo de 200 caracteres). Cada K representará o caminho de um arquivo para o qual deve ser calculado o checksum segundo algoritmo descrito acima. A entrada termina quando for encontrada a cadeia "0" (sem as aspas).

Para cada K deve ser gravado um aquivo K.checksum que deverá conter o número W representado em caracteres ASCII.