Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE HTML>
- <html>
- <head>
- <title>Хэмминг</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- </head>
- <body>
- <h1>Кодирование по Хэммингу</h1><!-- заголовок на веб странице-->
- <p><input type='text' id='mes' maxlength='4'>Исходное сообщение </p>
- <p><input type='button' onclick='code()' value='кодить'> </p><!--атрибут onclick, значение атрибута - функци-обработчик события click, здесь это функция code-->
- <p><input type='text' id='mes_cod'>Закодированное сообщение </p>
- <p><input type='button' onclick='decode()' value='декодить'> </p>
- <p><input type='text' id='mes_decod'>Раскодированное сообщение </p>
- </body>
- <script>
- function code(){
- /*document.getElementById('mes') возвращает объект -
- объектное представление текстовой ячейки.*/
- message = document.getElementById('mes').value;
- intBits = message.split('');
- // В массиве intBits лежат 4 символа (0 и 1); это не числа, а строки-из-одного-символа
- for(i=0; i<intBits.length; i++)
- intBits[i] = 1*intBits[i];// неявное преобразование строк-из-одного-символа в числа
- intBits.push((intBits[0]+intBits[1]+intBits[3])%2);// Остаток от деления (%) на 2 - это контрльный бит.
- intBits.push((intBits[1]+intBits[2]+intBits[3])%2);
- intBits.push((intBits[0]+intBits[2]+intBits[3])%2);
- //document.getElementById('mes_cod').value = intBits;
- /* неявное преобразование массива к строке - вызывается метод join с разделителем по умолчанию (,).
- Нам "," между цифрами не нужна.*/
- document.getElementById('mes_cod').value = intBits.join('');
- }
- //mes_decod
- function decode(){
- var code = document.getElementById('mes_cod').value;
- intBits = code.split('');
- for(i=0; i<intBits.length; i++)
- intBits[i] = 1*intBits[i];// неявное преобразование строк-из-одного-символа в числа
- var sector = [true, true, true];
- sector[0] = (intBits[0]+intBits[1]+intBits[3])%2 ^ intBits[4] == 0;
- sector[1] = (intBits[1]+intBits[2]+intBits[3])%2 ^ intBits[5] == 0;
- sector[2] = (intBits[0]+intBits[2]+intBits[3])%2 ^ intBits[6] == 0;
- var errors = 0;
- if(!sector[0]) ++errors;
- if(!sector[1]) ++errors;
- if(!sector[2]) ++errors;
- if (errors == 3)
- intBits[3] ^= 1;
- else if (errors == 2){
- if (!sector[0] && !sector[1])
- intBits[1] ^= 1;
- else if(!sector[0] && !sector[2])
- intBits[0] ^= 1;
- else if (!sector[1] && !sector[2])
- intBits[2] ^= 1;
- }
- document.getElementById('mes_decod').value = intBits.slice(0, 4).join('');
- }
- document.getElementById('mes').onkeypress = function(e) {
- e = e || event;
- if (e.ctrlKey || e.altKey || e.metaKey) return;
- var chr = getChar(e);
- /* с null надо осторожно в неравенствах, т.к. например null >= '0' => true!
- На всякий случай лучше вынести проверку chr == null отдельно*/
- if (chr == null) return;
- if (chr < '0' || chr > '1') return false;
- }
- function getChar(event) {
- if (event.which == null) {
- if (event.keyCode < 32) return null;
- return String.fromCharCode(event.keyCode) // IE
- }
- if (event.which!=0 && event.charCode!=0) {
- if (event.which < 32) return null;
- return String.fromCharCode(event.which) // остальные
- }
- return null; // специальная клавиша
- }
- </script>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement