[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Линейные групповые коды
quIP
Здравствуйте, уважаемые программисты, прошу вашей помощи, переделать код Хэмминга в Линейный групповой код..

<!DOCTYPE html>
<
html>
<
head>
<
title>Hamm</title>
<
meta http-equiv="content-type" content="text/html; charset=windows-1251" />
</
head>
<
body>
<
span style="float:left; margin-right:15px;">
<
form name="fm" method='post'>
<!--<
fieldset align="center" name="inserted" style="width: 520px; background-color:white;">-->
<
P align="cnter">
<
table>
<
TR><TD bgcolor="silver">
Введите текст для кодировки: &nbsp
<input type="text" name="insert" size="40" value="Текст"><br>
<
input style="background-color: #bbbbbb;" type="submit" value="Кодировать">
</
P>
</
TD>
</
form>
<
form name="fm2" method='post'>
<
td bgcolor="silver">
кодированные данные
Текст для кодирования: &nbsp <textarea id="area" name="decode" rows="4" cols="58" value=""></textarea><br>
<
input style="background-color: #bbbbbb;" type="submit" value="Декодировать">
</
TD>
</
form>
<
TD bgcolor="silver">
Ошибки при кодировании
<textarea id="er" name="error" rows="4" cols="58" value=""></textarea><br>
</
span>
</
P>

</
TD>
</
TR>
</
TABLE>
<?php
function
invert($code, $number){
if ($code{$number} == '1') $code = substr_replace($code,'0',$number,1);
else $code = substr_replace($code,'1',$number,1);
return $code;
}

function deleteBits($val){
$val = substr_replace($val,"",7,1);
$val = substr_replace($val,"",3,1);
$val = substr_replace($val,"",1,1);
$val = substr_replace($val,"",0,1);
return $val;
}


function setBit($code){
$bit2 = array (2,3,6,7,10,11);
$bit4 = array (4,5,6,7,12);
$bit8 = array (8,9,10,11,12);
//Растановка нулей по позиции контрольных бит
$code = substr_replace($code,'0',0,0);
$code = substr_replace($code,'0',1,0);
$code = substr_replace($code,'0',3,0);
$code = substr_replace($code,'0',7,0);
//<-------------------------------------------
for ($j=1; $j<13; $j++){
if (($j%2 == 1) and ($code{$j-1} == 1))
$set[1]+=1;
if ((in_array($j,$bit2)) and ($code{$j-1} == 1))
$set[2]+=1;
if ((in_array($j,$bit4)) and ($code{$j-1} == 1))
$set[4]+=1;
if ((in_array($j,$bit8)) and ($code{$j-1} == 1))
$set[8]+=1;
}
//---->Установка контрольных бит‚
if ($set[1]%2 == 0) $code = substr_replace($code,'1',0,1);
else $code = substr_replace($code,'0',0,1);
if ($set[2]%2 == 0) $code = substr_replace($code,'1',1,1);
else $code = substr_replace($code,'0',1,1);
if ($set[4]%2 == 0) $code = substr_replace($code,'1',3,1);
else $code = substr_replace($code,'0',3,1);
if ($set[8]%2 == 0) $code = substr_replace($code,'1',7,1);
else $code = substr_replace($code,'0',7,1);
return $code;
}
error_reporting(E_ERROR | E_WARNING | E_PARSE);
if (isset($_POST['insert'])) {
$text = $_POST['insert'];
echo "<br>Строка для кодирования ".$text."<br>Двоичные коды и контрольные биты:";
for ($i=0, $cnt=strlen($text); $i<$cnt; $i++ ){
$code = decbin(ord($text{$i}));
settype($code, string);
$code = str_pad($code,8,"0",STR_PAD_LEFT);
echo "<br>$code";
$code = setBit($code);
echo "<br>Код для отправки - $code";
$toSend.=$code;
?>
<script>
var Insert = document.getElementById('area'),
Score='<?php echo $toSend?>';
Insert.innerHTML = Score
</script>
<?php
}
}

if (isset($_POST['decode']) and !empty($_POST['decode'])){
$dec = $_POST['decode'];
$split = str_split($dec,12);
echo "<br>Проверка ошибок:\t<br>";
foreach($split as $value){
unset($error_code);
$getControlBits = $value{0}.$value{1}.$value{3}.$value{7};
$value = deleteBits($value);
$code = setBit($value);
$setControlBits = $code{0}.$code{1}.$code{3}.$code{7};
echo "Принятые контрольные биты - $getControlBits | Вычисленные контрольные биты - $setControlBits <br>";

if ($getControlBits == $setControlBits){
$code = deleteBits($code);
echo "Ошибки не обнаружено, раскодировано: - <b>".chr(bindec($code))."</b>\n<br>";
} else {
if ($getControlBits{0} != $setControlBits{0}) $error_code += 1;
if ($getControlBits{1} != $setControlBits{1}) $error_code += 2;
if ($getControlBits{2} != $setControlBits{2}) $error_code += 4;
if ($getControlBits{3} != $setControlBits{3}) $error_code += 8;
if (($error_code == 1) or ($error_code == 2) or ($error_code == 4) or ($error_code == 8)){
$code = deleteBits($code);
echo "Ошибка в контрольном бите, раскодировано - <b>".chr(bindec($code))."</b>\n<br>";
continue;
}
echo "*** Ошиба в бите, номер: $error_code<br>";
$error_code --;
echo "Ошибочный символ - <b>".chr(bindec($value))."</b> С кодом:".bindec($value)."\n<br>";
?>
<script>
var add = document.getElementById('er'),
err='<?php echo "Ошибочный символ - ".chr(bindec($value))." с кодом ".bindec($value)?>\n';
add.innerHTML += err
</script>
<?php
$code = invert($code, $error_code);
$code = deleteBits($code);
echo "Символ исправлен - <b>".chr(bindec($code))."</b>\n<br>";
}
}
}

?>
</body>
</
html>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.