Страница 1 из 7

Творчество наших пользователей.

СообщениеДобавлено: 11 июн 2006 00:19
RелаXатоR
Сегодня у меня какое-то творческое настроение, зашел на портал и понял что хочется создать какую-неть такую тему, которая будет с одной стороны о нас, а с другой о прекрастном и возвышенном.......
В общем о творчестве.
На форуме ТАКИХ ЛЮДЕЙ абсолютное большинство (остальные просто эту способность очень хорошо скрывают).

В общем, граждане, выкладывайте сюда все что греет вам душу: рисунок, фотку, стих, рассказ, музыку, код программы)))))
Только большая просьба, Очень желательно, присылайте своё.

А если вам приглянулось что-то чужое (Бывает такое), то не забудте ставить копирайт.

ОЧЕНЬ НАДЕЮСЬ, ЧТО ВЫ ПОДДЕРЖИТЕ МЕНЯ.

СообщениеДобавлено: 11 июн 2006 00:21
RелаXатоR
В качестве начала, положу свой стих.

***

Позовёшь – не приду,
Только камни в саду
Тебе громко прошепчут в ответ:

Ты его не зови,
Но как прежде люби
И всегда его ждать дай обет.

И когда я не с ней,
То иду в сад камней
Это мой личный сад полумёртвых людей

Я когда-то их знал,
И любить обещал,
Но огонь моей страсти к тем людям пропал.

Ты похожа на ту,
Что проснётся к утру,
И останется вечно в моём мёртвом саду.
28.03.2005г.

СообщениеДобавлено: 11 июн 2006 00:49
Ivan.Rybin
Ну-с, учитывая что у меня завтра экзам по основам информации и кодирования, до которого я, по ходу, всё-таки не допущен (доигрался в информатизацию кафедры и сетевые ресурсы), т.к. надо досдать пару долгов (которые уже готовы на 80% - сейчас доделываю последнюю задачку), то выложу код программулины, реализующий кодирование-декодирование чисел в код Хэмминга. Написана на РНР.

Тот ужасный псевдокод, с которого всё началось и с которым я был послан Батей при попытке его просить помочь (читайте - написать за меня) это дело на языке Ada (ничего больше он не знает, зато в Аде - мастер высшего пилотажа):
Код: Выделить всё
// 7 июня 2006 года, около 6 вечера
// запрос на ввод режима работы (код\декод), отдаёт 1 - кодирование,
// 0 - декодирование
function operation_choice(){
print "Введите "1" для Кодирования, "0" для Декодирования";
записываем ввод с клавиатуры в переменную operation (тип boolean);
return operation;
}

// запрос dmin (минимальное кодовое расстояние). на практике - режим работы
// кода. dmin=3 (ф-ция возвращает 1) - код корректирует 1-ю ошибку,
// dmin=4 (ф-ция возвращает 0) - корректирует 1-ю и обнаруживает 2-ную
function dmin_choice(){
print "Введите "1" если dmin=3, "0" если dmin=4;
записываем ввод с клавиатуры в переменную dmin (тип boolean);
return dmin;
}

// запрос числа для кодир\декодир-ния. Если предстоит кодирование - также
// позволяет осуществить ввод в 10-ой системе счисления с конвертом в 2-ную
// сопровождает выводом на экран введённого числа. Отдаёт строку (массив
// символов), содержащую 2-ное предстваление числа
function input_number(operation){
if operation == 0{
   print "Введите число в коде Хэминга для декодирования";
   записываем ввод с клавиатуры в переменную innum (тип integer);
}else{
   print "Укажите систему счисления - "1" для 2-ной и "0" - для 10-ой";
   записываем ввод с клавиатуры в переменную countsys(тип boolean);
   print "Введите число, которое нужно закодировать";
   записываем ввод с клавиатуры в переменную innum (тип integer);
   if countsys == 0 {
      print "Число в 10-ой системе счисления: ";
      print innum;
      print "перенос строки";
      innum = перевод_в_двоичную(innum);
   }
}
innum = перевод_из_integer_в_string(innum);
print "Число в 2-ной системе счисления: ";
print innum;
print "перенос строки";
return innum;
}

// подготавливает массив, в который запишется закодированное число
// контрольные разряды пока заняты нулями
function encoded_array(innum){
k = 1;
for 2^k >= длинна_innum + k + 1{
   k = k + 1;
}
encodednum - массив длинной innum + k;
e = 1;         //индекс массива encodednum
j = 1;         //сдвиг контрольного разряда
i = 1;         //индекс массива innum
for 1 <= i <= длинна_innum {
   if (e == 2^(j-1)) {
      элемент_encodednum[e] = 0;
      e = e + 1;
      j = j + 1;
   }else{
      элемент_encodednum[e] = элемент_innum[i];
      e = e + 1;
      i = i + 1;
   }
}
return encodednum;
}


// "тот самый" сумматор по модулю два. Совершает k операций дополнения д
// чётности k подмножеств в соответствии с правилом их формирования
// результат выдаётся как массив из контрольных разрядов
function summator(encodednum){
k = 1;
for 2^k >= длинна_encodednum + 1{
   k = k + 1;
}
controlnum - массив длинной k + 1;
i = 1;         // сдвиг контрольного разряда, индекс массива controlnum
for 1 <= i <= k {
   e = 1;      // индекс массива encodednum
   sum = 0;
   for 1 <= e <= длинна_encodednum {
      if rem( e/(2^(i-1)), 2) == 1{
      sum = sum + значение_encodednum[e];
      }
   e = e + 1;
   }
   if sum[0] == 1{
      значение_controlnum[i] = 1;
   }else{
      значение_controlnum[i] = 0;
   }
   i = i + 1;
}
return controlnum;
}

