|
Pers.narod.ru. JavaScript. Перевод целых чисел между любыми системами счисления |
Конвертер целых положительных и отицательных чисел между любыми системами счисления с основаниями от 2 до 36 включительно. Незаменимая страница для тестов по информатике :)
При вводе чисел можно использовать большие или маленькие латинские буквы A-Z, цифры 0-9, знак "+" или "-" в первой позиции ввода. Лишние пробелы в начале и конце удаляются автоматически.
Проект 17 на странице мидлетов - реализация в виде приложения для мобильника
Соответствующая программка на Паскале в "Алгоритмах"
Основная часть исходника скрипта приведена ниже (в работающем на странице скрипте могут быть мелкие изменения).
<script type="text/javascript">
var posix='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function list (name,selected) {
document.writeln ('<select name="'+name+'">');
for (var i=2; i<37; i++) {
document.writeln ('<option value="'+i+'"'+(i==selected?' selected':'')+'>'+i+'</option>');
}
document.writeln ('</select>');
}
function trim(string) {
return string.replace (/(^\s+)|(\s+$)/g, "");
}
function check (number,radix) {
var r=true;
var l=number.length;
for (var i=l-1; i>-1; i--) {
var c=number.substring (i,i+1);
var p=posix.indexOf(c);
if (p>-1) {
if (p>=radix) { r=false; break; }
}
else { r=false; break; }
}
return r;
}
function fromdec (ns,radix) {
var s='';
var n=parseInt(ns),k;
do {
k=n%radix;
s=posix.substring(k,k+1)+s;
n=Math.floor((n-k)/radix);
} while (n!=0);
return s;
}
function todec (n,radix) {
var l=n.length,r=0,st=1;
for (var i=l-1; i>-1; i--) {
var c=n.substring (i,i+1);
var p=posix.indexOf(c);
r+=p*st;
st*=radix;
}
return ''+r;
}
function go () {
var n = trim(document.f1.number.value.toUpperCase());
var r1 = parseInt (document.f1.r1.value);
var r2 = parseInt (document.f1.r2.value);
var sign = n.substring (0,1);
document.getElementById('result').innerHTML = '';
if (n=='') {
document.getElementById('result').innerHTML = 'Не введено число';
return;
}
if (sign=='-' || sign=='+') {
document.getElementById('result').innerHTML = sign;
n=n.substring (1);
}
if (!check (n,r1)) {
document.getElementById('result').innerHTML += n+': число неверно записано в системе с основанием '+r1;
return;
}
var s='';
if (r1== r2) {
document.getElementById('result').innerHTML += n;
return;
}
else if (r1 == 10) s=fromdec (n,r2);
else if (r2 == 10) s=todec (n,r1);
else {
var s2 = todec (n,r1);
s = fromdec (s2,r2);
}
document.getElementById('result').innerHTML += s;
}
</script>
<form name="f1">
<table border="0" width="90%" align="center">
<tr><td width="40%" nowrap><p>Перевести число:</p></td><td>
<input type="text" name="number" maxlength="40" size="40" value="">
<tr><td width="40%" nowrap><p>Из системы с основанием:</p></td>
<td><script type="text/javascript">list('r1',10);</script></td></tr>
<tr><td width="40%" nowrap><p>В систему с основанием:</p></td>
<td><script type="text/javascript">list('r2',16);</script></td></tr>
<tr><td width="40%" nowrap><p>Результат:</p></td><td><p><div id="result"></div></p></td></tr>
<tr><td width="40%" nowrap><p> </p></td><td><input type="button" value="Выполнить" onclick="go();"></td></tr>
</table>
</form>
|
|