- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 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");
}
}
Реализация вычисления кода Хемминга по заданному двоичному коду.
3.14159265 13.05.2013 13:46 # +3
Дальше не читал. Лабораторная.
bormand 13.05.2013 14:00 # +3
3.14159265 13.05.2013 14:20 # +2
>powerOfTwo[i]
Такое ощущение что автор либо перешел с языка без сдвигов (бейсик), либо не еще знает.
bormand 13.05.2013 16:27 # +1
Оптимизация.
3.14159265 13.05.2013 16:32 # 0
bormand 13.05.2013 16:39 # +5
Распараллеливание.