// "сборщик" конечного кодового слова из кусочков, можно считать сам "энкодер"
// Заполняет контрольные разряды в соответствии с массивом контрольных разрядов
function compositor(encodednum, controlnum, dmin){
k = длинна_controlnum - 1;
i = 1;      // сдвиг контрольного разряда, индекс массива controlnum
for 1 <= i <= k {
   значение_encodednum[e] = значение_controlnum[i];
   e = 2^(i-1);
   i = i + 1;
}
if dmin == 0 {
   encode_for_d4(encodednum);
}
return encodednum;
}

// заполнение 0-го контрольного разряда при dmin=4
function encode_for_d4(encodednum){
e = 1;      // индекс массива encodednum
sum = 0;
for 1 <= e <= длинна_encodednum {
   sum = sum + значение_encodednum[e];
   e = e + 1;
}
if sum[0] == 1{
   значение_encodednum[0] = 1;
}else{
   значение_encodednum[0] = 0;
}
return encodednum;
}

// выводит на экран результат работы энкодера. Сначала - число в коде Хэмминга
// (контрольные разряды - красными, добавочный 0-ой (если есть) - синим.
// потом - указывает значение dmin, с которым кодировали.
function output_encoder(encodednum, dmin){
print "Число в коде Хэминга: ";
k = 1;
for 2^k >= длинна_encodednum + 1{
   k = k + 1;
}
e = длинна_encodednum;      // индекс массива encodednum
i = k;            // сдвиг контрольного разряда
for k <= i <= 1 {
   if e == 2^(i-1){
      print "красным(значение_encodenum[e])";
      i = i - 1;
   }else{
      print "значение_encodenum[e]";
   }
   e = e - 1;
}
if dmin == 0{
   print синим(значение_encodenum[0]);
   print "перенос строки";
   print "Dmin = 4";
}else{
   print "перенос строки";
   print "Dmin = 3";
}
}

// вносит "ошибку" в передачу кодового слова. error - номер индекса, элемент
// в котором повредился
function defect(encodednum, error){
if значение_encodednum[error] == 0{
   значение_encodednum[error] = 1;
}else{
   значение_encodednum[error] = 0;
}
print "При передаче произошла ошибка в error разряде:";
e = длинна_encodednum;      // индекс массива encodednum
for длинна_encodednum <= e <= 1 {
   if e == error{
      print "жёлтым(значение_encodednum[e])";
      i = i - 1;
   }else{
      print "значение_encodednum[e]";
   e = e - 1;
}
}
print "перенос строки";
return encodednum;
}

// отправляет свежезакодированное число на декодировку,
// запрос у пользователя на указание ошибки в разряде, которая произошла в ходе
// передачи числа от енкодера к декодеру
function output_to_input(encodednum){
print "Перейти к декодированию этого числа (0) или завершить работу(1)?";
read from keyboard to operation (boolean);
if operation == 0 {
   return;
}
print "Введите номер разряда, в котором произошла ошибка (-1, если нет ошибки)";
read from keyboard to error (int);
while error != -1 {
   encodednum = defect(encodednum, error);
}
return encodednum;
}

// обрабатывает одиночные ошибки: обнаруживает и корректирует
function decoder_uno(encodednum, controlnum){
detect = string_to_integer(controlnum);
k = 1;
for 2^k >= длинна_encodednum + 1{
   k = k + 1;
}
if detect == 0 {
   print "Информация принята без ошибок";
} else {
   print "Обнаружена одиночная ошибка в detect разряде. Корректируем";
   if значение_encodednum[detect] == 0 {
      значение_encodednum[detect] = 1;
   }else{
      значение_encodednum[detect] = 0;
   }
}
print "Раскодированное число: ";
e = длинна_encodednum;      // индекс массива encodednum
i = k;            // сдвиг контрольного разряда
for k <= i <= 1 {         // печатаем декодированное число
   if e == 2^(i-1){      // пропускаем контрольные разряды
      i = i - 1;
   }else{
      print "значение_encodenum[e]";
   }
   e = e - 1;
}
}

// заполнение 0-го разряда в регистре ошибок при dmin=4
function decode_for_d4(encodednum, controlnum){
e = 0;      // индекс массива encodednum
sum = 0;
for 0 <= e <= длинна_encodednum {
   sum = sum + значение_encodednum[e];
   e = e + 1;
}
if sum[0] == 1{
   значение_controlnum[0] = 1;
}else{
   значение_controlnum[0] = 0;
}
return controlnum;
}

// анализирует регистр ошибок и выполняет декодирование в соответствии с ним
// тут же вывод декодированного числа и информации об ошибках на экран
function choicer(encodednum, controlnum, dmin){
k = 1;
for 2^k >= длинна_encodednum + 1{
   k = k + 1;
}
c = 1;      // индекс массива controlnum
sum = 0;
for 1 <= c <= k {
   sum = sum + значение_controlnum[c];
}

// случай, когда dmin = 3
if dmin == 0 {
   decoder_uno(encodednum, controlnum);
   return;
}

// случай, когда dmin = 4
if значение_controlnum[0] == 0 {
   if sum == 0 {      // вообще нет ошибок
      decoder_uno(encodednum, controlnum);
   }else{         // двоичная ошибка
   print "Произошла двоичная ошибка. Не корректируется";
   }
}else{         // одиночная ошибка, корректируем
   if sum == 0 {      // ошибка в доп. контрольном разряде
      print "Произошла ошибка в доп. контрольном разряде";
   }
   decoder_uno(encodednum, controlnum);
}
}

