Jawa / Говнокод #12988 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
package javaapplication4;
import java.util.Scanner;

public class JavaApplication4 {    
    public static void main(String[] args) {            
        int powerOfTwo[] = {1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536};
        int lengthOfHammingCode = 0;      
        Scanner in = new Scanner(System.in);
        System.out.print("Введите двоичное число, которое хотите закодировать: "); String code = in.nextLine();
        in.close();
        if (code.length() < 2) System.out.println("Слишком маленькое число.");
        
        boolean controlBits[] = new boolean[code.length()*2+1]; 
        int i = 0;
        
        //---------------ВЫЧИСЛЯЕМ ДЛИНУ КХ И КОНТРОЛЬНЫЕ БИТЫ------------------
         do {        
             controlBits[powerOfTwo[i]] = true;
             i++;
        } while (powerOfTwo[i] <= (code.length()+1)); // Цикл ищет такую НАИМЕНЬШУЮ степень двойки, которая > либо = длине входного кода.
         
        lengthOfHammingCode = code.length() + i;   
        //----------------------------------------------------------------------
        
        //-------------ЗАПИСЫВАЕМ ВВЕДЁННЫЙ КОД С КОНТРОЛЬНЫМИ БИТАМИ-----------
        boolean hammingCode[] = new boolean[lengthOfHammingCode];       
        int j = 0;
        for (i = 0; i < lengthOfHammingCode; i++) { // Устанавливаем биты для промежуточного кода. 
            if (!controlBits[i+1]) {
                hammingCode[i] = (code.charAt(j) == '1');
                j++;
            }
        }
        //----------------------------------------------------------------------
        
        System.out.print("Промежуточный код с контрольными битами: [");
        for (int k = 0; k < lengthOfHammingCode; k++) {
            char c = (hammingCode[k]) ? '1' : '0';
            if (controlBits[k+1]) System.out.print("!");
            System.out.print(c);
        }
        System.out.print("]\n");
        
        //---------------------ВЫЧИСЛЯЕМ ЗНАЧЕНИЕ КОНТРОЛЬНЫХ БИТ----------------
        for (i = 0; i < (lengthOfHammingCode - code.length()); i++) { // Цикл проходится по всем контрольным битам.
            boolean nextBit = false;         
            for (j = powerOfTwo[i]-1; j < lengthOfHammingCode; j += powerOfTwo[i]*2) {
                for (int n = j; n < j + powerOfTwo[i]; n++) {
                    if (n > lengthOfHammingCode - 1) break;
                    nextBit ^= hammingCode[n]; // Ксорим со следующим битом
                }             
            }           
            hammingCode[powerOfTwo[i]-1] = nextBit; // Записываем значение i-ного бита.
        }
        //----------------------------------------------------------------------
        
        System.out.print("Код Хемминга с контрольными битами: [");
        for (int k = 0; k < lengthOfHammingCode; k++) {
            char c = (hammingCode[k]) ? '1' : '0';
            System.out.print(c);
        }
        System.out.print("]\n"); 
    }
}

Реализация вычисления кода Хемминга по заданному двоичному коду.

Запостил: Govnocoder#0xFF Govnocoder#0xFF, (Updated )

Комментарии (6) RSS

    • Был уже хемминг на шарпике недавно... Но тут автор даже битоебство умеет юзать. Правда скилл битоебства слабоват, и биты записаны в массив булеанов, но все лучше чем джвухбайтовые чары...
      Ответить
      • Та был. Заебали эти лабы.

        >powerOfTwo[i]
        Такое ощущение что автор либо перешел с языка без сдвигов (бейсик), либо не еще знает.
        Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8