1. Java / Говнокод #12988

    +69

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 13 Мая 2013

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

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

          >powerOfTwo[i]
          Такое ощущение что автор либо перешел с языка без сдвигов (бейсик), либо не еще знает.
          Ответить
          • >>powerOfTwo[i]
            Оптимизация.
            Ответить
            • Ну да. В бейсике частенько писали 2^k, что исполняется (СЮРПРИЗ!) на FPU.
              Ответить
              • > исполняется (СЮРПРИЗ!) на FPU
                Распараллеливание.
                Ответить

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