// а это сама основная функция, которая вызывает  все остальные :)
function Main(){

operation (глобальная, boolean) = operation_choice();
dmin (integer) = dmin_choice();
innum (string) = input_number(operation);

if operation == 1{
   encodenum = encoded_array(innum);
   controlnum = summator(encodednum);
   encodenum = compositor(encodednum, controlnum, dmin);
   output_encoder(encodednum, dmin);
   encodenum = output_to_input(encodednum);
}

if operation == 0{
   controlnum = summator(encodednum);
   if dmin == 0 {
      controlnum = decode_for_d4(encodednum, controlnum);
   }
   choicer (encodednum, controlnum, dmin);
}
}

СообщениеДобавлено: 11 июн 2006 00:57
Ivan.Rybin
Ну а теперь то, что я написал уже сам и на PHP, где-то в то же время, но вчера - 9 июня 2006 года:

Файл index.php
Код: Выделить всё
<html>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Код Хэмминга на PHP</title>
   <h1>Код Хэмминга на PHP</h1>
   <h2>Выбор Операции и Минимального Кодового Расстояния (Dmin)</h2>
<?php
echo '<form method="POST" action="enter.php">';
echo 'Выберите Операцию:<br><input type="radio" name="operation" value="1"> Кодирование<br>';
echo '<input type="radio" name="operation" value="0"> Декодирование<br><br>';
echo 'Выберите значение Dmin:<br><input type="radio" name="dmin" value="3"> 3<br>';
echo '<input type="radio" name="dmin" value="4"> 4<br><br>';
echo '<input type="submit" value="Дальше >"><br>';
echo '</form>';
?>
</html>


Файл enter.php
Код: Выделить всё
<html>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Код Хэмминга на PHP</title>
   <h1>Код Хэмминга на PHP</h1>
   <h2>Ввод числа</h2><?php
$operation = $_POST['operation'];
$dmin = $_POST['dmin'];

echo 'Выбрана операция: ';
if ( $operation == 1 )    {
   echo '<b>Кодирование</b><br>';
   $submitlable = 'Закодировать';
} else {
   echo '<b>Декодирование</b>   <br>';
   $submitlable = 'Разкодировать';

}
echo 'Dmin = <b>'.$dmin.'</b><br><br>';

echo '<form method="POST" action="hemming.php">';
echo '<input type="hidden" name="operation" value="'.$operation.'">';
if ( $operation == 1 ){
   echo 'Выберите Систему счисления:<br>Десятичная: <input type="radio" name="countsys" value="10"><br>';
   echo 'Двоичная: <input type="radio" name="countsys" value="2"><br><br>';
}
echo 'Введите число ';
if ( $operation == 0 ) echo 'в коде Хэмминга';
echo ' : <input type="text" name="innum" value=""><br>';
echo '<input type="hidden" name="dmin" value="'.$dmin.'"><br>';
echo '<input type="hidden" name="error" value="-1">';
echo '<input type="hidden" name="fromencoder" value="0">';
echo '<input type="submit" value="'.$submitlable.'">';
echo '</form>';
?>
</html>


Файл hemming.php (с ошибками, как выяснилось. Сохранён для истории)
Код: Выделить всё
<?php

// принимаем необходимые значения переменных
global $operation;
$operation = $_POST['operation'];

if ($operation == 3){
   include ('index.php');
   exit;
}

print '<html>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Код Хэмминга на PHP</title>
   <h1>Код Хэмминга на PHP</h1>
   <h2>Блок Операций</h2>';

$innum = $_POST['innum'];
$dmin = $_POST['dmin'];
$error = $_POST['error'];



// Вывод собранной информации ДО произведения операции
echo 'Выбрана операция: ';
if ( $operation == 1 ){
   echo '<b>Кодирование</b><br>';
   $countsys = $_POST['countsys'];
   if ( $countsys == 10 ){
      echo 'Число в 10-ой СС: <b>'.$innum.'</b><br>';
      $innum = base_convert($innum, 10, 2);
   } else {
      echo 'Число в 10-ой СС: <b>'.base_convert($innum, 2, 10).'</b><br>';
   }
   echo 'Число в 2-ой СС: <b>'.$innum.'</b><br>';
} else {
   echo '<b>Декодирование</b><br>';
   $encodednum = $_POST['innum'];
   echo 'Число в коде Хэмминга: <b>';
   if ($_POST['fromencoder'] == 1) {
      echo substr(strrev($encodednum),0,(strlen($encodednum)-1));
      if ($dmin == 4) echo $encodednum{0};
   } else {
      echo $encodednum;
      $encodednum = strrev($encodednum);
   }
   echo '</b><br>';
}
echo 'Значение Dmin выбрано равным: <b>'.$dmin.'</b><br><br>';

echo '<b>... работаем ...</b><br><br>';

function encoded_array($innum){
   $k = 1;
   while (pow(2,$k) < strlen($innum) + $k + 1) {
      $k++;
   }

//   echo 'Контрольных разрядов: '.$k.'<br>';

   $innum = strrev($innum);
   $encodednum = '';
   for ($e = 0; $e <= (strlen($innum) + $k); $e++) {
      $encodednum = '0'.$encodednum.'';
   }

//   echo 'Пустой массив encodednum: '.$encodednum.'<br>';

   for ($e = 1, $i = 0, $j = 1; $i < strlen($innum); $e++) {
      if ($e == pow(2,($j-1)))    {
         $encodednum{$e} = 0;
         $j++;
      }else{
         $encodednum{$e} = $innum{$i};
         $i++;
      }
   }
//   echo 'Массив encodednum с информационной частью: '.strrev($encodednum).'<br>';
   return $encodednum;
}

function summator($encodednum){
   $k = 1;
   while (pow(2,$k) < strlen($encodednum) - 1) {
      $k++;
   }
   $controlnum = '';
   for ($c = 0; $c <= $k; $c++) {
      $controlnum = '0'.$controlnum.'';
   }
//   echo 'Пустой массив controlnum: '.$controlnum.'<br>';
   for ($i = 1; $i <= $k; $i++) {
      $sum = 0;
      for ($e = 1; $e < strlen($encodednum); $e++) {
         if (fmod(floor($e/pow(2,($i-1))),2) == 1) {
            $sum = $sum + $encodednum{$e};
         }
      }
      if (fmod($sum,2) == 1) {
          $controlnum{$i} = 1;
      } else {
          $controlnum{$i} = 0;
      }
   }
//   echo 'Массив controlnum с контрольными разрядами: '.strrev($controlnum).'<br>';
   return $controlnum;
}

function compositor($encodednum, $controlnum, $dmin){
   $k = strlen($controlnum) - 1;
   for ($i = 1; $i <= $k; $i++) {
      $e = pow(2,($i-1));
      $encodednum{$e} = $controlnum{$i};
   }
   if ($dmin == 4) {
      $encodednum=encode_for_d4($encodednum);
   }

//   echo 'Число в коде хэмминга: ';
//   if ($dmin == 3) {
//      echo substr(strrev($encodednum),0,(strlen($encodednum)-1));
//   } else {
//      echo substr(strrev($encodednum),0,strlen($encodednum));
//   }   
//   echo '<br>';
   return($encodednum);
}

function encode_for_d4($encodednum) {
   $sum = 0;
   for ($e=1; $e < strlen($encodednum); $e++) {
      $sum = $sum + $encodednum{$e};
   }
   if (fmod($sum,2) == 1) {
       $encodednum{0} = 1;
   } else {
       $encodednum{0} = 0;
   }
   return($encodednum);
}

function output_encoder($encodednum, $dmin) {
   $k = 1;
   while (pow(2,$k) < strlen($encodednum) - 1) {
      $k++;
   }
   echo 'Число в коде Хэмминга: <b>';
   for ($i = $k, $e = (strlen($encodednum)-1); $i >= 1; $e--) {
      if ($e == pow(2,($i-1))) {
         echo '<font color="red"">'.$encodednum{$e}.'</font>';
         $i--;
      } else {
         echo $encodednum{$e};   
      }
   }
   if ($dmin == 4) {
   echo '<font color="blue">'.$encodednum{0}.'</font>';
   }
   echo '</b><br><br>';
}   

function defect($encodednum, $error, $dmin){
   if ($encodednum{$error} == 0) {
      $encodednum{$error} = 1;
   } else {
      $encodednum{$error} = 0;
   }
   echo 'При передаче произошла ошибка в <b>'.$error.'</b> разряде: <b>';
   if ($dmin == 3) {
      $e_lim = 1;
   } else {
      $e_lim = 0;
   }
   for ($e = (strlen($encodednum)-1); $e >= $e_lim; $e--) {
      if ($e == $error) {
         echo '<font color="yellow">'.$encodednum{$e}.'</font>';
      } else {
         echo $encodednum{$e};
      }
   }
   echo '</b><br><br>';
   return $encodednum;       
}

function output_to_input($innum, $encodednum, $dmin, $error){
   echo 'Для выхода из программы нажмите "Выход"';
   echo '<form method="POST" action="hemming.php">';
   echo '<input type="hidden" name="operation" value="3"><br>';
   echo '<input type="hidden" name="dmin" value="">';
   echo '<input type="hidden" name="innum" value="">';
   echo '<innum type="hidden" name="error" value="">';
   echo '<input type="hidden" name="countsys" value="">';
   echo '<input type="submit" value="Выход >">';
   echo '</form><br><br>';

   echo '<b>Демострация работы Декодировщика</b><br><br>';
    
   if ($error != -1)   {
      $encodednum = defect($encodednum, $error, $dmin);
   }
   
   echo '<form method="POST" action="hemming.php">';   
   echo 'Введите номер разряда, в котором произошла ошибка (-1 если нет ошибки)<br>';
   echo '<input type="text" name="error" value="-1">';
   echo '<input type="hidden" name="operation" value="1"><br>';
   echo '<input type="hidden" name="dmin" value="'.$dmin.'">';
   echo '<input type="hidden" name="innum" value="'.$innum.'">';
   echo '<input type="hidden" name="newinnum" value="'.$encodednum.'">';
   echo '<input type="hidden" name="countsys" value="2">';
   echo '<input type="submit" value="Дальше >">';
   echo '</form><br>';
   
   echo '<form method="POST" action="hemming.php">';   
   echo '<input type="hidden" name="error" value="">';
   echo '<input type="hidden" name="operation" value="0">';
   echo '<input type="hidden" name="dmin" value="'.$dmin.'">';
   echo '<input type="hidden" name="innum" value="'.$encodednum.'">';
   echo '<input type="hidden" name="fromencoder" value="1">';
   echo '<input type="hidden" name="countsys" value="2">';
   echo '<input type="submit" value="Декодировать">';
   echo '</form>';
}

function decode_for_d4($encodednum, $controlnum) {
   $sum = 0;
   for ($e=0; $e < strlen($encodednum); $e++) {
      $sum = $sum + $encodednum{$e};
   }
   if (fmod($sum,2) == 1) {
       $controlnum{0} = 1;
   } else {
       $controlnum{0} = 0;
   }
   return($controlnum);   
}

function decoder_uno($encodednum, $controlnum){
//   echo '<br>4='.substr(strrev($controlnum),0,(strlen($controlnum)-1)).'<br>';
   $detect = base_convert((substr(strrev($controlnum),0,(strlen($controlnum)-1))), 2, 10);
   $k = 1;
//   echo $detect;
   while (pow(2,$k) < strlen($encodednum) - 1) {
      $k++;
   }
   if ($detect == 0) {
      echo 'Информация приянта без ошибок<br>';
   } else {
      echo 'Произошла одиночная ошибка в '.$detect.' разряде. Корректируем.<br>';
      if ($encodednum{$detect} == 0) {
         $encodednum{$detect} = 1;
      } else {
         $encodednum{$detect} = 0;
      }
   }
   echo 'Раскодированное число: <br>';
   echo 'В двоичном виде: <b>';
   $decodednum = '';
   for ($e = (strlen($encodednum)-1), $i = $k; $e > 0; $e--) {
      if ($e == pow(2,($i-1))) {
         $i--;
      } else {
         $decodednum = ''.$decodednum.''.$encodednum{$e}.'';
         echo $encodednum{$e};
      }   
   }
   echo '</b><br>';
   echo 'В десятичном виде: '.base_convert($decodednum, 2, 10).'';
}

function choicer($encodednum, $controlnum, $dmin){
   $k = 1;
   while (pow(2,$k) < strlen($encodednum) - 1) {
      $k++;
   }
   $sum = '';
   for ($c = 1; $c <= $k; $c++) {
      $sum = ''.$sum.''.$controlnum{$c}.'';
   }
   if ($dmin == 3) {
      decoder_uno($encodednum, $controlnum);
   }
//   echo 'SUM='.$sum.'';
   if ($dmin == 4) {
      if ($controlnum{0} == 0) {
         if (fmod($sum,2) == 0) {
            decoder_uno($encodednum, $controlnum);
         } else {
            echo 'Произошла двоичная ошибка. Не корректируется.<br><br>';   
         }
      } else {
         if (fmod($sum,2) == 0) {
            echo 'Произошла ошибка в дополнительном контрольном разряде.<br>';
         }
         decoder_uno($encodednum, $controlnum);
      }   
   }
   
   echo '<br><br><b>Для выхода из программы нажмите "Выход"</b>';
   echo '<form method="POST" action="hemming.php">';
   echo '<input type="hidden" name="operation" value="3"><br>';
   echo '<input type="hidden" name="dmin" value="">';
   echo '<input type="hidden" name="innum" value="">';
   echo '<innum type="hidden" name="error" value="">';
   echo '<input type="hidden" name="countsys" value="">';
   echo '<input type="submit" value="Выход >">';
   echo '</form><br><br>';
}    

if ($operation == 1) {
   $encodednum =  encoded_array($innum);
   $controlnum =  summator($encodednum);
   $encodednum =  compositor($encodednum, $controlnum, $dmin);
   output_encoder($encodednum, $dmin);
   if ( $error != -1 )
   {
      $encodednum = $_POST['newinnum'];
   }
   $encodednum = output_to_input($innum, $encodednum, $dmin, $error);
}

if ( $operation == 0 ) {
//   echo 'aa='.$encodednum.'<br>';
   $controlnum = summator($encodednum);
//   echo $controlnum;
//   echo '<br>';
   if ($dmin == 4) {
      $controlnum = decode_for_d4($encodednum, $controlnum);
   }
//   echo $controlnum;
//   echo '<br>';
   choicer ($encodednum, $controlnum, $dmin);
}    

?>


Завтра (уже сегодня :) ) - сдам эту штуку.

СообщениеДобавлено: 11 июн 2006 01:00
Мила
идея - замечательная! =D>
ой..а стихов то, стихов понаписали! =D>
(код почти что стихотворение :)
__________________________________________
а я вот рисую неплохо

Изображение

:wav:

СообщениеДобавлено: 11 июн 2006 01:03
Мила
Вань, ты что несколько месяцев это писал?....
:) там же ужас, как много

СообщениеДобавлено: 11 июн 2006 03:14
Ivan.Rybin
Да нет... часов 6 - ночью-утром 9-го (где-то с полуночи до 5 часов утра), потом ещё часа три днём-вечером 9-го.

На самом деле там ошибочный hemming.php, правильная версия вот тут:

Код: Выделить всё
<?php

// принимаем необходимые значения переменных
global $operation;
$operation = $_POST['operation'];

if ($operation == 3){
   include ('index.php');
   exit;
}

print '<html>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Код Хэмминга на PHP</title>
   <h1>Код Хэмминга на PHP</h1>
   <h2>Блок Операций</h2>';

$innum = $_POST['innum'];
$dmin = $_POST['dmin'];
$error = $_POST['error'];



// Вывод собранной информации ДО произведения операции
echo 'Выбрана операция: ';
if ( $operation == 1 ){
   echo '<b>Кодирование</b><br>';
   $countsys = $_POST['countsys'];
   if ( $countsys == 10 ){
      echo 'Число в 10-ой СС: <b>'.$innum.'</b><br>';
      $innum = base_convert($innum, 10, 2);
   } else {
      echo 'Число в 10-ой СС: <b>'.base_convert($innum, 2, 10).'</b><br>';
   }
   echo 'Число в 2-ой СС: <b>'.$innum.'</b><br>';
} else {
   echo '<b>Декодирование</b><br>';
   $encodednum = $_POST['innum'];
   echo 'Число в коде Хэмминга: <b>';
   if ($_POST['fromencoder'] == 1) {
      echo substr(strrev($encodednum),0,(strlen($encodednum)-1));
      if ($dmin == 4) echo $encodednum{0};
   } else {
      echo $encodednum;
      $encodednum = strrev($encodednum);
   }
   echo '</b><br>';
}
echo 'Значение Dmin выбрано равным: <b>'.$dmin.'</b><br><br>';

echo '<b>... работаем ...</b><br><br>';

function encoded_array($innum){
   $k = 1;
   while (pow(2,$k) < strlen($innum) + $k + 1) {
      $k++;
   }

//   echo 'Контрольных разрядов: '.$k.'<br>';

   $innum = strrev($innum);
   $encodednum = '';
   for ($e = 0; $e <= (strlen($innum) + $k); $e++) {
      $encodednum = '0'.$encodednum.'';
   }

//   echo 'Пустой массив encodednum: '.$encodednum.'<br>';

   for ($e = 1, $i = 0, $j = 1; $i < strlen($innum); $e++) {
      if ($e == pow(2,($j-1)))    {
         $encodednum{$e} = 0;
         $j++;
      }else{
         $encodednum{$e} = $innum{$i};
         $i++;
      }
   }
//   echo 'Массив encodednum с информационной частью: '.strrev($encodednum).'<br>';
   return $encodednum;
}

function summator($encodednum){
   $k = 1;
   while (pow(2,$k) < strlen($encodednum) - 1) {
      $k++;
   }
   $controlnum = '';
   for ($c = 0; $c <= $k; $c++) {
      $controlnum = '0'.$controlnum.'';
   }
//   echo 'Пустой массив controlnum: '.$controlnum.'<br>';
   for ($i = 1; $i <= $k; $i++) {
      $sum = 0;
      for ($e = 1; $e < strlen($encodednum); $e++) {
         if (fmod(floor($e/pow(2,($i-1))),2) == 1) {
            $sum = $sum + $encodednum{$e};
         }
      }
      if (fmod($sum,2) == 1) {
          $controlnum{$i} = 1;
      } else {
          $controlnum{$i} = 0;
      }
   }
//   echo 'Массив controlnum с контрольными разрядами: '.strrev($controlnum).'<br>';
   return $controlnum;
}

function compositor($encodednum, $controlnum, $dmin){
   $k = strlen($controlnum) - 1;
   for ($i = 1; $i <= $k; $i++) {
      $e = pow(2,($i-1));
      $encodednum{$e} = $controlnum{$i};
   }
   if ($dmin == 4) {
      $encodednum=encode_for_d4($encodednum);
   }

//   echo 'Число в коде хэмминга: ';
//   if ($dmin == 3) {
//      echo substr(strrev($encodednum),0,(strlen($encodednum)-1));
//   } else {
//      echo substr(strrev($encodednum),0,strlen($encodednum));
//   }   
//   echo '<br>';
   return($encodednum);
}

function encode_for_d4($encodednum) {
   $sum = 0;
   for ($e=1; $e < strlen($encodednum); $e++) {
      $sum = $sum + $encodednum{$e};
   }
   if (fmod($sum,2) == 1) {
       $encodednum{0} = 1;
   } else {
       $encodednum{0} = 0;
   }
   return($encodednum);
}

function output_encoder($encodednum, $dmin) {
   $k = 1;
   while (pow(2,$k) < strlen($encodednum) - 1) {
      $k++;
   }
   echo 'Число в коде Хэмминга: <b>';
   for ($i = $k, $e = (strlen($encodednum)-1); $i >= 1; $e--) {
      if ($e == pow(2,($i-1))) {
         echo '<font color="red"">'.$encodednum{$e}.'</font>';
         $i--;
      } else {
         echo $encodednum{$e};   
      }
   }
   if ($dmin == 4) {
   echo '<font color="blue">'.$encodednum{0}.'</font>';
   }
   echo '</b><br><br>';
}   

function defect($encodednum, $error, $dmin){
   if ($encodednum{$error} == 0) {
      $encodednum{$error} = 1;
   } else {
      $encodednum{$error} = 0;
   }
   echo 'При передаче произошла ошибка в <b>'.$error.'</b> разряде: <b>';
   if ($dmin == 3) {
      $e_lim = 1;
   } else {
      $e_lim = 0;
   }
   for ($e = (strlen($encodednum)-1); $e >= $e_lim; $e--) {
      if ($e == $error) {
         echo '<font color="yellow">'.$encodednum{$e}.'</font>';
      } else {
         echo $encodednum{$e};
      }
   }
   echo '</b><br><br>';
   return $encodednum;       
}

function output_to_input($innum, $encodednum, $dmin, $error){
   echo 'Для выхода из программы нажмите "Выход"';
   echo '<form method="POST" action="hemming.php">';
   echo '<input type="hidden" name="operation" value="3"><br>';
   echo '<input type="hidden" name="dmin" value="">';
   echo '<input type="hidden" name="innum" value="">';
   echo '<innum type="hidden" name="error" value="">';
   echo '<input type="hidden" name="countsys" value="">';
   echo '<input type="submit" value="Выход >">';
   echo '</form><br><br>';

   echo '<b>Демострация работы Декодировщика</b><br><br>';
    
   if ($error != -1)   {
      $encodednum = defect($encodednum, $error, $dmin);
   }
   
   echo '<form method="POST" action="hemming.php">';   
   echo 'Введите номер разряда, в котором произошла ошибка (-1 если нет ошибки)<br>';
   echo '<input type="text" name="error" value="-1">';
   echo '<input type="hidden" name="operation" value="1"><br>';
   echo '<input type="hidden" name="dmin" value="'.$dmin.'">';
   echo '<input type="hidden" name="innum" value="'.$innum.'">';
   echo '<input type="hidden" name="newinnum" value="'.$encodednum.'">';
   echo '<input type="hidden" name="countsys" value="2">';
   echo '<input type="submit" value="Дальше >">';
   echo '</form><br>';
   
   echo '<form method="POST" action="hemming.php">';   
   echo '<input type="hidden" name="error" value="">';
   echo '<input type="hidden" name="operation" value="0">';
   echo '<input type="hidden" name="dmin" value="'.$dmin.'">';
   echo '<input type="hidden" name="innum" value="'.$encodednum.'">';
   echo '<input type="hidden" name="fromencoder" value="1">';
   echo '<input type="hidden" name="countsys" value="2">';
   echo '<input type="submit" value="Декодировать">';
   echo '</form>';
}

function decode_for_d4($encodednum, $controlnum) {
   $sum = 0;
   for ($e=0; $e < strlen($encodednum); $e++) {
      $sum = $sum + $encodednum{$e};
   }
   if (fmod($sum,2) == 1) {
       $controlnum{0} = 1;
   } else {
       $controlnum{0} = 0;
   }
   return($controlnum);   
}

function decoder_uno($encodednum, $controlnum){
//   echo '<br>4='.substr(strrev($controlnum),0,(strlen($controlnum)-1)).'<br>';
   $detect = base_convert((substr(strrev($controlnum),0,(strlen($controlnum)-1))), 2, 10);
   $k = 1;
//   echo $detect;
   while (pow(2,$k) < strlen($encodednum) - 1) {
      $k++;
   }
   if ($detect == 0) {
      echo 'Информация приянта без ошибок<br>';
   } else {
      echo 'Произошла одиночная ошибка в '.$detect.' разряде. Корректируем.<br>';
      if ($encodednum{$detect} == 0) {
         $encodednum{$detect} = 1;
      } else {
         $encodednum{$detect} = 0;
      }
   }
   echo 'Раскодированное число: <br>';
   echo 'В двоичном виде: <b>';
   $decodednum = '';
   for ($e = (strlen($encodednum)-1), $i = $k; $e > 0; $e--) {
      if ($e == pow(2,($i-1))) {
         $i--;
      } else {
         $decodednum = ''.$decodednum.''.$encodednum{$e}.'';
         echo $encodednum{$e};
      }   
   }
   echo '</b><br>';
   echo 'В десятичном виде: '.base_convert($decodednum, 2, 10).'';
}

function choicer($encodednum, $controlnum, $dmin){
   $k = 1;
   while (pow(2,$k) < strlen($encodednum) - 1) {
      $k++;
   }
   $sum = '';
   for ($c = 1; $c <= $k; $c++) {
      $sum = ''.$sum.''.$controlnum{$c}.'';
   }
   if ($dmin == 3) {
      decoder_uno($encodednum, $controlnum);
   }
   
   $sum = ereg("1",$sum);
//   echo 'SUM='.$sum.'';
   if ($dmin == 4) {
      if ($controlnum{0} == 0) {
         if (!$sum) {
            decoder_uno($encodednum, $controlnum);
         } else {
            echo 'Произошла двоичная ошибка. Не корректируется.<br><br>';   
         }
      } else {
         if (!$sum) {
            echo 'Произошла ошибка в дополнительном контрольном разряде.<br>';
         }
         decoder_uno($encodednum, $controlnum);
      }   
   }
   
   echo '<br><br><b>Для выхода из программы нажмите "Выход"</b>';
   echo '<form method="POST" action="hemming.php">';
   echo '<input type="hidden" name="operation" value="3"><br>';
   echo '<input type="hidden" name="dmin" value="">';
   echo '<input type="hidden" name="innum" value="">';
   echo '<innum type="hidden" name="error" value="">';
   echo '<input type="hidden" name="countsys" value="">';
   echo '<input type="submit" value="Выход >">';
   echo '</form><br><br>';
}    

if ($operation == 1) {
   $encodednum =  encoded_array($innum);
   $controlnum =  summator($encodednum);
   $encodednum =  compositor($encodednum, $controlnum, $dmin);
   output_encoder($encodednum, $dmin);
   if ( $error != -1 )
   {
      $encodednum = $_POST['newinnum'];
   }
   $encodednum = output_to_input($innum, $encodednum, $dmin, $error);
}

if ( $operation == 0 ) {
//   echo 'aa='.$encodednum.'<br>';
   $controlnum = summator($encodednum);
//   echo $controlnum;
//   echo '<br>';
   if ($dmin == 4) {
      $controlnum = decode_for_d4($encodednum, $controlnum);
   }
//   echo $controlnum;
//   echo '<br>';
   choicer ($encodednum, $controlnum, $dmin);
}    

?>


Да, и задачки из долговых я тоже добил, но оцифровывать влом :)

СообщениеДобавлено: 11 июн 2006 03:20
RелаXатоR
Мила писал(а):а я вот рисую неплохо

Реально здорово, На свастику похоже)))))))))

СообщениеДобавлено: 11 июн 2006 03:33
RелаXатоR
Господи, а я вот еще ленюсь английский подучить.....
Если люди в кодах таких разбираются...

СообщениеДобавлено: 11 июн 2006 03:42
Ivan.Rybin
Да английский это просто :) - я после прочтения The Lord of the Rings и The Hobbit почти вообще не напрягаюсь с чтением. С разговором похуже :(

СообщениеДобавлено: 11 июн 2006 03:44
Ivan.Rybin
Да, совсем забыл выразить автору темы огромнейший РЕСПЕКТ за её создание! Почему-то никто раньше такого не придумывал. Воистину - всё гениальное - просто! Завтра ещё выложу своего творчества, уже нормального. А то от таких кодов уважаемых программистов может и "переклинить" :)

СообщениеДобавлено: 11 июн 2006 17:52
Geolog
Немного и от меня, из юности, - почти из другой жизни...

Так умирал Поэт

Мягким светом теплятся свечи,
ветер колышет тени в углах;
неслышно и томно опускается вечер,
играя позолотой на остывших углях.

Легким движением кончик пера
начинает рассказ о себе…
Прикосновение. Взмах. Листа
не замечая, делает пометки судьбе.

Льется пламенем черный поток,
вихрем растекается в неге;
невидимой нитью вьется меж строк,
тая на девственно-белом снеге.

Танцует – дрожа, трепыхаясь,
взлетая все выше, срываясь,
крадясь, пробегая вплетаясь,
умирая…и вновь возрождаясь…

быстрее, быстрее, - в танце кружится,
любуясь вязью на страницах,
стремиться – слиться, разбиться –
лишь бы за мыслью ему не влачиться!

Кипящим ручьем от сердца – к перу,
минуя тело, разум и волю,
липкие буквы за словом бегут,
наслаждаясь своею юдолью…

По терциям рифма, квинтами слог,
рядами восьмых топорщится стих.
И Бог во мне, на этот срок–
До безразличья в Дьявола вник

Я живу этим слогом, дышу,
подпитываюсь его мыслью;
Кисть почти не моя, не-я пишу,
лишь дайте его соком упиться!

-Выше, быстрее, скорее, нежнее! –
подгоняют руку строчки…
…всплеск, - шквал строф темнеет
…и Поэт ставит точку…


Утро

Воздух напоен горькими травами
Поймы наполнены туманными тайнами
Цветет полынь
Кроваво-алыми, вечноусталыми
Вихрями солнца рассветно-багряными
Стелется дым

Звуки свирели – тихие, пьяные
В облачном небе бесшумно таяли
Птичьими стаями
Прозрачными каплями жемчужины плавали
По стеблям осоки токи проплавили
Сизыми талями

Под тонкие розы резвыми взорами
Зоркие зори смотрят прозорливо
Тихими грозами
Зерна проса вызрели гроздьями
Терпкие корни тропами верными
Проросли лозами



Архангельск

Здесь двадцать дней за месяц льют дожди.
И тридцать – плачет ветер солью
Да свет холодной Северной звезды
Полгода топит горечь в море

И птицы не поют – кричат
От одиночества спасаясь

Распластанные птицы в небе жалки
Кричат от недостатка неба
Рука, протянутая с пищей к чайке
Зальется кровью от жадности до хлеба.

И птицы не поют – кричат
И землю… крыльями… мостят

В лесах творятся древние обряды
Не Светоносному, не Триединству круга
Но серым таинствам присуща правда
Суровость лиц, но кровью друг за друга.

И птицы не поют – кричат
Тем криком таинство – хранят.



потом если интересно еще подыщу
да и аудио записи если порыться остались....

СообщениеДобавлено: 12 июн 2006 00:08
RелаXатоR
Даааа... Впечатляет...
Первый стих только сложно читался, но смысл конечно глубоко заложен, с каждым новым прочтением все больше и больше проникаешься, но больше мне все же последний Архангельск понравился))

СообщениеДобавлено: 12 июн 2006 11:33
Ivan.Rybin
Предлагаю тему перевести в Блог Портала - weblog.php?w=4 - т.к. там удобнее картинки выкладывать. Ну или вообще отдельную тему создать.

СообщениеДобавлено: 12 июн 2006 12:35
RелаXатоR
Ivan S. Rybin писал(а):Предлагаю тему перевести в Блог Портала - weblog.php?w=4 - т.к. там удобнее картинки выкладывать. Ну или вообще отдельную тему создать.

Ну мне кажется, что если её в блог перевести народ туда лазать реже будет, если только ссылку на главную страницу положить а отдельную тему, не будет ли она пустовать? Итак люди что-то молчат(((
всего 3 человека откликнулись из тысячи зарегестрированных...